<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/rss-section-style.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Thought Eddies - Logs</title><description>Daily logs entries and field notes</description><link>https://www.danielcorin.com/</link><item><title>2026-05-29</title><link>https://www.danielcorin.com/logs/2026/05/29/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/05/29/</guid><description>2026-05-29</description><pubDate>Fri, 29 May 2026 15:29:24 GMT</pubDate><content:encoded>&lt;p&gt;Still my favorite productivity software&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/0mpr2v16-image.BusVd0AH_wlhtB.webp&quot; alt=&quot;image&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;400&quot; height=&quot;172&quot;&gt;&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-05-26</title><link>https://www.danielcorin.com/logs/2026/05/26/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/05/26/</guid><description>2026-05-26</description><pubDate>Tue, 26 May 2026 16:09:18 GMT</pubDate><content:encoded>&lt;p&gt;Experimenting with &lt;code&gt;chainlink&lt;/code&gt; today and surprised how easy it makes it to ping pong review, testing and implementation between agents.
The sqlite db is effectively the agent to agent communication conduit.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-05-23</title><link>https://www.danielcorin.com/logs/2026/05/23/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/05/23/</guid><description>2026-05-23</description><pubDate>Sat, 23 May 2026 15:13:35 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Your /dev directory looks like a small civilization of agents, apps, old experiments, forks, and active services&lt;/p&gt;
&lt;/blockquote&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-05-16</title><link>https://www.danielcorin.com/logs/2026/05/16/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/05/16/</guid><description>2026-05-16</description><pubDate>Sat, 16 May 2026 23:30:34 GMT</pubDate><content:encoded>&lt;p&gt;I keep hearing and reading the phrase “load bearing” and even though I suspect it isn’t always, I can only read it as LLM generated content&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-05-11</title><link>https://www.danielcorin.com/logs/2026/05/11/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/05/11/</guid><description>2026-05-11</description><pubDate>Mon, 11 May 2026 20:38:08 GMT</pubDate><content:encoded>&lt;p&gt;For those with access to Mythos, it does not appear to be some kind of step function change in vulnerability detection.
Rather, it seems to show code agents are good at finding vulnerabilities and that if you don’t use them to do that someone else will. &lt;a href=&quot;https://daniel.haxx.se/blog/2026/05/11/mythos-finds-a-curl-vulnerability/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://daniel.haxx.se/blog/2026/05/11/mythos-finds-a-curl-vulnerability/&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-05-09</title><link>https://www.danielcorin.com/logs/2026/05/09/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/05/09/</guid><description>2026-05-09</description><pubDate>Sun, 10 May 2026 01:20:31 GMT</pubDate><content:encoded>&lt;p&gt;There’s a lot of chatter about models getting worse after launch, during peak hours, on subscription plans vs. pay-per-use APIs.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-05-07</title><link>https://www.danielcorin.com/logs/2026/05/07/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/05/07/</guid><description>2026-05-07</description><pubDate>Fri, 08 May 2026 00:48:06 GMT</pubDate><content:encoded>&lt;p&gt;I’ve started using Codex more consistently.
It took me entirely too long to locate the plan usage page: &lt;a href=&quot;https://chatgpt.com/codex/cloud/settings/analytics?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://chatgpt.com/codex/cloud/settings/analytics&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, roughly equivalent to Claude Code’s &lt;a href=&quot;https://claude.ai/settings/usage?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://claude.ai/settings/usage&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; page.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-05-03</title><link>https://www.danielcorin.com/logs/2026/05/03/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/05/03/</guid><description>2026-05-03</description><pubDate>Mon, 04 May 2026 01:00:33 GMT</pubDate><content:encoded>&lt;p&gt;It will be interesting to look back in retrospect if April 2026 was peak LLM hype.
During and since the month, subsidies for inference have started to go away meaningfully, and people finally seem to be internalizing that you can only trust LLMs for what you choose to verify, among other shortcomings and drawbacks.
The software engineer is not dead.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-05-02</title><link>https://www.danielcorin.com/logs/2026/05/02/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/05/02/</guid><description>2026-05-02</description><pubDate>Sat, 02 May 2026 23:28:58 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;No one can explain to me what reinforcement learning actually is&lt;/p&gt;
&lt;/blockquote&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-05-01</title><link>https://www.danielcorin.com/logs/2026/05/01/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/05/01/</guid><description>2026-05-01</description><pubDate>Sat, 02 May 2026 00:14:32 GMT</pubDate><content:encoded>&lt;p&gt;Switched to running a mix of &lt;code&gt;claude&lt;/code&gt; and &lt;code&gt;codex&lt;/code&gt; for the first time for day-to-day dev.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-04-30</title><link>https://www.danielcorin.com/logs/2026/04/30/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/04/30/</guid><description>2026-04-30</description><pubDate>Thu, 30 Apr 2026 20:51:33 GMT</pubDate><content:encoded>&lt;p&gt;Opus 4.7’s tendency to use acronyms drives me crazy, especially when I have no idea what it’s referring to, even though I’m its collaborator.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-04-27</title><link>https://www.danielcorin.com/logs/2026/04/27/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/04/27/</guid><description>2026-04-27</description><pubDate>Tue, 28 Apr 2026 01:10:09 GMT</pubDate><content:encoded>&lt;p&gt;TIL, “ennui”: not just “nothing to do” but “nothing seems worth doing”&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-04-25</title><link>https://www.danielcorin.com/logs/2026/04/25/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/04/25/</guid><description>2026-04-25</description><pubDate>Sat, 25 Apr 2026 13:52:12 GMT</pubDate><content:encoded>&lt;p&gt;Why you need stateful agents.
You can be ambiguous, concise, and still be successful because the agent has the surrounding context.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/0moeef3a-image.KZtzryZ1_Z2jynG0.webp&quot; alt=&quot;image&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;1206&quot; height=&quot;860&quot;&gt;&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-04-23</title><link>https://www.danielcorin.com/logs/2026/04/23/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/04/23/</guid><description>2026-04-23</description><pubDate>Fri, 24 Apr 2026 01:09:29 GMT</pubDate><content:encoded>&lt;p&gt;I really have enjoyed writing about building software in the past but lately I’ve been struggling to find a foothold.
The prompts to an agent are now most of the software.
There is trial and error along the way.
I often persist learnings to skills to make processes repeatable for agents.
But the errors along the way are often more interesting for people learning to use agents more effectively.
So I don’t really know what this writing should
look like.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-04-21</title><link>https://www.danielcorin.com/logs/2026/04/21/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/04/21/</guid><description>2026-04-21</description><pubDate>Wed, 22 Apr 2026 00:09:21 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been working on a chat app recently for collaboration with people and agents.
I was heavily relying on “channels” for specific projects.
However, a pattern that was emerging often was more exploratory, unstructured conversations, and often several of these at once.
I was starting to juggle these between channels named for projects just because they had to go somewhere.
Multiple “in progress” messages in a channel was too confusing.
So I landed on “ephemeral” channels which are one-off disposable conversations.
It feels like a reasonable compromise for my use case.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-04-20</title><link>https://www.danielcorin.com/logs/2026/04/20/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/04/20/</guid><description>2026-04-20</description><pubDate>Mon, 20 Apr 2026 22:38:55 GMT</pubDate><content:encoded>&lt;p&gt;There’s a huge amount of cold outreach that appears (to my eye) to be LLM-generated.
What’s more interesting that these inbound messages seem completely decoupled from the human(?) who gets involved if you respond to one of these cold leads.
The outreach&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi Dan,
What prompted me to reach out is we’re looking for an AI Technologist / Engineer …&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I reply 20 minutes later&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi,
I currently run a consultancy where I do work like this …&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;They respond&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hey Dan,
It has been a while since we connected last …
If you are interested in [a full time position] …&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Has it?
As far as I can tell we “spoke” this morning?
Did you read my rely even a little?
Am I speaking to a person yet?
Maybe it’s an uncharitable interpretation of what is happening here but shouldn’t the human at least claim ownership of the original message even if they never wrote it or read it?
It’s sent with their name on it.
To be clear we’ve never “connected” prior to this email.
The original email is the first contact ever.
Is this another LLM responding &lt;em&gt;without&lt;/em&gt; the first exchange?
Yikes.&lt;/p&gt;
&lt;p&gt;Seems the only way this ends is with agent representation on both sides.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-04-18</title><link>https://www.danielcorin.com/logs/2026/04/18/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/04/18/</guid><description>2026-04-18</description><pubDate>Sat, 18 Apr 2026 13:23:11 GMT</pubDate><content:encoded>&lt;p&gt;I spent yesterday working on a personal project to build some software with my personal agent, struggling mightily when I didn’t expect to.
Opus 4.7 was recently released.
And in the back of my mind the whole time, I thought to switch my agent over to it, but mostly forgot.
Progress on the project was an absolute struggle.
And today, since switching over to 4.7, everything has been going great.
This gets brought up pretty much every time Anthropic releases a new model, but GPUs have to come from somewhere.
And it’s hard to imagine they didn’t do something like quantize Opus 4.6 to unlock capacity for 4.7.
Obviously, or maybe not so obviously, I don’t yet have a benchmark that’s repeatable in such a way that I can prove 4.6 has regressed, but the vibes say that it has.
Now I’m on 4.7, but I’m reasonably happy for now.
Another model release, another conspiracy.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-04-17</title><link>https://www.danielcorin.com/logs/2026/04/17/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/04/17/</guid><description>2026-04-17</description><pubDate>Fri, 17 Apr 2026 13:02:57 GMT</pubDate><content:encoded>&lt;p&gt;Coming from a software engineering background, but mostly spending time teaching non-technical domain experts how to code has been an interesting challenge because my first impulse or inclination is to teach and explain through software engineering principles.
But in practice, if you’re not a software engineer, most of the time you don’t actually care about the specifics of the software, at least not initially.
I find that first I have to sort of play out, then catch my impulse to explain through the software found, you know, through the foundations of software engineering and with software engineering terminology.
And then from there, back my way into what the actual goal and intent is.
An example of this is a conversation that I had with somebody who had created a large complex web app for displaying data in lots of different types of ways and across many different facets.
We’ve been discussing how to make the web app more maintainable and extendable as it grows in size, which whether you’re a human or an agent working on a code base, as the code base grows in size, more time is dedicated to research and maintenance of the code base and building of understanding as opposed to early on when there’s a lot of greenfield and fast development.
As we were having these conversations, I was thinking about how I might introduce the concept of refactoring and how that plays into making the code base more maintainable, talking about design patterns and the shape and structure of the code.
But after thinking about it for a while, what I realized in practice is refactoring and the structure of code bases in general are just the, I guess, commitment to various trade-offs, right?
Certain things become easy when code is organized in certain ways and certain things are harder.
There’s no perfect structure.
There are only trade-offs given what you’re optimizing for.
And with that understanding, I think I found a more sort of salient and practical argument or line of thinking to trace for somebody who is not familiar with software, which is that you need to think about what you are optimizing for, what things you want to be flexible versus what things you do not expect to change.
You, of course, can’t optimize for everything, but you can think through the types of things you may want to do in the future and then instruct an agent to organize your code base, optimizing for ease of those types of changes.
That grounds the instructions to the agent in the domain you’re working in based on the work that you expect to do, but doesn’t necessarily require deep engagement directly with the software.
And so I think that this will be an interesting on-ramp to try.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-04-14</title><link>https://www.danielcorin.com/logs/2026/04/14/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/04/14/</guid><description>2026-04-14</description><pubDate>Tue, 14 Apr 2026 18:58:08 GMT</pubDate><content:encoded>&lt;p&gt;The Cowork and Claude Code UIs are friendly on ramps for agent tools, particularly for nontechnical roles, but I do wonder whether hiding the more technical aspects of the system makes users less likely to make their own software.
On one hand, it’s probably inevitable (still) that most people won’t make their own software, but for those who might, I’m torn if the friendly UI is the better introduction.
The labs certainly want you to let them make all the software for you but being able to control and modify your own tools changes your relationship with them.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-04-13</title><link>https://www.danielcorin.com/logs/2026/04/13/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/04/13/</guid><description>2026-04-13</description><pubDate>Mon, 13 Apr 2026 23:04:02 GMT</pubDate><content:encoded>&lt;p&gt;Skills seem to be a huge leverage point working with agents but they remain fuzzy in how they should be constructed.
I like to build my skill using the agent at the end of a messy session where I successfully accomplished a goal.
Then I have the agent extract the working steps into a skill that I can easily invoke again.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-04-10</title><link>https://www.danielcorin.com/logs/2026/04/10/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/04/10/</guid><description>2026-04-10</description><pubDate>Fri, 10 Apr 2026 18:34:25 GMT</pubDate><content:encoded>&lt;p&gt;One thing that has surprised me a bit recently is how much play the &lt;a href=&quot;https://red.anthropic.com/2026/mythos-preview/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Claude Mythos&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; stuff has gotten in media, especially with the example the &lt;a href=&quot;https://www.nytimes.com/2026/04/07/opinion/anthropic-ai-claude-mythos.html?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;New York Times gave&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; of somebody’s kids accidentally bringing down the power grid.
In &lt;a href=&quot;https://red.anthropic.com/2026/zero-days/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Anthropic’s examples&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; talking about the zero days that these models have identified, it cost &lt;a href=&quot;https://red.anthropic.com/2026/mythos-preview/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;$20,000 worth of inference&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; to find these issues.
Also it’s not clear to me if this is a step function improvement on &lt;a href=&quot;https://deploymentsafety.openai.com/gpt-5-4-thinking?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;GPT-5.4&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; which researchers have already been using to find these types of bugs in software for months. As Simon Willison &lt;a href=&quot;https://simonwillison.net/2026/Apr/7/project-glasswing/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;noted&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;,&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;GPT-5.4 already has a strong reputation for finding security vulnerabilities.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As usual, narratives seem quite out of sync.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-03-13</title><link>https://www.danielcorin.com/logs/2026/03/13/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/03/13/</guid><description>2026-03-13</description><pubDate>Sat, 14 Mar 2026 03:26:44 GMT</pubDate><content:encoded>&lt;p&gt;I learned about &lt;a href=&quot;https://github.com/EveryInc/proof-sdk?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Proof&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; a few days ago.
Today, I had my stateful agent fork and install it to its machine, exposing to the public internet through a Cloudflare tunnel, behind auth.
I’ve been playing around with it.
I can’t decide whether it’s innovative or Google Docs.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-03-01</title><link>https://www.danielcorin.com/logs/2026/03/01/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/03/01/</guid><description>2026-03-01</description><pubDate>Mon, 02 Mar 2026 00:43:19 GMT</pubDate><content:encoded>&lt;p&gt;I revisited Tomo this evening after not touching the codebase for a while.
I wouldn’t say I use that app too much but I wanted to experiment with &lt;a href=&quot;https://code.claude.com/docs/en/agent-teams?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;agent teams&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;use a team to refactor this old, vibe coded project to make it a swift project that uses best practices and consistent standards for easy, continued feature development &lt;a href=&quot;https://code.claude.com/docs/en/agent-teams?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://code.claude.com/docs/en/agent-teams&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And that was basically it.
Claude Code parallelized the work with four agents and I supervised them to completion.
It refactored such that no file was larger than 300 lines.
When I built the project in Xcode, everything worked as expected.&lt;/p&gt;
&lt;p&gt;As a bonus, I also had Claude Code stitch together some build automation for my release process for &lt;a href=&quot;https://sparkle-project.org/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Sparkle&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; updates.
Opus 4.6 rips.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-02-22</title><link>https://www.danielcorin.com/logs/2026/02/22/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/02/22/</guid><description>2026-02-22</description><pubDate>Sun, 22 Feb 2026 16:47:25 GMT</pubDate><content:encoded>&lt;p&gt;Tried the Codex desktop app and it reminds we a bit of the Goose desktop app.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-02-09</title><link>https://www.danielcorin.com/logs/2026/02/09/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/02/09/</guid><description>2026-02-09</description><pubDate>Mon, 09 Feb 2026 22:12:07 GMT</pubDate><content:encoded>&lt;p&gt;Had an agent doing work today but ran into an issue where Github was down.
Using a scheduled task skill we built, I had it retry the work again later, but schedule another task to retry again if the first one failed.
I came back later and the work was done.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-01-27</title><link>https://www.danielcorin.com/logs/2026/01/27/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/01/27/</guid><description>2026-01-27</description><pubDate>Wed, 28 Jan 2026 02:32:51 GMT</pubDate><content:encoded>&lt;p&gt;Claude Code translated my personal recipe app into Spanish, including all the database content in 15 minutes while I was only vaguely paying attention.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-01-24</title><link>https://www.danielcorin.com/logs/2026/01/24/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/01/24/</guid><description>2026-01-24</description><pubDate>Sun, 25 Jan 2026 04:49:14 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;I spent years in iterative improvement. I find myself now going directly to the version I actually wanted. Not because I have more discipline, but because the economics changed. The right way is not much harder than the wrong way when someone else writes the code.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://estsauver.com/blog/claude-code-workflow?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://estsauver.com/blog/claude-code-workflow&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-01-21</title><link>https://www.danielcorin.com/logs/2026/01/21/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/01/21/</guid><description>2026-01-21</description><pubDate>Thu, 22 Jan 2026 03:55:42 GMT</pubDate><content:encoded>&lt;p&gt;Moved this blog from Vercel to Cloudflare Pages, where I’ve been hosting more of my projects lately.
Ran into a bit of trouble with the different between Workers and Pages but at least the DNS switchover was easy.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-01-19</title><link>https://www.danielcorin.com/logs/2026/01/19/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/01/19/</guid><description>2026-01-19</description><pubDate>Mon, 19 Jan 2026 17:11:17 GMT</pubDate><content:encoded>&lt;p&gt;I just incinerated $10 running GLM 4.7 on Cerebras to try and Ralph a clone of this game I used to play.
Took about 15 minutes for the balance to go to $0.
Result, not awesome. Maybe okay.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/aquarium.DU-UK18h_2xqTh.webp&quot; alt=&quot;Aquarium&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;2326&quot; height=&quot;1732&quot;&gt;&lt;/p&gt;
&lt;p&gt;I Claude Coded the game into a playable state with a few more prompts (it was still broken once my balance reached zero).&lt;/p&gt;
&lt;p&gt;Cerebras was fast but costly given the token throughput.&lt;/p&gt;
&lt;h2 id=&quot;takeaways&quot;&gt;&lt;a class=&quot;heading-link-wrapper&quot; href=&quot;#takeaways&quot;&gt;Takeaways&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This approach “works” in that it builds in the direction of the spec for extended periods of time.
A browser game might not have been GLM’s strength — the model measures well on coding benchmarks, so some kind of backend task might have been more reasonable to try.
It did write a lot of compiling TypeScript though and I didn’t give it much to work with in terms of design or aesthetics, so I’ll take the blame there as well.&lt;/p&gt;
&lt;p&gt;It seems like building an intuition for managing long running loops and getting good results requires building and experimenting with a lot of long running loops.
No big surprise there.
And it’s not a cheap thing to learn.&lt;/p&gt;
&lt;h2 id=&quot;code&quot;&gt;&lt;a class=&quot;heading-link-wrapper&quot; href=&quot;#code&quot;&gt;Code&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;/&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A19E8D&quot;&gt;#!/bin/bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A19E8D&quot;&gt;# Simple Ralph Loop&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A19E8D&quot;&gt;# Continuously passes plan.md to opencode with the prompt to work the plan&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A19E8D&quot;&gt;# Stops when the agent returns &amp;lt;complete/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;PLAN_FILE&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;${1&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;:-&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;plan&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;md&lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;ITERATION&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; [ &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;-f&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;$PLAN_FILE&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; ]; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;Error: &lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;$PLAN_FILE&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt; not found&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;exit&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;Starting Ralph loop...&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;Will continue until agent returns &amp;lt;complete/&amp;gt;&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;---&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;ITERATION&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;$((&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;ITERATION&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;=== ITERATION &lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;$ITERATION&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt; ===&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A19E8D&quot;&gt;# Build the prompt: reference the plan file by name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;PROMPT&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;Work the plan in &lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;$PLAN_FILE&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt; and test until complete. Perform one task at a time. Update the plan file with the completed tasks as you work. When _all_ tasks in &lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;$PLAN_FILE&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt; are done and tests pass, output &amp;lt;complete/&amp;gt; to signal completion.&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A19E8D&quot;&gt;# Run opencode with the prompt and capture output&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;OUTPUT&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;$PROMPT&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;opencode&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;run&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;--model&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;cerebras/zai-glm-4.7&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;$OUTPUT&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A19E8D&quot;&gt;# Check if output contains &amp;lt;complete/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;$OUTPUT&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;grep&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-q&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;&amp;lt;complete/&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;=== RALPH COMPLETE ===&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;Finished after &lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;$ITERATION&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt; iteration(s)&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;exit&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;--- Iteration &lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;$ITERATION&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt; complete, starting fresh context ---&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;done&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;#!/bin/bash# Simple Ralph Loop# Continuously passes plan.md to opencode with the prompt to work the plan# Stops when the agent returns &lt;complete/&gt;PLAN_FILE=&amp;#34;${1:-plan.md}&amp;#34;ITERATION=0if [ ! -f &amp;#34;$PLAN_FILE&amp;#34; ]; then    echo &amp;#34;Error: $PLAN_FILE not found&amp;#34;    exit 1fiecho &amp;#34;Starting Ralph loop...&amp;#34;echo &amp;#34;Will continue until agent returns &lt;complete/&gt;&amp;#34;echo &amp;#34;---&amp;#34;while true; do    ITERATION=$((ITERATION + 1))    echo &amp;#34;&amp;#34;    echo &amp;#34;=== ITERATION $ITERATION ===&amp;#34;    echo &amp;#34;&amp;#34;    # Build the prompt: reference the plan file by name    PROMPT=&amp;#34;Work the plan in $PLAN_FILE and test until complete. Perform one task at a time. Update the plan file with the completed tasks as you work. When _all_ tasks in $PLAN_FILE are done and tests pass, output &lt;complete/&gt; to signal completion.&amp;#34;    # Run opencode with the prompt and capture output    OUTPUT=$(echo &amp;#34;$PROMPT&amp;#34; | opencode run --model cerebras/zai-glm-4.7)    echo &amp;#34;$OUTPUT&amp;#34;    # Check if output contains &lt;complete/&gt;    if echo &amp;#34;$OUTPUT&amp;#34; | grep -q &amp;#34;&lt;complete/&gt;&amp;#34;; then        echo &amp;#34;&amp;#34;        echo &amp;#34;=== RALPH COMPLETE ===&amp;#34;        echo &amp;#34;Finished after $ITERATION iteration(s)&amp;#34;        exit 0    fi    echo &amp;#34;&amp;#34;    echo &amp;#34;--- Iteration $ITERATION complete, starting fresh context ---&amp;#34;done&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-01-18</title><link>https://www.danielcorin.com/logs/2026/01/18/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/01/18/</guid><description>2026-01-18</description><pubDate>Mon, 19 Jan 2026 00:41:41 GMT</pubDate><content:encoded>&lt;p&gt;Running Claude Code on &lt;code&gt;qwen3-coder:30b&lt;/code&gt; via Ollama does not work.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-01-17</title><link>https://www.danielcorin.com/logs/2026/01/17/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/01/17/</guid><description>2026-01-17</description><pubDate>Sat, 17 Jan 2026 16:16:19 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Internal adoption charts have been vertical: ~30% of all pull requests merged to our frontend and backend repos are written by Inspect. It only took a couple months for us to reach this level of usage, and it continues to grow. We didn’t force anyone to use Inspect over their own tools. We built to people’s needs, created virality loops through letting it work in public spaces, and let the product do the talking.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://builders.ramp.com/post/why-we-built-our-background-agent?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://builders.ramp.com/post/why-we-built-our-background-agent&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-01-15</title><link>https://www.danielcorin.com/logs/2026/01/15/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/01/15/</guid><description>2026-01-15</description><pubDate>Fri, 16 Jan 2026 03:13:47 GMT</pubDate><content:encoded>&lt;p&gt;Experimenting with a personal agent using the file system, SQLite, skills tools via MCP.
So many ways to make things work these days.&lt;/p&gt;
&lt;p&gt;I’m still exploring but once you know what you want an agent to do, I suspect you’ll need robust tests to validate it works and that it continues to work as you evolve it.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-01-12</title><link>https://www.danielcorin.com/logs/2026/01/12/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/01/12/</guid><description>2026-01-12</description><pubDate>Tue, 13 Jan 2026 02:23:57 GMT</pubDate><content:encoded>&lt;p&gt;Tried to make a new Github account today and the CAPTCHA was absurd.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-01-06</title><link>https://www.danielcorin.com/logs/2026/01/06/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/01/06/</guid><description>2026-01-06</description><pubDate>Tue, 06 Jan 2026 16:34:47 GMT</pubDate><content:encoded>&lt;p&gt;Still enjoying working on Tarn.&lt;/p&gt;
&lt;p&gt;I played around with adding some &lt;a href=&quot;https://hemingwayapp.com/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Hemingway&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;-like features.
I like them to put myself more into editor mode after getting thoughts written down and taking a few revision passes.&lt;/p&gt;
&lt;hr/&gt;
&lt;blockquote&gt;
&lt;p&gt;It’s so hard to describe to somebody like what’s different if you just read the summary in the spreadsheet versus you read the whole LinkedIn profile.&lt;/p&gt;
&lt;p&gt;It’s one dimensional or not multi-dimensional.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;From Dialectic: 35: Brie Wolfson - Loving Attention &amp;amp; Ease in Craft, Jan 6, 2026
&lt;a href=&quot;https://podcasts.apple.com/us/podcast/dialectic/id1780282402?i=1000743936367&amp;r=626&amp;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://podcasts.apple.com/us/podcast/dialectic/id1780282402?i=1000743936367&amp;amp;r=626&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-01-05</title><link>https://www.danielcorin.com/logs/2026/01/05/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/01/05/</guid><description>2026-01-05</description><pubDate>Mon, 05 Jan 2026 15:44:09 GMT</pubDate><content:encoded>&lt;p&gt;Paul Simon on “what makes you stuck?”&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Everywhere I went lead me where I didn’t want to be, so I was stuck.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://youtu.be/qFt0cP-klQI?si=XNdG7SkBIeNqCJLN&amp;t=445&amp;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://youtu.be/qFt0cP-klQI?si=XNdG7SkBIeNqCJLN&amp;amp;t=445&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-01-03</title><link>https://www.danielcorin.com/logs/2026/01/03/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/01/03/</guid><description>2026-01-03</description><pubDate>Sat, 03 Jan 2026 13:40:58 GMT</pubDate><content:encoded>&lt;p&gt;Agents are increasingly being trusted to do quantities of work that cannot be verified at code-level detail.
Finding verification criteria for the products of work done like this will be critical for having any amount of trust in it.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;I still run Tarn out of Xcode because its codebase is very much in flux.
Today, I finally patched an issue where unsaved file contents got cleared between app restarts.
I lost the first draft of this log to that issue.
Slowly but surely, this app is feeling like the best place for me to write stuff.&lt;/p&gt;
&lt;p&gt;A few days ago, I used Nano Banana Pro and Apple’s &lt;a href=&quot;https://developer.apple.com/icon-composer/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Icon Composer&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; to create an app icon for it.
The aim is to be at a point where I have more of a stable release in my app folder soon.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/tarn-icon.BwpcX1uE_Z1mf0tO.webp&quot; alt=&quot;Tarn Icon&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;1374&quot; height=&quot;880&quot;&gt;&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-01-02</title><link>https://www.danielcorin.com/logs/2026/01/02/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/01/02/</guid><description>2026-01-02</description><pubDate>Fri, 02 Jan 2026 19:43:57 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been playing around with using Voice Activity Detection to record multiple separate audio channels, then stitching those together into a transcript with Whisper to do speech to text.&lt;/p&gt;
&lt;p&gt;Agents make ideas so malleable.
A well articulated idea, or implementation of that idea is in invaluable yet almost completely fungible.
If someone explains an idea in detail, an agent can fluently apply it in any context you’d like.
Producing an artifact with this level of clarity is difficult, but once produced, it can be absorbed and applied broadly nearly instantly by anyone who learns of its existence.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;I’ve been trying to reproduce a reference implementation of &lt;a href=&quot;https://timkellogg.me/blog/2025/12/15/strix?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Strix&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
In doing so, I am steering Claude Code to read the blog post and then setting up a personal version in my own environment.
That is works continues to floor me.&lt;/p&gt;
&lt;p&gt;Tim’s blog post is a sort of genetic code for Strix and when given access to this code, an agent can create another approximate digital incarnation of Strix, based on how Tim has written about it.
In the same way ideas could spread rapidly with the invention of the internet, now fully embodied concepts of functioning software can permeate throughout the internet if they are loosely described and defined in words.
The more detailed, the more faithful the implementation will be to the original.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2026-01-01</title><link>https://www.danielcorin.com/logs/2026/01/01/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2026/01/01/</guid><description>2026-01-01</description><pubDate>Fri, 02 Jan 2026 04:06:45 GMT</pubDate><content:encoded>&lt;p&gt;I’m working through my second implementation of an idea that has been bouncing around my head for a while.
The general idea is to be able to transcribe a conversation in real time and have an agent read the transcription, turn it into a spec, and then build what is being discussed.
The ongoing conversation will steer the agent’s work in real time.&lt;/p&gt;
&lt;p&gt;I’m not sure if the agent will be fast enough for this to work well but we’ll see how it goes.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-12-31</title><link>https://www.danielcorin.com/logs/2025/12/31/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/12/31/</guid><description>2025-12-31</description><pubDate>Wed, 31 Dec 2025 14:25:38 GMT</pubDate><content:encoded>&lt;p&gt;I’m not sure if they originated this pattern but I like how Claude Code introduces new features with tips.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;/&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;✻ Whirring… (esc to interrupt · thinking)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;⎿ Tip: Start with &amp;#39;btw&amp;#39; to ask a quick side question&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;without interrupting Claude&amp;#39;s current work&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;✻ Whirring… (esc to interrupt · thinking)  ⎿ Tip: Start with &apos;btw&apos; to ask a quick side question    without interrupting Claude&apos;s current work&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I tried this one out and it didn’t feel better than opening another &lt;code&gt;claude&lt;/code&gt;.
It seems to have the existing conversation context, which is helpful, but the question doesn’t seem to be enqueued immediately and waits for the previous prompt to complete, so I don’t love that.
My ideal behavior would be to fork the conversation and run the &lt;code&gt;btw&lt;/code&gt; prompt in parallel.&lt;/p&gt;
&lt;p&gt;Someone told me &lt;code&gt;amp&lt;/code&gt; has threads and maybe those do that.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-12-29</title><link>https://www.danielcorin.com/logs/2025/12/29/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/12/29/</guid><description>2025-12-29</description><pubDate>Tue, 30 Dec 2025 00:19:41 GMT</pubDate><content:encoded>&lt;p&gt;Notes on way too many hours spent agent coding over the holidays.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/claude-holiday.DtMs2WOZ_kLAFw.webp&quot; alt=&quot;Claude Holiday&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;1100&quot; height=&quot;274&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Claude Opus 4.5 running in Claude Code is a workhorse. It hardly ever got stuck in the stacks I was working in (SwiftUI with HTML/CSS/JS in a WebView and a TypeScript 2D Canvas game).&lt;/li&gt;
&lt;li&gt;My ideas will move faster than the agent can. I found myself starting additional &lt;code&gt;claude&lt;/code&gt; instances to work on smaller fixes and features I intuited wouldn’t overlap with the work the “main” agent was doing. This allowed me to get more things done even while I was poking around with the agent working on more complicated features and refining rough edges.&lt;/li&gt;
&lt;li&gt;If the agent is struggling, &lt;code&gt;&lt;span class=&quot;ultrathink&quot;&gt;&lt;span style=&quot;color:rgb(235,95,87)&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;color:rgb(245,139,87)&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:rgb(250,195,95)&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color:rgb(145,200,130)&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:rgb(130,170,220)&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:rgb(155,130,200)&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color:rgb(200,130,180)&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color:rgb(235,95,87)&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:rgb(245,139,87)&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color:rgb(250,195,95)&quot;&gt;k&lt;/span&gt;&lt;/span&gt;&lt;/code&gt; can help in a pinch. It’s also as good or better to plan a feature up front with &lt;code&gt;&lt;span class=&quot;ultrathink&quot;&gt;&lt;span style=&quot;color:rgb(235,95,87)&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;color:rgb(245,139,87)&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:rgb(250,195,95)&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color:rgb(145,200,130)&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:rgb(130,170,220)&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:rgb(155,130,200)&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color:rgb(200,130,180)&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color:rgb(235,95,87)&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:rgb(245,139,87)&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color:rgb(250,195,95)&quot;&gt;k&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;. Hard to compare the two but it’s a nice thing to have in your bag.&lt;/li&gt;
&lt;li&gt;Claude Code has gotten excellent at structuring and/or searching projects so it can find existing implementations rather than creating duplicate implementations. This was a problem several months back which created a “point of no return” for fully agent coded projects, where the agents couldn’t search or understand a project well enough to code its way out of problems. I’m sure there is a max codebase size where these agents can be effective, but I’ve had great success on projects of 10k and 100k lines. It’s worth noting the speed of the agent per prompt decreases as lines of code increases. The agent spends more time searching existing files in larger codebases. This seems to be what allows it to continue to implement successfully, and seems to be an unavoidable part of the physics of growing codebases (and was before coding agents were a thing too).&lt;/li&gt;
&lt;li&gt;I ran into one weird set of Swift warnings where Claude Code kept undoing and redoing two approaches, neither of which eliminated all warnings. GPT-5.2 in Cursor managed to resolve this one.&lt;/li&gt;
&lt;li&gt;My intuition is still necessary. When working on a feature that required a text editor in a Swift app, Claude tried several open source editors and none quite fit the way I wanted them to. I explicitly told Claude to use the &lt;a href=&quot;https://microsoft.github.io/monaco-editor/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Monaco&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; text editor (the core of VS Code) because I have an affinity for it.&lt;/li&gt;
&lt;li&gt;Sometimes the agent knows better than me. The agent is great at following directions and sometimes that means it will try to do things it shouldn’t. This has improved since past model iterations but if an approach isn’t working and I give the agent leeway to try a different approach, often I am pleasantly surprised by the idea and adopt something like it.&lt;/li&gt;
&lt;li&gt;Vision is indispensable. Software is an incredibly flexible canvas and the agent will give you a decent implementation of whatever you ask for, but if you don’t ask for something or have a rough idea you’re trying to implement, you will get lost in the slop.&lt;/li&gt;
&lt;li&gt;For fun, personal projects, I start by doing a voice-to-text brain dump of the idea in a &lt;code&gt;dump.md&lt;/code&gt; file. Then I prompt the agent to make a &lt;code&gt;spec.md&lt;/code&gt; from these raw thoughts. I read and refine that, then have it start implementing. I use fresh context windows for each of these tasks.&lt;/li&gt;
&lt;li&gt;By the end of the holiday, I was working on two or sometimes three projects in parallel. I don’t think this is a particularly desirable thing to do, but otherwise I found I was waiting for the agent to finish and had the thought to do something else.&lt;/li&gt;
&lt;li&gt;Agent coding is entrancing and addicting for me, far more than writing software by hand ever was. The feedback loop for writing a prompt and getting what you asked for is tight and the agents are really good at following instructions.&lt;/li&gt;
&lt;li&gt;Polish is always needed. I’m continually reminded of an interview &lt;a href=&quot;/logs/2025/12/21&quot;&gt;Ryo Lu gave&lt;/a&gt; where he said “You always start with slop, with AI”. I agree. When I am prompting, it’s quite rare the first draft with AI is exactly what I want; it’s the first draft. From the starting point, I play with the implementation and buff away the rough edges and tweak and tease out the experience or implementation I had in mind. Because of this, metaphors like “sculpting”, “raising”, “chiseling”, and “molding” software resonate for me. The process is completely different than typing out all the characters. You throw a hunk of clay on the table and then start removing, shaping, and adding new things. It’s as much exploration as execution or implementation and the journey and the wrong turns are instructive for how you find the path you prefer.&lt;/li&gt;
&lt;/ul&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-12-28</title><link>https://www.danielcorin.com/logs/2025/12/28/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/12/28/</guid><description>2025-12-28</description><pubDate>Sun, 28 Dec 2025 15:23:37 GMT</pubDate><content:encoded>&lt;p&gt;I am working on adding a feature to Tarn where I can type &lt;code&gt;@@&lt;/code&gt; and it will pop a list of content in my blog I can link to in markdown style.
This is an idea borrowed from Obsidian for easily reference external content or ideas.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;I adore &lt;a href=&quot;https://schpet.com/notebook?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;this site design&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.&lt;/p&gt;
&lt;hr/&gt;
&lt;blockquote&gt;
&lt;p&gt;be curious about great ideas and engage with them&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;From AI &amp;amp; I: Best of the Pod: Reid Hoffman on How AI Is Answering Our Biggest Questions, Dec 24, 2025
&lt;a href=&quot;https://podcasts.apple.com/us/podcast/ai-i/id1719789201?i=1000742605641&amp;r=3610&amp;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://podcasts.apple.com/us/podcast/ai-i/id1719789201?i=1000742605641&amp;amp;r=3610&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-12-27</title><link>https://www.danielcorin.com/logs/2025/12/27/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/12/27/</guid><description>2025-12-27</description><pubDate>Sat, 27 Dec 2025 17:26:02 GMT</pubDate><content:encoded>&lt;p&gt;After hitting my head against a few different open source Swift text editor implementations, I ended up settling on a webview with a Monaco in the Swift app.
The syntax highlighting isn’t exactly how I want but if in reality, this has changed for me several times over the years as I’ve moved between tools and I’ll probably get over it.&lt;/p&gt;
&lt;p&gt;I’ve gotten really pulled into building this thing, inspired by &lt;a href=&quot;https://outofdesk.netlify.app/blog/perfect-software?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Perfect Software&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, because I’ve started to see all the little ways in which I can make it mine, in a way that is hard to accomplish with commercial software.
With open source software, you can fork, but you inherit the whole project rather than the bits and pieces you want.
To me, it feels like the average personal software is going to be simpler than that.&lt;/p&gt;
&lt;p&gt;On a different note, I think I’ve gotten pulled so far into this because coding agents (Claude Code) make it so easy (addicting?) to do &lt;em&gt;just one more thing&lt;/em&gt;.
I’ve been doing one more thing for two days now.&lt;/p&gt;
&lt;p&gt;That said, I do have something to show for it.
We see if it sticks.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-12-26</title><link>https://www.danielcorin.com/logs/2025/12/26/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/12/26/</guid><description>2025-12-26</description><pubDate>Fri, 26 Dec 2025 15:28:00 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been working with Claude Code to build a tool to help me write in this blog.
I’ve historically used Cursor to write in MDX and Claude Code to help build and wire up custom Astro and sometimes React components to add interactivity to posts.&lt;/p&gt;
&lt;p&gt;There are a few rough edges though.
My content scaffolds are Python scripts, which are not quite as fluid as I’d prefer.
My image optimization process is kludgy.
My content importing processes (currently experimenting with &lt;a href=&quot;https://getdrafts.com/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Drafts&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;) is still a work in progress.&lt;/p&gt;
&lt;p&gt;VS Code and Cursor have brought me a long way, but there really is no substitute to having more control over the tools you use everyday.
If you want something, you can build it.
This is what I am attempting now with &lt;code&gt;Tarn&lt;/code&gt;.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-12-25</title><link>https://www.danielcorin.com/logs/2025/12/25/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/12/25/</guid><description>2025-12-25</description><pubDate>Fri, 26 Dec 2025 03:39:26 GMT</pubDate><content:encoded>&lt;p&gt;I’ve seen coding agents refuse or avoid writing comprehensive tests because they claim “most tests are passing” or “90% is great coverage” even when prompted to do something like “fix the tests” or “add tests covering 100%”.
Unlike when prompted to code something, it seems when prompted to test things, agents are kind of lazy.
I wonder if this specifically correlates with how easy it is to reward hack passing tests.
Getting 100% unit coverage is notoriously irritating.
There are substantial diminishing returns and the final few percent usually come down to covering lines that bear almost no impact on ensuring the system continues working as designed.
Thus, I’m speculating agents struggle to do this because most people can’t be bothered to either.&lt;/p&gt;
&lt;p&gt;Or possibly it’s because tests test code, thus models can write code, have it validated, and be reinformed to do better.
But I can’t ever remember seeing anyone write code to test tests.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-12-24</title><link>https://www.danielcorin.com/logs/2025/12/24/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/12/24/</guid><description>2025-12-24</description><pubDate>Thu, 25 Dec 2025 02:28:13 GMT</pubDate><content:encoded>&lt;p&gt;I probably would have switched off of Nix for system management, but with Claude Code, any problems I run into are as good as solved.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-12-21</title><link>https://www.danielcorin.com/logs/2025/12/21/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/12/21/</guid><description>2025-12-21</description><pubDate>Sun, 21 Dec 2025 08:53:06 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;That part of it though, I think is where, for lack of more precise language, people get stuck. It’s like, again, I watch you use Cursor, it’s like you’re literally, it’s like you’re just nudging the model. And your prompts are not, yeah, it’s that demeanor for the listeners.&lt;/p&gt;
&lt;p&gt;You’re just poking it. It’s not these long specs. I’m watching you just be like, can you come up with an app idea?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;From Dialectic: 34: Ryo Lu - It’s All the Same Thing, Dec 18, 2025
&lt;a href=&quot;https://podcasts.apple.com/us/podcast/dialectic/id1780282402?i=1000741808474&amp;r=2988&amp;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://podcasts.apple.com/us/podcast/dialectic/id1780282402?i=1000741808474&amp;amp;r=2988&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;blockquote&gt;
&lt;p&gt;You just need to put your soul in this. You need to care about every detail. You need to not accept whatever purple gradient the AI gave you is the end.&lt;/p&gt;
&lt;p&gt;Like that is just the beginning. You always start with shit. You always start with slop, with AI.&lt;/p&gt;
&lt;p&gt;And then you refine it, you make it better.&lt;/p&gt;
&lt;p&gt;That’s the beginning, not the end.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;From Dialectic: 34: Ryo Lu - It’s All the Same Thing, Dec 18, 2025
&lt;a href=&quot;https://podcasts.apple.com/us/podcast/dialectic/id1780282402?i=1000741808474&amp;r=5060&amp;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://podcasts.apple.com/us/podcast/dialectic/id1780282402?i=1000741808474&amp;amp;r=5060&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;blockquote&gt;
&lt;p&gt;AI models are trained on all the public knowledge, information and the code that I can see.&lt;/p&gt;
&lt;p&gt;And you are trained on the same thing. Like all the books you’ve read, all the fonts that you know, all the artists that you admire, the world around you. And you build that intuition or taste or whatever.&lt;/p&gt;
&lt;p&gt;And you start forming an opinion about how you want to shape the world.&lt;/p&gt;
&lt;p&gt;And you express it by building.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;From Dialectic: 34: Ryo Lu - It’s All the Same Thing, Dec 18, 2025
&lt;a href=&quot;https://podcasts.apple.com/us/podcast/dialectic/id1780282402?i=1000741808474&amp;r=5133&amp;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://podcasts.apple.com/us/podcast/dialectic/id1780282402?i=1000741808474&amp;amp;r=5133&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-12-18</title><link>https://www.danielcorin.com/logs/2025/12/18/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/12/18/</guid><description>2025-12-18</description><pubDate>Thu, 18 Dec 2025 13:37:21 GMT</pubDate><content:encoded>&lt;p&gt;In pushing the envelop in building a large project likely with a coding agent, I am coming around to the need for a structured task management system, whether it be Linear or &lt;code&gt;beads&lt;/code&gt; or similar.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-12-17</title><link>https://www.danielcorin.com/logs/2025/12/17/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/12/17/</guid><description>2025-12-17</description><pubDate>Thu, 18 Dec 2025 01:44:11 GMT</pubDate><content:encoded>&lt;p&gt;I commonly use an &lt;code&gt;and/or&lt;/code&gt; approach when writing, both for people and language models.
At some point (I can’t remember exactly when), I switched to doing the following, for language models only:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;and / or&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The reasoning in my head was this would tokenize more clearly to the model.
Today, I checked the &lt;a href=&quot;https://platform.openai.com/tokenizer?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;OpenAI tokenizer&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; and kind of think I confirmed this thought process.
I’m still not quite sure though, since very few people would actually write this way in the source texts on which models have been trained.&lt;/p&gt;
&lt;p&gt;That said, I have seen tokenization tricks work for helping models to solve certain problems, like a Wordle puzzle or &lt;a href=&quot;/til/dspy/intro&quot;&gt;counting the letters in a word&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you know anything about how this works, let me know!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/and_or.B88hlymY_2Ex46.webp&quot; alt=&quot;And / Or Tokenization&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;1442&quot; height=&quot;1121&quot;&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;A fun thing about this post - I had Claude Code find the post I wrote about counting letters in a word with LLMs and link it above with the prompt below.
I’m going to be using this trick more often.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;‘/Users/danielcorin/dev/lab/thought-eddies/src/content/logs/2025/12/17/index.mdx’
“counting the letters in a word” find if I wrote about this and link to it&lt;/p&gt;
&lt;/blockquote&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-12-15</title><link>https://www.danielcorin.com/logs/2025/12/15/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/12/15/</guid><description>2025-12-15</description><pubDate>Tue, 16 Dec 2025 03:30:37 GMT</pubDate><content:encoded>&lt;p&gt;I used &lt;a href=&quot;https://ampcode.com/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;amp&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; to create a multi-client, single-server real-time websocket application using &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Cloudflare Durable Objects&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
It went quite well.&lt;/p&gt;
&lt;p&gt;I wasn’t expecting &lt;code&gt;amp&lt;/code&gt; to take so many actions on my behalf without permission.
It deployed the site after the first prompt since &lt;code&gt;wrangler&lt;/code&gt; was already configured on my system.&lt;/p&gt;
&lt;p&gt;Cool, but also I don’t think I’m ready for that level of full-send, having seen a “Claude Code &lt;code&gt;rm -rf&lt;/code&gt;’d my home directory” article yesterday.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-12-12</title><link>https://www.danielcorin.com/logs/2025/12/12/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/12/12/</guid><description>2025-12-12</description><pubDate>Sat, 13 Dec 2025 00:21:09 GMT</pubDate><content:encoded>&lt;p&gt;I share Simon’s sentiment on my the &lt;a href=&quot;https://simonwillison.net/2025/Dec/12/openai-skills/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;skills&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; ideas.
I’ve gone even more unstructured - I usually start little ideas and projects with an agent (Claude Code) and a markdown file, then add scripts and data as needed to see how far I can get.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-12-10</title><link>https://www.danielcorin.com/logs/2025/12/10/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/12/10/</guid><description>2025-12-10</description><pubDate>Thu, 11 Dec 2025 01:39:42 GMT</pubDate><content:encoded>&lt;p&gt;Added a &lt;a href=&quot;https://tools.danielcorin.com/&quot;&gt;tools&lt;/a&gt; page to this site, inspired by &lt;a href=&quot;https://simonwillison.net/2025/Dec/10/html-tools/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Simon’s recent post&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-12-07</title><link>https://www.danielcorin.com/logs/2025/12/07/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/12/07/</guid><description>2025-12-07</description><pubDate>Sun, 07 Dec 2025 23:51:53 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://j0nah.com/i-failed-to-recreate-the-1996-space-jam-website-with-claude?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;This attempt&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; to recreate the 1996 Space Jam website with Claude caught my attention because I’ve also been running into issues where Claude cannot reproduce code from images faithfully.
It’s much better (right now) when you give specifications in language.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-12-05</title><link>https://www.danielcorin.com/logs/2025/12/05/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/12/05/</guid><description>2025-12-05</description><pubDate>Fri, 05 Dec 2025 12:28:49 GMT</pubDate><content:encoded>&lt;p&gt;Figuring out how to teach someone how to use an agent continues to be a problem I only know how to solve by pairing with someone.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-12-04</title><link>https://www.danielcorin.com/logs/2025/12/04/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/12/04/</guid><description>2025-12-04</description><pubDate>Thu, 04 Dec 2025 22:39:19 GMT</pubDate><content:encoded>&lt;p&gt;I did a release of &lt;a href=&quot;https://www.wvlen.llc/apps/tomo?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Tomo&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; today for the first time in a while.
Dealt with an annoying scrollbar issue and added conversation exporting which I’ve wanted for a while.
The exported folder becomes helpful input context to an agent when I use Tomo to do a side task then bring back what I learned into the agent session.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-12-03</title><link>https://www.danielcorin.com/logs/2025/12/03/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/12/03/</guid><description>2025-12-03</description><pubDate>Wed, 03 Dec 2025 11:43:47 GMT</pubDate><content:encoded>&lt;p&gt;I made a &lt;code&gt;Sidenote&lt;/code&gt; Astro component, inspired by &lt;a href=&quot;https://edwardtufte.github.io/tufte-css/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Tufte CSS&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;On wide screens, sidenotes appear in the right margin and start visible by default. The dotted underline indicates text with an associated sidenote. You can click the dotted text to toggle the sidenote’s visibility with a smooth fade animation. When sidenotes are hidden, other visible sidenotes reposition to stay close to their reference text. Hovering over either the dotted text or the sidenote box highlights both and shows their connection. On narrow screens, clicking the dotted underlined text reveals the note inline with the same smooth fade animation. &lt;span class=&quot;sidenote-container&quot; data-astro-cid-fhyk4xiw&gt; &lt;input type=&quot;checkbox&quot; id=&quot;sidenote-zu3gel&quot; class=&quot;sidenote-toggle&quot; data-astro-cid-fhyk4xiw&gt; &lt;label for=&quot;sidenote-zu3gel&quot; class=&quot;sidenote-trigger&quot; data-astro-cid-fhyk4xiw&gt;It works like this!&lt;/label&gt; &lt;span class=&quot;sidenote-content&quot; data-astro-cid-fhyk4xiw&gt; &lt;label for=&quot;sidenote-zu3gel&quot; class=&quot;sidenote-close&quot; aria-label=&quot;Close sidenote&quot; data-astro-cid-fhyk4xiw&gt;−&lt;/label&gt; &lt;span class=&quot;sidenote-text&quot; data-astro-cid-fhyk4xiw&gt;Like this!&lt;/span&gt; &lt;/span&gt; &lt;/span&gt;  &lt;script type=&quot;module&quot; src=&quot;/opt/buildhome/repo/src/components/prose/Sidenote.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;/p&gt;
&lt;p&gt;Markdown provides native support for numbered footnotes&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;, but this approach never quite sat well with me.
I like having the additional context available in visual proximity to the text that references it. I want to be able to see both at the same time. Jumping between the two takes me out of the flow of reading. Putting the note in the margin allows me to see and read it if I want, but doesn’t interrupt the flow of the text and &lt;span class=&quot;sidenote-container&quot; data-astro-cid-fhyk4xiw&gt; &lt;input type=&quot;checkbox&quot; id=&quot;sidenote-r8kfxl&quot; class=&quot;sidenote-toggle&quot; data-astro-cid-fhyk4xiw&gt; &lt;label for=&quot;sidenote-r8kfxl&quot; class=&quot;sidenote-trigger&quot; data-astro-cid-fhyk4xiw&gt;it’s still easy to move past if I so choose.&lt;/label&gt; &lt;span class=&quot;sidenote-content&quot; data-astro-cid-fhyk4xiw&gt; &lt;label for=&quot;sidenote-r8kfxl&quot; class=&quot;sidenote-close&quot; aria-label=&quot;Close sidenote&quot; data-astro-cid-fhyk4xiw&gt;−&lt;/label&gt; &lt;span class=&quot;sidenote-text&quot; data-astro-cid-fhyk4xiw&gt;And if the note isn&amp;#39;t relevant to me right now, I can just keep reading.&lt;/span&gt; &lt;/span&gt; &lt;/span&gt;  &lt;/p&gt;
&lt;section data-footnotes class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;&lt;a class=&quot;heading-link-wrapper&quot; href=&quot;#footnote-label&quot;&gt;Footnotes&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;Like this! &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-12-02</title><link>https://www.danielcorin.com/logs/2025/12/02/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/12/02/</guid><description>2025-12-02</description><pubDate>Tue, 02 Dec 2025 09:39:17 GMT</pubDate><content:encoded>&lt;p&gt;I always turn off Cursor Tab when I am writing to think.
Otherwise, I end up subconsciously influenced to write what Cursor Tab thinks I am writing, not what I actually mean to write.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-12-01</title><link>https://www.danielcorin.com/logs/2025/12/01/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/12/01/</guid><description>2025-12-01</description><pubDate>Mon, 01 Dec 2025 21:35:45 GMT</pubDate><content:encoded>&lt;p&gt;Lately, I’ve been thinking about the difference and similarities between speaking, writing and thinking.
Paul Graham wrote an article about &lt;a href=&quot;https://paulgraham.com/writes.html?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;how writing is thinking&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; and that if you think you’re thinking without writing, you only &lt;em&gt;think&lt;/em&gt; you’re thinking.&lt;/p&gt;
&lt;p&gt;I haven’t known what to do with this idea for a while but think I’ve found something interesting recently.&lt;/p&gt;
&lt;p&gt;In using LLM agents to build software, sometimes I use voice to text functionality to get thoughts out of my head as fast as possible.
From a pure speed perspective, this is usually the fastest way to get the agent something to start working on.
In practice, however, the transcription of what I’ve said isn’t always as exacting or precise as what I had in mind.&lt;/p&gt;
&lt;p&gt;I &lt;em&gt;think&lt;/em&gt; the appreciation of this freestyle nature is to appreciate what it is to think through writing.&lt;/p&gt;
&lt;p&gt;When you speak to communicate, you’re generally trying to communicate some information.
But speaking has certain constraints.
While you’re speaking, you need to figure out what you’re going to say next while you’re saying the thing you’re already saying.&lt;/p&gt;
&lt;p&gt;This is quite different from writing.
Oddly enough, I never realized how different this was until I watched a bunch of people demonstrate how they use coding agents.&lt;/p&gt;
&lt;p&gt;They would talk about their process, explain what they were going to do, and then would start typing to the agent, at which point, their verbal speed and cadence would change entirely.&lt;/p&gt;
&lt;p&gt;They would dictate or type things like the following:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Create a React, Typescript application, using the Tailwind CSS framework …&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Usually monotone.
Usually slower than natural speaking speed.
Usually completely different from how the presenter was previously addressing the audience.&lt;/p&gt;
&lt;p&gt;In a presentation forum, this is highly unnatural to listen to.&lt;/p&gt;
&lt;p&gt;It’s the conversion of the writing process into something consumable to a speaking presentation format, but it’s awkward.&lt;/p&gt;
&lt;p&gt;Having noticed how strange this transition feels, when I do presentation coding with agents now, I tend to prefer a voice to text approach.
This approach allows me to fluidly explain myself to the audience and the agent at the same time, whenever I want to, by recording myself when I am talking about what I am going to build and using that transcription as my prompt.&lt;/p&gt;
&lt;p&gt;That’s a fun party trick, but back to writing and thinking.&lt;/p&gt;
&lt;p&gt;Writing slows you down to a speed where you can care more about where you are going.
The constraints of speaking require tradeoffs you don’t have to make when writing.&lt;/p&gt;
&lt;p&gt;If you can’t think of quite the right word to describe what you’re thinking, you can fall back to a more simple description or a synonym.
This works in conversation, but is a more lossy version of your actual thought and what you were trying to say.&lt;/p&gt;
&lt;p&gt;Words and speech are already lossy, but when we take time to write something down, we have the best chance of using the best words we know how to communicate what we mean.&lt;/p&gt;
&lt;p&gt;When we consider what this means in the context of writing to think, we might suggest speaking is insufficient to think because it requires mental energy to be committed to other things as well.
If you’re presenting, you may be considering your cadence, your body language, your tone, your volume.
You may be watching the audience and picking up on cues from them to get a sense of how they are receiving what you are saying.
If you’re conversing, you’re listening to your conversation partner and picking up similar cues.
In the end, what I think this means is that your mental bandwidth cannot be maximally focused on thinking when you are speaking.&lt;/p&gt;
&lt;p&gt;There are too many other things going on.
Maybe the closest thing to writing when speaking is to record yourself by yourself with no conversation partner and nothing to distract you.
But even still, it’s not quite like writing.
You’re looking around, absorbing other stimuli, and subconsciously incorporating it in what you say.&lt;/p&gt;
&lt;p&gt;If you close your eyes and dictate, you might come close to thinking like writing, but you still can’t avoid the constraint of being forced to pick the next word to string it together with the last.
Unless of course, you are going to pause and deliberately and carefully pick each. and. every. word. as. you. say. it. aloud.
But is that really even speaking?&lt;/p&gt;
&lt;p&gt;There is a sort of freestyle component to speaking.
In our minds, we might think we generally know where we’re going (what point we’re going to make) but we don’t always know how we’re going to get there.&lt;/p&gt;
&lt;p&gt;I’ve played with this idea a lot lately.&lt;/p&gt;
&lt;p&gt;The next time you’re in a casual conversation, observe the topic and listen to the participants.
Get a sense of what is being talked about and stay engaged.&lt;/p&gt;
&lt;p&gt;See if you notice multiple threads of conversation.
See if it seems like the people speaking are understanding each other.
See if you can follow the conversation evolving from one topic to another.&lt;/p&gt;
&lt;p&gt;Conversations are rarely planned.
They emerge, evolve, and eventually fade away.&lt;/p&gt;
&lt;p&gt;Even after an engaging and enjoyable conversation, there is a moment of palpable exhale where you realize it’s time to turn the page.&lt;/p&gt;
&lt;p&gt;So what are we doing when we converse?
Are we thinking?&lt;/p&gt;
&lt;p&gt;If we need more of our mental bandwidth to focus fully, then maybe we’re thinking to a certain degree but at a diminished capacity.&lt;/p&gt;
&lt;p&gt;If we’re debating, we’ll hear the argument of our opponent and then be expected to respond, advocating for our perspective over theirs.
We’re thinking on our feet, but maybe not as deeply or clearly as we’re capable of doing.&lt;/p&gt;
&lt;p&gt;We’re kind of thinking, but really we’re reacting.
We’ve practiced debating and when we hear an argument we only have so much time to respond.
There are lots of techniques you could use to buy time.&lt;/p&gt;
&lt;p&gt;Take a deep breath. Pause. Vamp. Talk about something unrelated.&lt;/p&gt;
&lt;p&gt;All to buy time.
Time to think.&lt;/p&gt;
&lt;p&gt;Because when speaking, time is the tightest constraint limiting the clear communication of your ideas.&lt;/p&gt;
&lt;p&gt;When speaking, it’s more difficult to manage a conversation.
Harder to retrace to previous topics.
To prune earlier branches.
With a partner it’s nearly impossible and would likely make the conversation feel quite unnatural.&lt;/p&gt;
&lt;p&gt;There is a natural give and take of a conversation.
If someone is talking about their day, it would be unbecoming to interrupt or abruptly change the topic to something else.&lt;/p&gt;
&lt;p&gt;When speaking, you live in the flow of time.
You need to speak words in an order that make sense.
You can’t return to a sentence from 5 minutes ago, edit that, then reorganize it to better state your point.
When speaking you kind of can, but it takes practice and you have to expend energy bringing your partner or audience with you.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I know I said that you can think when you speak but I don’t think I said that quite right. What I mean was, you can do an &lt;em&gt;approximation&lt;/em&gt; of thinking while speaking but to truly think with clarity you must write.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you say that, people can follow what you’re talking about, but you have to lay a trail of breadcrumbs.
When writing, the thoughts are more pure and uninterrupted.&lt;/p&gt;
&lt;p&gt;If you have the thought that leads to speaking the quote — maybe something like&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;My point is that writing is thinking and speaking isn’t quite thinking so I need to ensure I communicate clearly that speaking isn’t quite clear thinking&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You can change your prose to reflect that.
You don’t need to bring anyone along with you.
You don’t have to justify your hard pivot.
You can think and respond to your thought alone without the decorum or ceremony required when speaking.&lt;/p&gt;
&lt;p&gt;To respond to this thought while speaking compared to writing requires different orders of magnitude of mental bandwidth.
So much more, I could almost imagine myself letting the misunderstanding go while speaking because it would just be so much work to return and correct the record with linear conversation.&lt;/p&gt;
&lt;p&gt;When writing, the nonlinear edits are possible and easy.
The ideas exist concretely in words, to be sculpted into ideas.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-11-21</title><link>https://www.danielcorin.com/logs/2025/11/21/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/11/21/</guid><description>2025-11-21</description><pubDate>Fri, 21 Nov 2025 18:56:41 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been thinking about how, in software engineering especially, it feels like the balance of who is the builder and who is the user is shifting.
It used to be the case that the software engineer was clearly the builder.
I don’t find that to be the case anymore.&lt;/p&gt;
&lt;p&gt;Being the builder is fun.
You get to try new things, experiment, and see your work come to life.
You have a lot of control over the process of how you work.&lt;/p&gt;
&lt;p&gt;Being the user, especially of a rapidly changing product, is not always fun.
As a user, you adopted a product initially because of its utility, but then the changes start.&lt;/p&gt;
&lt;p&gt;Pricing changes.
Features evolve or go away.
The builders try and increase the scope of their user base.&lt;/p&gt;
&lt;p&gt;The tools used for software engineering are changing.
Language models are in everything, for better or worse.&lt;/p&gt;
&lt;p&gt;As software engineers, we’re now experiencing what many of us have put our users through for years.
But it’s not being done by any one company, but by our industry itself to us.&lt;/p&gt;
&lt;p&gt;More than I can ever recall, organizations seem to be measuring statistics like&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;lines of code written&lt;/li&gt;
&lt;li&gt;PRs merged&lt;/li&gt;
&lt;li&gt;issues closed&lt;/li&gt;
&lt;li&gt;daily active sessions on internal tools&lt;/li&gt;
&lt;li&gt;(and now) inference tokens used&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Engineers are now the targets of the optimization loops, previously mostly reserved for the users of the products engineers built.&lt;/p&gt;
&lt;p&gt;Prodded with surveys&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;On a scale of 1 to 10, how likely would you be to recommend this product to a friend or colleague?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Turned upside down and shaken for a bit of knowledge to feed into the tool makers’ road maps.&lt;/p&gt;
&lt;p&gt;I get it.
Language models change the game for builder software.&lt;/p&gt;
&lt;p&gt;I feel this way.&lt;/p&gt;
&lt;p&gt;The tools are useful.
The demand for them is real.&lt;/p&gt;
&lt;p&gt;But this post from Lenny has stuck with me:&lt;/p&gt;
&lt;astro-embed-tweet&gt;&lt;blockquote class=&quot;twitter-tweet&quot; data-dnt=&quot;true&quot; data-theme=&quot;light&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Getting frequent pings from CPOs/VP looking for product leaders at other companies who’ve found great success with AI tools/workflows.&lt;br&gt;&lt;br&gt;Everyone’s trying to figure out what everyone else has figured out.&lt;/p&gt;&amp;mdash; Lenny Rachitsky (@lennysan) &lt;a href=&quot;https://x.com/lennysan/status/1976430524936880574?ref_src=twsrc%5Etfw&quot;&gt;October 9, 2025&lt;/a&gt;&lt;/blockquote&gt;

&lt;/astro-embed-tweet&gt;
&lt;p&gt;Frantically.&lt;/p&gt;
&lt;p&gt;Organizations are pulling out all the usual tools to try and make things happen.
And engineers are feeling the pressure.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-11-15</title><link>https://www.danielcorin.com/logs/2025/11/15/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/11/15/</guid><description>2025-11-15</description><pubDate>Sat, 15 Nov 2025 22:38:50 GMT</pubDate><content:encoded>&lt;p&gt;Spent several hours coding with Cursor’s &lt;code&gt;composer-1&lt;/code&gt; model.
I like it a lot and it is so fast.
When you have it working it’s one of my favorite agent coding tools I’ve used.
Well done.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-11-14</title><link>https://www.danielcorin.com/logs/2025/11/14/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/11/14/</guid><description>2025-11-14</description><pubDate>Fri, 14 Nov 2025 18:50:17 GMT</pubDate><content:encoded>&lt;p&gt;I’ve fallen behind on blog things.
In the past few weeks, I’ve been&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;experimenting with &lt;a href=&quot;https://github.com/anthropics/claude-agent-sdk-python?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;claude-agent-sdk&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, equipping the agent with MCP and prompting to use a CLI measure trade-offs and ergonomics&lt;/li&gt;
&lt;li&gt;using humanlayer’s RPI (research, plan, implement) &lt;a href=&quot;https://github.com/humanlayer/humanlayer/blob/main/.claude/commands/research_codebase.md?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;commands&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; on large codebases to implement complex features&lt;/li&gt;
&lt;li&gt;experimenting with sprites and tile sets for a game idea&lt;/li&gt;
&lt;/ul&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-11-08</title><link>https://www.danielcorin.com/logs/2025/11/08/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/11/08/</guid><description>2025-11-08</description><pubDate>Sat, 08 Nov 2025 11:14:11 GMT</pubDate><content:encoded>&lt;p&gt;I built a Claude Code slash command that given a prompt, analyzes the ongoing chat and captures to insight or learning from the conversations.
This seems like it’s going to be useful for capturing and searching a domain-specific knowledge base using queries that come to mind when I remember I did “that one thing a few months ago”.&lt;/p&gt;
&lt;p&gt;I’m planning to start this as a personal experiment but also see if I can incorporate it codebases with Claude Code commands and agents.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-11-03</title><link>https://www.danielcorin.com/logs/2025/11/03/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/11/03/</guid><description>2025-11-03</description><pubDate>Mon, 03 Nov 2025 21:10:01 GMT</pubDate><content:encoded>&lt;p&gt;I learned about the &lt;a href=&quot;https://github.com/toon-format/toon?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;TOON&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; input data format for language models.
I wonder if this could be useful at all for the prompt built by DSPy.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-11-02</title><link>https://www.danielcorin.com/logs/2025/11/02/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/11/02/</guid><description>2025-11-02</description><pubDate>Sun, 02 Nov 2025 11:14:53 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been experimenting using Claude Code to learn Rust.&lt;/p&gt;
&lt;p&gt;Like learning to write it myself, not just build stuff in it with Claude Code.
I’m still unsure what level of abstraction learning programming is at now.&lt;/p&gt;
&lt;p&gt;I’ve found, if you’re familiar with building software, you can often be pretty serviceable in a language you don’t know aided by an agent.
But different languages help you learn to think differently about the types of problems you encounter when building software.&lt;/p&gt;
&lt;p&gt;I also want to know if and how I can use Claude Code explicitly for the purposes of learning something new.&lt;/p&gt;
&lt;p&gt;My general structure was to prompt the goal of learning Rust, then ask for a plan that covers increasingly advanced topics in Rust.
Then, given this plan and “unit” structure, I prompted for koan-like exercises and a small project for each unit.&lt;/p&gt;
&lt;p&gt;Claude Code really wanted to do all the work for me, but with some nudging, I’ve been able to get it to create the scaffolding for me to learn and then practice.
After making these improvements, I had the agent re-write the plan to incorporate the new approaches.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-10-29</title><link>https://www.danielcorin.com/logs/2025/10/29/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/10/29/</guid><description>2025-10-29</description><pubDate>Wed, 29 Oct 2025 21:02:08 GMT</pubDate><content:encoded>&lt;p&gt;Cursor &lt;a href=&quot;https://cursor.com/blog/composer?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;released&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; their “Composer” model today.
I believe the name is a hat tip to the original name of their agent/multi-file editing mode.&lt;/p&gt;
&lt;p&gt;Per the post&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Composer is a mixture-of-experts (MoE) language model supporting long-context generation and understanding. It is specialized for software engineering through reinforcement learning (RL) in a diverse range of development environments.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I’ve long been of the opinion that the only way Cursor was going to have staying power as a company was to train their own model.
If they hadn’t, my thesis was that they would continue to give all their margin away to the lab(s) with the best coding model(s).&lt;/p&gt;
&lt;p&gt;Cursor has a ton of code data.
They also see users’ preferences for models.&lt;/p&gt;
&lt;p&gt;By training their own model, maybe they can better control their own destiny and not be at the mercy of the labs and their API pricing.
The open question is whether this model is good enough to convince their customers to switch to it.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-10-25</title><link>https://www.danielcorin.com/logs/2025/10/25/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/10/25/</guid><description>2025-10-25</description><pubDate>Sat, 25 Oct 2025 21:04:34 GMT</pubDate><content:encoded>&lt;p&gt;I played around with the idea of using a language model as a sort of generic response engine for any request using any protocol.
That plan was to write a system prompt that the language model would use as the primary context and role.
I could then prompt “you are an HTTP server, you define the following endpoints” and then send actual HTTP requests to the model and have the model respond as if it were an HTTP server.
This idea taken further could allow you to just point a Postgres client or a gRPC client at a port for a process running that wraps a language model and then have it respond based on any kind of definition you did in the system prompt and by its own inference to come up with reasonable responses given the request.&lt;/p&gt;
&lt;p&gt;I still feel like there’s something to this idea, though early attempts were a little bit rough.
One of the bigger challenges is that most language models are pretty slow relative to these deterministic processes.
Also, expecting a model to output certain details of a response, like &lt;code&gt;Content-Length&lt;/code&gt; in an HTTP response, is not reliable.
To make parts like that work, you need to add deterministic logic around the model’s output.
If you do that, it almost makes more sense to just use an agent to scaffold a test service from your specs or IDLs rather than attempt to generate the response with the model via runtime inference.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-10-24</title><link>https://www.danielcorin.com/logs/2025/10/24/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/10/24/</guid><description>2025-10-24</description><pubDate>Fri, 24 Oct 2025 12:29:38 GMT</pubDate><content:encoded>&lt;p&gt;I’ve now run into the following issue multiple times using Bedrock.
It’s my own mistake but I end up confused each time.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;/&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;An error occurred (ValidationException) when calling the InvokeModelWithResponseStream operation:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;The maximum tokens you requested exceeds the model limit of 65536&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;An error occurred (ValidationException) when calling the InvokeModelWithResponseStream operation:The maximum tokens you requested exceeds the model limit of 65536&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I had this prompt when attempting to run inference on Bedrock with &lt;code&gt;us.anthropic.claude-sonnet-4-20250514-v1:0&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The problem was I was trying to set the &lt;em&gt;output&lt;/em&gt; tokens larger than the model limit.
Claude Sonnet 4 has versions that support 200k and 1M tokens context windows but this is for the input tokens to the model.&lt;/p&gt;
&lt;p&gt;I hope this note helps if you run into the same issue.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-10-22</title><link>https://www.danielcorin.com/logs/2025/10/22/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/10/22/</guid><description>2025-10-22</description><pubDate>Wed, 22 Oct 2025 20:08:50 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been finding that pairing with someone to help them get familiar with building with agents to be a very effective way to help them get started successfully.
Everyone enters the process with a different set of skills and it’s tough to know what parts will be confusing or challenging for them.&lt;/p&gt;
&lt;p&gt;When you’re pairing, you get to fly through the parts that your pair knows already and stop and focus on the parts that don’t come as easily or that they aren’t familiar with.
With support on the surrounding tasks, they have a chance to get a feel for prompting and developing a workflow for safely trying things out with the ability to revert if something breaks.&lt;/p&gt;
&lt;p&gt;With an agent, you get to bring your expertise to the software you’re building.
The words, terminology, and your ability to describe what you want are the springboard to using the agent to build what you want.
But there are a lot of barriers to entry: the terminal and system setup, getting API keys or paying for an agent subscription, and countless decisions that may feel consequential or irreversible when you don’t know better.
Having someone trusted to guide you through these parts gives you a great chance to see the opportunity and possibilities of coding with an agent.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-10-20</title><link>https://www.danielcorin.com/logs/2025/10/20/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/10/20/</guid><description>2025-10-20</description><pubDate>Mon, 20 Oct 2025 19:41:10 GMT</pubDate><content:encoded>&lt;p&gt;I tried out Claude Code’s new planning mode recently and ran a demo with it at work today.
I stumbled upon it last week.&lt;/p&gt;
&lt;p&gt;You get to planning mode by running &lt;code&gt;claude&lt;/code&gt; and pressing &lt;kbd&gt;shift&lt;/kbd&gt;+&lt;kbd&gt;tab&lt;/kbd&gt; twice.
You’ll see&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;/&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;⏸ plan mode on (shift+tab to cycle)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;  ⏸ plan mode on (shift+tab to cycle)&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Now, when I am in plan mode, Claude Code takes a sort of Socratic approach, asking me questions to clarify my initial vague prompt&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;&amp;gt; let&amp;#39;s write a journal cli app&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;⏺ I&amp;#39;ll help you design a journal CLI app! Let me first understand your requirements and then create a comprehensive plan.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;←  ☐ Language  ☐ Features  ☐ Storage  ☐ UI Style  ✔ Submit  →&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;What programming language would you prefer for the journal CLI app?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;❯ 1. Python&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Great for CLI apps with libraries like Click or argparse. Easy to distribute and cross-platform.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;2. Node.js/TypeScript&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Modern JavaScript/TypeScript with libraries like Commander.js. Good npm ecosystem.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;3. Go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Compiled binary, fast startup, excellent for CLI tools. Built-in flag parsing.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;4. Rust&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Fast, memory-safe, excellent CLI libraries like clap. Single binary distribution.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;5. Type something.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Enter to select · Tab/Arrow keys to navigate · Esc to cancel&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;&gt; let&apos;s write a journal cli app⏺ I&apos;ll help you design a journal CLI app! Let me first understand your requirements and then create a comprehensive plan.────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────←  ☐ Language  ☐ Features  ☐ Storage  ☐ UI Style  ✔ Submit  →What programming language would you prefer for the journal CLI app?❯ 1. Python     Great for CLI apps with libraries like Click or argparse. Easy to distribute and cross-platform.  2. Node.js/TypeScript     Modern JavaScript/TypeScript with libraries like Commander.js. Good npm ecosystem.  3. Go     Compiled binary, fast startup, excellent for CLI tools. Built-in flag parsing.  4. Rust     Fast, memory-safe, excellent CLI libraries like clap. Single binary distribution.  5. Type something.Enter to select · Tab/Arrow keys to navigate · Esc to cancel&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;An understandable, but sort of weird thing that got me twice today, is if you cursor down to the &lt;code&gt;Type something.&lt;/code&gt; option and press the arrow keys or tab, the TUI does &lt;em&gt;not&lt;/em&gt; cycle to the next plan option like it would if you had one of the other options selected.
This kind of makes sense because it’s listening for your custom input but I’ve already gotten stuck on that twice.&lt;/p&gt;
&lt;p&gt;Sometimes the agent won’t ask you any clarifying questions.
Sometimes it will ask multiple rounds of clarifying questions.&lt;/p&gt;
&lt;p&gt;I generally like this approach because it’s a nice on ramp to the idea of planning and an introduction to the concept that you get better results by giving the agent more of an idea of what you want to build.
It reminds me a bit of the work I did on &lt;a href=&quot;https://github.com/danielcorin/write-partner?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;write-partner&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; 2 years (!) ago, using the model to coax information out of me by asking follow up questions.&lt;/p&gt;
&lt;p&gt;If you expect the agent to read your mind and fill in the gaps, you’ll usually be disappointed.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-10-17</title><link>https://www.danielcorin.com/logs/2025/10/17/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/10/17/</guid><description>2025-10-17</description><pubDate>Fri, 17 Oct 2025 22:55:18 GMT</pubDate><content:encoded>&lt;p&gt;Shipped the escape room today.
Just needed to fix a few small bugs with image imports and display.
The code is not great but it generally works.
Saw an interesting performance issue with one of the mini-games on the live site compared to local.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-10-13</title><link>https://www.danielcorin.com/logs/2025/10/13/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/10/13/</guid><description>2025-10-13</description><pubDate>Mon, 13 Oct 2025 16:30:18 GMT</pubDate><content:encoded>&lt;p&gt;Experimenting with the useful &lt;a href=&quot;https://github.com/sqliteai/sqlite-vector?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;sqlite-vector&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; library for managing vector embeddings in SQLite.
Also wrote up a &lt;a href=&quot;https://docs.datasette.io/en/stable/writing_plugins.html?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Datasette plugin&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; to query the embeddings in the &lt;a href=&quot;https://docs.datasette.io/en/stable/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Datasette tool&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;This seems to be faster and easier than I last attempted this a year and a half ago with &lt;a href=&quot;/til/sqlite/sqlite-vss&quot;&gt;sqlite-vss&lt;/a&gt;.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-10-08</title><link>https://www.danielcorin.com/logs/2025/10/08/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/10/08/</guid><description>2025-10-08</description><pubDate>Wed, 08 Oct 2025 22:32:12 GMT</pubDate><content:encoded>&lt;p&gt;I started a list of things that seem to come up frequently when it comes to enduring design and user experience and empowerment.
Currently the list is the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Spreadsheets&lt;/li&gt;
&lt;li&gt;Bicycles&lt;/li&gt;
&lt;li&gt;Legos&lt;/li&gt;
&lt;li&gt;Unix&lt;/li&gt;
&lt;/ul&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-10-04</title><link>https://www.danielcorin.com/logs/2025/10/04/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/10/04/</guid><description>2025-10-04</description><pubDate>Sat, 04 Oct 2025 12:28:57 GMT</pubDate><content:encoded>&lt;p&gt;I downgraded Claude Code to standard usage a little while ago and I have to say it’s one of the best things I’ve done recently.
Not to say that I think Claude Code is excellent and effective - it is - but when I (occasionally) max out my Claude Code quota, I’m motivated to try a different agent coding tool.&lt;/p&gt;
&lt;p&gt;Today, I did more work with &lt;code&gt;codex&lt;/code&gt; than I’ve attempted in a while and found it to be quite effective and enjoyable.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-10-02</title><link>https://www.danielcorin.com/logs/2025/10/02/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/10/02/</guid><description>2025-10-02</description><pubDate>Thu, 02 Oct 2025 20:20:08 GMT</pubDate><content:encoded>&lt;p&gt;Currently watching &lt;a href=&quot;https://www.youtube.com/watch?v=42AzKZRNhsk&amp;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;this video&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; a bit at a time.&lt;/p&gt;
&lt;p&gt;Lots of great takeaways.
A memorable one - references specific Claude Code tools by name when prompting.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-10-01</title><link>https://www.danielcorin.com/logs/2025/10/01/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/10/01/</guid><description>2025-10-01</description><pubDate>Wed, 01 Oct 2025 19:34:57 GMT</pubDate><content:encoded>&lt;p&gt;&lt;kbd&gt;ctrl&lt;/kbd&gt; + &lt;kbd&gt;v&lt;/kbd&gt; on macOS pastes and image from the clipboard into
Claude Code. Amazing to finally know how to do this.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-09-29</title><link>https://www.danielcorin.com/logs/2025/09/29/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/09/29/</guid><description>2025-09-29</description><pubDate>Mon, 29 Sep 2025 21:38:56 GMT</pubDate><content:encoded>&lt;p&gt;Cute detail from the Claude Code update today&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/ultrathink.CIwBg1TS_2fTJss.webp&quot; alt=&quot;Multi-colored Claude Code ultrathink styling&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;374&quot; height=&quot;62&quot;&gt;&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-09-20</title><link>https://www.danielcorin.com/logs/2025/09/20/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/09/20/</guid><description>2025-09-20</description><pubDate>Sat, 20 Sep 2025 17:04:01 GMT</pubDate><content:encoded>&lt;p&gt;In a pinch, took a shot and found out &lt;code&gt;claude --resume&lt;/code&gt; is a &lt;a href=&quot;https://github.com/anthropics/claude-code/issues/371?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;real thing&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-09-14</title><link>https://www.danielcorin.com/logs/2025/09/14/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/09/14/</guid><description>2025-09-14</description><pubDate>Sun, 14 Sep 2025 11:01:55 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;I think that your point about intuitions and getting intuitions is the big thing. And I think people, we don’t realize is when you’re dealing with something fundamentally new, you can’t trust, like, how you reason about it without experiencing it, because you have to build the intuition in order to be able to reason about what it means and how it fits in and whether it works or not.&lt;/p&gt;
&lt;p&gt;And we’re just not used to that because we’re used to reasoning about things we already have an intuition for. And I think that’s why, like, when you first see, maybe when you first saw ChatGPT, you’d be like, oh my God, it can do everything. Like, we’re not going to have jobs in a year.&lt;/p&gt;
&lt;p&gt;And now we’re like three years in and we’re like, yeah, it’s awesome. And jobs are complicated. There’s a lot of complex stuff that we do&lt;/p&gt;
&lt;p&gt;— AI &amp;amp; I: Claude Code Can Be Your Second Brain, Sep 10, 2025&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://podcasts.apple.com/us/podcast/ai-i/id1719789201?i=1000725911151&amp;r=2737&amp;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://podcasts.apple.com/us/podcast/ai-i/id1719789201?i=1000725911151&amp;amp;r=2737&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-09-08</title><link>https://www.danielcorin.com/logs/2025/09/08/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/09/08/</guid><description>2025-09-08</description><pubDate>Mon, 08 Sep 2025 20:57:02 GMT</pubDate><content:encoded>&lt;p&gt;The world is vast and deeply detailed.&lt;/p&gt;
&lt;p&gt;If you build an ever more detailed physical model of the world’s topography, eventually you end up with a map the size of the world itself&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;Maps and models allow us to think and see and reason about broad concepts and how they interact with each other.
This is the difference between seeing a bag of marbles as&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;/&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;blue 🔵&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;blue 🔵&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;red 🔴&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;green 🟢&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;blue 🔵&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;blue 🔵blue 🔵red 🔴green 🟢blue 🔵&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;and another bag as&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;red 🔴&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;green 🟢&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;green 🟢&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;blue 🔵&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;red 🔴&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;green 🟢&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;red 🔴green 🟢green 🟢blue 🔵red 🔴green 🟢&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;and the more abstract concept that bag one has a most common color of “blue 🔵” and bag two of “green 🟢”.&lt;/p&gt;
&lt;p&gt;Statistics are a common example of compressing reality into an abstraction that can more easier be reported and compared against.
Mode (described above) is a relatively lossy statistic.
We could prefer something like color counts instead.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Hand one&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;🔴 red: 1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;🟢 green: 1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;🔵 blue: 3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;Hand one🔴 red: 1🟢 green: 1🔵 blue: 3&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;That’s more information than just the mode.
We know about other colors and their rate of occurrence.&lt;/p&gt;
&lt;p&gt;But we still don’t know their position in the bag.
Whether any overlapped each other.
Which colors were touching which.
What the size and weight of the marbles were.&lt;/p&gt;
&lt;p&gt;The level of detail that can potentially be captured to describe this bag of marbles continues down to an identical replica of the true physical state.
This brings us back to the beginning of this essay.&lt;/p&gt;
&lt;h2 id=&quot;all-models-are-wrong&quot;&gt;&lt;a class=&quot;heading-link-wrapper&quot; href=&quot;#all-models-are-wrong&quot;&gt;All models are wrong&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;But some are useful&lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot; id=&quot;user-content-fnref-2&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;When creating models or reporting statistics, you need to decide which elements of the situation must be captured and which can be neglected without compromising the clarity of the abstraction or description of the situation.&lt;/p&gt;
&lt;p&gt;In the case of the marbles, if we’re just trying to describe the “marble-color” population, it could be ok to neglect the position of the marbles in the bag or their size.
But when we read that data of the counts of the colors of the marbles, often implicit in our reading can be implied sameness across other characteristics of those marbles.&lt;/p&gt;
&lt;p&gt;When I devised this example I imagined all the marbles were the same weight, size and made of the same material.
But a dataset of counts of marbles and their colors doesn’t imply that.
The statistic has its focus and neglects the rest.&lt;/p&gt;
&lt;h2 id=&quot;models-in-writing&quot;&gt;&lt;a class=&quot;heading-link-wrapper&quot; href=&quot;#models-in-writing&quot;&gt;Models in writing&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Writing is a means by which you can transfer an idea from your head into someone else’s.
You have to decide which data points, which statistics, which models you include in your writing in your attempt to conjure your idea within the mind of the reader.&lt;/p&gt;
&lt;p&gt;Different examples will be effective for different readers.
It’s the writers job to mark these paths for readers.
Not every path will be taken, but many can lead to the same place.&lt;/p&gt;
&lt;p&gt;Maybe my “bag of marbles” analogy example didn’t land for you.
I could present another analogy or model that might.
I could present several.&lt;/p&gt;
&lt;p&gt;But too many models or examples and readers will lose sight of the point of the writing.&lt;/p&gt;
&lt;h2 id=&quot;what-you-dont-write&quot;&gt;&lt;a class=&quot;heading-link-wrapper&quot; href=&quot;#what-you-dont-write&quot;&gt;What you don’t write&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You also have to decide what you aren’t going to write about.
More so, even.&lt;/p&gt;
&lt;p&gt;There are so many things you could write about, and you have to decide what to leave out.&lt;/p&gt;
&lt;section data-footnotes class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;&lt;a class=&quot;heading-link-wrapper&quot; href=&quot;#footnote-label&quot;&gt;Footnotes&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/On_Exactitude_in_Science?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://en.wikipedia.org/wiki/On_Exactitude_in_Science&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-2&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/All_models_are_wrong?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://en.wikipedia.org/wiki/All_models_are_wrong&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; &lt;a href=&quot;#user-content-fnref-2&quot; data-footnote-backref aria-label=&quot;Back to reference 2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-09-07</title><link>https://www.danielcorin.com/logs/2025/09/07/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/09/07/</guid><description>2025-09-07</description><pubDate>Sun, 07 Sep 2025 19:21:32 GMT</pubDate><content:encoded>&lt;p&gt;Two separate people texted me that OpenAI finally added conversation branching to ChatGPT.&lt;/p&gt;
&lt;astro-embed-tweet&gt;&lt;blockquote class=&quot;twitter-tweet&quot; data-dnt=&quot;true&quot; data-theme=&quot;light&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;By popular request: you can now branch conversations in ChatGPT, letting you more easily explore different directions without losing your original thread.&lt;br&gt;&lt;br&gt;Available now to logged-in users on web. &lt;a href=&quot;https://t.co/l6RflhOGuK&quot;&gt;https://t.co/l6RflhOGuK&lt;/a&gt; &lt;a href=&quot;https://t.co/CpVehkULOB&quot;&gt;pic.twitter.com/CpVehkULOB&lt;/a&gt;&lt;/p&gt;&amp;mdash; OpenAI (@OpenAI) &lt;a href=&quot;https://x.com/OpenAI/status/1963697012014215181?ref_src=twsrc%5Etfw&quot;&gt;September 4, 2025&lt;/a&gt;&lt;/blockquote&gt;

&lt;/astro-embed-tweet&gt;
&lt;p&gt;The implementation is quite basic and doesn’t make the different branches visible, but it’s nice to see it added nonetheless.
After working on &lt;a href=&quot;/projects/delta&quot;&gt;Delta&lt;/a&gt;, I never quite sure what the best UX for the feature was.&lt;/p&gt;
&lt;p&gt;Shortly after, I was this tweet from John&lt;/p&gt;
&lt;astro-embed-tweet&gt;&lt;blockquote class=&quot;twitter-tweet&quot; data-dnt=&quot;true&quot; data-theme=&quot;light&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Being one of the first at the intersection of creativity and a new technology doesn’t really matter. That applies in art, design, or entrepreneurship.&lt;br&gt;&lt;br&gt;What you did, if truly “novel,” will get done and redone by others as years go by. Eventually it won’t be a big deal at all.…&lt;/p&gt;&amp;mdash; John Maeda (@johnmaeda) &lt;a href=&quot;https://x.com/johnmaeda/status/1964746635193589857?ref_src=twsrc%5Etfw&quot;&gt;September 7, 2025&lt;/a&gt;&lt;/blockquote&gt;

&lt;/astro-embed-tweet&gt;
&lt;p&gt;So, on to the next one.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-09-04</title><link>https://www.danielcorin.com/logs/2025/09/04/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/09/04/</guid><description>2025-09-04</description><pubDate>Thu, 04 Sep 2025 16:00:55 GMT</pubDate><content:encoded>&lt;p&gt;I met up with a friend the other day who is a software engineer in between roles.
We were talking about the future of the job and the field more broadly.
With the popularization of language models it feels like the ways we work and assumptions we’ve held are being upended, and not for the first time.&lt;/p&gt;
&lt;p&gt;I personally believe the job description of “software engineer” is going to continue to mean and entail a greater diversity of skills than ever before.&lt;/p&gt;
&lt;p&gt;Software engineers (even prior to them being called as such) have always provided instructions to computers and tried to organize both the instructions and computers in such a way that an intended task could be accomplished by using that software through an interface to the computer.&lt;/p&gt;
&lt;p&gt;This has not changed.&lt;/p&gt;
&lt;p&gt;What has changed are the breadth and complexity of areas in which an individual building software needs to participate.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-09-03</title><link>https://www.danielcorin.com/logs/2025/09/03/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/09/03/</guid><description>2025-09-03</description><pubDate>Wed, 03 Sep 2025 21:07:10 GMT</pubDate><content:encoded>&lt;p&gt;I tried OpenAI’s &lt;code&gt;codex&lt;/code&gt; CLI coding agent again today for the first time in a &lt;em&gt;while&lt;/em&gt;.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;/&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;Update&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;available!&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0.1.2504301751&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;→&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;0.29.0.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;Update available! 0.1.2504301751 → 0.29.0.&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I recently shipped a release of &lt;a href=&quot;https://www.wvlen.llc/apps/tomo?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Tomo&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; but there was a minor bug with the horizontal scrollbar overlapping a codeblock with syntax highlighting.&lt;/p&gt;
&lt;p&gt;I prompted &lt;code&gt;codex&lt;/code&gt; to fix this and it seemed to localize the problem and suggest a working fix in one attempt.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ensure that the horizontal scrollbar in styled codeblocks does not overlap the code itself. right now I am seeing that behavior&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I was motivated to try this out because I’ve been hearing rumblings about &lt;code&gt;gpt-5&lt;/code&gt; being good at coding.
It’s currently the number 4 coding model on OpenRouter and climbing, relative to both Sonnet and Qwen3 Coder.&lt;/p&gt;















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Rank&lt;/th&gt;&lt;th&gt;Model&lt;/th&gt;&lt;th&gt;Company&lt;/th&gt;&lt;th&gt;Parameters&lt;/th&gt;&lt;th&gt;Performance&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Grok Code Fast 1&lt;/td&gt;&lt;td&gt;x-ai&lt;/td&gt;&lt;td&gt;844B tokens&lt;/td&gt;&lt;td&gt;↑ 3,231%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;Claude Sonnet 4&lt;/td&gt;&lt;td&gt;anthropic&lt;/td&gt;&lt;td&gt;339B tokens&lt;/td&gt;&lt;td&gt;↓ 9%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;Qwen3 Coder 480B A35B&lt;/td&gt;&lt;td&gt;qwen&lt;/td&gt;&lt;td&gt;112B tokens&lt;/td&gt;&lt;td&gt;↓ 33%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;GPT-5&lt;/td&gt;&lt;td&gt;openai&lt;/td&gt;&lt;td&gt;66.2B tokens&lt;/td&gt;&lt;td&gt;↑ 21%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;DeepSeek V3.1&lt;/td&gt;&lt;td&gt;deepseek&lt;/td&gt;&lt;td&gt;60.9B tokens&lt;/td&gt;&lt;td&gt;↓ 56%&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;I believe Grok Code Fast 1 was launched in some kind of free capacity along with its release which may in part explain its high usage but we will see where that lands.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-09-01</title><link>https://www.danielcorin.com/logs/2025/09/01/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/09/01/</guid><description>2025-09-01</description><pubDate>Mon, 01 Sep 2025 18:45:22 GMT</pubDate><content:encoded>&lt;p&gt;An interesting learning about the iOS Clock alarm app’s time picker.
It &lt;a href=&quot;https://old.reddit.com/r/interestingasfuck/comments/1n5lztw/the_time_picker_on_the_iphones_alarm_app_isnt/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;turns out&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; it’s a long list rather than a circular buffer.
Scrolling to the bottom of all three picker lists positions the time at 4:39pm.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-08-31</title><link>https://www.danielcorin.com/logs/2025/08/31/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/08/31/</guid><description>2025-08-31</description><pubDate>Sun, 31 Aug 2025 18:42:38 GMT</pubDate><content:encoded>&lt;p&gt;Our approach to applying the intelligence of language models is inside out.&lt;/p&gt;
&lt;p&gt;Providing a model access to a number of tool calls and expecting the model to correctly select a tool given a scenario then invoke the tool properly given the surrounding context goes too far for the pattern to be generically useful.
There are examples of agents of this type that are effective, but they are effective specifically because they are tested in the scenarios in which they are useful.
Attaching tools to a model and calling inference in a loop is only a starting point.
From here, refinement is needed to build something consistently reliable and useful.&lt;/p&gt;
&lt;p&gt;The context the agent sees much be managed.
That includes the tool calls that are made available to the agent.&lt;/p&gt;
&lt;p&gt;The result may look something like a harness bespoke to the model, an evaluation set with measurable outcomes, and a process for verification either by a human or another model.&lt;/p&gt;
&lt;p&gt;To draw some contrast, constrained, structured, verifiable inference becomes a building block on top of which any type of software system can be built.
Specifically, given an input does the model reliably produce the known, expected output?&lt;/p&gt;
&lt;p&gt;Existing software systems can be engineered to be durable and reliable.
Model inference is inherently probabilistic.
The more leeway you give a model to make a decision on behalf of the user or the system, the more likely there is for long tail failures of the system.&lt;/p&gt;
&lt;p&gt;For example, let’s say your business has a rule where if a customer uploads a document of type A, or two documents, one of type B and another of type C, then the user can proceed to the next step.&lt;/p&gt;
&lt;p&gt;The classical implementation of this type of workflow in software would be to create a form that allows the user to upload their documents, then create a task in some kind of system for a human to review.
From there, if the documents are deemed sufficient given your company’s policies by the human reviewer, the user can proceed.
If the documents are not sufficient, the user needs to be notified with (hopefully) some clarification of what is missing and the process repeats.&lt;/p&gt;
&lt;p&gt;The challenges with this approach are multifold.
It’s slow for the user since they need to wait for a human to review their documents before they can proceed.
It’s expensive because it requires the time, training, and expertise of a human to perform review.
It can be error prone and inconsistent because it’s difficult to ensure homogeneous judgement across diverse human evaluators and humans inevitably make mistakes, especially when performing many similar tasks in a row or when they’re put under pressure to do a certain quantity under time constraints.&lt;/p&gt;
&lt;p&gt;Language models show promise for solving these types of challenges but architecting a solution that can produce a good result to speed up this process and improve on the quality of the document evaluation requires a thoughtful approach to architecting the software system.
AI does not appear to be a silver bullet that makes the problem disappear without thought or effort.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-08-28</title><link>https://www.danielcorin.com/logs/2025/08/28/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/08/28/</guid><description>2025-08-28</description><pubDate>Thu, 28 Aug 2025 13:35:38 GMT</pubDate><content:encoded>&lt;p&gt;Fiddling around with an &lt;a href=&quot;/activity&quot;&gt;&lt;code&gt;/activity&lt;/code&gt;&lt;/a&gt; page for the site.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-08-27</title><link>https://www.danielcorin.com/logs/2025/08/27/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/08/27/</guid><description>2025-08-27</description><pubDate>Wed, 27 Aug 2025 22:37:30 GMT</pubDate><content:encoded>&lt;p&gt;Experimenting with activity sparkline concept&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/sparkline.DGu2FkdM_ZEDAUp.webp&quot; alt=&quot;Activity Sparkline&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;526&quot; height=&quot;262&quot;&gt;&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-08-26</title><link>https://www.danielcorin.com/logs/2025/08/26/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/08/26/</guid><description>2025-08-26</description><pubDate>Tue, 26 Aug 2025 08:40:49 GMT</pubDate><content:encoded>&lt;p&gt;A sad morning for Claude Code.
Amp is mostly working though.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;/&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;&amp;gt; you there?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;⎿  ⧉ Selected 1 lines from README.md in Cursor&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;⎿ API Error: 500 {&amp;quot;type&amp;quot;:&amp;quot;error&amp;quot;,&amp;quot;error&amp;quot;:{&amp;quot;type&amp;quot;:&amp;quot;api_error&amp;quot;,&amp;quot;message&amp;quot;:&amp;quot;Overloaded&amp;quot;},&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;request_id&amp;quot;:null}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;&gt; you there?  ⎿  ⧉ Selected 1 lines from README.md in Cursor  ⎿ API Error: 500 {&amp;#34;type&amp;#34;:&amp;#34;error&amp;#34;,&amp;#34;error&amp;#34;:{&amp;#34;type&amp;#34;:&amp;#34;api_error&amp;#34;,&amp;#34;message&amp;#34;:&amp;#34;Overloaded&amp;#34;},&amp;#34;    request_id&amp;#34;:null}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;⎿  API Error (529 {&amp;quot;type&amp;quot;:&amp;quot;error&amp;quot;,&amp;quot;error&amp;quot;:{&amp;quot;type&amp;quot;:&amp;quot;overloaded_error&amp;quot;,&amp;quot;message&amp;quot;:&amp;quot;Overloaded&amp;quot;},&amp;quot;request_id&amp;quot;:null}) · Retrying in 1 seconds… (attempt 1/10)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;  ⎿  API Error (529 {&amp;#34;type&amp;#34;:&amp;#34;error&amp;#34;,&amp;#34;error&amp;#34;:{&amp;#34;type&amp;#34;:&amp;#34;overloaded_error&amp;#34;,&amp;#34;message&amp;#34;:&amp;#34;Overloaded&amp;#34;},&amp;#34;request_id&amp;#34;:null}) · Retrying in 1 seconds… (attempt 1/10)&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;hr/&gt;
&lt;p&gt;I tried to create a CSS package to add browser styles with the look and feel of Mac OS 9.
I thought it would be as simple as showing a coding agent some screenshots of Mac OS 9.
It was not.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;Also played around with building some Mac OS 9 styled components in CSS.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/macos9.BOYU3mJG_ZtGixB.webp&quot; alt=&quot;Mac OS 9 styled text editor window&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;871&quot; height=&quot;536&quot;&gt;&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-08-25</title><link>https://www.danielcorin.com/logs/2025/08/25/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/08/25/</guid><description>2025-08-25</description><pubDate>Mon, 25 Aug 2025 20:39:43 GMT</pubDate><content:encoded>&lt;p&gt;I had a bit of inspiration and started working on adding code syntax highlighting to Tomo.&lt;/p&gt;
&lt;p&gt;Seeing an increasing number of folks running coding agents like Claude Code in loop and with &lt;code&gt;--dangerously-skip-permissions&lt;/code&gt;.
You can accomplish a lot like this with the proper setup.
In my experience, the agent needs to be able to evaluate and test its own work to be successful with this approach.&lt;/p&gt;
&lt;p&gt;I don’t think I would attempt this without using some kind of sandbox for the agent as exploits are becoming increasingly common and advanced.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-08-20</title><link>https://www.danielcorin.com/logs/2025/08/20/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/08/20/</guid><description>2025-08-20</description><pubDate>Wed, 20 Aug 2025 20:05:47 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Before LLMs, provided that your team did some of their due diligence, you could always expect to have some help when tackling new code-bases. Either a mentor, or at least some (even if maybe partially outdated) documentation. With LLMs, this is gone. The only thing you can rely on is on your ability to decipher what a highly imperfect system generated, and maybe ask explanations to that same imperfect system about &lt;del&gt;your code&lt;/del&gt; its code (oh, and it has forgotten everything about the initial writing process by then).&lt;/p&gt;
&lt;p&gt;— &lt;a href=&quot;https://www.mindflash.org/coding/ai/ai-and-the-bus-factor-of-0-1608?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://www.mindflash.org/coding/ai/ai-and-the-bus-factor-of-0-1608&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This article is fair and relevant commentary on the practicing of thoughtlessly producing code to solve a problem without ever reading it.
However, I disagree with this passage’s assertion that “you could always expect to have some help when tackling new code-bases”.
At this point in my career, the majority of the codebases I’ve worked in have required that I learn parts of the system from zero, effectively as if there was no one with any knowledge of the system (aka bus factor of 0).&lt;/p&gt;
&lt;p&gt;Practically speaking, even if there actually are some people with knowledge of the system, it may be impractical to rely on them to get you up to speed on a codebase where you need to make some change.
I’ve found the most success through figuring things out with the aim to unblock myself.&lt;/p&gt;
&lt;p&gt;This approach &lt;em&gt;may&lt;/em&gt; only go so far.
You may be able to create and merge a PR but not deploy.
Or deploy but not know how to run migrations.
But the more experience I’ve had working as a software engineer, the more relevant and useful doing the archeological work of digging through the history of a codebase has been.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-08-19</title><link>https://www.danielcorin.com/logs/2025/08/19/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/08/19/</guid><description>2025-08-19</description><pubDate>Tue, 19 Aug 2025 17:06:32 GMT</pubDate><content:encoded>&lt;p&gt;It’s been a while since I’ve attempted to use LLMs to solve Connections puzzles.&lt;/p&gt;
&lt;p&gt;In the past, I used a &lt;a href=&quot;https://github.com/danielcorin/llm_connections?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;harness&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; and allowed the LLM to guess one group at a time with logic that would check if the guess was correct or valid.
This approach was closer to how humans play the game and helped &lt;code&gt;claude-3-5-sonnet&lt;/code&gt; get ~40% of the puzzles correct over &lt;a href=&quot;https://github.com/danielcorin/bots-doing-things/blob/main/content/posts/connections/_index.md?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;32 games&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Today, I took a screenshot of the puzzle and sent it to &lt;code&gt;gpt-5&lt;/code&gt; and &lt;code&gt;claude-4-1-opus&lt;/code&gt; (with not tools enabled) with the prompt&lt;/p&gt;
&lt;section class=&quot;chat-section&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;chat-container&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;message-container&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;message user&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;message-content&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;user-label&quot; data-astro-cid-txfww4py&gt;User&lt;/div&gt; &lt;div class=&quot;bubble user-bubble&quot; data-astro-cid-txfww4py&gt; &lt;p&gt;solve today’s nytimes connections puzzle&lt;/p&gt; &lt;img src=&quot;/_astro/connections.BhsJCyxL.png&quot; alt=&quot;Image 1 from user message&quot; class=&quot;message-image&quot; data-astro-cid-txfww4py&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;   &lt;/div&gt;&lt;div class=&quot;message-container&quot; data-astro-cid-txfww4py&gt;  &lt;div class=&quot;message assistant&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;message-content&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;model-label&quot; data-astro-cid-txfww4py&gt;claude-4-1-opus-20250805&lt;/div&gt; &lt;details class=&quot;thinking-container&quot; data-astro-cid-txfww4py&gt; &lt;summary class=&quot;thinking-summary&quot; data-astro-cid-txfww4py&gt; &lt;svg width=&quot;1em&quot; height=&quot;1em&quot; class=&quot;thinking-chevron&quot; data-astro-cid-txfww4py=&quot;true&quot; data-icon=&quot;ph:caret-right&quot;&gt;   &lt;symbol id=&quot;ai:ph:caret-right&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m181.66 133.66l-80 80a8 8 0 0 1-11.32-11.32L164.69 128L90.34 53.66a8 8 0 0 1 11.32-11.32l80 80a8 8 0 0 1 0 11.32&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:ph:caret-right&quot;&gt;&lt;/use&gt;  &lt;/svg&gt;
Thinking process
&lt;/summary&gt; &lt;div class=&quot;thinking-content&quot; data-astro-cid-txfww4py&gt; &lt;p&gt;Looking at this Connections puzzle, I need to identify four groups of four words each. Let me analyze the words:&lt;/p&gt;
&lt;p&gt;VERMOUTH, PLYMOUTH, CLASSIC, DASHBOARD
BLABBERMOUTH, DARTMOUTH, LITTLE, PORT
FLYWHEEL, CHATTERBOX, RUSHMORE, MARSALA
WINDBAG, THE, SHERRY, PRATTLER&lt;/p&gt;
&lt;p&gt;Let me look for patterns:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Words ending in “MOUTH”:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;VERMOUTH&lt;/li&gt;
&lt;li&gt;PLYMOUTH&lt;/li&gt;
&lt;li&gt;BLABBERMOUTH&lt;/li&gt;
&lt;li&gt;DARTMOUTH
These all end in “MOUTH” - that’s a group of 4!&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Words that mean someone who talks a lot:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;BLABBERMOUTH&lt;/li&gt;
&lt;li&gt;CHATTERBOX&lt;/li&gt;
&lt;li&gt;WINDBAG&lt;/li&gt;
&lt;li&gt;PRATTLER
Wait, BLABBERMOUTH is already in the “MOUTH” group. Let me reconsider.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Actually, let me look at this differently:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Cities/Places ending in “MOUTH”:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;PLYMOUTH (city in England and Massachusetts)&lt;/li&gt;
&lt;li&gt;DARTMOUTH (city/college)&lt;/li&gt;
&lt;li&gt;Actually, BLABBERMOUTH isn’t a place…&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let me think about wines/alcohols:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VERMOUTH (fortified wine)&lt;/li&gt;
&lt;li&gt;PORT (wine)&lt;/li&gt;
&lt;li&gt;MARSALA (wine)&lt;/li&gt;
&lt;li&gt;SHERRY (wine)
That’s 4! These are all fortified wines.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So we have:
Group 1: Fortified wines - VERMOUTH, PORT, MARSALA, SHERRY&lt;/p&gt;
&lt;p&gt;Now looking at the remaining words:
PLYMOUTH, CLASSIC, DASHBOARD
BLABBERMOUTH, DARTMOUTH, LITTLE
FLYWHEEL, CHATTERBOX, RUSHMORE
WINDBAG, THE, PRATTLER&lt;/p&gt;
&lt;p&gt;Words for talkative people:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BLABBERMOUTH&lt;/li&gt;
&lt;li&gt;CHATTERBOX&lt;/li&gt;
&lt;li&gt;WINDBAG&lt;/li&gt;
&lt;li&gt;PRATTLER
That’s 4! These all mean someone who talks excessively.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I notice a pattern of locations with “MOUTH” in their names. PLYMOUTH and DARTMOUTH stand out as geographical references. I’m seeing potential connections between these place names and how they might form a meaningful group. The remaining words seem scattered, but there might be a hidden link between LITTLE, CLASSIC, DASHBOARD, FLYWHEEL, and THE that isn’t immediately obvious. I’ll need to dig deeper to uncover their potential relationship. I’m exploring potential connections between words like Plymouth Rock, Little Rock, and other terms. I’m noticing some interesting patterns around “ROCK” and trying to categorize different types of references - geographic locations, music genres, and even people like Dwayne “The Rock” Johnson. Some words like Dashboard and Flywheel seem less connected, so I’m probing for underlying themes. My thinking is moving between different conceptual approaches, looking for meaningful links between these seemingly disparate terms.&lt;/p&gt;
&lt;p&gt;I’ve identified some potential word formation strategies: compound words, parts of phrases, and categorical groupings. For instance, I’m examining “BOARD” and “WHEEL” as potential connective elements, and exploring how words might combine or relate to each other. My strategy involves breaking down the words, looking for structural similarities, and testing different interpretational frameworks to uncover potential relationships.&lt;/p&gt;
&lt;p&gt;The current challenge is finding a coherent pattern that connects Plymouth, Classic, Dashboard, Dartmouth, Little, Flywheel, Rushmore, and “The” in a meaningful way. I’m systematically testing different linguistic and conceptual approaches to see what emerges.&lt;/p&gt;
&lt;p&gt;I notice several interesting categories: academic institutions (Dartmouth, Plymouth), film references (Rushmore, The), descriptive terms (Classic, Little), and mechanical/structural words (Dashboard, Flywheel). These suggest multiple potential connection pathways, from thematic to structural to categorical.&lt;/p&gt;
&lt;p&gt;The Wes Anderson film connection and historical landmark references provide additional contextual layers, hinting at potential narrative or cultural intersections between these seemingly disparate terms.&lt;/p&gt;
&lt;p&gt;Phonetic similarities emerge with words ending in “-uth” sounds, creating an unexpected linguistic pattern across different domains. The exploration reveals complex semantic networks where terms can shift meaning or connection depending on context.&lt;/p&gt;
&lt;p&gt;I’m tracking potential linking strategies: sound-based connections, categorical relationships, and unexpected word combinations that might reveal surprising associations.&lt;/p&gt;
&lt;p&gt;Car-related terminology offers intriguing possibilities - brands, parts, and descriptive language intersect in ways that could unlock the pattern. Compound word structures and articles like “THE” suggest additional pathways for connecting seemingly disparate terms.&lt;/p&gt;
&lt;p&gt;The challenge involves finding underlying structural logic that transforms these discrete words into a coherent system, requiring creative lateral thinking and careful pattern recognition.&lt;/p&gt;
&lt;p&gt;American geographical references emerge as a compelling thread, with landmarks and place names revealing potential connections across diverse locations. Each term potentially represents a unique slice of American cultural or geographical landscape, hinting at deeper associative relationships.&lt;/p&gt;
&lt;p&gt;The “ROCK” pattern surfaces intriguingly, linking PLYMOUTH, LITTLE, CLASSIC, and THE through a consistent linguistic structure. These terms suggest a rhythmic naming convention spanning different states and contexts.&lt;/p&gt;
&lt;p&gt;Exploring the remaining words - DARTMOUTH, DASHBOARD, FLYWHEEL, RUSHMORE - reveals less obvious connections. While initially appearing disparate, these terms might conceal a subtle underlying pattern waiting to be uncovered.&lt;/p&gt;
&lt;p&gt;The investigation continues, probing for unexpected links between seemingly unrelated concepts across geographical, linguistic, and categorical domains. I’m exploring word connections through different lenses. First, fortified wines like VERMOUTH and PORT share a category. Then, words describing talkative people - BLABBERMOUTH and CHATTERBOX reveal a linguistic pattern.&lt;/p&gt;
&lt;p&gt;For the remaining words - DARTMOUTH, DASHBOARD, FLYWHEEL, RUSHMORE - I notice they’re compound words with fascinating verb roots. DART, DASH, FLY, RUSH all suggest quick, dynamic movement. Each word breaks down into a verb suggesting rapid action, creating an intriguing linguistic connection.&lt;/p&gt;
&lt;p&gt;The MOUTH-ending words (VERMOUTH, PLYMOUTH, BLABBERMOUTH, DARTMOUTH) cross multiple categories, adding complexity to my analysis. Some represent drinks, others describe people or places, showing how language interweaves seemingly unrelated concepts.&lt;/p&gt;
&lt;p&gt;I’m strategizing how to categorize these words without creating category overlap, which is crucial in solving the Connections puzzle. The challenge lies in distinguishing unique characteristics while maintaining clear, non-redundant groupings.&lt;/p&gt;
&lt;p&gt;My current focus is separating the words precisely: wines must stay distinct from descriptive terms, ensuring each word fits a singular, unambiguous category.&lt;/p&gt;
&lt;p&gt;The talkative people group expands to include CHATTERBOX, WINDBAG, and PRATTLER, complementing the earlier BLABBERMOUTH entry. These words share a clear thematic connection of verbose communication.&lt;/p&gt;
&lt;p&gt;For the remaining words, I’ve identified a fascinating pattern: PLYMOUTH, LITTLE, CLASSIC, and THE form a ”___ ROCK” group, while DARTMOUTH, DASHBOARD, FLYWHEEL, and RUSHMORE connect through compound words with first elements functioning as action verbs suggesting rapid movement.&lt;/p&gt;
&lt;p&gt;My strategy involves methodically parsing the word list, seeking intrinsic linguistic or semantic relationships that create coherent, non-overlapping categories.&lt;/p&gt; &lt;/div&gt; &lt;/details&gt;  &lt;div class=&quot;bubble assistant-bubble&quot; data-astro-cid-txfww4py&gt; &lt;p&gt;Looking at this Connections puzzle, I need to find four groups of four related words.&lt;/p&gt;
&lt;p&gt;Let me start by identifying some clear patterns:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fortified Wines&lt;/strong&gt;: I can see VERMOUTH, PORT, MARSALA, and SHERRY - these are all types of fortified wines.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Talkative People&lt;/strong&gt;: BLABBERMOUTH, CHATTERBOX, WINDBAG, and PRATTLER - these all describe someone who talks excessively.&lt;/p&gt;
&lt;p&gt;For the remaining 8 words, let me look for connections:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;”___ ROCK”&lt;/strong&gt;: PLYMOUTH (Rock), LITTLE (Rock), CLASSIC (Rock), and THE (Rock - either the actor or Alcatraz) - these can all precede “ROCK” to form common phrases.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The last group&lt;/strong&gt;: DARTMOUTH, DASHBOARD, FLYWHEEL, and RUSHMORE - these are all compound words that begin with verbs of quick movement: DART, DASH, FLY, and RUSH.&lt;/p&gt;
&lt;p&gt;So my four groups are:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Fortified wines&lt;/strong&gt;: VERMOUTH, PORT, MARSALA, SHERRY&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Excessive talkers&lt;/strong&gt;: BLABBERMOUTH, CHATTERBOX, WINDBAG, PRATTLER&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;”___ ROCK”&lt;/strong&gt;: PLYMOUTH, LITTLE, CLASSIC, THE&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Start with quick movement verbs&lt;/strong&gt;: DARTMOUTH, DASHBOARD, FLYWHEEL, RUSHMORE&lt;/li&gt;
&lt;/ol&gt;  &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;/div&gt; &lt;/div&gt; &lt;/section&gt; 
&lt;p&gt;According to the playground, Opus used 3,665 tokens and took well over a minute to respond (I didn’t time it and the tool doesn’t say).&lt;/p&gt;
&lt;p&gt;When given the same prompt, &lt;code&gt;gpt-5&lt;/code&gt; with reasoning effort &lt;code&gt;high&lt;/code&gt; and verbosity &lt;code&gt;high&lt;/code&gt; took 2:38 and used 6,957 tokens.&lt;/p&gt;
&lt;p&gt;Both models solved the puzzle correctly in one attempt and with no feedback from the game itself as a human would receive while playing - a harder task.
Impressive progress after a year since I last attempted this.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-08-18</title><link>https://www.danielcorin.com/logs/2025/08/18/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/08/18/</guid><description>2025-08-18</description><pubDate>Mon, 18 Aug 2025 20:18:53 GMT</pubDate><content:encoded>&lt;p&gt;I saw another Claude-generated Astro blog today.
The post list page looked surprisingly like the one on this site.&lt;/p&gt;
&lt;p&gt;Maybe I shouldn’t be surprised.
Working with Claude feels collaborative but unless you’re prompting for specific things, Claude’s defaults seem to be pretty consistent across uses.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-08-13</title><link>https://www.danielcorin.com/logs/2025/08/13/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/08/13/</guid><description>2025-08-13</description><pubDate>Wed, 13 Aug 2025 08:29:28 GMT</pubDate><content:encoded>&lt;p&gt;Coming up for air after a bunch of time spent on &lt;a href=&quot;https://github.com/danielcorin/llm-api?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;a project&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; trying to use &lt;code&gt;llm&lt;/code&gt; as a router to different models to create a compatibility layer for the OpenAI &lt;code&gt;/v1/chat/completions&lt;/code&gt; API and the Anthropic &lt;code&gt;/v1/messages&lt;/code&gt; API.&lt;/p&gt;
&lt;p&gt;In basic cases, this works pretty well.
For tool calling, it’s a bit more complicated.
Nuances with the different providers and models require intervention to make sure the caller (like Claude Code) which may be expecting to interact with the Anthropic API is able to play nicely with other providers and models.&lt;/p&gt;
&lt;p&gt;One example is the Anthropic API requires the &lt;code&gt;max_tokens&lt;/code&gt; field to be set.
However, Gemini models don’t support it.
The &lt;code&gt;llm&lt;/code&gt; tool supports setting &lt;code&gt;model.Options&lt;/code&gt; per model.
For many Gemini models, these look something like:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;/&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;llm&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;models&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;--options&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;llm models --options&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;GeminiPro: gemini/gemini-2.5-pro (aliases: gemini-2.5-pro)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Options:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;code_execution: boolean&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;temperature: float&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;max_output_tokens: int&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;top_p: float&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;top_k: int&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;json_object: boolean&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;timeout: float&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;google_search: boolean&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;thinking_budget: int&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;...GeminiPro: gemini/gemini-2.5-pro (aliases: gemini-2.5-pro)  Options:    code_execution: boolean    temperature: float    max_output_tokens: int    top_p: float    top_k: int    json_object: boolean    timeout: float    google_search: boolean    thinking_budget: int...&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Without intervention, this leads a Claude Code to make a request proxied through my server that leads to this error:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:278ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:2ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&amp;quot;detail&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&amp;quot;Error generating response: 1 validation error for OptionsWithThinkingBudget&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;max_tokens&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;  Extra inputs are not permitted [type=extra_forbidden, input_value=1024, input_type=int]&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;    For further information visit https://errors.pydantic.dev/2.11/v/extra_forbidden&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;{  &amp;#34;detail&amp;#34;: &amp;#34;Error generating response: 1 validation error for OptionsWithThinkingBudget\nmax_tokens\n  Extra inputs are not permitted [type=extra_forbidden, input_value=1024, input_type=int]\n    For further information visit https://errors.pydantic.dev/2.11/v/extra_forbidden&amp;#34;}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;This particular issue can be worked around by first checking the model’s supported options and then filtering out those that are unsupported.&lt;/p&gt;
&lt;p&gt;The challenges don’t end there.&lt;/p&gt;
&lt;p&gt;Claude Code specifies a tool’s input schema like this:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F77676&quot;&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&amp;quot;input_schema&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&amp;quot;type&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&amp;quot;object&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&amp;quot;properties&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&amp;quot;description&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&amp;quot;type&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&amp;quot;string&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&amp;quot;description&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&amp;quot;A short (3-5 word) description of the task&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&amp;quot;prompt&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&amp;quot;type&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&amp;quot;string&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&amp;quot;description&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&amp;quot;The task for the agent to perform&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&amp;quot;subagent_type&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&amp;quot;type&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&amp;quot;string&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&amp;quot;description&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&amp;quot;The type of specialized agent to use for this task&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&amp;quot;required&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&amp;quot;description&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&amp;quot;prompt&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&amp;quot;subagent_type&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&amp;quot;additionalProperties&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&amp;quot;$schema&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&amp;quot;http://json-schema.org/draft-07/schema#&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;{  ...  &amp;#34;input_schema&amp;#34;: {    &amp;#34;type&amp;#34;: &amp;#34;object&amp;#34;,    &amp;#34;properties&amp;#34;: {      &amp;#34;description&amp;#34;: {        &amp;#34;type&amp;#34;: &amp;#34;string&amp;#34;,        &amp;#34;description&amp;#34;: &amp;#34;A short (3-5 word) description of the task&amp;#34;      },      &amp;#34;prompt&amp;#34;: {        &amp;#34;type&amp;#34;: &amp;#34;string&amp;#34;,        &amp;#34;description&amp;#34;: &amp;#34;The task for the agent to perform&amp;#34;      },      &amp;#34;subagent_type&amp;#34;: {        &amp;#34;type&amp;#34;: &amp;#34;string&amp;#34;,        &amp;#34;description&amp;#34;: &amp;#34;The type of specialized agent to use for this task&amp;#34;      }    },    &amp;#34;required&amp;#34;: [&amp;#34;description&amp;#34;, &amp;#34;prompt&amp;#34;, &amp;#34;subagent_type&amp;#34;],    &amp;#34;additionalProperties&amp;#34;: false,    &amp;#34;$schema&amp;#34;: &amp;#34;http://json-schema.org/draft-07/schema#&amp;#34;  }}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;but Gemini doesn’t accept the &lt;code&gt;additionalProperties&lt;/code&gt; or &lt;code&gt;$schema&lt;/code&gt; fields.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:165ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;INFO:     127.0.0.1:60097 - &amp;quot;POST /v1/messages?beta=true HTTP/1.1&amp;quot; 200 OK&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;ERROR:    Exception in ASGI application&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:2ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;+ Exception Group Traceback (most recent call last):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:4ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:4ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;|   File &amp;quot;/Users/danielcorin/dev/llm-api/.venv/lib/python3.11/site-packages/starlette/responses.py&amp;quot;, line 254, in stream_response&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:4ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;|     async for chunk in self.body_iterator:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:4ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;|   File &amp;quot;/Users/danielcorin/dev/llm-api/llm_api/anthropic_api.py&amp;quot;, line 341, in stream_anthropic_response&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:4ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;|     for chunk in response:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:4ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;|   File &amp;quot;/Users/danielcorin/dev/llm-api/.venv/lib/python3.11/site-packages/llm/models.py&amp;quot;, line 1172, in __iter__&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:4ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;|     for chunk in self.model.execute(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:4ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;|   File &amp;quot;/Users/danielcorin/dev/llm-api/.venv/lib/python3.11/site-packages/llm_gemini.py&amp;quot;, line 521, in execute&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:4ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;|     raise llm.ModelError(event[&amp;quot;error&amp;quot;][&amp;quot;message&amp;quot;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:4ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;| llm.errors.ModelError: Invalid JSON payload received. Unknown name &amp;quot;additionalProperties&amp;quot; at &amp;#39;tools[0].function_declarations[0].parameters&amp;#39;: Cannot find field.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot; style=&quot;--ecIndent:4ch&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;| Invalid JSON payload received. Unknown name &amp;quot;$schema&amp;quot; at &amp;#39;tools[0].function_declarations[0].parameters&amp;#39;: Cannot find field.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;INFO:     127.0.0.1:60097 - &amp;#34;POST /v1/messages?beta=true HTTP/1.1&amp;#34; 200 OKERROR:    Exception in ASGI application  + Exception Group Traceback (most recent call last):    ...    |   File &amp;#34;/Users/danielcorin/dev/llm-api/.venv/lib/python3.11/site-packages/starlette/responses.py&amp;#34;, line 254, in stream_response    |     async for chunk in self.body_iterator:    |   File &amp;#34;/Users/danielcorin/dev/llm-api/llm_api/anthropic_api.py&amp;#34;, line 341, in stream_anthropic_response    |     for chunk in response:    |   File &amp;#34;/Users/danielcorin/dev/llm-api/.venv/lib/python3.11/site-packages/llm/models.py&amp;#34;, line 1172, in __iter__    |     for chunk in self.model.execute(    |   File &amp;#34;/Users/danielcorin/dev/llm-api/.venv/lib/python3.11/site-packages/llm_gemini.py&amp;#34;, line 521, in execute    |     raise llm.ModelError(event[&amp;#34;error&amp;#34;][&amp;#34;message&amp;#34;])    | llm.errors.ModelError: Invalid JSON payload received. Unknown name &amp;#34;additionalProperties&amp;#34; at &apos;tools[0].function_declarations[0].parameters&apos;: Cannot find field.    | Invalid JSON payload received. Unknown name &amp;#34;$schema&amp;#34; at &apos;tools[0].function_declarations[0].parameters&apos;: Cannot find field.&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;We can filter these fields out, since they aren’t really needed, which lands us with this error:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:175ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;llm.errors.ModelError: * GenerateContentRequest.tools[0].function_declarations[12].parameters.properties[url].format: only &amp;#39;enum&amp;#39; and &amp;#39;date-time&amp;#39; are supported for STRING type&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;llm.errors.ModelError: * GenerateContentRequest.tools[0].function_declarations[12].parameters.properties[url].format: only &apos;enum&apos; and &apos;date-time&apos; are supported for STRING type&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/block/goose/issues/1029?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;A problem&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; which seems to go beyond just Claude Code, and would require us to modify which tools we enable, which is something we don’t control using Claude Code.&lt;/p&gt;
&lt;p&gt;It was clearly hubris to think I could backdoor my way into solving this problem when folks are working on it full time.&lt;/p&gt;
&lt;astro-embed-tweet&gt;&lt;blockquote class=&quot;twitter-tweet&quot; data-dnt=&quot;true&quot; data-theme=&quot;dark&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;What no one is talking about is the fact that as soon as a new model drops, the agent harnesses aren&amp;#39;t optimized for it.&lt;br&gt;&lt;br&gt;There&amp;#39;s a ridiculous amount of elbow grease that you have to put in to actually make new models work truly well with agents. &lt;br&gt;&lt;br&gt;We&amp;#39;re working really hard at…&lt;/p&gt;&amp;mdash; Ryan Carson (@ryancarson) &lt;a href=&quot;https://x.com/ryancarson/status/1954253913202545132?ref_src=twsrc%5Etfw&quot;&gt;August 9, 2025&lt;/a&gt;&lt;/blockquote&gt;

&lt;/astro-embed-tweet&gt;
&lt;p&gt;But now at least Ryan can’t say people aren’t talking about it.&lt;/p&gt;
&lt;p&gt;And this is to say nothing of the challenges of rewriting the prompts and tool descriptions to make the agent itself function as intended once the API calls are working.&lt;/p&gt;
&lt;p&gt;All this said, I think I will still implement a more narrow implementation of this project for OpenAI and Anthropic APIs and add image support.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-08-12</title><link>https://www.danielcorin.com/logs/2025/08/12/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/08/12/</guid><description>2025-08-12</description><pubDate>Tue, 12 Aug 2025 22:18:04 GMT</pubDate><content:encoded>&lt;p&gt;Today, I published a &lt;a href=&quot;https://github.com/danielcorin/llm-api?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;package&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; that exposes an OpenAI-compatible API on top of Simon’s &lt;code&gt;llm&lt;/code&gt; tool.
It’s been interesting to develop a better feel for the least common denominator of features and what it looks like to try and support them well.&lt;/p&gt;
&lt;p&gt;My goal is to use the plugin architecture of the &lt;code&gt;llm&lt;/code&gt; tool to build a distributed version of something like &lt;code&gt;litellm&lt;/code&gt;.
Most users don’t need most of what &lt;code&gt;litellm&lt;/code&gt; offers but have no way to avoid installing everything.
Additionally, if you want to support a new provider, you can independently implement a plugin and install it within the &lt;code&gt;llm&lt;/code&gt; tool without needing to adopt a large framework, upstream a change to a large repo, or maintain a fork.&lt;/p&gt;
&lt;p&gt;It’s been an interesting project.
I’m currently trying to add support for Anthropic’s &lt;code&gt;/v1/messages&lt;/code&gt; API with the goal of routing Claude Code traffic through different providers and models.&lt;/p&gt;
&lt;p&gt;I was also planning to try and support images.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-08-04</title><link>https://www.danielcorin.com/logs/2025/08/04/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/08/04/</guid><description>2025-08-04</description><pubDate>Mon, 04 Aug 2025 21:51:02 GMT</pubDate><content:encoded>&lt;p&gt;Played a bit more with &lt;a href=&quot;https://ampcode.com/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Amp&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; today.
It’s been a month or maybe more since I last used it.&lt;/p&gt;
&lt;p&gt;It’s beginning to look more like Claude Code.&lt;/p&gt;
&lt;p&gt;I liked the experience of working with it, but it still feels like Claude Code works better for me.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-08-03</title><link>https://www.danielcorin.com/logs/2025/08/03/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/08/03/</guid><description>2025-08-03</description><pubDate>Sun, 03 Aug 2025 09:41:04 GMT</pubDate><content:encoded>&lt;p&gt;Attempting to stop the constant WiFi disconnects on macOS 26 Beta 4 by &lt;a href=&quot;https://support.apple.com/en-us/102285?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;disabling WiFi 6E&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
This seems to have worked.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-07-29</title><link>https://www.danielcorin.com/logs/2025/07/29/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/07/29/</guid><description>2025-07-29</description><pubDate>Tue, 29 Jul 2025 21:11:15 GMT</pubDate><content:encoded>&lt;p&gt;I made another attempt at using Claude Code to build an LLM-based DJ app, integrated with Spotify.
I figure this time, I would use a TUI (like Claude Code and Gemini CLI use) because I hoped it would be more testable.
Agent coding tools seem to get much further when they can write tests for themselves.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-07-28</title><link>https://www.danielcorin.com/logs/2025/07/28/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/07/28/</guid><description>2025-07-28</description><pubDate>Mon, 28 Jul 2025 18:19:19 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been trying to find a way to test Claude Code with Kimi K2 running on Groq.
In my head, this could be a super fast, capable agent that would make trying larger tasks less time consuming to wait for.&lt;/p&gt;
&lt;p&gt;Initially, I thought I could use the &lt;a href=&quot;https://docs.litellm.ai/docs/anthropic_unified?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;LiteLLM Anthropic &lt;code&gt;/v1/messages&lt;/code&gt; API&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, but I couldn’t figure out how to get that to work.
Looking at the exposed endpoints of the FastAPI server running the &lt;code&gt;litellm&lt;/code&gt; proxy server, that path didn’t appear to be available.&lt;/p&gt;
&lt;p&gt;I ended up finding this nice Github project &lt;a href=&quot;https://github.com/fakerybakery/claude-code-kimi-groq/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;fakerybakery/claude-code-kimi-groq&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; that sets up a web server that does the proxying to Groq and now I am starting to experiment.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-07-26</title><link>https://www.danielcorin.com/logs/2025/07/26/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/07/26/</guid><description>2025-07-26</description><pubDate>Sat, 26 Jul 2025 17:55:51 GMT</pubDate><content:encoded>&lt;p&gt;I updated to beta 4 of macOS 26 and now my WiFi keeps disconnecting.
Not sure if it’s related but the timing is suspicious.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-07-25</title><link>https://www.danielcorin.com/logs/2025/07/25/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/07/25/</guid><description>2025-07-25</description><pubDate>Fri, 25 Jul 2025 23:46:50 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;No one survives being a professional programmer without being willing to learn a whole bunch of new things every couple of years. The people who don’t flee into management as soon as they can.&lt;/p&gt;
&lt;p&gt;— &lt;a href=&quot;https://www.recurse.com/blog/191-developing-our-position-on-ai?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://www.recurse.com/blog/191-developing-our-position-on-ai&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-07-11</title><link>https://www.danielcorin.com/logs/2025/07/11/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/07/11/</guid><description>2025-07-11</description><pubDate>Fri, 11 Jul 2025 09:28:09 GMT</pubDate><content:encoded>&lt;p&gt;Thank you Scott, for helping me &lt;a href=&quot;https://scottwillsey.com/theme-flicker/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;find a way&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; to get my Astro site’s theme to stop flickering.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-07-06</title><link>https://www.danielcorin.com/logs/2025/07/06/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/07/06/</guid><description>2025-07-06</description><pubDate>Sun, 06 Jul 2025 12:49:56 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.indragie.com/blog/i-shipped-a-macos-app-built-entirely-by-claude-code?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Great read&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; from Indragie on building a Swift macOS app.
A lot of their journey echoes my experience building Tomo.&lt;/p&gt;
&lt;p&gt;Also was introduced to several projects and repos I hadn’t heard of before&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.fastlane.tools/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://docs.fastlane.tools/&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/steipete/agent-rules/blob/main/docs/modern-swift.md?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://github.com/steipete/agent-rules/blob/main/docs/modern-swift.md&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://llm.codes/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://llm.codes/&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cameroncooke/XcodeBuildMCP?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://github.com/cameroncooke/XcodeBuildMCP&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-07-04</title><link>https://www.danielcorin.com/logs/2025/07/04/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/07/04/</guid><description>2025-07-04</description><pubDate>Fri, 04 Jul 2025 14:42:26 GMT</pubDate><content:encoded>&lt;p&gt;I spent a few hours DJing with Sonnet 4.
All manually, via conversation.
I gave it a playlist of songs I liked and asked it to keep with the vibe.
I would tell it I skipped if I didn’t like its suggestion.&lt;/p&gt;
&lt;p&gt;It went pretty well for a while.&lt;/p&gt;
&lt;p&gt;It took a 4 song playlist to 26 songs that I liked.
I skipped a bunch of songs along the way and started the conversation over a few times while experimenting with different prompt approaches.&lt;/p&gt;
&lt;p&gt;A few problems and challenges:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Starting with the same playlist meant the suggestions at the beginning were generally the same. I had no good way to keep a list of songs I didn’t want suggested but that I also didn’t add. I could see myself building out something to support this.&lt;/li&gt;
&lt;li&gt;Deeper into the context window the suggested seems to get a bit worse. The model also started recommending songs, then realizing it was repeating or had the wrong genre, then course correcting.&lt;/li&gt;
&lt;li&gt;Also deeper into the context window the model started to make up songs or mix up song titles and artists.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Overall, this was a fun experiment.
I learned about several new artists I hadn’t heard before and was reminded of some others I hadn’t whose catalogs I hadn’t visited in a while.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-07-01</title><link>https://www.danielcorin.com/logs/2025/07/01/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/07/01/</guid><description>2025-07-01</description><pubDate>Tue, 01 Jul 2025 21:17:18 GMT</pubDate><content:encoded>&lt;p&gt;The agent CLI space is getting pretty crowded.&lt;/p&gt;
&lt;p&gt;Claude Code and Cursor are typically my daily drivers, but I played around with Sourcegraph’s &lt;a href=&quot;https://ampcode.com/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;amp&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; and Google’s &lt;a href=&quot;https://cloud.google.com/gemini/docs/codeassist/gemini-cli?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;gemini-cli&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;In particular, I noticed that &lt;code&gt;gemini-cli&lt;/code&gt; has been getting a lot of attention.&lt;/p&gt;
&lt;p&gt;If I had to guess, Amp seems to use Anthropic’s &lt;a href=&quot;https://docs.anthropic.com/en/docs/agents-and-tools/tool-use/text-editor-tool?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;text editor tool&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; which is quite nice, and what today’s best agents seem to consistently be built on top of.
It seems unlikely &lt;code&gt;gemini-cli&lt;/code&gt; would use this tool as it uses Google’s Gemini models.&lt;/p&gt;
&lt;p&gt;These tools are all copying from each other, liberally.
Like Claude Code, &lt;code&gt;gemini-cli&lt;/code&gt; uses LLM-generated phrases while it runs its LLM calls in the background to do work for you.&lt;/p&gt;
&lt;p&gt;Amp feels more minimal whereas Gemini CLI feels an attempt at an outright Claude Code clone.
Having used Gemini 2.5 Pro for several weeks just before Sonnet and Opus 4 came out, this makes sense.
Gemini is a great model for writing code and deserves a dedicated tool.&lt;/p&gt;
&lt;p&gt;It also seems Google has gotten some very wide distribution with the launch.&lt;/p&gt;
&lt;p&gt;It would be nice to see standardization on a file name for agent rules.
&lt;a href=&quot;https://agent.md/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;agent.md&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; seems like a fine solution for this.
This agent rules format seems like yet another dimension on the MxN problem of everything in models these days — supporting everything eventually becomes an entire project or business (see OpenRouter, LiteLLM).&lt;/p&gt;
&lt;p&gt;Hopefully, we see some consolidation here soon or we can just create a bunch of symlinks.
Amp seems to try to be compatible will all existing agent files and import from them.
I’ve not seem much commitment to this from other tools.&lt;/p&gt;
&lt;p&gt;Notably, it seems only Cursor has deviated from the standard markdown format
They use &lt;a href=&quot;https://docs.cursor.com/context/rules?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;.mdc&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; which has frontmatter to instruct the agent when to attach the rules.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-06-25</title><link>https://www.danielcorin.com/logs/2025/06/25/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/06/25/</guid><description>2025-06-25</description><pubDate>Wed, 25 Jun 2025 17:17:29 GMT</pubDate><content:encoded>&lt;p&gt;I’ve said it before and I’ll say it again:&lt;/p&gt;
&lt;p&gt;If you attempt to market to me using your app’s push notifications, I will disable all notifications and consider it a reminder for whether I use your app enough to justify not uninstalling it.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;TIL you can run Claude model inference on &lt;a href=&quot;https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/claude?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;GCP&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-06-19</title><link>https://www.danielcorin.com/logs/2025/06/19/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/06/19/</guid><description>2025-06-19</description><pubDate>Thu, 19 Jun 2025 19:48:42 GMT</pubDate><content:encoded>&lt;p&gt;Been getting back to writing more after a period where I was very focused on building.
I missed it and feel like I have a bunch of ideas floating around that I want to write about.&lt;/p&gt;
&lt;p&gt;I upgraded Hugo today.
It was mostly painless.
Apparently, the &lt;code&gt;--verbose&lt;/code&gt; flag was removed and the Twitter shortcode was renamed to X.
I had to change my deploy script as a result of the former.&lt;/p&gt;
&lt;p&gt;I also added the very nice &lt;a href=&quot;https://github.com/KKKZOZ/hugo-admonitions?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;hugo-admonitions&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; project to this site.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-06-08</title><link>https://www.danielcorin.com/logs/2025/06/08/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/06/08/</guid><description>2025-06-08</description><pubDate>Sun, 08 Jun 2025 16:36:32 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been reading a lot lately about making it clearer what prompts are used to elicit certain outputs when coding with agents.&lt;/p&gt;
&lt;p&gt;Cloudflare’s &lt;a href=&quot;https://github.com/cloudflare/workers-oauth-provider?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;OAuth library&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, written largely by LLM agents with human review, includes the prompts in the PR comments, making it much easier to figure out the author’s intent and imagine how you might prompt an agent to build something similar yourself.&lt;/p&gt;
&lt;p&gt;I feel there needs to be a better way to automatically commit after each agent loop is executed, including the prompt as part of that commit. From there, we can fluidly move back and forth between commits as necessary, accepting or tossing the resulting output from the agent.&lt;/p&gt;
&lt;p&gt;When working on a feature, you create a new branch, then prompt the agent as many times as needed, and the agent makes a commit after each loop is finished. Once you’re satisfied with the results, you can squash and merge, preserving all the prompts, or merge everything to main if you prefer.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-06-06</title><link>https://www.danielcorin.com/logs/2025/06/06/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/06/06/</guid><description>2025-06-06</description><pubDate>Fri, 06 Jun 2025 20:33:16 GMT</pubDate><content:encoded>&lt;p&gt;Today I learned the quote&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The people who are crazy enough to think they can change the world are the ones who do&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;which is typically attributed to Steve Jobs was likely written by advertising copywriters at TBWA\Chiat\Day (the agency that created the campaign) rather than by Jobs himself&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;There were a ton of Cursor issues today.
I also saw 429s all day on Bedrock in us-west-2.&lt;/p&gt;
&lt;p&gt;I know Cursor just launched their 1.0 and I also heard Anthropic cut Windsurf’s access to Claude models and forced them to scramble to get Claude capacity via 3rd parties.&lt;/p&gt;
&lt;p&gt;I wonder if Cursor’s &lt;em&gt;and&lt;/em&gt; AWS’s problems were the thundering herd of developers coming to them after Anthropic cutoff and Windsurf’s access post-OpenAI acquisition.&lt;/p&gt;
&lt;p&gt;And as I write these words, I just received an email at 6pm PT from Cursor about their 1.0 launch.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;alt text&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;754&quot; height=&quot;246&quot; src=&quot;/_astro/image.kE3x3y7A_ZSigoN.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Not exactly hype if you are burying the launch email at dinner on a Friday.&lt;/p&gt;
&lt;p&gt;This is all speculation — I have no inside information.&lt;/p&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;&lt;a class=&quot;heading-link-wrapper&quot; href=&quot;#footnote-label&quot;&gt;Footnotes&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://www.forbes.com/sites/onmarketing/2011/12/14/the-real-story-behind-apples-think-different-campaign/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://www.forbes.com/sites/onmarketing/2011/12/14/the-real-story-behind-apples-think-different-campaign/&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-05-28</title><link>https://www.danielcorin.com/logs/2025/05/28/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/05/28/</guid><description>2025-05-28</description><pubDate>Wed, 28 May 2025 19:40:24 GMT</pubDate><content:encoded>&lt;p&gt;I’m working on a macOS app that I use daily.
However, I also to development on it pretty much daily.
It requires several macOS permissions.
However, I was running into issues where the app had the same name but couldn’t share permissions.
To switch between the two, I had to remove and re-add the permissions.&lt;/p&gt;
&lt;p&gt;I gave Claude Sonnet 4 my problem and it walked my through to a solution without a hitch.
I gave it screenshots as I made progress and it gave me the next steps or considerations to make if there were several possible paths forward.&lt;/p&gt;
&lt;p&gt;Now my Xcode build and production builds of the app can share the same permission and everything works smoothly.&lt;/p&gt;
&lt;p&gt;This took maybe 20 minutes.
I’m very happy with the results.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-05-25</title><link>https://www.danielcorin.com/logs/2025/05/25/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/05/25/</guid><description>2025-05-25</description><pubDate>Sun, 25 May 2025 15:26:50 GMT</pubDate><content:encoded>&lt;p&gt;I setup a Cloudflare tunnel so I can serve local sites on a public domain for easy testing on a real mobile device.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-05-23</title><link>https://www.danielcorin.com/logs/2025/05/23/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/05/23/</guid><description>2025-05-23</description><pubDate>Fri, 23 May 2025 09:45:03 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been keeping screenshots of projects as I’ve been working on them.
Looking back through the progress is gratifying and motivating.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-05-12</title><link>https://www.danielcorin.com/logs/2025/05/12/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/05/12/</guid><description>2025-05-12</description><pubDate>Mon, 12 May 2025 18:25:40 GMT</pubDate><content:encoded>&lt;p&gt;I built a RSS/JSON feed on top of Apple Notes.
I thought it would be a convenient way to programmatically read and create actions based off the content in Notes.
I think the Python wrapper on top of AppleScript that I was using ended up being a bit too slow for this to be practical.
It was taking ~19s to load a feed of ~70 notes.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-05-09</title><link>https://www.danielcorin.com/logs/2025/05/09/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/05/09/</guid><description>2025-05-09</description><pubDate>Fri, 09 May 2025 16:26:24 GMT</pubDate><content:encoded>&lt;p&gt;Chatting with a friend today and we were discussing easily deployable web apps, not tied to any particular build tool or framework.
Aspirationally, just using a simple vanilla JS, HTML, and CSS stack.&lt;/p&gt;
&lt;p&gt;LLMs are good at building with this stack and deploying them is a matter of hosting them as static assets.
Generally, we don’t build with this stack because as things get more complicated, the codebase struggles to scale to the needs of the project.
Or at least this is the conventional wisdom.&lt;/p&gt;
&lt;p&gt;So, for me what came to mind was a random repo I had seen within the last few months showing a sort of anti-framework approach to writing vanilla Javascript to build a web app.
But I looked through all my browser history and bookmark folders and couldn’t find it.
I tried Perplexity, I tried ChatGPT’s search, I tried Google, I tried DuckDuckGo.
I could not find it - and I generally consider myself pretty good at finding things around the web.&lt;/p&gt;
&lt;p&gt;And then I tried Exa.
I had initially misremembered the repo somehow involving Elm inspiration, but when I ran the following query, I actually found it!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;no dependency vanilla javascript approach to building webapps&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://exa.ai/search?q=no+dependency+vanilla+javascript+approach+to+building+webapps&amp;#x26;filters=%7B%22numResults%22%3A20%2C%22domainFilterType%22%3A%22include%22%2C%22type%22%3A%22auto%22%2C%22text%22%3A%22true%22%2C%22density%22%3A%22compact%22%2C%22useAutoprompt%22%3Atrue%7D&amp;#x26;resolvedSearchType=neural&amp;#x26;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Search link&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The repo in question was this one: &lt;a href=&quot;https://github.com/matthewp/views-the-hard-way?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://github.com/matthewp/views-the-hard-way&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;I tried to make a 4 player pong game with this approach and Sonnet.
Then again with Gemini 2.5 Pro, which one-shotted it, but didn’t really use the approach and opted to use a &lt;code&gt;canvas&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;We should be open sourcing our system prompts in a more consistent way.
&lt;code&gt;system_prompts&lt;/code&gt;, &lt;code&gt;llm_templates&lt;/code&gt; — it feels like there is something here.
Maybe more personal than &lt;a href=&quot;https://github.com/danielmiessler/fabric?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;fabric&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
But also, maybe I need to use &lt;code&gt;fabric&lt;/code&gt; more…&lt;/p&gt;
&lt;p&gt;But the reason I was thinking this:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;permissions&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;allow&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&quot;Bash(mkdir:*)&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&quot;Bash(ls:*)&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;deny&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;{  &amp;#x22;permissions&amp;#x22;: {    &amp;#x22;allow&amp;#x22;: [&amp;#x22;Bash(mkdir:*)&amp;#x22;, &amp;#x22;Bash(ls:*)&amp;#x22;],    &amp;#x22;deny&amp;#x22;: []  }}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I’m going to need to bring these (or whatever equivalent is for whatever agent I am using) around with me.
I need to have different versions of them for different types of systems and, of course, for different projects.&lt;/p&gt;
&lt;p&gt;I haven’t read any spec of this file, but let’s note the apparent structure:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;Bash(ls:*)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;Bash(ls:*)&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I’ve allowlisted all inputs to the &lt;code&gt;Bash&lt;/code&gt; tool whose commands are &lt;code&gt;ls&lt;/code&gt; and &lt;code&gt;mkdir&lt;/code&gt; and match &lt;code&gt;*&lt;/code&gt;.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-05-08</title><link>https://www.danielcorin.com/logs/2025/05/08/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/05/08/</guid><description>2025-05-08</description><pubDate>Thu, 08 May 2025 22:04:08 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;I definitely felt I think writing was a much more angsty process for me in the past. Maybe I’ve just gotten better at it over time or just found my own coping skills. I wouldn’t attribute all this to LLMs, but I think having a partner now, it’s like I actually don’t feel like I’m solitary anymore.&lt;/p&gt;
&lt;p&gt;When I’m getting stuck on stuff, I actually have someone I can talk to and whatever I throw at them, I don’t have to give them all the content. I can just throw things and we go back and forth. Just that of not being a solo writer anymore, but having a collaborator is I think a really huge change for a lot of people.&lt;/p&gt;
&lt;p&gt;— AI and I: Jhana Meditation Silenced Her Mind—And Changed Her View On AI | Nadia Asparouhova, May 7, 2025&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://podcasts.apple.com/us/podcast/ai-and-i/id1719789201?i=1000706680432&amp;#x26;r=2380&amp;#x26;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Source&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;So how much faster are your features shipping because you’re using these tools. So that might be something like the time between first commit and when your PR is merged.&lt;/p&gt;
&lt;p&gt;It’s very tricky to get right. But one of the ones that we’re targeting, the other one that we want to measure more rigorously is the number of features that you wouldn’t have otherwise built. We have a lot of channels where we get customer feedback.&lt;/p&gt;
&lt;p&gt;And one of the patterns that we’ve seen with Claude Code is that sometimes customer support or customer success will post, hey, this app has this bug. And then sometimes 10 minutes later, one of the engineers on that team will be like, Claude Code made a fix for it. And a lot of the situations when you ping them and you’re like, hey, that was really cool, they were like, yeah, without Claude Code, I probably wouldn’t have done that because it would have been too much of a divergence from what else otherwise going to do.&lt;/p&gt;
&lt;p&gt;— Latent Space: The AI Engineer Podcast: Claude Code: Anthropic’s CLI Agent, May 7, 2025&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://podcasts.apple.com/us/podcast/latent-space-the-ai-engineer-podcast/id1674008350?i=1000706727093&amp;#x26;r=2380&amp;#x26;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Source&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-04-27</title><link>https://www.danielcorin.com/logs/2025/04/27/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/04/27/</guid><description>2025-04-27</description><pubDate>Mon, 28 Apr 2025 13:28:25 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;We need to understand that things that were considered easy tasks will no longer exist. And what was considered hard tasks will be the new easy.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And what was considered to be impossible tasks are going to be the new hard.&lt;/p&gt;
&lt;p&gt;From &lt;a href=&quot;https://podcasts.apple.com/us/podcast/the-cognitive-revolution-ai-builders-researchers-and/id1669813431?i=1000705067651&amp;#x26;r=489&amp;#x26;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;The Cognitive Revolution&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; | AI Builders, Researchers, and Live Player Analysis: Fiverr Goes All-In on AI: Empowering Creators, Not Replacing Them, with Micha Kaufman, CEO of Fiverr, Apr 26, 2025&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;What have you observed in terms of AI impact on the platform so far? You know, it’s kind of like asking a captain at mid-sea, how is he experiencing the storm?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;From &lt;a href=&quot;https://podcasts.apple.com/us/podcast/the-cognitive-revolution-ai-builders-researchers-and/id1669813431?i=1000705067651&amp;#x26;r=1627&amp;#x26;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;The Cognitive Revolution&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; | AI Builders, Researchers, and Live Player Analysis: Fiverr Goes All-In on AI: Empowering Creators, Not Replacing Them, with Micha Kaufman, CEO of Fiverr, Apr 26, 2025&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-04-26</title><link>https://www.danielcorin.com/logs/2025/04/26/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/04/26/</guid><description>2025-04-26</description><pubDate>Sat, 26 Apr 2025 19:43:03 GMT</pubDate><content:encoded>&lt;p&gt;I’ve said this before, but as the feature set of LLM APIs increases, it becomes harder and harder to not just pick a provider and using their SDK for your use case.
Between tool calling, thinking, streaming, citations, pdf parsing, and more, there is no consistency in the API design across providers.&lt;/p&gt;
&lt;p&gt;This feels like OpenRouter’s moat.
They figure out a way to abstract this as much as possible across model APIs and then I just use them.
LiteLLM as well though I need experiment with it more.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-04-23</title><link>https://www.danielcorin.com/logs/2025/04/23/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/04/23/</guid><description>2025-04-23</description><pubDate>Wed, 23 Apr 2025 08:39:47 GMT</pubDate><content:encoded>&lt;p&gt;When building with agents, prompting the agent to&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Only do X. Do nothing else.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;seems to be required to prevent the agent from being overly eager with its implementation, trying to anticipate what you will want next.
However, the agents are often not reliable enough to do all this work in a single tool loop, so forcing them to keep their scope small is still necessary babysitting.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-04-19</title><link>https://www.danielcorin.com/logs/2025/04/19/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/04/19/</guid><description>2025-04-19</description><pubDate>Sat, 19 Apr 2025 11:27:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;It’s hard to make some simple shit that’s great&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://youtu.be/hOXhJEPVBj4?t=1035&amp;#x26;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Harry Mack - OMA: A Path Of Discovery&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-04-18</title><link>https://www.danielcorin.com/logs/2025/04/18/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/04/18/</guid><description>2025-04-18</description><pubDate>Fri, 18 Apr 2025 18:35:30 GMT</pubDate><content:encoded>&lt;p&gt;Writing software is weird now.
Most engineers I know are using LLM-assisted coding tools in some capacity.
We can debate the pros and cons of whether this practice is a good idea and the impact it’s going to have on us and the software create, but for now, it is a reality.&lt;/p&gt;
&lt;h2 id=&quot;the-hard-parts-remain&quot;&gt;&lt;a class=&quot;heading-link-wrapper&quot; href=&quot;#the-hard-parts-remain&quot;&gt;The hard parts remain&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The parts of software engineering that have gone away are the straightforward parts.
The parts where you scaffold a new CRUD endpoint, add a new database table, or write a mapper between an external and internal representation of some data.
The LLM is usually done with about as fast and you can point it at the problem.
So what does that leave?&lt;/p&gt;
&lt;p&gt;The hard parts.
The time consuming, grueling bugs.
The deep dives into memory leaks.
Really any and everything that the LLM can’t one shot or that you can’t figure out a way to decompose into a series of tasks it can one shot.&lt;/p&gt;
&lt;p&gt;Now that LLMs make so many things easy in software engineering, the hard and confusing parts are the only parts that are left for us humans to do.&lt;/p&gt;
&lt;p&gt;I’ve found this shift to be exhilarating.
It’s also exhausting.
I now spend almost no time on problems I know how to solve.&lt;/p&gt;
&lt;p&gt;If I know what I am doing, I usually can describe to an LLM what I need it to do and it does it.
This means I now spend nearly all of my time somehow out of my depth, stretched.&lt;/p&gt;
&lt;p&gt;I’ve never experimented so much, tried so many new ideas, or built so many toy projects.
I’ve written more prose and software in each of past 2 years individually than the prior 9 combined, mostly just because I’ve done more things, which made me think, which made me write which made me think more.&lt;/p&gt;
&lt;h2 id=&quot;what-i-miss&quot;&gt;&lt;a class=&quot;heading-link-wrapper&quot; href=&quot;#what-i-miss&quot;&gt;What I miss&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Given all this experimentation, I think my one complaint is that I haven’t built up much new competence in any particular programming language.
I’ve become more familiar with frameworks like Next.js, Remix/React Router, Electron and Xcode, but I wouldn’t say I’m particularly comfortable writing Typescript or Swift, especially without an LLM.&lt;/p&gt;
&lt;p&gt;Lately, I’ve worked a lot in Swift, using a combination of Cursor, Windsurf, and Claude Code to build my project.
I’ve barely touched code at all.
I’m deeply involved in the project structure.
I’ve throw out 90%+ of the code the models have generated.
I’ve glanced at a lot of Swift code.&lt;/p&gt;
&lt;p&gt;I know Swift imports augment the namespace.
That &lt;code&gt;HStack&lt;/code&gt;, &lt;code&gt;VStack&lt;/code&gt;, and &lt;code&gt;ZStack&lt;/code&gt; are the primitives of SwiftUI layouts.
I know how to add external dependencies to a Swift project and use them.
But I &lt;em&gt;definitely&lt;/em&gt; don’t know Swift.
I’ve hardly written a line of Swift.&lt;/p&gt;
&lt;p&gt;I haven’t needed to write Swift to accomplish my aims with this project, but I would like to know Swift and I think a better understanding of Swift would help me do a better job building this project.&lt;/p&gt;
&lt;p&gt;But one only has so much time.
For now, I’d rather work on my ideas than dedicate to learning Swift.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-04-14</title><link>https://www.danielcorin.com/logs/2025/04/14/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/04/14/</guid><description>2025-04-14</description><pubDate>Mon, 14 Apr 2025 19:14:13 GMT</pubDate><content:encoded>&lt;p&gt;It seems OpenAI’s naming scheme is now following Apple’s iPod naming scheme&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Today, we’re launching three new models in the API: GPT‑4.1, GPT‑4.1 mini, and GPT‑4.1 nano.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://openai.com/index/gpt-4-1/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://openai.com/index/gpt-4-1/&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;The &lt;a href=&quot;https://playground.openai.com/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;OpenAI playground&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; has been down for me all day with a Cloudflare error.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-04-06</title><link>https://www.danielcorin.com/logs/2025/04/06/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/04/06/</guid><description>2025-04-06</description><pubDate>Sun, 06 Apr 2025 10:14:17 GMT</pubDate><content:encoded>&lt;p&gt;I am working on a macOS app, built in Swift and called Hudson.
I’ve been inspired by the UX of &lt;a href=&quot;https://chorus.sh/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Chorus&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; and the simplicity of &lt;a href=&quot;https://github.com/kevinhermawan/Ollamac?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Ollamac&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
My goal is to build an app that allows me to quickly send prompts to API or local LLMs.
I have most of the core functionality working.
What’s next is to build something like Chorus’ ambient chat UI.&lt;/p&gt;
&lt;p&gt;Having an LLM prompt available via a global hotkey across any model and where my conversation history is stored locally feels like it will address several of my needs.
It’s not that a similar app doesn’t exist, it’s that I know I will want to tweak the UX exactly to my liking.
With LLMs being so good at generating code, this is now a project that will take a week or two rather than a month or two.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-03-30</title><link>https://www.danielcorin.com/logs/2025/03/30/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/03/30/</guid><description>2025-03-30</description><pubDate>Sun, 30 Mar 2025 00:41:10 GMT</pubDate><content:encoded>&lt;p&gt;It’s been a little while since I worked at all on &lt;a href=&quot;https://github.com/danielcorin/delta?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Delta&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; but I still have the itch to have access to the source of the tool that becomes my daily LLM driver.
I recently setup &lt;a href=&quot;https://chorus.sh/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Chorus&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; which advertises itself as a tool to chat with multiple models at once.
This isn’t really a main use case for me but besides not being open source, it’s basically everything I want.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Clean interface&lt;/li&gt;
&lt;li&gt;Text streaming&lt;/li&gt;
&lt;li&gt;Use my own API keys&lt;/li&gt;
&lt;li&gt;Local model support (ollama, LM Studio)&lt;/li&gt;
&lt;li&gt;Broad model API support&lt;/li&gt;
&lt;li&gt;Mini-mode triggered by a hotkey&lt;/li&gt;
&lt;li&gt;Conversation history&lt;/li&gt;
&lt;li&gt;Image support&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I don’t love that their cloud is involved with the service.
I understand this is required for them to make money but I can’t see myself using a cloud product for this in the long term, especially for sending images of my system.
I feel like there is too much potential for things to go wrong.&lt;/p&gt;
&lt;p&gt;Nevertheless, this is great work in my opinion.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Apparently, I’ve opened up pandora’s box.
There are &lt;em&gt;so many&lt;/em&gt; tool like this with a variety of feature sets and tons of overlap.
I’ll need to wade through and see what I can find.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I think I may need to build this for myself.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-03-25</title><link>https://www.danielcorin.com/logs/2025/03/25/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/03/25/</guid><description>2025-03-25</description><pubDate>Tue, 25 Mar 2025 20:54:39 GMT</pubDate><content:encoded>&lt;p&gt;OpenAI shipped a new version of 4o that can generate images.
I tried generating images in ChatGPT and it popped open a side chat and edit tool I hadn’t seen before.
I got rate limited before I could try much.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I read &lt;a href=&quot;https://arxiv.org/pdf/2502.18600?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;this paper&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; on using “chain of draft”, a more compressed version of chain of thought to achieve similar results to chain of thought reasoning.
The main unlock with this approach is a reduction in inference latency and cost due to few tokens needed to achieve similar performance.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-03-15</title><link>https://www.danielcorin.com/logs/2025/03/15/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/03/15/</guid><description>2025-03-15</description><pubDate>Sat, 15 Mar 2025 15:16:14 GMT</pubDate><content:encoded>&lt;p&gt;I mostly browse social media apps like LinkedIn and Bluesky on my phone.
Recently, LinkedIn started surfacing a popup prompting me to download the app after a bit of scrolling the browser.
This prompts me to close LinkedIn entirely.
I’m curious if my behavior is unusual, or if they’re getting enough conversions to app downloads for it to be worth it.
It’s certainly caused me to use LinkedIn less which I am guessing is not the point.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-03-09</title><link>https://www.danielcorin.com/logs/2025/03/09/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/03/09/</guid><description>2025-03-09</description><pubDate>Sun, 09 Mar 2025 16:45:10 GMT</pubDate><content:encoded>&lt;p&gt;So much of the world is outside of what can be specified.
&lt;a href=&quot;https://podcasts.apple.com/us/podcast/ai-and-i/id1719789201?i=1000696284548&amp;#x26;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://podcasts.apple.com/us/podcast/ai-and-i/id1719789201?i=1000696284548&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-03-07</title><link>https://www.danielcorin.com/logs/2025/03/07/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/03/07/</guid><description>2025-03-07</description><pubDate>Fri, 07 Mar 2025 19:01:04 GMT</pubDate><content:encoded>&lt;p&gt;I feel like &lt;code&gt;.cursorrules&lt;/code&gt; are finally starting to snap into place for me.
I’ve made many messes in Cursor, but once I exhaust what is possible without structure, if I want to continue, I need to create a structure.
There’s nothing like a painful refactor to reinforce how and why you should define conventions for your codebase.
Usually, when diving into a new idea, I don’t love to think about this stuff, but it’s always time well spent.
With this in mind, my plan is to try and build rules and structure as I go rather than pushing my projects to the limit then needing to clean up.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-03-05</title><link>https://www.danielcorin.com/logs/2025/03/05/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/03/05/</guid><description>2025-03-05</description><pubDate>Wed, 05 Mar 2025 21:23:48 GMT</pubDate><content:encoded>&lt;p&gt;Stumbled upon the &lt;a href=&quot;https://github.com/pmndrs/react-three-fiber?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;react-three-fiber&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; library today and now I am building a game where a lander can fly around a mini-solar system.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-03-04</title><link>https://www.danielcorin.com/logs/2025/03/04/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/03/04/</guid><description>2025-03-04</description><pubDate>Tue, 04 Mar 2025 18:44:46 GMT</pubDate><content:encoded>&lt;p&gt;Learned more about the post-training phase of fine-tuning LLMs and how the model initially goes through a pre-training phase.
From there, it is fine-tuned to contribute to a token stream with a human user, using prompt tokens to demarcate whether a message was written by the user or the assistant.&lt;/p&gt;
&lt;p&gt;For example&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;&amp;#x3C;|im_start|&gt;user&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Hi there!&amp;#x3C;|im_end|&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;&amp;#x3C;|im_start|&gt;assistant&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Nice to meet you!&amp;#x3C;|im_end|&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;&amp;#x3C;|im_start|&gt;user&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Can I ask a question?&amp;#x3C;|im_end|&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;&lt;|im_start|&gt;userHi there!&lt;|im_end|&gt;&lt;|im_start|&gt;assistantNice to meet you!&lt;|im_end|&gt;&lt;|im_start|&gt;userCan I ask a question?&lt;|im_end|&gt;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Finally, labs have continued to improve model benchmark performance using further fine-tuning, like RLHF, where humans pick the best of a set of responses from the model, and the model is further fine-tuned on this data.&lt;/p&gt;
&lt;p&gt;Progress is slow, but I feel like I am finally beginning to develop more of a mental model of what is happening in model training.
When I &lt;a href=&quot;/til/fastai/lesson4-blog-post-imitator&quot;&gt;trained my own language model&lt;/a&gt; on the posts from the blog, I understood that I was training a completion model but fully appreciate the additional steps I would need to shape that “base” model into a chat model myself.
Now, I feel I have a better understanding of how that process works.&lt;/p&gt;
&lt;p&gt;This brings me back to a question I have been asking for a while: what happened to the completion models?
Why do I have to use a model fine-tuned on &lt;code&gt;&amp;#x3C;|im_start|&gt;&lt;/code&gt; and &lt;code&gt;&amp;#x3C;|im_end|&gt;&lt;/code&gt; tokens?&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-03-02</title><link>https://www.danielcorin.com/logs/2025/03/02/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/03/02/</guid><description>2025-03-02</description><pubDate>Sun, 02 Mar 2025 17:43:14 GMT</pubDate><content:encoded>&lt;p&gt;I found an interesting library for building 3D games specifically “built for Cursor” called &lt;a href=&quot;https://github.com/instructa/viber3d/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;viber3d&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
I assume the name is a reference to “vibe coding”.
This is the first library I have seen ship a starter scaffold &lt;a href=&quot;https://github.com/instructa/viber3d/tree/main/packages/viber3d-starter/.cursor/rules?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;with Cursor rules&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
This is an interesting development in how frameworks are being built now.
Since language models don’t know about brand new frameworks, frameworks are shipping with content that will aid language models in using them, since coding with models seems to be an increasingly popular way to code.&lt;/p&gt;
&lt;p&gt;Hopefully, approaches like this can be part of how we prevent &lt;a href=&quot;https://vale.rocks/posts/ai-is-stifling-tech-adoption?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;AI from stifling tech adoption&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-02-28</title><link>https://www.danielcorin.com/logs/2025/02/28/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/02/28/</guid><description>2025-02-28</description><pubDate>Fri, 28 Feb 2025 17:59:00 GMT</pubDate><content:encoded>&lt;p&gt;I’ve built a few prototypes with the &lt;a href=&quot;https://platform.openai.com/docs/guides/speech-to-text?lang=javascript&amp;#x26;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;OpenAI voice to text API&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; with code largely written using Cursor.
This has been fast and easy to incorporate into Next.js apps.
I can add an audio-recording-to-text feature to any app in a couple of minutes, ready for use in a production environment.&lt;/p&gt;
&lt;p&gt;There are several other options for voice to text as well.
MacOS has a built-in voice to text feature and there are several other Whisper wrappers available, some that can run locally.
Talking is much faster than typing and allows me to capture raw thoughts faster, which I can then refine later.
LLMs are also quite good at structuring these raw thoughts into a more refined form that I can then edit.&lt;/p&gt;
&lt;p&gt;This is not to replace writing, but actually to make it easier for me to write more frequently.
There are lots of times when I have an idea that I want to capture and return to later.
The more I can capture when it’s top of mind, the more likely I can come back later and do something with it.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-02-22</title><link>https://www.danielcorin.com/logs/2025/02/22/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/02/22/</guid><description>2025-02-22</description><pubDate>Sat, 22 Feb 2025 21:53:56 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;I’d like to see authors being surprised by what readers end up learning from their material.
Because the author is not just sending out something static.
They’re sending out a program which is capable of emergent behavior.
So the reader will be able to try out different things and discover things the author hadn’t intended.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://youtu.be/K89W4WyiRFI?feature=shared&amp;#x26;t=2550&amp;#x26;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Bret Victor, The Humane Representation of Thought, Oct 2014&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-02-20</title><link>https://www.danielcorin.com/logs/2025/02/20/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/02/20/</guid><description>2025-02-20</description><pubDate>Thu, 20 Feb 2025 21:04:24 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been playing around with this idea I am calling “idea projection”.
The concept is that you can take raw ideas, logs or notes (like all the logs on my site, for example) and create projections of them into different forms using a model and a target structure.&lt;/p&gt;
&lt;p&gt;The prompting approach looks something like this&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;&amp;#x3C;files&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;{files_xml}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;&amp;#x3C;/files&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;&amp;#x3C;structure&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;{structure}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;&amp;#x3C;/structure&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;&amp;#x3C;instructions&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Given the above files, your job is to create a new document that structures the contents of the files in adherence with the &amp;#x3C;structure&gt;, maintaining the original voice and phrasing as much as possible.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Output the complete document content directly, without any replacement blocks.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;&amp;#x3C;/instructions&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;&lt;files&gt;{files_xml}&lt;/files&gt;&lt;structure&gt;{structure}&lt;/structure&gt;&lt;instructions&gt;Given the above files, your job is to create a new document that structures the contents of the files in adherence with the &lt;structure&gt;, maintaining the original voice and phrasing as much as possible.Output the complete document content directly, without any replacement blocks.&lt;/instructions&gt;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;What this allows you to do is give the model a ton of files and have it transform that input content into the target structure.
This approach can work for everything from&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Summarize the main areas of focus of the logs by month&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;to&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;List topics, areas and disciplines I haven’t written about but might find interesting&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Another way to think about “projections” is as indexes, like in a database.
They provide another way to look at the same data, and they can and should be updated whenever new raw data is added.&lt;/p&gt;
&lt;p&gt;With this approach, you can update and maintain many different projections of the same source of truth data.
You could generate a PRD, executive summary and a list of new ideas &lt;em&gt;not&lt;/em&gt; included in the source data, all from the same data.
When updates are made to the source data, run the inferences again to generate new instances of the projections or “indexes”.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-02-18</title><link>https://www.danielcorin.com/logs/2025/02/18/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/02/18/</guid><description>2025-02-18</description><pubDate>Tue, 18 Feb 2025 19:40:34 GMT</pubDate><content:encoded>&lt;p&gt;A &lt;a href=&quot;https://harper.blog/2025/02/16/my-llm-codegen-workflow-atm/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;great read&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; by Harper about writing code with LLMs.&lt;/p&gt;
&lt;p&gt;One passage that particularly resonated with me&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;When I describe this process to people I say “you have to aggressively keep track of what’s going on because you can easily get ahead of yourself.”&lt;/p&gt;
&lt;p&gt;For some reason I say “over my skies” a lot when talking about LLMs. I don’t know why. It resonates with me. Maybe it’s because it is beautiful smooth powder skiing, and then all of a sudden you are like “WHAT THE FUCK IS GOING ON!,” and are completely lost and suddenly fall off a cliff.&lt;/p&gt;
&lt;/blockquote&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-02-17</title><link>https://www.danielcorin.com/logs/2025/02/17/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/02/17/</guid><description>2025-02-17</description><pubDate>Mon, 17 Feb 2025 21:14:44 GMT</pubDate><content:encoded>&lt;p&gt;I’ve long been a skeptic but I think &lt;a href=&quot;https://github.com/block/goose?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;goose&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; may be one of the best LLM tools for coding.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-02-14</title><link>https://www.danielcorin.com/logs/2025/02/14/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/02/14/</guid><description>2025-02-14</description><pubDate>Fri, 14 Feb 2025 17:19:28 GMT</pubDate><content:encoded>&lt;p&gt;I read Declan’s &lt;a href=&quot;https://vale.rocks/posts/ai-is-stifling-tech-adoption?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;article&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; on new technology adoption and the problems posed by models.&lt;/p&gt;
&lt;p&gt;I haven’t had as much trouble as it seems Declan has in getting models to write vanilla js, but I share the concern about new technology/framework adoption and how we’ll solve this problem if models end up authoring most of the code that gets written.&lt;/p&gt;
&lt;p&gt;Maybe projects like llms.txt&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt; and similar can help by providing context to models on how to use a technology, but finding a way to do this is now a meaningful hurdle to using something new and the slop filled web seems to be making it harder to push forward the knowledge cutoff of the foundational models.&lt;/p&gt;
&lt;p&gt;With regard to React/Tailwind specifically, I’m actually unsure if labs’ preference for this stack is a result of models being good at wielding it due to their training or that models themselves (without a more complex architecture) are just better at writing and styling frontends with the structure and the style colocated in the same parts of the file as compared to different parts (e.g. css at the top, HTML/[T|J]SX and style class names at the bottom) or even two different files.
I wrote about this as well &lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot; id=&quot;user-content-fnref-2&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;Tools like Cursor’s Composer agent are improving at multi-file edits, so if this limitation is genuine, it seems like it won’t remain long-lived.&lt;/p&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;&lt;a class=&quot;heading-link-wrapper&quot; href=&quot;#footnote-label&quot;&gt;Footnotes&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://llmstxt.org/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://llmstxt.org/&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-2&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://www.thoughteddies.com/notes/2025/llm-tailwind-react?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://www.thoughteddies.com/notes/2025/llm-tailwind-react&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; &lt;a href=&quot;#user-content-fnref-2&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-02-13</title><link>https://www.danielcorin.com/logs/2025/02/13/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/02/13/</guid><description>2025-02-13</description><pubDate>Thu, 13 Feb 2025 17:57:57 GMT</pubDate><content:encoded>&lt;p&gt;Two, random interesting learnings from &lt;a href=&quot;https://jvns.ca/terminal-survey/results-bsky?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Julia’s survey results&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;:&lt;/p&gt;
&lt;h2 id=&quot;the-first&quot;&gt;&lt;a class=&quot;heading-link-wrapper&quot; href=&quot;#the-first&quot;&gt;The first&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;kbd&gt;ctrl&lt;/kbd&gt; + &lt;kbd&gt;l&lt;/kbd&gt; clears the terminal.
I used to rely on &lt;kbd&gt;cmd&lt;/kbd&gt; + &lt;kbd&gt;k&lt;/kbd&gt; for this but when using the embedded terminal in Cursor, it opens a completion panel so I had been briefly stuck typing &lt;code&gt;clear&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;the-second&quot;&gt;&lt;a class=&quot;heading-link-wrapper&quot; href=&quot;#the-second&quot;&gt;The second&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;history&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;history 0&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;which gets the all time shell command history.
This is useful for &lt;code&gt;history 0 | grep &amp;#x3C;query&gt;&lt;/code&gt;.
I use &lt;code&gt;fzf&lt;/code&gt; and &lt;kbd&gt;ctrl&lt;/kbd&gt; + &lt;kbd&gt;r&lt;/kbd&gt; to search through the history typically but this is still nice to know.
This had be an edge case I never quite resolved in my switch to zsh.
I was used to getting full history in bash with &lt;code&gt;history&lt;/code&gt;.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-02-12</title><link>https://www.danielcorin.com/logs/2025/02/12/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/02/12/</guid><description>2025-02-12</description><pubDate>Wed, 12 Feb 2025 21:11:50 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been doing a lot of &lt;a href=&quot;https://x.com/karpathy/status/1886192184808149383?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;vibe coding&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; lately (though I only recently learned there was a term for this).
My most recent projects include a Krea-like image editor.
I am currently working on adding inpainting using a mask and prompt.
I am also developing a tool that captures raw thoughts and processes them through an LLM, following some structure to summarize, deduplicate and consolidate.
The general goal is to synthesize and organize ideas for a project, article, or just to help with understanding where my ideas are leading.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-02-03</title><link>https://www.danielcorin.com/logs/2025/02/03/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/02/03/</guid><description>2025-02-03</description><pubDate>Mon, 03 Feb 2025 18:07:33 GMT</pubDate><content:encoded>&lt;p&gt;After more thinking than I really expected I would do about such a thing, I open-sourced &lt;a href=&quot;https://github.com/danielcorin/delta?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Delta&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; today.
I still really like the concept of conversation branching for ideation, thought partnership and rabbit holing with LLMs.
There are several folks who are working on closed-source, cloud-hosted versions of similar ideas.
I don’t have the bandwidth to pursue the project further right now, but if I can empower someone with the time and interest, that would be a win.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-02-01</title><link>https://www.danielcorin.com/logs/2025/02/01/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/02/01/</guid><description>2025-02-01</description><pubDate>Sat, 01 Feb 2025 14:03:17 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been working on and off on a very simple, Krea-inspired image editor in the browser that can turn sketches into images using Flux Canny.
I’ve tried a few separate times to prompt models (Sonnet, o1, r1) to add an undo-redo stack to my project.
All have failed.
It’s possible I am under specifying the ask but interesting to identify this as a particular area where models don’t seem to do very well.&lt;/p&gt;
&lt;p&gt;I’ve continued pursing building this feature with a model more out of interest at this point, since I don’t &lt;em&gt;really&lt;/em&gt; need it.
It provides a good test for new models when they are released (or maybe my code is irreparably broken).
I don’t have desire to debug the problem so maybe I’ll find out another time.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-01-29</title><link>https://www.danielcorin.com/logs/2025/01/29/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/01/29/</guid><description>2025-01-29</description><pubDate>Wed, 29 Jan 2025 20:33:21 GMT</pubDate><content:encoded>&lt;p&gt;I spent some time building an iOS app today, all with Cursor.
I’ve never really written Swift before (well apparently I tried it &lt;a href=&quot;logs/2024/01/07&quot;&gt;a year ago&lt;/a&gt;).
Since this was pre-Sonnet, I probably wasn’t doing a ton of code generation at the time.
It will be interesting to see how far I can get.&lt;/p&gt;
&lt;p&gt;I worked through a bit of setup to mount an R2 bucket to the local filesystem with &lt;code&gt;rclone&lt;/code&gt; but haven’t taken the final step to modify my system security permissions yet.&lt;/p&gt;
&lt;p&gt;I one-shotted a simple post recommendation section for this site with Sonnet/Cursor.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-01-22</title><link>https://www.danielcorin.com/logs/2025/01/22/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/01/22/</guid><description>2025-01-22</description><pubDate>Wed, 22 Jan 2025 17:36:32 GMT</pubDate><content:encoded>&lt;p&gt;Played through David Peter’s fun code puzzle: &lt;a href=&quot;https://shark.fish/curiosity/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://shark.fish/curiosity/&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-01-21</title><link>https://www.danielcorin.com/logs/2025/01/21/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/01/21/</guid><description>2025-01-21</description><pubDate>Tue, 21 Jan 2025 20:55:01 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;The agricultural revolution certainly enlarged the sum total of food at this disposal of humankind, but the extra food did not translate into better diet or more leisure. Rather, it translated into population explosions and pampered elites.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Yuval Noah Harari, Sapiens&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-01-17</title><link>https://www.danielcorin.com/logs/2025/01/17/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/01/17/</guid><description>2025-01-17</description><pubDate>Fri, 17 Jan 2025 19:25:09 GMT</pubDate><content:encoded>&lt;p&gt;I spent some time looking for low latency, image-to-image APIs.
I look around a fair bit and think I’ve settled on &lt;a href=&quot;https://www.together.ai/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;together.ai&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;My main needs are very similar to &lt;a href=&quot;https://www.krea.ai/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Krea&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#x3C; 1 sec latency&lt;/li&gt;
&lt;li&gt;ability to specify the starting a prompt &lt;em&gt;and&lt;/em&gt; image&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I’m still validating this is the case but latency seems nearly there and I’m still trying to confirm how to make a start image work.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-01-15</title><link>https://www.danielcorin.com/logs/2025/01/15/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/01/15/</guid><description>2025-01-15</description><pubDate>Wed, 15 Jan 2025 18:20:47 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been playing around a bunch with image generation models/tools, notably &lt;a href=&quot;https://www.recraft.ai/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Recraft&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; and &lt;a href=&quot;https://www.krea.ai/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Krea&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
Recently, I’ve been trying to use these tools to design a logo and favicon for &lt;a href=&quot;https://www.thoughteddies.com/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Thought Eddies&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;I’ve also been experimenting with using D3 to build visuals for LLM chat conversation branching.
It’s harder to work with than &lt;a href=&quot;https://reactflow.dev/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;React Flow&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, unsurprisingly since it is a much more general tool/framework.
I am aiming to create a few different interactive visuals to showcase a few different ideas I have for working with LLMs on a canvas.
Maybe I will end up going back to React Flow if I keep having challenges with D3.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2025-01-01</title><link>https://www.danielcorin.com/logs/2025/01/01/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2025/01/01/</guid><description>2025-01-01</description><pubDate>Wed, 01 Jan 2025 20:54:58 GMT</pubDate><content:encoded>&lt;p&gt;I tried two separate ways to configure &lt;a href=&quot;https://www.cursor.com/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Cursor&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; to point to an alternative OpenAI compliant API endpoint by modifying the “OpenAI API Key &gt; Override OpenAI Base URL” section of the Cursor settings.&lt;/p&gt;
&lt;p&gt;My first attempt was with Deepseek, using &lt;a href=&quot;/til/llm/openai-compatible-apis&quot;&gt;learnings&lt;/a&gt; from wiring that up to &lt;code&gt;llm&lt;/code&gt;.
I got to the point where Cursor failed to validate the API endpoint (don’t forget to save the url override), but the &lt;code&gt;curl&lt;/code&gt; command it output for me to check manually worked if I switched the model to &lt;code&gt;deepseek-chat&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;https://api.deepseek.com/v1/chat/completions&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-H&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;Content-Type: application/json&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-H&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;Authorization: Bearer &amp;#x3C;token&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-d&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&apos;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;messages&quot;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;role&quot;: &quot;system&quot;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;content&quot;: &quot;You are a test assistant.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;role&quot;: &quot;user&quot;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;content&quot;: &quot;Testing. Just say hi and nothing else.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;model&quot;: &quot;deepseek-chat&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;}&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;curl https://api.deepseek.com/v1/chat/completions -H &amp;#x22;Content-Type: application/json&amp;#x22; -H &amp;#x22;Authorization: Bearer &lt;token&gt;&amp;#x22; -d &amp;#x27;{  &amp;#x22;messages&amp;#x22;: [    {      &amp;#x22;role&amp;#x22;: &amp;#x22;system&amp;#x22;,      &amp;#x22;content&amp;#x22;: &amp;#x22;You are a test assistant.&amp;#x22;    },    {      &amp;#x22;role&amp;#x22;: &amp;#x22;user&amp;#x22;,      &amp;#x22;content&amp;#x22;: &amp;#x22;Testing. Just say hi and nothing else.&amp;#x22;    }  ],  &amp;#x22;model&amp;#x22;: &amp;#x22;deepseek-chat&amp;#x22;}&amp;#x27;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&quot;c86ef579-61b8-4941-b2be-185385fe690c&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;object&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&quot;chat.completion&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;created&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;1735786101&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;model&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&quot;deepseek-chat&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;choices&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:[{&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;message&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:{&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;role&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&quot;assistant&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;content&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&quot;Hi.&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;},&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;logprobs&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;finish_reason&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&quot;stop&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;}],&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;usage&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:{&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;prompt_tokens&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;18&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;completion_tokens&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;total_tokens&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;prompt_cache_hit_tokens&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;prompt_cache_miss_tokens&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;18&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;},&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;system_fingerprint&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&quot;fp_f1afce2943&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;}%&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;{&amp;#x22;id&amp;#x22;:&amp;#x22;c86ef579-61b8-4941-b2be-185385fe690c&amp;#x22;,&amp;#x22;object&amp;#x22;:&amp;#x22;chat.completion&amp;#x22;,&amp;#x22;created&amp;#x22;:1735786101,&amp;#x22;model&amp;#x22;:&amp;#x22;deepseek-chat&amp;#x22;,&amp;#x22;choices&amp;#x22;:[{&amp;#x22;index&amp;#x22;:0,&amp;#x22;message&amp;#x22;:{&amp;#x22;role&amp;#x22;:&amp;#x22;assistant&amp;#x22;,&amp;#x22;content&amp;#x22;:&amp;#x22;Hi.&amp;#x22;},&amp;#x22;logprobs&amp;#x22;:null,&amp;#x22;finish_reason&amp;#x22;:&amp;#x22;stop&amp;#x22;}],&amp;#x22;usage&amp;#x22;:{&amp;#x22;prompt_tokens&amp;#x22;:18,&amp;#x22;completion_tokens&amp;#x22;:2,&amp;#x22;total_tokens&amp;#x22;:20,&amp;#x22;prompt_cache_hit_tokens&amp;#x22;:0,&amp;#x22;prompt_cache_miss_tokens&amp;#x22;:18},&amp;#x22;system_fingerprint&amp;#x22;:&amp;#x22;fp_f1afce2943&amp;#x22;}%&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Despite all this working, when I tried chatting with the &lt;code&gt;deepseek-chat&lt;/code&gt; model in Cursor, I got this error&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;error&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;message&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&quot;Authentication Fails (no such user)&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&quot;authentication_error&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;param&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;code&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&quot;invalid_request_error&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;{  &amp;#x22;error&amp;#x22;: {    &amp;#x22;message&amp;#x22;: &amp;#x22;Authentication Fails (no such user)&amp;#x22;,    &amp;#x22;type&amp;#x22;: &amp;#x22;authentication_error&amp;#x22;,    &amp;#x22;param&amp;#x22;: null,    &amp;#x22;code&amp;#x22;: &amp;#x22;invalid_request_error&amp;#x22;  }}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Next, I tried &lt;a href=&quot;https://openrouter.ai/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;OpenRouter&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; with a similar approach using the base url &lt;code&gt;https://openrouter.ai/api/v1&lt;/code&gt;.
Cursor was able to validate the endpoint and I could chat with &lt;code&gt;openai/gpt-4o-mini&lt;/code&gt; in the chat without issue.
Since I didn’t have credits loaded up to use other OpenRouter models, I did get a “Connection Failed” error from the Cursor chat.
Switching to &lt;code&gt;openai/gpt-4o-mini&lt;/code&gt;, which OpenRouter provides some free tokens for, fixed this issue.&lt;/p&gt;
&lt;p&gt;Deepseek V3 (&lt;code&gt;deepseek-chat&lt;/code&gt;) is &lt;a href=&quot;https://openrouter.ai/deepseek/deepseek-chat/versions?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;available through OpenRouter&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, but it would be nice to understand what is going wrong with my Cursor config here.&lt;/p&gt;
&lt;p&gt;OpenRouter also provides some &lt;code&gt;deepseek/deepseek-chat&lt;/code&gt; tokens for free, so in the end I was able to run DeepSeek V3 in Cursor, which has been the main driver behind much of these efforts.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-12-19</title><link>https://www.danielcorin.com/logs/2024/12/19/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/12/19/</guid><description>2024-12-19</description><pubDate>Thu, 19 Dec 2024 16:58:07 GMT</pubDate><content:encoded>&lt;div class=&quot;bluesky-post-container not-content&quot; data-astro-cid-tjvr7lcb&gt; &lt;div class=&quot;post-content&quot; data-astro-cid-tjvr7lcb&gt; &lt;div class=&quot;post-header&quot; data-astro-cid-tjvr7lcb&gt; &lt;a class=&quot;avatar medium&quot; href=&quot;https://bsky.app/profile/danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer nofollow&quot; data-astro-cid-ppbrauon&gt;&lt;img src=&quot;https://cdn.bsky.app/img/avatar/plain/did:plc:mracrip6qu3vw46nbewg44sm/bafkreif6ag5kpmf4z7n3eylf4kxn7bqliwvwkbewfkcmahngkzj2fejvdm&quot; alt=&quot;Dan Corin&quot; data-astro-cid-ppbrauon&gt;&lt;/a&gt; &lt;div class=&quot;user-info&quot; data-astro-cid-tjvr7lcb&gt; &lt;a href=&quot;https://bsky.app/profile/danielcorin.com&quot; class=&quot;display-name&quot; data-astro-cid-tjvr7lcb&gt;Dan Corin&lt;/a&gt; &lt;a href=&quot;https://bsky.app/profile/danielcorin.com&quot; class=&quot;username&quot; data-astro-cid-tjvr7lcb&gt;@danielcorin.com&lt;/a&gt; &lt;/div&gt; &lt;a href=&quot;https://bsky.app/profile/did:plc:mracrip6qu3vw46nbewg44sm/post/3ldosi76gts2n&quot; class=&quot;logo-link&quot; data-astro-cid-tjvr7lcb&gt; &lt;img src=&quot;data:image/svg+xml,%3csvg%20xmlns=&apos;http://www.w3.org/2000/svg&apos;%20fill=&apos;none&apos;%20viewBox=&apos;0%200%20320%20286&apos;%3e%3cpath%20fill=&apos;rgb(10,122,255)&apos;%20d=&apos;M69.364%2019.146c36.687%2027.806%2076.147%2084.186%2090.636%20114.439%2014.489-30.253%2053.948-86.633%2090.636-114.439C277.107-.917%20320-16.44%20320%2032.957c0%209.865-5.603%2082.875-8.889%2094.729-11.423%2041.208-53.045%2051.719-90.071%2045.357%2064.719%2011.12%2081.182%2047.953%2045.627%2084.785-80%2082.874-106.667-44.333-106.667-44.333s-26.667%20127.207-106.667%2044.333c-35.555-36.832-19.092-73.665%2045.627-84.785-37.026%206.362-78.648-4.149-90.071-45.357C5.603%20115.832%200%2042.822%200%2032.957%200-16.44%2042.893-.917%2069.364%2019.147Z&apos;/%3e%3c/svg%3e&quot; class=&quot;bluesky-logo&quot; alt=&quot;Bluesky&quot; data-astro-cid-tjvr7lcb&gt; &lt;/a&gt; &lt;/div&gt; &lt;p class=&quot;post-text&quot; data-astro-cid-tjvr7lcb&gt;A day in the mind of Claude Sonnet&lt;/p&gt; &lt;a href=&quot;https://bsky.app/profile/did:plc:mracrip6qu3vw46nbewg44sm/post/3ldosi76gts2n&quot; data-astro-cid-wstpz277&gt;&lt;div class=&quot;media-container&quot; style=&quot;aspect-ratio:800/600&quot; data-astro-cid-2zt5rh6l&gt; &lt;img src=&quot;https://video.bsky.app/watch/did%3Aplc%3Amracrip6qu3vw46nbewg44sm/bafkreidbw3qr6lw6khcccfxyy6y7q7clbrtpq42xz7u3moxf5zdxyxokfm/thumbnail.jpg&quot; class=&quot;thumbnail&quot; alt=&quot;Video thumbnail&quot; data-astro-cid-3sujnda6&gt;&lt;div class=&quot;play-button&quot; data-astro-cid-3sujnda6&gt; &lt;img src=&quot;data:image/svg+xml,%3csvg%20xmlns=&apos;http://www.w3.org/2000/svg&apos;%20fill=&apos;none&apos;%20viewBox=&apos;0%200%2024%2024&apos;%3e%3cpath%20fill=&apos;%23fff&apos;%20d=&apos;M9.576%202.534C7.578%201.299%205%202.737%205%205.086v13.828c0%202.35%202.578%203.787%204.576%202.552l11.194-6.914c1.899-1.172%201.899-3.932%200-5.104L9.576%202.534Z&apos;/%3e%3c/svg%3e&quot; class=&quot;play-icon&quot; alt=&quot;Play button&quot; data-astro-cid-3sujnda6&gt; &lt;/div&gt;  &lt;/div&gt;  &lt;/a&gt; &lt;a href=&quot;https://bsky.app/profile/did:plc:mracrip6qu3vw46nbewg44sm/post/3ldosi76gts2n&quot; class=&quot;timestamp&quot; data-astro-cid-tjvr7lcb&gt; December 19, 2024 at 9:21 PM UTC &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; 
&lt;p&gt;To create this animation for a day in the mind of Claude Sonnet, I used Sonnet to write the following code&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;to generate the HTML with this Python script&lt;/li&gt;
&lt;li&gt;capture PNGs with &lt;code&gt;puppeteer&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;use &lt;code&gt;ffmpeg&lt;/code&gt; to stitch them together&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;/&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; llm&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; requests&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; time&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; pathlib &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; Path&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; datetime &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; datetime, timedelta&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;MODELS&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;claude-3-5-sonnet-latest&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;get_temp_weather&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;hour&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; hour &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;14&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;temp &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;24&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; (hour &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;14&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;temp &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;54&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;27&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; ((hour &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;14&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; hour &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;weather &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;cold&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;elif&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; hour &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;18&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;weather &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;sunny&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;weather &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;snowing&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;round&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(temp), weather&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;now &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(time.time()))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;out_dir &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; Path(&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;out&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; now&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;out_dir.mkdir(&lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;parents&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;exist_ok&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;start_time &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; datetime.now().replace(&lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;hour&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;minute&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;second&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;microsecond&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;end_time &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; start_time &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; timedelta(&lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;days&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;current &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; start_time&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;start_time &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; datetime.now().replace(&lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;hour&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;minute&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;second&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;microsecond&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;specific_times &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;start_time.replace(&lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;hour&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;minute&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;start_time.replace(&lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;hour&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;minute&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;start_time.replace(&lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;hour&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;minute&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; current &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; specific_times:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;hour &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; current.hour&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;minute &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; current.minute&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;temp, weather &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; get_temp_weather(hour)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;time_str &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; current.strftime(&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;%I:%M %p&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;PROMPT&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;&amp;quot;&amp;quot;It is &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;time_str&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;. &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;temp&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;°F and &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;weather&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;Generate subtle, abstract art using SVG in an HTML page that fills 100% of the browser viewport.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;Take inspiration for the style, colors and aesthetic using the current weather and time of day.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;Prefer subtle colors but it&amp;#39;s ok to use intense colors sparingly.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;No talk, no code fences. Code only.&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;timestamp &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; current.strftime(&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;%H_%M&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;prompt_file &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; out_dir &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;prompt_&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;timestamp&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;.txt&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;prompt_file.write_text(&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;PROMPT&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; m &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;MODELS&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;model &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; llm.get_model(m)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;response &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; model.prompt(&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;PROMPT&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;temperature&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;1.0&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;out_file &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; out_dir &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;timestamp&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;_&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;.html&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;out_file.write_text(response.text())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;current &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; timedelta(&lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;minutes&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;import llmimport requestsimport timefrom pathlib import Pathfrom datetime import datetime, timedeltaMODELS = [&amp;#34;claude-3-5-sonnet-latest&amp;#34;]def get_temp_weather(hour):    if hour &lt; 14:        temp = 30 + (24 * (hour / 14))    else:        temp = 54 - (27 * ((hour - 14) / 10))    if hour &lt; 6:        weather = &amp;#34;cold&amp;#34;    elif hour &lt; 18:        weather = &amp;#34;sunny&amp;#34;    else:        weather = &amp;#34;snowing&amp;#34;    return round(temp), weathernow = str(int(time.time()))out_dir = Path(&amp;#34;out&amp;#34;) / nowout_dir.mkdir(parents=True, exist_ok=True)start_time = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)end_time = start_time + timedelta(days=1)current = start_timestart_time = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)specific_times = [    start_time.replace(hour=2, minute=30),    start_time.replace(hour=3, minute=0),    start_time.replace(hour=5, minute=0),]for current in specific_times:    hour = current.hour    minute = current.minute    temp, weather = get_temp_weather(hour)    time_str = current.strftime(&amp;#34;%I:%M %p&amp;#34;)    PROMPT = f&amp;#34;&amp;#34;&amp;#34;It is {time_str}. {temp}°F and {weather}.Generate subtle, abstract art using SVG in an HTML page that fills 100% of the browser viewport.Take inspiration for the style, colors and aesthetic using the current weather and time of day.Prefer subtle colors but it&apos;s ok to use intense colors sparingly.No talk, no code fences. Code only.&amp;#34;&amp;#34;&amp;#34;    timestamp = current.strftime(&amp;#34;%H_%M&amp;#34;)    prompt_file = out_dir / f&amp;#34;prompt_{timestamp}.txt&amp;#34;    prompt_file.write_text(PROMPT)    for m in MODELS:        model = llm.get_model(m)        response = model.prompt(PROMPT, temperature=1.0)        out_file = out_dir / f&amp;#34;{timestamp}_{m}.html&amp;#34;        out_file.write_text(response.text())    current += timedelta(minutes=30)&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; puppeteer &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;require&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;#39;puppeteer&amp;#39;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;createGif&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; browser &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; puppeteer.&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;launch&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; page &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; browser.&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;newPage&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; page.&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;setViewport&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;width: &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;800&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;height: &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;600&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; htmlFiles &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A19E8D&quot;&gt;// paths to html files&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; htmlFiles.length; i&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; page.&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;goto&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;`file://&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;__dirname&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;htmlFiles[i]&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; page.&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;screenshot&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;path: &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;`frame&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;.png`&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; browser.&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;close&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;createGif&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;const puppeteer = require(&apos;puppeteer&apos;);async function createGif() {  const browser = await puppeteer.launch();  const page = await browser.newPage();  await page.setViewport({    width: 800,    height: 600,  });  const htmlFiles = [    // paths to html files  ];  for (let i = 0; i &lt; htmlFiles.length; i++) {    await page.goto(`file://${__dirname}/${htmlFiles[i]}`);    await page.screenshot({      path: `frame${i}.png`,    });  }  await browser.close();}createGif();&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;ffmpeg&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-framerate&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-i&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;timestamped_frame%d.png&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-c:v&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;libx264&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-pix_fmt&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;yuv420p&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;output.mp4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;ffmpeg -framerate 2 -i timestamped_frame%d.png -c:v libx264 -pix_fmt yuv420p output.mp4&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-12-17</title><link>https://www.danielcorin.com/logs/2024/12/17/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/12/17/</guid><description>2024-12-17</description><pubDate>Tue, 17 Dec 2024 21:29:34 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been setting up the foundations to add node summaries to Delta.
Ideally, I will use the same model to create the node summaries as I use to generate the responses since this will keep the model dependencies minimal.
However, my early experiments have yielded some inconsistency in how a shared prompt behaves across models. To try and understand this and smooth it out as much as possible, I plan to set up evals to ensure the summaries are&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;within a certain length&lt;/li&gt;
&lt;li&gt;don’t include direct references to the user or assistant&lt;/li&gt;
&lt;li&gt;are a single sentence or fragment&lt;/li&gt;
&lt;li&gt;include the relevant topic(s) discussed&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I am currently looking for a straightforward, local option for running evals.
I’d like to avoid cloud products and testing across multiple models needs to be straightforward.
My ideal output would be a matrix of the different models run and the results of the different eval checks against the respective model outputs given the same system and user prompts.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-12-15</title><link>https://www.danielcorin.com/logs/2024/12/15/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/12/15/</guid><description>2024-12-15</description><pubDate>Sun, 15 Dec 2024 17:46:57 GMT</pubDate><content:encoded>&lt;p&gt;Found this &lt;a href=&quot;https://www.brycewray.com/posts/2024/11/simple-hugo-shortcode-embedding-bluesky-posts/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;nifty Bluesky Hugo shortcode&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; written by Bryce.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-12-14</title><link>https://www.danielcorin.com/logs/2024/12/14/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/12/14/</guid><description>2024-12-14</description><pubDate>Sat, 14 Dec 2024 19:48:02 GMT</pubDate><content:encoded>&lt;p&gt;Inspired by Simon’s &lt;a href=&quot;https://github.com/simonw/pelican-bicycle?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;pelican-bicycle&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; repo, I played around a bit with using LLMs to generate visuals with SVGs, Three.js and pure CSS.&lt;/p&gt;
&lt;p&gt;I posted about some of the results &lt;a href=&quot;https://bsky.app/profile/danielcorin.com/post/3ldcpduhazk2g&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;bluesky-post-container not-content&quot; data-astro-cid-tjvr7lcb&gt; &lt;div class=&quot;post-content&quot; data-astro-cid-tjvr7lcb&gt; &lt;div class=&quot;post-header&quot; data-astro-cid-tjvr7lcb&gt; &lt;a class=&quot;avatar medium&quot; href=&quot;https://bsky.app/profile/danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer nofollow&quot; data-astro-cid-ppbrauon&gt;&lt;img src=&quot;https://cdn.bsky.app/img/avatar/plain/did:plc:mracrip6qu3vw46nbewg44sm/bafkreif6ag5kpmf4z7n3eylf4kxn7bqliwvwkbewfkcmahngkzj2fejvdm&quot; alt=&quot;Dan Corin&quot; data-astro-cid-ppbrauon&gt;&lt;/a&gt; &lt;div class=&quot;user-info&quot; data-astro-cid-tjvr7lcb&gt; &lt;a href=&quot;https://bsky.app/profile/danielcorin.com&quot; class=&quot;display-name&quot; data-astro-cid-tjvr7lcb&gt;Dan Corin&lt;/a&gt; &lt;a href=&quot;https://bsky.app/profile/danielcorin.com&quot; class=&quot;username&quot; data-astro-cid-tjvr7lcb&gt;@danielcorin.com&lt;/a&gt; &lt;/div&gt; &lt;a href=&quot;https://bsky.app/profile/did:plc:mracrip6qu3vw46nbewg44sm/post/3ldcpduhazk2g&quot; class=&quot;logo-link&quot; data-astro-cid-tjvr7lcb&gt; &lt;img src=&quot;data:image/svg+xml,%3csvg%20xmlns=&apos;http://www.w3.org/2000/svg&apos;%20fill=&apos;none&apos;%20viewBox=&apos;0%200%20320%20286&apos;%3e%3cpath%20fill=&apos;rgb(10,122,255)&apos;%20d=&apos;M69.364%2019.146c36.687%2027.806%2076.147%2084.186%2090.636%20114.439%2014.489-30.253%2053.948-86.633%2090.636-114.439C277.107-.917%20320-16.44%20320%2032.957c0%209.865-5.603%2082.875-8.889%2094.729-11.423%2041.208-53.045%2051.719-90.071%2045.357%2064.719%2011.12%2081.182%2047.953%2045.627%2084.785-80%2082.874-106.667-44.333-106.667-44.333s-26.667%20127.207-106.667%2044.333c-35.555-36.832-19.092-73.665%2045.627-84.785-37.026%206.362-78.648-4.149-90.071-45.357C5.603%20115.832%200%2042.822%200%2032.957%200-16.44%2042.893-.917%2069.364%2019.147Z&apos;/%3e%3c/svg%3e&quot; class=&quot;bluesky-logo&quot; alt=&quot;Bluesky&quot; data-astro-cid-tjvr7lcb&gt; &lt;/a&gt; &lt;/div&gt; &lt;p class=&quot;post-text&quot; data-astro-cid-tjvr7lcb&gt;Inspired by &lt;a href=&quot;https://bsky.app/profile/did:plc:kft6lu4trxowqmter2b6vg6z&quot;&gt;@simonwillison.net&lt;/a&gt;&amp;#39;s pelican-bicycle repo, here are some CSS sunsets by gpt-4o, claude-3-5-sonnet and gemini-2.0-flash-exp. Sonnet and Gemini animate the birds and clouds.

Prompt: Generate pure HTML/CSS art of an extremely detailed, beautiful sunset. No talk or code fences. Code only.&lt;/p&gt; &lt;a href=&quot;https://bsky.app/profile/did:plc:mracrip6qu3vw46nbewg44sm/post/3ldcpduhazk2g&quot; data-astro-cid-wstpz277&gt;&lt;div class=&quot;image-grid-container&quot; data-astro-cid-jamef4h3&gt; &lt;div class=&quot;image-grid image-grid--3&quot; data-astro-cid-jamef4h3&gt; &lt;div class=&quot;image-grid-item&quot; data-astro-cid-jamef4h3&gt; &lt;img src=&quot;https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:mracrip6qu3vw46nbewg44sm/bafkreihrp343pdh2jwoafrppjwtgtrujb6jscfdl2kb23afd7mb4liisli&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; data-astro-cid-jamef4h3&gt; &lt;/div&gt;&lt;div class=&quot;image-grid-item&quot; data-astro-cid-jamef4h3&gt; &lt;img src=&quot;https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:mracrip6qu3vw46nbewg44sm/bafkreiayo4ql7zs3bwriecklt7eonu2agihn5klrcqurc2v4iavssuvcky&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; data-astro-cid-jamef4h3&gt; &lt;/div&gt;&lt;div class=&quot;image-grid-item&quot; data-astro-cid-jamef4h3&gt; &lt;img src=&quot;https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:mracrip6qu3vw46nbewg44sm/bafkreihahvmkfskxoer6kklpupej7qout43d7y4zq6zsg7eaiqeri6qkri&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; data-astro-cid-jamef4h3&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/a&gt; &lt;a href=&quot;https://bsky.app/profile/did:plc:mracrip6qu3vw46nbewg44sm/post/3ldcpduhazk2g&quot; class=&quot;timestamp&quot; data-astro-cid-tjvr7lcb&gt; December 15, 2024 at 1:53 AM UTC &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; 
&lt;p&gt;I used the code below to generate the HTML/CSS for the images:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;/&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; llm&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; time&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; pathlib &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; Path&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;MODELS&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;gpt-4o&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;claude-3-5-sonnet-latest&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;gemini-2.0-flash-exp&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;SUBJECT&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;an extremely detailed, beautiful sunset&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;PROMPT&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;Generate pure HTML/CSS art of &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;{SUBJECT}&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;. No talk or code fences. Code only.&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;now &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(time.time()))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;out_dir &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; Path(&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;out&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; now&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;out_dir.mkdir(&lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;parents&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;exist_ok&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;prompt_file &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; out_dir &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;prompt.txt&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;prompt_file.write_text(&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;PROMPT&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; m &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;MODELS&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;model &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; llm.get_model(m)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;response &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; model.prompt(&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;PROMPT&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;out_file &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; out_dir &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;.html&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;out_file.write_text(response.text())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;import llmimport timefrom pathlib import PathMODELS = [    &amp;#34;gpt-4o&amp;#34;,    &amp;#34;claude-3-5-sonnet-latest&amp;#34;,    &amp;#34;gemini-2.0-flash-exp&amp;#34;,]SUBJECT = &amp;#34;an extremely detailed, beautiful sunset&amp;#34;PROMPT = f&amp;#34;Generate pure HTML/CSS art of {SUBJECT}. No talk or code fences. Code only.&amp;#34;now = str(int(time.time()))out_dir = Path(&amp;#34;out&amp;#34;) / nowout_dir.mkdir(parents=True, exist_ok=True)prompt_file = out_dir / &amp;#34;prompt.txt&amp;#34;prompt_file.write_text(PROMPT)for m in MODELS:    model = llm.get_model(m)    response = model.prompt(PROMPT)    out_file = out_dir / f&amp;#34;{m}.html&amp;#34;    out_file.write_text(response.text())&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-12-12</title><link>https://www.danielcorin.com/logs/2024/12/12/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/12/12/</guid><description>2024-12-12</description><pubDate>Thu, 12 Dec 2024 20:12:05 GMT</pubDate><content:encoded>&lt;p&gt;Got Delta working on other machines.
It took a lot longer than I expected.
I spent most of the time dealing with build issues regarding:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;missing dependencies&lt;/li&gt;
&lt;li&gt;different paths between dev and production&lt;/li&gt;
&lt;li&gt;loading &lt;code&gt;vec.dylib&lt;/code&gt; with &lt;code&gt;sqlite-vec&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;dependencies compiled for the wrong architecture&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I tried to write some of this up but it’s been challenging to extract and/or remember the specific circumstances and how I solved it in the context of some minimal example.
There are lots of parts that feel a bit wrong or regrettable but were compromises to getting the thing working.&lt;/p&gt;
&lt;p&gt;Specifically&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;whatever it was I built to get the build working&lt;/li&gt;
&lt;li&gt;using Javascript (not Typescript) for migrations (needed so the migrations could run at runtime in the context of the &lt;code&gt;main.js&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-12-07</title><link>https://www.danielcorin.com/logs/2024/12/07/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/12/07/</guid><description>2024-12-07</description><pubDate>Sat, 07 Dec 2024 12:29:37 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;I don’t know anything about rice disease but apparently these are various rice diseases and this is what they look like.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://youtu.be/AdhG64NF76E?feature=shared&amp;#x26;t=3939&amp;#x26;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Jeremy Howard, Fast.ai Course Lesson 6&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;
I have no idea if Jeremy had this in mind when he said this (alluding to the fact he doesn’t know about the subject area, but when building with ML that doesn’t necessarily matter), but this sentiment is how I feel when building with and learning about anything new with language models, at least to start.
I use LLMs to bootstrap my understanding of whatever situation I find myself in, and from there, try to orient myself and gain a better understanding.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It’s incredible to be able to learn from whatever your starting point is rather than needing to try and read less relevant introductory material to start to understand an area.
It’s akin to having a CSV and wanting to run SQL queries on your data and needing to start by reading the &lt;code&gt;pandas&lt;/code&gt; or &lt;code&gt;sqlite&lt;/code&gt; documentation.&lt;/p&gt;
&lt;p&gt;Most of the effort is finding what you’re looking for to solve the problem in front of you.
LLMs bring this directly to you given your ability to describe what you need.&lt;/p&gt;
&lt;p&gt;No other resource is tailored to help you solve problems like this.
It’s an order of magnitude better than anything else I have tried with regard to learning and applying existing knowledge.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-12-05</title><link>https://www.danielcorin.com/logs/2024/12/05/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/12/05/</guid><description>2024-12-05</description><pubDate>Thu, 05 Dec 2024 17:48:06 GMT</pubDate><content:encoded>&lt;p&gt;The developer space is moving so fast.
I went from thinking Cursor’s cmd+k was the greatest thing, to using Windsurf’s Cascade, the new Cursor composer and bolt.new in a week.
Powerful tools.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-12-01</title><link>https://www.danielcorin.com/logs/2024/12/01/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/12/01/</guid><description>2024-12-01</description><pubDate>Sun, 01 Dec 2024 21:03:27 GMT</pubDate><content:encoded>&lt;p&gt;I’m working on a conversation branching tool called “Delta” (for now).
The first thing that led me to this idea came from chatting with Llama 3.2 and experimenting with different system prompts.
I was actually trying to build myself a local version of an app I’ve been fascinated by called &lt;a href=&quot;https://new.computer/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Dot&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;I noticed that as conversations with models progressed, they became more interesting.
A friend made a point that really stuck in my head about how you “build trust” with a model over multiple conversation turns.
While you can write system prompts to steer the model to respond with more details and longer paragraphs, I observed that regardless of the system prompt, as conversations went on longer (more turns, more exchanges, longer message history), the responses became more interesting and better calibrated to what I was looking for.
The model seemed to display a more coherent understanding of what I was talking about.&lt;/p&gt;
&lt;p&gt;This led me to ask: could I use that message history as an augmented system prompt?
For example, if I have a conversation with six messages (three turns), could I add several different fourth turns to that conversation and see what happens?
Delta was created to let you build a conversation and then branch it from different points.&lt;/p&gt;
&lt;p&gt;The project was also partly inspired by Simon Willison’s &lt;a href=&quot;https://github.com/simonw/llm?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;llm&lt;/code&gt; CLI tool&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, which uses a local SQLite database to save all LLM conversation history.
I took inspiration from this idea and augmented it to create pointers to previous messages, which form the tree structure used in Delta.
Lastly, I wanted to be able to experiment with multiple different models - both local models and with APIs.
Using multiple models in Delta to try the same prompts helps me develop an intuition for the quality and types of responses I get from different models and provides a helpful playground for these experiments.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-11-20</title><link>https://www.danielcorin.com/logs/2024/11/20/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/11/20/</guid><description>2024-11-20</description><pubDate>Wed, 20 Nov 2024 21:55:29 GMT</pubDate><content:encoded>&lt;p&gt;Tried out &lt;a href=&quot;https://github.com/letta-ai/letta?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Letta&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
Unsure where to try and go with it.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-11-16</title><link>https://www.danielcorin.com/logs/2024/11/16/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/11/16/</guid><description>2024-11-16</description><pubDate>Sat, 16 Nov 2024 12:36:36 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Would another day of editing fundamentally change the value readers get?
Probably not.
Ship it and move on to your next idea while you’re still energized.&lt;/p&gt;
&lt;/blockquote&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-11-15</title><link>https://www.danielcorin.com/logs/2024/11/15/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/11/15/</guid><description>2024-11-15</description><pubDate>Fri, 15 Nov 2024 22:40:24 GMT</pubDate><content:encoded>&lt;p&gt;Trying out &lt;a href=&quot;https://codeium.com/windsurf?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Windsurf&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-11-10</title><link>https://www.danielcorin.com/logs/2024/11/10/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/11/10/</guid><description>2024-11-10</description><pubDate>Sun, 10 Nov 2024 14:29:38 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;When you are curious about something, you have the right cocktail of neurotransmitters present to make that information stick.
If you get the answer to something in the context of your curiosity, then it’s going to stay with you.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;David Eagleman, &lt;a href=&quot;https://freakonomics.com/podcast/feeling-sound-and-hearing-color/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://freakonomics.com/podcast/feeling-sound-and-hearing-color/&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-11-09</title><link>https://www.danielcorin.com/logs/2024/11/09/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/11/09/</guid><description>2024-11-09</description><pubDate>Sat, 09 Nov 2024 16:40:35 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;we can improve the accuracy of nearly any kind of machine learning algorithm by training it multiple times, each time on a different random subset of the data, and averaging its predictions&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/fastai/fastbook/blob/master/09_tabular.ipynb?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Fastbook Chapter 9&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-10-30</title><link>https://www.danielcorin.com/logs/2024/10/30/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/10/30/</guid><description>2024-10-30</description><pubDate>Wed, 30 Oct 2024 08:44:13 GMT</pubDate><content:encoded>&lt;p&gt;I wanted to get more hands-on with the language model trained in chapter 12 of the FastAI course, so I got some Google Colab credits and actually ran the training on an A100.
It cost about $2.50 and took about 1:40, but generally worked quite well.
There was a minor issue with auto-saving the notebook, probably due to my use of &lt;a href=&quot;https://stackoverflow.com/questions/73413086/how-to-prevent-fastai-fastbook-from-requesting-access-to-google-drive-when-runni?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;this workaround&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; to avoid needing to give Colab full Google Drive access.
Regardless, I was still able to train the language model, run sentence completions, then using the fine-tuned language model as an encoder to build a sentiment classifier.
Seeing how long this process took, then seeing it work helped me build a bit more intuition about what to expect when training models.
I was also a bit surprised how fast the next token prediction and classification inference were.
I might try out a smaller fine-tune on my local machine now that I have a better sense of what this process looks like end to end.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-10-29</title><link>https://www.danielcorin.com/logs/2024/10/29/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/10/29/</guid><description>2024-10-29</description><pubDate>Tue, 29 Oct 2024 20:08:12 GMT</pubDate><content:encoded>&lt;p&gt;The following code allowed me to successfully download the IMDB dataset with fastai to a Modal volume:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; os&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;os.environ[&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;FASTAI_HOME&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;/data/fastai&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; fastai.text.all &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;*&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;app &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; modal.App(&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;imdb-dataset-train&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;vol &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; modal.Volume.from_name(&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;modal-llm-data&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;create_if_missing&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;@app.function&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;gpu&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;any&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;image&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;modal.Image.debian_slim().pip_install(&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;fastai&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;volumes&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;/data&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: vol},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;download&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;path &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; untar_data(URLs.&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;IMDB&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;Data downloaded to: &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; path&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;import osos.environ[&amp;#x22;FASTAI_HOME&amp;#x22;] = &amp;#x22;/data/fastai&amp;#x22;from fastai.text.all import *app = modal.App(&amp;#x22;imdb-dataset-train&amp;#x22;)vol = modal.Volume.from_name(&amp;#x22;modal-llm-data&amp;#x22;, create_if_missing=True)@app.function(    gpu=&amp;#x22;any&amp;#x22;,    image=modal.Image.debian_slim().pip_install(&amp;#x22;fastai&amp;#x22;),    volumes={&amp;#x22;/data&amp;#x22;: vol},)def download():    path = untar_data(URLs.IMDB)    print(f&amp;#x22;Data downloaded to: {path}&amp;#x22;)    return path&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;run with&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;modal&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;run&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;train.py::download&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;modal run train.py::download&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Next, I tried to run one epoch of training of the language model&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;@app.function&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;gpu&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;h100&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;image&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;modal.Image.debian_slim().pip_install(&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;fastai&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;volumes&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;/data&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: vol},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;timeout&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;60&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;train&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;path &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; untar_data(URLs.&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;IMDB&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;Training with data from: &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;get_imdb &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; partial(get_text_files, &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;folders&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;train&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;test&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;unsup&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;dls_lm &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; DataBlock(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;blocks&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;TextBlock.from_folder(path, &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;is_lm&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;get_items&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;get_imdb,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;splitter&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;RandomSplitter(&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0.1&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;).dataloaders(path, &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;path, &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;bs&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;128&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;seq_len&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;80&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;Sample from datablock:&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(dls_lm.show_batch(&lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;max_n&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;learn &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; language_model_learner(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;dls_lm, &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;AWD_LSTM&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;drop_mult&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0.3&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;metrics&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;[accuracy, Perplexity()]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;).to_fp16()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;learn.fit_one_cycle(&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;2e-2&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;learn.save(&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;1epoch&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;@app.function(    gpu=&amp;#x22;h100&amp;#x22;,    image=modal.Image.debian_slim().pip_install(&amp;#x22;fastai&amp;#x22;),    volumes={&amp;#x22;/data&amp;#x22;: vol},    timeout=20 * 60,)def train():    path = untar_data(URLs.IMDB)    print(f&amp;#x22;Training with data from: {path}&amp;#x22;)    get_imdb = partial(get_text_files, folders=[&amp;#x22;train&amp;#x22;, &amp;#x22;test&amp;#x22;, &amp;#x22;unsup&amp;#x22;])    dls_lm = DataBlock(        blocks=TextBlock.from_folder(path, is_lm=True),        get_items=get_imdb,        splitter=RandomSplitter(0.1),    ).dataloaders(path, path=path, bs=128, seq_len=80)    print(&amp;#x22;Sample from datablock:&amp;#x22;)    print(dls_lm.show_batch(max_n=2))    learn = language_model_learner(        dls_lm, AWD_LSTM, drop_mult=0.3, metrics=[accuracy, Perplexity()]    ).to_fp16()    learn.fit_one_cycle(1, 2e-2)    learn.save(&amp;#x22;1epoch&amp;#x22;)&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I was waiting around for a long time, having never seen “Sample from datablock:” print.
Looking into the volume with the Modal UI, I noticed the &lt;code&gt;/fastai/data/imdb_tok/unsup&lt;/code&gt; folder has been modified recently.
It seemed like the tokenization of the dataset was talking a long time.
I was able to do this tokenization quite fast locally, so I am going to chalk this up to the Modal volume not being as performant as a local file system.
While I’m not 100%, I think the need to train with so many little files may undermine my ability to train this model on Modal.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-10-28</title><link>https://www.danielcorin.com/logs/2024/10/28/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/10/28/</guid><description>2024-10-28</description><pubDate>Mon, 28 Oct 2024 20:02:58 GMT</pubDate><content:encoded>&lt;p&gt;I tried training a language model with fastai on Modal.&lt;/p&gt;
&lt;p&gt;First I attempted it in a standalone Modal script.
I first wrote a script to unpack the data to a volume, then ran the &lt;code&gt;fit_one_cycle&lt;/code&gt; function with the learner.
I ran into an issue with &lt;code&gt;counter.pkl&lt;/code&gt; sort of similar to &lt;a href=&quot;https://github.com/fastai/fastai/issues/2787?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;this issue&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; but I haven’t figured out how to resolve it yet.&lt;/p&gt;
&lt;p&gt;On a whim, I checked to see if I could run a Jupyter notebook on Modal.
Apparently, &lt;a href=&quot;https://modal.com/docs/guide/notebooks?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;you can&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;!&lt;/p&gt;
&lt;p&gt;I ran&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;modal&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;launch&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;jupyter&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;--gpu&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;a10g&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;modal launch jupyter --gpu a10g&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;then started to mess around a bit.
I uploaded the imdb data again then untarred it.&lt;/p&gt;
&lt;p&gt;I was noticing occasionally laggy/busy behavior at times that I wasn’t expecting.
This experiment ended for the day when I tried to run&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;learn &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; language_model_learner(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;dls_lm, &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;AWD_LSTM&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;drop_mult&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0.3&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;metrics&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;[accuracy, Perplexity()]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;).to_fp16()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;learn = language_model_learner(    dls_lm, AWD_LSTM, drop_mult=0.3, metrics=[accuracy, Perplexity()]).to_fp16()&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I got a &lt;code&gt;SSLCertVerificationError&lt;/code&gt; and wasn’t prepared to spend more time debugging.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-10-26</title><link>https://www.danielcorin.com/logs/2024/10/26/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/10/26/</guid><description>2024-10-26</description><pubDate>Sat, 26 Oct 2024 16:18:59 GMT</pubDate><content:encoded>&lt;p&gt;Jon wrote an interesting &lt;a href=&quot;https://github.com/jonfraser/simpletext?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;blog&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; on top of Cloudflare Workers and KV.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I’ve been seeing more and more notebook-like products and UX.
A few I’ve seen recently:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/fastai/fastbook?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://github.com/fastai/fastbook&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nbdev.fast.ai/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://nbdev.fast.ai/&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://runme.dev/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://runme.dev/&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tzador/makedown?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://github.com/tzador/makedown&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/dim0x69/mdx?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://github.com/dim0x69/mdx&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-10-21</title><link>https://www.danielcorin.com/logs/2024/10/21/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/10/21/</guid><description>2024-10-21</description><pubDate>Mon, 21 Oct 2024 19:12:49 GMT</pubDate><content:encoded>&lt;p&gt;Ran several experiments using local LLMs (~7b parameter models) like &lt;code&gt;llama3.2&lt;/code&gt; and &lt;code&gt;phi3&lt;/code&gt; to generate a random number between 1 and 100.
The exact prompt was&lt;/p&gt;
&lt;section class=&quot;chat-section&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;chat-container&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;message-container&quot; data-astro-cid-txfww4py&gt;   &lt;div class=&quot;message system&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;bubble system-bubble&quot; data-astro-cid-txfww4py&gt; &lt;p&gt;You are a random number generator that provides a number between 1 and 100.&lt;/p&gt;  &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;message-container&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;message user&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;message-content&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;user-label&quot; data-astro-cid-txfww4py&gt;User&lt;/div&gt; &lt;div class=&quot;bubble user-bubble&quot; data-astro-cid-txfww4py&gt; &lt;p&gt;Generate a random number between 1 and 100. Provide the output in the following format: ‘Random number: X’, where X is the generated number. Ensure the number is an integer and do not include any additional text or explanations.&lt;/p&gt;  &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;   &lt;/div&gt; &lt;/div&gt; &lt;/section&gt; 
&lt;p&gt;I didn’t expect this approach to work as a uniform number generator, but it was interesting to see &lt;em&gt;how&lt;/em&gt; it doesn’t work.
At lower temperatures, most models only output a few different values in the range of 40-60.
There was little to no variability.
With increases in temperature (between 1-3), the distribution begins to look bi-model for several models. After this threshold, most model outputs start to breakdown and output only single digit numbers at temperature 7 and higher (I am aware this is general not a recommended model of using a language model).&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-10-20</title><link>https://www.danielcorin.com/logs/2024/10/20/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/10/20/</guid><description>2024-10-20</description><pubDate>Sun, 20 Oct 2024 18:02:26 GMT</pubDate><content:encoded>&lt;p&gt;Reading a bunch.
Also got inspired to play around with generating random numbers with language models across different temperatures to see their distributions.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-10-16</title><link>https://www.danielcorin.com/logs/2024/10/16/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/10/16/</guid><description>2024-10-16</description><pubDate>Wed, 16 Oct 2024 19:30:52 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;There is an enormous amount of jargon in deep learning, including terms like rectified linear unit. The vast vast majority of this jargon is no more complicated than can be implemented in a short line of code, as we saw in this example. The reality is that for academics to get their papers published they need to make them sound as impressive and sophisticated as possible. One of the ways that they do that is to introduce jargon. Unfortunately, this has the result that the field ends up becoming far more intimidating and difficult to get into than it should be. You do have to learn the jargon, because otherwise papers and tutorials are not going to mean much to you. But that doesn’t mean you have to find the jargon intimidating. Just remember, when you come across a word or phrase that you haven’t seen before, it will almost certainly turn out to be referring to a very simple concept.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;We already know that a single nonlinearity with two linear layers is enough to approximate any function. So why would we use deeper models? The reason is performance. With a deeper model (that is, one with more layers) we do not need to use as many parameters; it turns out that we can use smaller matrices with more layers, and get better results than we would get with larger matrices, and few layers.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/fastai/fastbook/blob/master/04_mnist_basics.ipynb?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://github.com/fastai/fastbook/blob/master/04_mnist_basics.ipynb&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-10-12</title><link>https://www.danielcorin.com/logs/2024/10/12/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/10/12/</guid><description>2024-10-12</description><pubDate>Sat, 12 Oct 2024 15:27:38 GMT</pubDate><content:encoded>&lt;p&gt;Reading fastbook, I get the sense we could teach math more effectively if we did so through spreadsheets and Python code.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-10-11</title><link>https://www.danielcorin.com/logs/2024/10/11/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/10/11/</guid><description>2024-10-11</description><pubDate>Fri, 11 Oct 2024 08:42:47 GMT</pubDate><content:encoded>&lt;p&gt;Current theory on why &lt;code&gt;nbdev&lt;/code&gt; and notebooks in general make sense and can work:
Writing code for most software is actually pretty similar to writing code for models, but usually you pay less of a cost for not knowing what you’re doing yet (aka exploring).
You still pay some cost, but it isn’t totally deal-breaking in most software settings, unlike if you needed to run the entire data load and clean job as you’re training a model.
For the latter, a full re-run would slow down the feedback loop too much to still move quickly.
Notebooks reduce the feedback loop to about as low as imaginable while also allowing you to experiment while still not totally knowing where you’re going yet.
Because you can still go forward(ish), you can sketch in the general direction of where you want to go without as many of the constraints of abstraction, structure, or slow parts of your workflow, which can easily be memoized by the notebook.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Monitoring the token leaderboard on &lt;a href=&quot;https://openrouter.ai/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://openrouter.ai/&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; is an interesting way to discover new emerging projects.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-10-10</title><link>https://www.danielcorin.com/logs/2024/10/10/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/10/10/</guid><description>2024-10-10</description><pubDate>Thu, 10 Oct 2024 19:36:29 GMT</pubDate><content:encoded>&lt;p&gt;There are many tools for doing evals.
I used &lt;code&gt;ell&lt;/code&gt; and &lt;code&gt;braintrust&lt;/code&gt; together for fun and disaster.
The integration is actually not terrible, though I’m not 100% whether they’d be obvious things to try and link together.
It seems &lt;code&gt;ell&lt;/code&gt; is striving to build its own eval capabilities as well.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-10-09</title><link>https://www.danielcorin.com/logs/2024/10/09/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/10/09/</guid><description>2024-10-09</description><pubDate>Wed, 09 Oct 2024 17:33:47 GMT</pubDate><content:encoded>&lt;p&gt;Some quotes from Lesson 3 of course.fast.ai by Jeremy Howard.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I remember a few years ago when I said something like this in a class somebody on the forum was like “this reminds me of that thing about how to draw an owl”.
Jeremy’s basically saying okay step one draw two circles, step two draw the rest of the owl.
The thing I find I have a lot of trouble explaining to students is when it comes to deep learning, there’s nothing between these two steps.
When you have ReLUs getting added together and gradient descent to optimize the parameters and samples of inputs and of what you want, the computer draws the owl.
That’s it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;I pretty much only use resnet18 at the start of a new project because I want to spend all of my time trying things out.
I’m going to try different data augmentation, I’m going to try different ways of cleaning the data, I’m going to try to bring in external data, and so I want to be trying lots of things and I want to be able to try it as fast as possible.
Trying better architectures is the very last thing that I do.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;My very strong opinion is that the vast majority of projects I see in industry wait far too long before they train their first model.
You know in my opinion you want to train your first model on day one with whatever CSV files or whatever that you can hack together.
And you might be surprised that none of the fancy stuff you’re thinking of doing is necessary because you already have a good enough accuracy for what you need.
Or you might find quite the opposite you might find that oh my god we’re basically getting no accuracy at all maybe it’s impossible.
These are things you want to know at the start.&lt;/p&gt;
&lt;/blockquote&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-10-08</title><link>https://www.danielcorin.com/logs/2024/10/08/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/10/08/</guid><description>2024-10-08</description><pubDate>Tue, 08 Oct 2024 19:39:23 GMT</pubDate><content:encoded>&lt;p&gt;I tried to use &lt;a href=&quot;https://aider.chat/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;aider&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; to build a crossword generator in Python.
Even with a preselected set of words, this proved difficult.
Or perhaps the preselected set of words was why it was difficult.
Either way, the AI model doesn’t really understand the concept of word overlap in the context of a crossword.
That seemed solvable.
Instead, I had it write code to precalculate word overlap from the word list, then use that to place the words.
The program seemed to hang indefinitely.
Adding debug statements revealed extensive looping and attempts to place words that likely couldn’t fit within the constraints of the puzzle.
I had selected a group of words around the theme “celestial bodies” without considering their potential for overlap.
It was probably impossible to place them all.&lt;/p&gt;
&lt;p&gt;I came away from this experience with a deeper appreciation for the complexity of working within the constraints of a crossword.
The fact that the AI model struggles in this area seems quite understandable.
The tool &lt;a href=&quot;https://crosswyrd.app/builder?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Crosswyrd&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; further demonstrates how tight these constraints can be.
When I placed a few words in various spots within a puzzle template, I quickly discovered that there were only a few very specific options that could fit in certain slots.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-10-07</title><link>https://www.danielcorin.com/logs/2024/10/07/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/10/07/</guid><description>2024-10-07</description><pubDate>Mon, 07 Oct 2024 20:10:19 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;One of the most painful lessons beginners have to learn is just how often everyone is wrong about everything.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Imagine a spreadsheet where every time you change something you must open a terminal, run the compiler and scan through the cell / value pairs in the printout to see the effects of your change.
We wouldn’t put up with UX that appalling in any other tool but somehow that is still the state of the art for programming tools.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Large-scale data collection and testing may end up being the best path to providing helpful feedback.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://www.scattered-thoughts.net/writing/pain-we-forgot/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://www.scattered-thoughts.net/writing/pain-we-forgot/&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-09-27</title><link>https://www.danielcorin.com/logs/2024/09/27/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/09/27/</guid><description>2024-09-27</description><pubDate>Fri, 27 Sep 2024 08:46:31 GMT</pubDate><content:encoded>&lt;p&gt;Erik &lt;a href=&quot;https://erikbern.com/2024/09/27/its-hard-to-write-code-for-humans.html?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;wrote&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; about how it’s hard to write code for humans.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Getting started &lt;em&gt;is&lt;/em&gt; the product!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;Found a cool &lt;a href=&quot;https://github.com/charmbracelet/glow/issues/601?ref=danielcorin.com#issuecomment-2100838870&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;script&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; by David to allow streaming output using &lt;a href=&quot;https://github.com/charmbracelet/glow?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;glow&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
Can’t seem to figure out why it strips away the terminal colors for me.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-09-26</title><link>https://www.danielcorin.com/logs/2024/09/26/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/09/26/</guid><description>2024-09-26</description><pubDate>Thu, 26 Sep 2024 21:29:20 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://jwn.gr/posts/migrating-from-gatsby-to-astro/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Cool article&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; by Jacob on a blog re-write to &lt;a href=&quot;https://astro.build/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Astro&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
I’ve been getting a bit of a re-write itch lately but I don’t want it to be a distraction.
Might need to wait until the end of the FastAI course with just a little exploration on the side.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-09-25</title><link>https://www.danielcorin.com/logs/2024/09/25/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/09/25/</guid><description>2024-09-25</description><pubDate>Wed, 25 Sep 2024 19:10:08 GMT</pubDate><content:encoded>&lt;p&gt;Several interesting releases today/recently.&lt;/p&gt;
&lt;p&gt;Multi-modal llama: &lt;a href=&quot;https://ai.meta.com/blog/llama-3-2-connect-2024-vision-edge-mobile-devices/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;llama3.2&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
Tons of model infra providers announced availability day one.
We seem to be getting into a bit of a rhythm here.
It’s also convenient for Meta who doesn’t need to scale the infra (though they of all companies would probably be capable) — providers do it for them.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://allenai.org/open-models?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;AllenAI’s Olmo&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;: another interesting, open source multi-modal model.&lt;/p&gt;
&lt;p&gt;Open source is catching up in multi-modal.
I’m looking forward to experimenting with both of these.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I tried installing &lt;code&gt;llama3.2&lt;/code&gt; with &lt;code&gt;ollama&lt;/code&gt; but I don’t think the latest Nix package version can support the multi-modal architecture.&lt;/p&gt;
&lt;p&gt;I updated macOS to Sequoia and Nix broke.
Now I’m dealing with that since most of my system doesn’t work 🙁&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Not a great feeling to have that not work but I found &lt;a href=&quot;https://github.com/DeterminateSystems/nix-installer/issues/753?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;this post&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; which mentioned the command&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;security&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;find-generic-password&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-s&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;Nix Store&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-w&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;security find-generic-password -s &amp;#x22;Nix Store&amp;#x22; -w&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I used the password from there to unlock the disk and it worked.
Now my dotfiles and things were loading correctly, with the Nix Store unlocked.
Unfortunately, this wasn’t all I needed to do.
I had to uninstall Nix and cleanup some files following &lt;a href=&quot;https://github.com/DeterminateSystems/nix-installer/issues/608?ref=danielcorin.com#issuecomment-1692499816&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;these instructions&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;rm&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;/Library/LaunchDaemons/org.nixos.activate-system.plist&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;launchctl&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;bootout&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;system/org.nixos.activate-system&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;/nix/nix-installer&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;uninstall&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;rm&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;/etc/ssl/certs/ca-certificates.crt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;--proto&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&apos;=https&apos;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;--tlsv1.2&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-sSf&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-L&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;https://install.determinate.systems/nix&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;sh&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-s&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;install&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;sudo rm /Library/LaunchDaemons/org.nixos.activate-system.plistsudo launchctl bootout system/org.nixos.activate-system/nix/nix-installer uninstallsudo rm /etc/ssl/certs/ca-certificates.crtcurl --proto &amp;#x27;=https&amp;#x27; --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Finally, I re-bootstrapped by &lt;code&gt;nix-darwin&lt;/code&gt; config with&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;nix&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;run&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;nix-darwin&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;switch&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;--flake&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;~/.config/nix/flake.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;nix run nix-darwin -- switch --flake ~/.config/nix/flake.nix&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;and I was back on solid ground.&lt;/p&gt;
&lt;p&gt;I tried running nix-darwin again as some point but ran into this issue&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;nix&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;run&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;nix-darwin&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;switch&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;--flake&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;~/.config/nix/flake.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;error:&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;cannot&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;connect&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;to&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;socket&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;at&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&apos;/nix/var/nix/daemon-socket/socket&apos;:&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;Connection&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;refused&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;nix run nix-darwin -- switch --flake ~/.config/nix/flake.nixerror: cannot connect to socket at &amp;#x27;/nix/var/nix/daemon-socket/socket&amp;#x27;: Connection refused&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Loading/restarting the daemons seemed to handle this&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;launchctl&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;unload&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;/Library/LaunchDaemons/org.nixos.nix-daemon.plist&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;launchctl&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;load&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;/Library/LaunchDaemons/org.nixos.nix-daemon.plist&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;sudo launchctl unload /Library/LaunchDaemons/org.nixos.nix-daemon.plistsudo launchctl load /Library/LaunchDaemons/org.nixos.nix-daemon.plist&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;My &lt;code&gt;ollama&lt;/code&gt; server seems not to be running but that’s a problem for another day.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-09-19</title><link>https://www.danielcorin.com/logs/2024/09/19/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/09/19/</guid><description>2024-09-19</description><pubDate>Thu, 19 Sep 2024 20:52:50 GMT</pubDate><content:encoded>&lt;p&gt;I finally found some time to run a more comprehensive evals of Connections with one guess at a time and using Python code to validate the guesses and give feedback.
I ran about 100 puzzles with &lt;code&gt;gpt-4o-mini&lt;/code&gt;, &lt;code&gt;gp-4o&lt;/code&gt;, and &lt;code&gt;claude-3-5-sonnet&lt;/code&gt;, but it became clear that Sonnet was going to perform the best, so I decide to only complete the 466 puzzles released as of today with Sonnet.
This wasn’t cheap but it was interesting to see the results.
I’m going to write up some more comprehensive findings and push the code soon.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-09-18</title><link>https://www.danielcorin.com/logs/2024/09/18/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/09/18/</guid><description>2024-09-18</description><pubDate>Wed, 18 Sep 2024 11:10:00 GMT</pubDate><content:encoded>&lt;p&gt;Some &lt;a href=&quot;https://randsinrepose.com/archives/words-on-founder-mode/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;interesting commentary&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; on the behaviors of founders, managers and leaders written by Rands.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href=&quot;https://racedorsey.com/posts/2024/jupyter-notebook-hugo/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Race’s article&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; on using Jupyter notebooks with Hugo was a helpful intro to the landscape.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-09-13</title><link>https://www.danielcorin.com/logs/2024/09/13/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/09/13/</guid><description>2024-09-13</description><pubDate>Fri, 13 Sep 2024 14:58:06 GMT</pubDate><content:encoded>&lt;p&gt;There have been a number of small-in-scope, but tough problems that I’ve run into that models haven’t been able crack as l’ve presented them via prompting.
Usually, these are problems with a few separate areas of complexity, like a recursive parser plus a weird templating language to do it in.
&lt;code&gt;o1&lt;/code&gt; is the first model that I can recall that took my high level approach and suggested a simplifying change to the input (&lt;code&gt;tree -F&lt;/code&gt; to &lt;code&gt;tree -J -F&lt;/code&gt;) that meaningfuly simplified the problem’s complexity (the parser is no longer needed if the input is JSON).
With this change and two followups to correct a hallucination, the model output a recursive Hugo template shortcode to render a filetree with collapsible folders.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-09-11</title><link>https://www.danielcorin.com/logs/2024/09/11/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/09/11/</guid><description>2024-09-11</description><pubDate>Wed, 11 Sep 2024 18:59:12 GMT</pubDate><content:encoded>&lt;p&gt;I’m making another, more thorough pass of course.fast.ai, including all notebooks and videos and this time I am going to focus more on the projects.
I’ll also be logging a lot more notes as doing so is by far the most effective way that I learn things.&lt;/p&gt;
&lt;p&gt;The course materials are very detailed but I’ve still run into some rough edges.
The image search for bird vs. forest image classifier didn’t quite work without some modifications to make the search work.
Also, the recommended approach for working the textbook notebooks is on Google Colab, which requests a large number of account permissions for accessing my Google account masquerading as “Google Drive for Desktop” and doesn’t make me feel great.
I was able to run most of the examples on my personal computer, but training the model for the IMDB movie review classifier was quite slow.
I decided it might be worth trying out Colab, since I imagine there could be several more models of this size/complexity I’ll want to train and finding a reasonably fast way to do that will be useful.
I went back to the &lt;a href=&quot;https://colab.research.google.com/github/fastai/fastbook/blob/master/01_intro.ipynb?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Colab notebook&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; and tried running the cat-or-not classification example.
This seemed to take longer than it did on my local machine with an apparent ETA of ~30 minutes.&lt;/p&gt;
&lt;p&gt;I probably need to subscribe to Colab if I want this to be performant, but the free tier no longer seems to be a great option.
I guess Deep Learning and this course have become more popular than Google (understandably) wants to foot the bill for.
If this becomes prohibitive locally, I might subscribe but considering this book is several years old, it’s possible hardware has caught up to handle the examples.
I guess I will find out.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Using the handy and recommended &lt;code&gt;doc&lt;/code&gt; command, I learned how the magic &lt;code&gt;untar_data&lt;/code&gt; command works — mostly, where it downloads the data.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;untar_data(url:&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, archive:pathlib.Path&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;None&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, data:pathlib.Path&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;None&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, c_key:&lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&apos;data&apos;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, force_download:&lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;bool&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;False&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, base:&lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&apos;~/.fastai&apos;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;untar_data(url:str, archive:pathlib.Path=None, data:pathlib.Path=None, c_key:str=&amp;#x27;data&amp;#x27;, force_download:bool=False, base:str=&amp;#x27;~/.fastai&amp;#x27;)&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Unsurprisingly, I found all the datasets I’d downloaded so far in &lt;code&gt;~/.fastai&lt;/code&gt; and was also reminded how many dotfiles/folders were in my home directory from software I had tried once.&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;To put it bluntly, if you’re a senior decision maker in your organization (or you’re advising senior decision makers), the most important takeaway is this: if you ensure that you really understand what test and validation sets are and why they’re important, then you’ll avoid the single biggest source of failures we’ve seen when organizations decide to use AI. For instance, if you’re considering bringing in an external vendor or service, make sure that you hold out some test data that the vendor never gets to see. Then you check their model on your test data, using a metric that you choose based on what actually matters to you in practice, and you decide what level of performance is adequate. (It’s also a good idea for you to try out some simple baseline yourself, so you know what a really simple model can achieve. Often it’ll turn out that your simple model performs just as well as one produced by an external “expert”!)&lt;/p&gt;
&lt;/blockquote&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-09-10</title><link>https://www.danielcorin.com/logs/2024/09/10/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/09/10/</guid><description>2024-09-10</description><pubDate>Tue, 10 Sep 2024 21:05:09 GMT</pubDate><content:encoded>&lt;p&gt;A &lt;a href=&quot;https://eugeneyan.com/writing/web-frameworks/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;nice writeup&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; by Eugene on building a simple data viewer webapp with a few different framworks.
I am going to need to try out including &lt;a href=&quot;https://docs.fastht.ml/llms-ctx.txt?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;llm-ctx.txt&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; next time I write FastHTML to see if it helps make the language model better at writing it.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-09-08</title><link>https://www.danielcorin.com/logs/2024/09/08/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/09/08/</guid><description>2024-09-08</description><pubDate>Sun, 08 Sep 2024 09:58:06 GMT</pubDate><content:encoded>&lt;p&gt;I was going to write a quick guide on how to get up and running using Google’s Gemini model via API, since I found it quite straightforward and Twitter is currently dunking on Google for how hard this is.
When I tried to retrace my steps, the CSS for the documentation was failing to load with a 503, so I guess this will have to wait until another day.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-09-07</title><link>https://www.danielcorin.com/logs/2024/09/07/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/09/07/</guid><description>2024-09-07</description><pubDate>Sat, 07 Sep 2024 14:17:57 GMT</pubDate><content:encoded>&lt;p&gt;I am continuing to see a lot of buzz about &lt;a href=&quot;https://huggingface.co/blog/manu/colpali?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;ColPali&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; and &lt;a href=&quot;https://github.com/QwenLM/Qwen2-VL?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Qwen2-VL&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
I’d like to try these out but haven’t put together enough of the pieces to make sense of it yet.
I am also seeing a lot of conversation about how traditional OCR to LLM pipelines will be superseded by these approaches.
Based on my experience with VLMs, this seems directionally correct.
The overall amount of noise makes it tough to figure out what is worth focusing on and what is real vs. hype.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-09-05</title><link>https://www.danielcorin.com/logs/2024/09/05/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/09/05/</guid><description>2024-09-05</description><pubDate>Thu, 05 Sep 2024 19:36:00 GMT</pubDate><content:encoded>&lt;p&gt;Played around a bit with &lt;a href=&quot;https://github.com/BoundaryML/baml?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;baml&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; for extraction structured data with a VLM.
It’s an interesting approach and has better ergonomics and tooling from most things I’ve tried so far.
I like how you can declare test cases in the same place as the object schemas and that there is a built-in playground.
I need to see how to handle multi-step pipelines.&lt;/p&gt;
&lt;p&gt;I experimented with doing data extraction from pictures of menus.
Early results were mixed.
I think my photo quality isn’t great and that might be one of the bigger issues.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-09-02</title><link>https://www.danielcorin.com/logs/2024/09/02/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/09/02/</guid><description>2024-09-02</description><pubDate>Mon, 02 Sep 2024 09:52:11 GMT</pubDate><content:encoded>&lt;astro-embed-tweet&gt;&lt;blockquote class=&quot;twitter-tweet&quot; data-dnt=&quot;true&quot; data-theme=&quot;dark&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Benchmarking &amp;gt;80 LLMs shows: The best model is not necessarily the best for your programming language 😱&lt;br&gt;&lt;br&gt;- Best overall: Anthropic’s Sonnet 3.5&lt;br&gt;- Best for Go: Meta’s Llama 3.1 405B&lt;br&gt;- Best for Java: OpenAI’s GPT-4 Turbo&lt;br&gt;- Best for Ruby: OpenAI’s GPT-4o&lt;br&gt;&lt;br&gt;Good models for one… &lt;a href=&quot;https://t.co/EYUphEI5rH&quot;&gt;pic.twitter.com/EYUphEI5rH&lt;/a&gt;&lt;/p&gt;&amp;mdash; Markus Zimmermann (@zimmskal) &lt;a href=&quot;https://x.com/zimmskal/status/1830564004592316745?ref_src=twsrc%5Etfw&quot;&gt;September 2, 2024&lt;/a&gt;&lt;/blockquote&gt;

&lt;/astro-embed-tweet&gt;
&lt;p&gt;Great to see more concrete results published on how different models are “the best” at writing different programming languages.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;Iterating on &lt;a href=&quot;/projects/cogno&quot;&gt;Cogno&lt;/a&gt;, improving the “remaining guesses” and sharing functionality.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;Shipped a very-beta version of a recipe ingredient extraction app, which can then generate a grocery list from many recipes.
Calling it snapcart.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;Having used &lt;a href=&quot;https://fastht.ml/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;fasthtml&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; and sqlite of a couple projects now, I was interested in trying to run an app as a Cloudflare Worker to make use of D1, which is a serverless, sqlite compatible database.
It looks like the library needs to be added to the worker runtime first, according to &lt;a href=&quot;https://github.com/cloudflare/workerd/discussions/2488?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;this issue&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-08-31</title><link>https://www.danielcorin.com/logs/2024/08/31/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/08/31/</guid><description>2024-08-31</description><pubDate>Sat, 31 Aug 2024 15:53:58 GMT</pubDate><content:encoded>&lt;p&gt;Language models can’t&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;generate instructions for knitting patterns&lt;/li&gt;
&lt;li&gt;generate crossword puzzles from scatch&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Language models can&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;generate Connections puzzles&lt;/li&gt;
&lt;/ul&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-08-29</title><link>https://www.danielcorin.com/logs/2024/08/26/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/08/26/</guid><description>2024-08-29</description><pubDate>Thu, 29 Aug 2024 01:14:47 GMT</pubDate><content:encoded>&lt;p&gt;Incredible read: &lt;a href=&quot;https://eieio.games/essays/the-secret-in-one-million-checkboxes/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://eieio.games/essays/the-secret-in-one-million-checkboxes/&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I failed many attempts at getting Sonnet to write code to display the folder structure of the output of a &lt;code&gt;tree -F&lt;/code&gt; command using shortcodes.
After a lot of prompting, I wrote a mini-design doc on how the feature needed to be implemented and used it as context for Sonnet.
I tried several variants of instructions in the design including trying to improve it with the model itself for clarity.
I validated that the model could translate from the &lt;code&gt;tree -F&lt;/code&gt; to the html markup directly.
It could.
That in fact is the example html target document in my design doc. Here is that doc:&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id=&quot;file-tree-shortcode&quot;&gt;&lt;a class=&quot;heading-link-wrapper&quot; href=&quot;#file-tree-shortcode&quot;&gt;File Tree Shortcode&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;This document outlines the requirements for a Hugo shortcode that generates an HTML representation of a file tree structure.&lt;/p&gt;
&lt;h2 id=&quot;input&quot;&gt;&lt;a class=&quot;heading-link-wrapper&quot; href=&quot;#input&quot;&gt;Input&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The shortcode takes a multi-line string input representing the output of a &lt;code&gt;tree -F&lt;/code&gt; command. For example:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;./&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;├── Makefile&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;├── __pycache__/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;│   ├── clean.cpython-312.pyc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;│   ├── ex.cpython-312.pyc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;│   ├── ex1.cpython-312.pyc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;│   ├── ex2.cpython-312.pyc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;│   ├── extract.cpython-312.pyc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;│   └── main.cpython-312.pyc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;├── ex.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;└── src/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;├── __pycache__/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;│   ├── clean.cpython-312.pyc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;│   └── extract.cpython-312.pyc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;├── clean.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;└── extract.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;./├── Makefile├── __pycache__/│   ├── clean.cpython-312.pyc│   ├── ex.cpython-312.pyc│   ├── ex1.cpython-312.pyc│   ├── ex2.cpython-312.pyc│   ├── extract.cpython-312.pyc│   └── main.cpython-312.pyc├── ex.py└── src/    ├── __pycache__/    │   ├── clean.cpython-312.pyc    │   └── extract.cpython-312.pyc    ├── clean.py    └── extract.py&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;output&quot;&gt;&lt;a class=&quot;heading-link-wrapper&quot; href=&quot;#output&quot;&gt;Output&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The shortcode should generate nested HTML lists representing the file tree structure:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Folders are represented by &lt;code&gt;&amp;#x3C;li&gt;&lt;/code&gt; elements with a &lt;code&gt;&amp;#x3C;span class=&quot;caret&quot;&gt;&lt;/code&gt; child containing the folder name.&lt;/li&gt;
&lt;li&gt;Files are represented by simple &lt;code&gt;&amp;#x3C;li&gt;&lt;/code&gt; elements.&lt;/li&gt;
&lt;li&gt;The content of each folder is contained in a &lt;code&gt;&amp;#x3C;ul class=&quot;nested&quot;&gt;&lt;/code&gt; element.&lt;/li&gt;
&lt;li&gt;The root folder (’./’ in the example) should be treated as the topmost level.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;requirements&quot;&gt;&lt;a class=&quot;heading-link-wrapper&quot; href=&quot;#requirements&quot;&gt;Requirements&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Support arbitrary depth of nested folders.&lt;/li&gt;
&lt;li&gt;Use tree command characters (├, │, └, ─ and spaces) from the input to determine the level at which the file or folder should be nested.&lt;/li&gt;
&lt;li&gt;Distinguish between folders (ending with ’/’) and files.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Assume the input will be well formed.&lt;/p&gt;
&lt;h2 id=&quot;usage&quot;&gt;&lt;a class=&quot;heading-link-wrapper&quot; href=&quot;#usage&quot;&gt;Usage&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;[shortcode begin] ./ ├── Makefile ├── __pycache__/ │ ├── clean.cpython-312.pyc │&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;├── ex.cpython-312.pyc │ ├── ex1.cpython-312.pyc │ ├── ex2.cpython-312.pyc │ ├──&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;extract.cpython-312.pyc │ └── main.cpython-312.pyc ├── ex.py └── src/ ├──&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;__pycache__/ │ ├── clean.cpython-312.pyc │ └── extract.cpython-312.pyc ├──&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;clean.py └── extract.py [shortcode end]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;[shortcode begin] ./ ├── Makefile ├── __pycache__/ │ ├── clean.cpython-312.pyc │├── ex.cpython-312.pyc │ ├── ex1.cpython-312.pyc │ ├── ex2.cpython-312.pyc │ ├──extract.cpython-312.pyc │ └── main.cpython-312.pyc ├── ex.py └── src/ ├──__pycache__/ │ ├── clean.cpython-312.pyc │ └── extract.cpython-312.pyc ├──clean.py └── extract.py [shortcode end]&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Here is example html markup that shows how the above example of the shortcode should render.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;caret&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;./&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;nested&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;Makefile&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;caret&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;__pycache__&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;nested&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;clean.cpython-312.pyc&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;ex.cpython-312.pyc&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;ex1.cpython-312.pyc&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;ex2.cpython-312.pyc&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;extract.cpython-312.pyc&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;main.cpython-312.pyc&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;ex.py&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;caret&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;src&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;nested&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;caret&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;__pycache__&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;nested&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;clean.cpython-312.pyc&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;extract.cpython-312.pyc&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;clean.py&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;extract.py&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;&lt;ul&gt;  &lt;li&gt;    &lt;span class=&amp;#x22;caret&amp;#x22;&gt;./&lt;/span&gt;    &lt;ul class=&amp;#x22;nested&amp;#x22;&gt;      &lt;li&gt;Makefile&lt;/li&gt;      &lt;li&gt;        &lt;span class=&amp;#x22;caret&amp;#x22;&gt;__pycache__&lt;/span&gt;        &lt;ul class=&amp;#x22;nested&amp;#x22;&gt;          &lt;li&gt;clean.cpython-312.pyc&lt;/li&gt;          &lt;li&gt;ex.cpython-312.pyc&lt;/li&gt;          &lt;li&gt;ex1.cpython-312.pyc&lt;/li&gt;          &lt;li&gt;ex2.cpython-312.pyc&lt;/li&gt;          &lt;li&gt;extract.cpython-312.pyc&lt;/li&gt;          &lt;li&gt;main.cpython-312.pyc&lt;/li&gt;        &lt;/ul&gt;      &lt;/li&gt;      &lt;li&gt;ex.py&lt;/li&gt;      &lt;li&gt;        &lt;span class=&amp;#x22;caret&amp;#x22;&gt;src&lt;/span&gt;        &lt;ul class=&amp;#x22;nested&amp;#x22;&gt;          &lt;li&gt;            &lt;span class=&amp;#x22;caret&amp;#x22;&gt;__pycache__&lt;/span&gt;            &lt;ul class=&amp;#x22;nested&amp;#x22;&gt;              &lt;li&gt;clean.cpython-312.pyc&lt;/li&gt;              &lt;li&gt;extract.cpython-312.pyc&lt;/li&gt;            &lt;/ul&gt;          &lt;/li&gt;          &lt;li&gt;clean.py&lt;/li&gt;          &lt;li&gt;extract.py&lt;/li&gt;        &lt;/ul&gt;      &lt;/li&gt;    &lt;/ul&gt;  &lt;/li&gt;&lt;/ul&gt;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The above tree is depth three since &lt;code&gt;src&lt;/code&gt; contains a folder called &lt;code&gt;__pycache__&lt;/code&gt; which contains files.
The shortcode should support file trees of arbitrary depth.
The output should also trim away the markup outputted by the &lt;code&gt;tree&lt;/code&gt; command and just show the file names.
If it’s helpful, you can assume a folder will also end with a &lt;code&gt;/&lt;/code&gt; in its name.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Here is the output of one such attempt which took several follow to even get it to render.
&lt;em&gt;It doesn’t work&lt;/em&gt;.
I tried for a while and couldn’t get Sonnet to complete this task as described.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{{ $tree := .Inner | replaceRE &quot;^\\./&quot; &quot;&quot; | split &quot;\n&quot; }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{{ range $index, $line := $tree }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{{ $indent := (len (replaceRE &quot;[^│]&quot; &quot;&quot; $line)) }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{{ $isDir := (strings.HasSuffix $line &quot;/&quot;) }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{{ $name := (replaceRE &quot;^[│ ]*├── |^[│ ]*└── |^[│ ]*│ |^[│ ]* &quot; &quot;&quot; $line) }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{{ if eq $indent 0 }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{{ if $isDir }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;caret&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;{{ $name }}&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;nested&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{{ else }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;{{ $name }}&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{{ end }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{{ else if $isDir }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{{ range $i, $v := seq 1 $indent }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{{ end }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;caret&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;{{ $name }}&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;nested&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{{ else }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{{ range $i, $v := seq 1 (sub $indent 1) }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{{ end }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;{{ $name }}&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{{ end }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{{ end }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{{ range $i, $v := seq 1 (len $tree) }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{{ end }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;{{ $tree := .Inner | replaceRE &amp;#x22;^\\./&amp;#x22; &amp;#x22;&amp;#x22; | split &amp;#x22;\n&amp;#x22; }}&lt;ul&gt;    {{ range $index, $line := $tree }}    {{ $indent := (len (replaceRE &amp;#x22;[^│]&amp;#x22; &amp;#x22;&amp;#x22; $line)) }}    {{ $isDir := (strings.HasSuffix $line &amp;#x22;/&amp;#x22;) }}    {{ $name := (replaceRE &amp;#x22;^[│ ]*├── |^[│ ]*└── |^[│ ]*│ |^[│ ]* &amp;#x22; &amp;#x22;&amp;#x22; $line) }}    {{ if eq $indent 0 }}    {{ if $isDir }}    &lt;li&gt;&lt;span class=&amp;#x22;caret&amp;#x22;&gt;{{ $name }}&lt;/span&gt;        &lt;ul class=&amp;#x22;nested&amp;#x22;&gt;            {{ else }}            &lt;li&gt;{{ $name }}&lt;/li&gt;            {{ end }}            {{ else if $isDir }}            {{ range $i, $v := seq 1 $indent }}        &lt;/ul&gt;    &lt;/li&gt;    {{ end }}    &lt;li&gt;&lt;span class=&amp;#x22;caret&amp;#x22;&gt;{{ $name }}&lt;/span&gt;        &lt;ul class=&amp;#x22;nested&amp;#x22;&gt;            {{ else }}            {{ range $i, $v := seq 1 (sub $indent 1) }}        &lt;/ul&gt;    &lt;/li&gt;    {{ end }}    &lt;li&gt;{{ $name }}&lt;/li&gt;    {{ end }}    {{ end }}    {{ range $i, $v := seq 1 (len $tree) }}&lt;/ul&gt;&lt;/li&gt;{{ end }}&lt;/ul&gt;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I also prompted Sonnet on whether it could identify any issues with the described approach, like if I somehow am suggesting it does something impossible (I’m not seeing it).
It said&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I believe the approach is generally sound and should work well.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Finally, I tried adding some of the &lt;a href=&quot;gohugo.io/templates/introduction/&quot;&gt;Hugo docs&lt;/a&gt; to Cursor but this didn’t seem to be improving things much.
Side note: I need to spend some time experimenting with &lt;a href=&quot;https://zed.dev/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Zed&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;My takeaway is Sonnet wasn’t trained on enough Hugo templates to be good at it.
All the prompt engineering I could throw at it in a few hours didn’t seem to be enough to overcome these challenges.
Neither was trying &lt;code&gt;gpt-4&lt;/code&gt;, &lt;code&gt;llama-70b&lt;/code&gt; or one of the Gemini models (I forgot which I tried).&lt;/p&gt;
&lt;p&gt;The fact that models could not solve this task violated my intuition for the problem.
I was able to prompt the model to write Python code to output the desired html and it did so without issue.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;generate_file_tree_html&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;tree_output&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;lines &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; tree_output.strip().split(&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;html_output &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;stack &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; line &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; lines:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;indent_level &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(line) &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(line.lstrip(&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot; │&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;is_dir &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; line.strip().endswith(&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;/&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;name &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; line.strip().split(&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot; &quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)[&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;].strip(&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;│ ├── └── &quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; stack &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;and&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; stack[&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;][&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; indent_level:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;html_output.append(&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;&amp;#x3C;/ul&gt;&amp;#x3C;/li&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;stack.pop()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; is_dir:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;html_output.append(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&apos;&amp;#x3C;li&gt;&amp;#x3C;span class=&quot;caret&quot;&gt;&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;#x3C;/span&gt;&amp;#x3C;ul class=&quot;nested&quot;&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;stack.append((indent_level, name))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;html_output.append(&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;&amp;#x3C;li&gt;&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&amp;#x3C;/li&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; stack:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;html_output.append(&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;&amp;#x3C;/ul&gt;&amp;#x3C;/li&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;stack.pop()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;&amp;#x3C;ul&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;.join(html_output) &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;&amp;#x3C;/ul&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A19E8D&quot;&gt;# Example usage&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;tree_output &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;./&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;├── Makefile&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;├── __pycache__/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;│   ├── clean.cpython-312.pyc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;│   ├── ex.cpython-312.pyc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;│   ├── ex1.cpython-312.pyc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;│   ├── ex2.cpython-312.pyc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;│   ├── extract.cpython-312.pyc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;│   └── main.cpython-312.pyc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;├── ex.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;└── src/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;├── __pycache__/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;│   ├── clean.cpython-312.pyc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;│   └── extract.cpython-312.pyc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;├── clean.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;└── extract.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;html_output &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; generate_file_tree_html(tree_output)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(html_output)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;def generate_file_tree_html(tree_output):    lines = tree_output.strip().split(&amp;#x22;\n&amp;#x22;)    html_output = []    stack = []    for line in lines:        indent_level = len(line) - len(line.lstrip(&amp;#x22; │&amp;#x22;))        is_dir = line.strip().endswith(&amp;#x22;/&amp;#x22;)        name = line.strip().split(&amp;#x22; &amp;#x22;, 1)[-1].strip(&amp;#x22;│ ├── └── &amp;#x22;)        while stack and stack[-1][0] &gt;= indent_level:            html_output.append(&amp;#x22;&lt;/ul&gt;&lt;/li&gt;&amp;#x22;)            stack.pop()        if is_dir:            html_output.append(                f&amp;#x27;&lt;li&gt;&lt;span class=&amp;#x22;caret&amp;#x22;&gt;{name}&lt;/span&gt;&lt;ul class=&amp;#x22;nested&amp;#x22;&gt;&amp;#x27;            )            stack.append((indent_level, name))        else:            html_output.append(f&amp;#x22;&lt;li&gt;{name}&lt;/li&gt;&amp;#x22;)    while stack:        html_output.append(&amp;#x22;&lt;/ul&gt;&lt;/li&gt;&amp;#x22;)        stack.pop()    return &amp;#x22;&lt;ul&gt;&amp;#x22; + &amp;#x22;&amp;#x22;.join(html_output) + &amp;#x22;&lt;/ul&gt;&amp;#x22;# Example usagetree_output = &amp;#x22;&amp;#x22;&amp;#x22;./├── Makefile├── __pycache__/│   ├── clean.cpython-312.pyc│   ├── ex.cpython-312.pyc│   ├── ex1.cpython-312.pyc│   ├── ex2.cpython-312.pyc│   ├── extract.cpython-312.pyc│   └── main.cpython-312.pyc├── ex.py└── src/    ├── __pycache__/    │   ├── clean.cpython-312.pyc    │   └── extract.cpython-312.pyc    ├── clean.py    └── extract.py&amp;#x22;&amp;#x22;&amp;#x22;html_output = generate_file_tree_html(tree_output)print(html_output)&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;This script outputs the expected html (without whitespace).&lt;/p&gt;
&lt;p&gt;Lastly, I prompted Sonnet to translate this working Python code into a Hugo shortcode.
This approach also failed.
The model kept hallucinating functions like &lt;code&gt;while&lt;/code&gt; that don’t exist in the Hugo templating language.
At this point, I didn’t have confidence in any of the models to write Hugo templates/shortcodes.&lt;/p&gt;
&lt;p&gt;Before I called it, I figured if I were to try one more thing, I would pull together as many examples of Hugo template docs and usage and pass that as context to the model with the same instructions.
I manually copied and pasted a ton of the examples from &lt;a href=&quot;https://gohugo.io/functions?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://gohugo.io/functions&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; then prompted the model similarly to before.&lt;/p&gt;
&lt;p&gt;It output the following&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{{- $tree := .Inner | strings.TrimRight &quot;\n&quot; | split &quot;\n&quot; -}} {{- $root := index&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;$tree 0 | strings.TrimRight &quot;/&quot; -}}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;caret&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;{{ $root }}&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;nested&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{{- $level := 0 -}} {{- $stack := slice (dict &quot;level&quot; 0 &quot;ul&quot; &quot;&quot;) -}} {{-&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;range after 1 $tree -}} {{- $line := . -}} {{- $name := $line | replaceRE&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&quot;^[│├└]([─ ]+)&quot; &quot;&quot; | strings.TrimRight &quot;/&quot; -}} {{- $depth := len (findRE&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&quot;[│├└]&quot; $line) -}} {{- $isDir := strings.HasSuffix . &quot;/&quot; -}} {{- if gt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;$depth $level -}}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;nested&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{{- $stack = append $stack (dict &quot;level&quot; $depth &quot;ul&quot; &quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&quot;) -}} {{- else if lt $depth $level -}} {{- range seq (sub $level $depth)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;-}} {{- $last := index $stack (sub (len $stack) 1) -}} {{ $last.ul |&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;safeHTML }} {{- $stack = slice $stack 0 (sub (len $stack) 1) -}} {{- end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;-}} {{- end -}}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{{- if $isDir -}}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;caret&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;{{ $name }}&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{{- else -}} {{ $name }} {{- end -}}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{{- $level = $depth -}} {{- end -}} {{- range seq (len $stack) -}} {{-&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;$last := index $stack (sub (len $stack) 1) -}} {{ $last.ul | safeHTML }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{{- end -}}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;{{- $tree := .Inner | strings.TrimRight &amp;#x22;\n&amp;#x22; | split &amp;#x22;\n&amp;#x22; -}} {{- $root := index$tree 0 | strings.TrimRight &amp;#x22;/&amp;#x22; -}}&lt;ul&gt;  &lt;li&gt;    &lt;span class=&amp;#x22;caret&amp;#x22;&gt;{{ $root }}&lt;/span&gt;    &lt;ul class=&amp;#x22;nested&amp;#x22;&gt;      {{- $level := 0 -}} {{- $stack := slice (dict &amp;#x22;level&amp;#x22; 0 &amp;#x22;ul&amp;#x22; &amp;#x22;&amp;#x22;) -}} {{-      range after 1 $tree -}} {{- $line := . -}} {{- $name := $line | replaceRE      &amp;#x22;^[│├└]([─ ]+)&amp;#x22; &amp;#x22;&amp;#x22; | strings.TrimRight &amp;#x22;/&amp;#x22; -}} {{- $depth := len (findRE      &amp;#x22;[│├└]&amp;#x22; $line) -}} {{- $isDir := strings.HasSuffix . &amp;#x22;/&amp;#x22; -}} {{- if gt      $depth $level -}}      &lt;ul class=&amp;#x22;nested&amp;#x22;&gt;        {{- $stack = append $stack (dict &amp;#x22;level&amp;#x22; $depth &amp;#x22;ul&amp;#x22; &amp;#x22;      &lt;/ul&gt;      &amp;#x22;) -}} {{- else if lt $depth $level -}} {{- range seq (sub $level $depth)      -}} {{- $last := index $stack (sub (len $stack) 1) -}} {{ $last.ul |      safeHTML }} {{- $stack = slice $stack 0 (sub (len $stack) 1) -}} {{- end      -}} {{- end -}}      &lt;li&gt;        {{- if $isDir -}}        &lt;span class=&amp;#x22;caret&amp;#x22;&gt;{{ $name }}&lt;/span&gt;        {{- else -}} {{ $name }} {{- end -}}      &lt;/li&gt;      {{- $level = $depth -}} {{- end -}} {{- range seq (len $stack) -}} {{-      $last := index $stack (sub (len $stack) 1) -}} {{ $last.ul | safeHTML }}      {{- end -}}    &lt;/ul&gt;  &lt;/li&gt;&lt;/ul&gt;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;which also does not work.
Maybe, I’ll get this working at some point.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-08-25</title><link>https://www.danielcorin.com/logs/2024/08/25/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/08/25/</guid><description>2024-08-25</description><pubDate>Sun, 25 Aug 2024 09:40:23 GMT</pubDate><content:encoded>&lt;p&gt;I tried &lt;a href=&quot;https://www.val.town/townie?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Townie&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
As has become tradition, I tried to build a writing editor for myself.
Townie got a simple version of this working with the ability to send a highlighted selection of text to the backend and run it through a model along with a prompt.
This experience was relatively basic, using a textarea and a popup.
From here, I got Townie to add the ability to show diffs between the model proposal and original text.
It was able to do this for the selected text using CSS in a straightforward manner.
I wanted to support multiple line diffs and diffs across multiple sections of the file.
I suggested we use an open source text editor.
At this point, things started to break.
The app stopped rendering and I wasn’t able to prompt it into resolving the issue.
I did manage to get it to revert (fixing forward) to a state where the app rendered again.
However, the LLM-completion hotkey was broken.&lt;/p&gt;
&lt;p&gt;These model-assisted code generation tools are quite powerful, but in my opinion, they require multiple interaction UX options for the end user.
High-level directives through a chat don’t seem to be enough to build complex applications and debugging skills are necessary if you want to integrate or adopt some code and the model is failing to do it as instructed.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-08-23</title><link>https://www.danielcorin.com/logs/2024/08/23/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/08/23/</guid><description>2024-08-23</description><pubDate>Fri, 23 Aug 2024 18:47:53 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been trying out Cursor’s hyped composer mode with Sonnet.
I am a bit disappointed.
Maybe I shouldn’t be.
I think it’s not as good as I expected because I hold Cursor to a higher bar than the other developer tools out there.
It’s possible it’s over-hyped or that I am using it suboptimally.
But it’s more or less of the same quality as most of the tools of the same level of abstraction like &lt;a href=&quot;https://aider.chat/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;aider&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, etc.
I am trying to create a multipane, React-based writing app.
It’s possible I need to provide more detailed description than I am giving so far.
However, my main complaint after running it is that now I have a ton of code that isn’t quite right and I don’t know where or why it’s sort of broken.
Now, I need to read &lt;em&gt;all&lt;/em&gt; the code.
This approach is notably less productive than slowly building up an app with LLM-code generation, because after each generation I can test the new code and make sure it does what I intended (or write automated tests to do that).
The code I get out of Composer doesn’t do what I want, but the LLM doesn’t know why, either because my high level task is under-specified, it doesn’t have enough context, or the ask is too vague.
I don’t usually run into this issue when I use &lt;kbd&gt;cmd+k&lt;/kbd&gt;.
Maybe, I need to watch some videos of folks using it.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I’ve been playing around with different UXs for LLM-augmented text editors.
There is a lot out there but nothing I love.
I’ve been circling around the idea of a configurable prompt library that I can invoke on an arbitrary selection of a document.
I’ve tried playing around with &lt;a href=&quot;https://microsoft.github.io/monaco-editor/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Monaco&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; and augmenting the command palette with LLM-specific actions.
This works well enough, but these end up sitting alongside the standard actions and that doesn’t feel quite right.
I played around with &lt;a href=&quot;https://aieditor.dev/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;AIEditor&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; and I like some of the ideas, but the UX isn’t right for writing entries like these which is my top priority.&lt;/p&gt;
&lt;p&gt;I think I’m realizing the LLM-commands need to be native to the OS, so that they are portable across applications and can be provided multi-modal context to be most useful.
I was (re-?)introduced to a radial menu the other day.
They’re unintrusive, always available popovers, that can be given access to arbitrary context assuming they’re given the right permissions.
This context could include everything from what app is open, what text is highlighted or even a screenshot of everything that is visible.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I spent some time trying to implement a radial selector in Xcode.
I’ve spent maybe a couple hours in my life writing Swift.
This skill deficiency proved problematic even with the help of a model.
Even with &lt;code&gt;gpt-4o&lt;/code&gt;, I couldn’t figure out how to get a hotkey event monitor working.
Also, I am still not a fan of Xcode.
Maybe, I will attempt this idea with web tech.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-08-22</title><link>https://www.danielcorin.com/logs/2024/08/22/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/08/22/</guid><description>2024-08-22</description><pubDate>Thu, 22 Aug 2024 08:34:51 GMT</pubDate><content:encoded>&lt;p&gt;I tried out &lt;a href=&quot;https://openrouter.ai/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;OpenRouter&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; for the first time.
My struggles to find an API that hosted &lt;code&gt;llama3.1-405B&lt;/code&gt; motivated me to try this out.
There are too many companies providing inference APIs to keep track.
OpenRouter seems to be aiming to make all these available from a single place, sort of like &lt;a href=&quot;https://aws.amazon.com/bedrock/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;AWS Bedrock&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, but not locked in cloud configuration purgatory.
The first thing I tried was playing a game of Connections with &lt;code&gt;nousresearch/hermes-3-llama-3.1-405b&lt;/code&gt;.
It didn’t get any categories correct for the &lt;a href=&quot;https://www.nytimes.com/svc/connections/v2/2024-08-21.json?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;2024-08-21&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; puzzle.
OpenRouter’s app showcase list is an interesting window into how people are using models.
The dominant themes are&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;coding&lt;/li&gt;
&lt;li&gt;characters and roleplay&lt;/li&gt;
&lt;li&gt;writing assistant&lt;/li&gt;
&lt;li&gt;homework&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Users of some of these apps generate almost 1B tokens per day according to OpenRouter’s stats.
The highest per month (excluding the OpenRouter Playground) is over 30B.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Playing with all these models, I’ve started to crystallize a set of a few things I try to get a sense of the vibes&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;play Connections&lt;/li&gt;
&lt;li&gt;ask “hi, who am I speaking with?”&lt;/li&gt;
&lt;li&gt;ask for Python code to read all JSON files from my Desktop and all subfolders&lt;/li&gt;
&lt;li&gt;ask “what is the most recent event you can remember?” which usually gets a response related to the date the training data snapshot was taken&lt;/li&gt;
&lt;/ul&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-08-21</title><link>https://www.danielcorin.com/logs/2024/08/21/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/08/21/</guid><description>2024-08-21</description><pubDate>Wed, 21 Aug 2024 18:00:30 GMT</pubDate><content:encoded>&lt;p&gt;An interesting &lt;a href=&quot;https://phrack.org/issues/71/17.html?ref=danielcorin.com#article&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;read&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; about how the world works through an economic lens.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;But what is success? You can quantify net worth, but can you quantify the good you have brought to others lives?&lt;/p&gt;
&lt;p&gt;It is not all about the TAM monster—doing cool things that are NOT ECONOMICALLY VALUABLE, but ARTISTICALLY VALUABLE, is equally important.&lt;/p&gt;
&lt;/blockquote&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-08-20</title><link>https://www.danielcorin.com/logs/2024/08/20/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/08/20/</guid><description>2024-08-20</description><pubDate>Tue, 20 Aug 2024 09:28:41 GMT</pubDate><content:encoded>&lt;p&gt;I downloaded &lt;a href=&quot;https://github.com/UdaraJay/Pile?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Pile&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, a journal app with a first-class language model integration and an offline &lt;a href=&quot;https://ollama.com/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;ollama&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; integration.
For personal data, running the model offline is a must for me.
I use DayOne sporadically, but I’m intrigued by the potential of a more of conversational format as I write.&lt;/p&gt;
&lt;p&gt;The concept of a journal writing partner appears to be capturing mindshare.
I found another similar app called &lt;a href=&quot;https://www.mindsera.com/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Mindsera&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; today as well.
I also learned about &lt;a href=&quot;https://lex.page/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Lex&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; which puts collaborative and AI features at the heart of document authorship, I concept I played around a bit with &lt;a href=&quot;https://www.danielcorin.com/projects/write-partner&quot;&gt;Write Partner&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For me, all of these tools are circling a sweet spot of what I am looking for, but don’t quite fit.&lt;/p&gt;
&lt;p&gt;I currently do most of my writing in Cursor.
This is for a few reasons:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I version control my site with &lt;code&gt;git&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;I use &lt;code&gt;hugo&lt;/code&gt; to build and extend my site with &lt;a href=&quot;https://gohugo.io/content-management/shortcodes?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;shortcodes&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;I write posts in Markdown&lt;/li&gt;
&lt;li&gt;I write a lot of code in my posts&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Cursor’s &lt;kbd&gt;cmd+k&lt;/kbd&gt; editing and chat mode are pretty good fits for my use cases.
However, Cursor does struggle when trying to modify documents containing codefences, because it seems to use those as a stop sequence.&lt;/p&gt;
&lt;p&gt;Additionally, Cursor doesn’t provide native grammar tools or tools for structuring and refining the writing itself.
These features are things Lex focuses on much more.
Things like ideation, outline generation and rephrasing.
Additionally, it takes work to get Cursor into a focus state.
It’s not difficult, it’s just not trivial.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I found this VS Code extension called &lt;a href=&quot;https://github.com/mejedi/vscode-hugo-live-preview?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;vscode-hugo-live-preview&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, which provides a side-by-side rendering of my markdown and the Hugo-rendered page.
It took a bit of work to setup but I’m pretty happy with how it turned out.&lt;/p&gt;
&lt;p&gt;Using this command, I could build the project from source&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;npx&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;vsce&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;package&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;npx vsce package&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;then installed it to Cursor with&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;cursor&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;--install-extension&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;hugo-live-preview-0.1.1.vsix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;cursor --install-extension hugo-live-preview-0.1.1.vsix&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The extension makes it easier to validate the correctness of the format of what I am writing, while also having everything else I like about Cursor/VS Code available.
The other nice-to-haves could probably be implemented with a combination of &lt;kbd&gt;cmd+k&lt;/kbd&gt;, the chat and text expansion for the prompts.
This approach assumes I want to hack something.
I could also build something novel and personal, based on exactly what I want, but I’m not sure I can quite articulate what that is — it’s a lot of knowing it when you see it.&lt;/p&gt;
&lt;p&gt;Things my ideal writing experience would have&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Side by side markup and rendered page (maybe markdown, maybe something else)&lt;/li&gt;
&lt;li&gt;Can toggle between raw text and rendered content&lt;/li&gt;
&lt;li&gt;AI chat with “apply changes functionality”&lt;/li&gt;
&lt;li&gt;AI highlight-and-replace like Cursor’s &lt;kbd&gt;cmd+k&lt;/kbd&gt;&lt;/li&gt;
&lt;li&gt;AI prompt library to which I can add edit-centric or generative-centric prompts that will interact with my existing document, propose changes, give feedback and make corrections.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href=&quot;https://zed.dev/blog/zed-ai?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Zed&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; released a bunch of AI features.
I really like the concept of adding urls and files to the context window of the model along with the prompt.
Cursor supports this but requires you to index the docs beforehand.
I like that approach as well but sometimes I know a page is going to be a one-off and don’t want permanently index it.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-08-19</title><link>https://www.danielcorin.com/logs/2024/08/19/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/08/19/</guid><description>2024-08-19</description><pubDate>Mon, 19 Aug 2024 20:44:54 GMT</pubDate><content:encoded>&lt;p&gt;I setup &lt;a href=&quot;https://wezfurlong.org/wezterm/index.html?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;WezTerm&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; and experimented a bit.
It’s a nice terminal emulator.
I like the builtin themes and Lua as a configuration language.
These days, I largely rely on the Cursor integrated terminal.
It’s not the greatest, but having &lt;kbd&gt;cmd+k&lt;/kbd&gt; it’s a bit of a killer feature.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-08-18</title><link>https://www.danielcorin.com/logs/2024/08/18/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/08/18/</guid><description>2024-08-18</description><pubDate>Sun, 18 Aug 2024 21:24:09 GMT</pubDate><content:encoded>&lt;astro-embed-tweet&gt;&lt;blockquote class=&quot;twitter-tweet&quot; data-dnt=&quot;true&quot; data-theme=&quot;dark&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;I can&amp;#39;t believe we&amp;#39;re back to discussing LLMs&amp;#39; ability to reason. Where have you been these past two years? In a bunker? If you&amp;#39;d actually worked with LLMs during this time, you&amp;#39;d know by now that they&amp;#39;re obviously pattern-matching machines. Try asking one to write incorrect… &lt;a href=&quot;https://t.co/KPcDCI2cjD&quot;&gt;pic.twitter.com/KPcDCI2cjD&lt;/a&gt;&lt;/p&gt;&amp;mdash; BURKOV (@burkov) &lt;a href=&quot;https://x.com/burkov/status/1825009534970077532?ref_src=twsrc%5Etfw&quot;&gt;August 18, 2024&lt;/a&gt;&lt;/blockquote&gt;

&lt;/astro-embed-tweet&gt;
&lt;p&gt;I haven’t viewed the LLMs-can, LLM-can’t discourse through this lens explicitly.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;they’re obviously pattern-matching machines&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I’m not sure if I understand at what point these are different things.
Maybe it’s a consequence of how I learn, but I generally develop skills on the foundations of seeing and understanding how someone more skilled than myself solves a problem.&lt;/p&gt;
&lt;p&gt;My foundational knowledge of Python, Protobuf and prompting language models allowed me to combine these skills and develop &lt;a href=&quot;https://github.com/danielcorin/impulse?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;impulse&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
Could a language model have (I say this loosely) invented this solution given a high-level description of the problem?&lt;/p&gt;
&lt;p&gt;Probably not without a high degree of specificity.&lt;/p&gt;
&lt;p&gt;How would I even describe the problem at a high enough level to not prescribe the solution but in enough detail that I didn’t already do most of the work designing the solution myself?&lt;/p&gt;
&lt;p&gt;Returning to the original point&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;they’re obviously pattern-matching machines&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A huge amount of “work” in the world is pattern matching.
That includes jobs done on computers and more generally the application of widely understood expertise.
A model can translate data from form A to B or write a script to do that.
A model can also analyze a picture of an error light on a thermostat and serve as a productive information source to help you identify and potentially solve the problem yourself (though I can’t say I have first-hand confirmation for this use case but I did read a relatively well-documented account of the process).
With information accessibility and pattern matching readily available to scale, the reason, insight or vision is the remaining part of work for which there is a premium and deep need.&lt;/p&gt;
&lt;p&gt;Folks are skeptical that models can generate anything original&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Asking an LLM for an “original thought” is almost oxymoronic, if not just moronic. It was built with the express purpose of not doing that.&lt;/p&gt;
&lt;p&gt;A really good predictability machine is not very helpful in artistic expression&lt;/p&gt;
&lt;p&gt;LLMs were funniest at their earliest stages. Image generation was funniest here as well. Remember those “trail cam” images we got from Dall-e mini? As our systems got better, the humor was lost.&lt;/p&gt;
&lt;p&gt;A really good predictability machine is not very helpful in artistic expression.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://emnudge.dev/blog/markov-chains-are-funny/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://emnudge.dev/blog/markov-chains-are-funny/&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;In contrast, other folks find models notably creative&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I’ve long been enamored by DALL-E 2’s specific flavor of visual creativity. Especially given the text-to-image AI system’s age, it seems to have an incredible command over color, light and dark, the abstract and the concrete, and the emotional resonance that their careful combination can conjure.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://thesephist.com/posts/epistemic-calibration/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://thesephist.com/posts/epistemic-calibration/&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;In a way, it’s almost like they’re talking about two entirely different things.
Models are elusive and much of an individual’s positive or negative experience using one or seeing what it can do seems to be contingent on how they prompt the model.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-08-12</title><link>https://www.danielcorin.com/logs/2024/08/12/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/08/12/</guid><description>2024-08-12</description><pubDate>Mon, 12 Aug 2024 19:59:57 GMT</pubDate><content:encoded>&lt;p&gt;I tried to run &lt;code&gt;florence-2&lt;/code&gt; and &lt;code&gt;colpali&lt;/code&gt; using the &lt;a href=&quot;https://huggingface.co/inference-api/serverless?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Huggingface serverless inference API&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
Searching around, there seems to pretty pretty start support for &lt;code&gt;image-text-to-text&lt;/code&gt; models.
On Github, I only found a &lt;a href=&quot;https://github.com/search?type=code&amp;#x26;q=image-text-to-text&amp;#x26;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;few projects&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; that even reference these types of models.&lt;/p&gt;
&lt;p&gt;I didn’t really know what I was doing, so I copied the &lt;a href=&quot;https://huggingface.co/docs/api-inference/quicktour?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;example code&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; then tried to use a model to augment it to call &lt;code&gt;florence-2&lt;/code&gt;.
Initially, it seemed like it was working:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;❯&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;python&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;run.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;&apos;error&apos;&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&apos;Model microsoft/Florence-2-large is currently loading&apos;,&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&apos;estimated_time&apos;:&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;61.724300384521484&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;❯ python run.py{&amp;#x27;error&amp;#x27;: &amp;#x27;Model microsoft/Florence-2-large is currently loading&amp;#x27;, &amp;#x27;estimated_time&amp;#x27;: 61.724300384521484}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;After the time passed, there seemed to be a problem:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;❯&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;python&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;run.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;&apos;error&apos;&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&apos;image-text-to-text is not a valid pipeline&apos;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;❯ python run.py{&amp;#x27;error&amp;#x27;: &amp;#x27;image-text-to-text is not a valid pipeline&amp;#x27;}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;When trying out &lt;code&gt;vidore/colpali&lt;/code&gt;, there seems to be an architectural incompatibility that prevents the serverless inference API from even loading the model&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;❯&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;python&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;run.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;&apos;error&apos;&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&apos;HfApiJson(Deserialize(Error(&quot;unknown variant `colpali`, expected one of `text-generation-inference`, `transformers`, `allennlp`, `flair`, `espnet`, `asteroid`, `speechbrain`, `timm`, `sentence-transformers`, `spacy`, `sklearn`, `stanza`, `adapter-transformers`, `fasttext`, `fairseq`, `pyannote-audio`, `doctr`, `nemo`, `fastai`, `k2`, `diffusers`, `paddlenlp`, `mindspore`, `open_clip`, `span-marker`, `bertopic`, `peft`, `setfit`&quot;, line: 1, column: 411)))&apos;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;❯ python run.py{&amp;#x27;error&amp;#x27;: &amp;#x27;HfApiJson(Deserialize(Error(&amp;#x22;unknown variant &amp;#x60;colpali&amp;#x60;, expected one of &amp;#x60;text-generation-inference&amp;#x60;, &amp;#x60;transformers&amp;#x60;, &amp;#x60;allennlp&amp;#x60;, &amp;#x60;flair&amp;#x60;, &amp;#x60;espnet&amp;#x60;, &amp;#x60;asteroid&amp;#x60;, &amp;#x60;speechbrain&amp;#x60;, &amp;#x60;timm&amp;#x60;, &amp;#x60;sentence-transformers&amp;#x60;, &amp;#x60;spacy&amp;#x60;, &amp;#x60;sklearn&amp;#x60;, &amp;#x60;stanza&amp;#x60;, &amp;#x60;adapter-transformers&amp;#x60;, &amp;#x60;fasttext&amp;#x60;, &amp;#x60;fairseq&amp;#x60;, &amp;#x60;pyannote-audio&amp;#x60;, &amp;#x60;doctr&amp;#x60;, &amp;#x60;nemo&amp;#x60;, &amp;#x60;fastai&amp;#x60;, &amp;#x60;k2&amp;#x60;, &amp;#x60;diffusers&amp;#x60;, &amp;#x60;paddlenlp&amp;#x60;, &amp;#x60;mindspore&amp;#x60;, &amp;#x60;open_clip&amp;#x60;, &amp;#x60;span-marker&amp;#x60;, &amp;#x60;bertopic&amp;#x60;, &amp;#x60;peft&amp;#x60;, &amp;#x60;setfit&amp;#x60;&amp;#x22;, line: 1, column: 411)))&amp;#x27;}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Overall, not a great success.
Despite being more worked on an available than ever, models continue to be challenging to deploy for a layperson like me.
Without an API, I’ve generally not made a ton of progress using large, state of the art models.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-08-11</title><link>https://www.danielcorin.com/logs/2024/08/11/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/08/11/</guid><description>2024-08-11</description><pubDate>Sun, 11 Aug 2024 20:05:24 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been doing some experimentation with smaller models and embeddings, including &lt;a href=&quot;https://huggingface.co/distilbert/distilbert-base-uncased-finetuned-sst-2-english?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;distilbert/distilbert-base-uncased-finetuned-sst-2-english&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; and &lt;a href=&quot;https://huggingface.co/cardiffnlp/twitter-roberta-base-sentiment-latest?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;cardiffnlp/twitter-roberta-base-sentiment-latest&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; as binary sentiment classifiers and &lt;a href=&quot;https://huggingface.co/google/vit-base-patch16-224?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;google/vit-base-patch16-224&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; as an image classifier.&lt;/p&gt;
&lt;p&gt;Also &lt;a href=&quot;https://github.com/mmihaltz/word2vec-GoogleNews-vectors?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;GoogleNews-vectors-negative300&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; and &lt;a href=&quot;https://huggingface.co/fse/fasttext-wiki-news-subwords-300?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;fasttext-wiki-news-subwords-300&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; for embeddings to try and find semantically similar words and concepts.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-08-09</title><link>https://www.danielcorin.com/logs/2024/08/09/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/08/09/</guid><description>2024-08-09</description><pubDate>Fri, 09 Aug 2024 08:09:19 GMT</pubDate><content:encoded>&lt;p&gt;I figured out the issue with adding &lt;code&gt;mistral-large&lt;/code&gt;.
After a bit of debugging, I realized by manually calling &lt;a href=&quot;https://github.com/simonw/llm-mistral/blob/main/llm_mistral.py?ref=danielcorin.com#L35&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;llm_mistral.refresh_models()&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; that something was wrong with how I had added the secret on Modal.
It turns out the environment variable name for the Mistral API key needed to be &lt;code&gt;LLM_MISTRAL_KEY&lt;/code&gt;.
I’m going to try and make a PR to the repo to document this behavior.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I’ve been trying to run models locally.
Mostly specifically &lt;a href=&quot;https://huggingface.co/vidore/colpali?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;colpali&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; and &lt;a href=&quot;https://huggingface.co/microsoft/Florence-2-large?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;florence-2&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
This has not been easy.
It’s possible these require GPUs and might not be macOS friendly.
I’ve ended up deep in Github threads and dependency help trying to get basic inference running.
I might need to start with something more simpler and smaller and build up from there.&lt;/p&gt;
&lt;p&gt;A taste of the problems&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;❯&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;pip&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;flash_attn&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;Collecting&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;flash_attn&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;Using&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;cached&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;flash_attn-2.6.3.tar.gz&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; (2.6 &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;MB&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;Installing&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;build&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;dependencies&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;done&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;Getting&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;requirements&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;to&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;build&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;wheel&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;error&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;error:&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;subprocess-exited-with-error&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;×&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;Getting&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;requirements&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;to&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;build&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;wheel&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;did&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;not&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;run&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;successfully.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;ModuleNotFoundError:&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;No&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;module&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;named&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&apos;torch&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;[end of output]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;note:&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;This&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;originates&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;subprocess,&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;and&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;likely&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;not&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;problem&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;with&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;pip.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;error:&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;subprocess-exited-with-error&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;×&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;Getting&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;requirements&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;to&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;build&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;wheel&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;did&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;not&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;run&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;successfully.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;│&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;exit&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;code:&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;╰─&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;See&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;above&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;output.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;note:&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;This&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;originates&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;subprocess,&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;and&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;likely&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;not&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;problem&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;with&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;pip.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;❯ pip install flash_attnCollecting flash_attn  Using cached flash_attn-2.6.3.tar.gz (2.6 MB)  Installing build dependencies ... done  Getting requirements to build wheel ... error  error: subprocess-exited-with-error  × Getting requirements to build wheel did not run successfully.  ...      ModuleNotFoundError: No module named &amp;#x27;torch&amp;#x27;      [end of output]  note: This error originates from a subprocess, and is likely not a problem with pip.error: subprocess-exited-with-error× Getting requirements to build wheel did not run successfully.│ exit code: 1╰─&gt; See above for output.note: This error originates from a subprocess, and is likely not a problem with pip.&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;❯&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;pip&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;--extra-index-url&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;https://download.pytorch.org/whl/cpu&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;torch==2.4.0+cpu&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;Looking&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;indexes:&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;https://pypi.org/simple,&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;https://download.pytorch.org/whl/cpu&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;ERROR:&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;Could&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;not&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;that&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;satisfies&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;the&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;requirement&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;torch==2.4.0+cpu&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; (from &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;versions:&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;2.0.0,&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;2.0.1,&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;2.1.0,&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;2.1.1,&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;2.1.2,&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;2.2.0,&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;2.2.1,&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;2.2.2,&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;2.3.0,&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;2.3.1,&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;2.4.0&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;ERROR:&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;No&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;matching&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;distribution&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;found&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;torch==2.4.0+cpu&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;❯ pip install --extra-index-url https://download.pytorch.org/whl/cpu torch==2.4.0+cpuLooking in indexes: https://pypi.org/simple, https://download.pytorch.org/whl/cpuERROR: Could not find a version that satisfies the requirement torch==2.4.0+cpu (from versions: 2.0.0, 2.0.1, 2.1.0, 2.1.1, 2.1.2, 2.2.0, 2.2.1, 2.2.2, 2.3.0, 2.3.1, 2.4.0)ERROR: No matching distribution found for torch==2.4.0+cpu&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Not great.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-08-08</title><link>https://www.danielcorin.com/logs/2024/08/08/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/08/08/</guid><description>2024-08-08</description><pubDate>Thu, 08 Aug 2024 18:34:22 GMT</pubDate><content:encoded>&lt;p&gt;I did some experimentation deriving a data model iteratively (something I am currently calling “data model distillation”) by sequentially passing multiple images (could work with text as well) to a language model and prompting it to improve the schema using any new learnings from the current image.
Results so far have been unimpressive.&lt;/p&gt;
&lt;p&gt;I’ve been hearing good things about &lt;code&gt;mistral-large-2&lt;/code&gt;.
I’m working on adding it to &lt;a href=&quot;https://github.com/danielcorin/bots-doing-things/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;bots-doing-things&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; but have had a bit of dependency trouble so far.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-08-06</title><link>https://www.danielcorin.com/logs/2024/08/06/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/08/06/</guid><description>2024-08-06</description><pubDate>Tue, 06 Aug 2024 19:09:50 GMT</pubDate><content:encoded>&lt;p&gt;I watched Jeremy Howard’s &lt;a href=&quot;https://www.youtube.com/watch?v=WuipZMUch18&amp;#x26;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;interview&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; with Carson Gross, the author of &lt;a href=&quot;https://htmx.org/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;htmx&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
As someone who learned my first bits of web dev with jQuery, I feel like I appreciate the foundations of the approach in the library, but am still early in fully developing my mental model.
Jeremy built a Python wrapper on top of &lt;code&gt;htmx&lt;/code&gt; called &lt;a href=&quot;https://docs.fastht.ml/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;fastml&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; and the combination of these technologies is pretty well aligned with the technology I like to work with.&lt;/p&gt;
&lt;p&gt;Another library mentioned in the conversation that I am going to check out was &lt;a href=&quot;https://github.com/gnat/surreal?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;surreal&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; CSS.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;OpenAI released &lt;a href=&quot;https://openai.com/index/introducing-structured-outputs-in-the-api/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;structured outputs&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; as a first class feature in the API.
It’s nice to see this get added but is also a bit annoying as the model APIs, capabilities and SDKs diverge further.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-08-04</title><link>https://www.danielcorin.com/logs/2024/08/04/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/08/04/</guid><description>2024-08-04</description><pubDate>Sun, 04 Aug 2024 18:04:16 GMT</pubDate><content:encoded>&lt;p&gt;I tried the Vision Pro today.
I had heard mixed reviews, mostly about how heavy it is and people getting headaches or vertigo.
Those challenges are real.
Even still, the experience was pretty incredible.
I might need to go back for another demo, so I can choose my own adventure rather than staying on the standard demo path.&lt;/p&gt;
&lt;p&gt;The eye tracking selection was natural and pretty effective.
I did find my eyes getting a bit tired though and eventually got a bit of a headache.
The pinch to select was also quite good, though I found myself wanting to cross my arms and then the device cameras couldn’t see my pinching and I had to put my hands back on my lap.
An Apple Watch could probably solve this somehow.&lt;/p&gt;
&lt;p&gt;The 8K video footage was something different.
Spoiler alert: they do a cheap trick where they film a ball flying right at you, and you instinctively have to put your hands up to protect yourself.
It feels like you are there, more than anything I’ve experienced outside the real thing.&lt;/p&gt;
&lt;p&gt;This achievement is remarkable but makes me a bit uneasy.
As they solve the challenges of device weight and motion sickness, we may be able to wear a version of a device like this all the time.
Combined with generative models, it will be increasingly possible to transform the aesthetics of reality to our liking.
I could see this pushing people further into their devices and away from the real world.
We’re already pretty into our phones, but we know the difference between our phone and reality (to say nothing of what we read on our phones).
Vision Pro makes you start to forget that what’s in front of your face isn’t real.
Powerful.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-08-02</title><link>https://www.danielcorin.com/logs/2024/08/02/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/08/02/</guid><description>2024-08-02</description><pubDate>Fri, 02 Aug 2024 06:32:06 GMT</pubDate><content:encoded>&lt;p&gt;I added image support for the &lt;a href=&quot;https://github.com/danielcorin/blog/blob/main/layouts/shortcodes/chat.html?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;chat&lt;/code&gt; shortcode&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; of this site.&lt;/p&gt;
&lt;section class=&quot;chat-section&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;chat-container&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;message-container&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;message user&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;message-content&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;user-label&quot; data-astro-cid-txfww4py&gt;User&lt;/div&gt; &lt;div class=&quot;bubble user-bubble&quot; data-astro-cid-txfww4py&gt; &lt;p&gt;Describe this image&lt;/p&gt; &lt;img src=&quot;https://blog.fal.ai/content/images/2024/08/image--36-.png&quot; alt=&quot;Image 1 from user message&quot; class=&quot;message-image&quot; data-astro-cid-txfww4py&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;   &lt;/div&gt;&lt;div class=&quot;message-container&quot; data-astro-cid-txfww4py&gt;  &lt;div class=&quot;message assistant&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;message-content&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;model-label&quot; data-astro-cid-txfww4py&gt;gpt-4o&lt;/div&gt;   &lt;div class=&quot;bubble assistant-bubble&quot; data-astro-cid-txfww4py&gt; &lt;p&gt;The image depicts a LEGO chef figure in a playful, detailed kitchen setting. The chef, dressed in a white chef’s coat, apron, and white chef’s hat, appears to be cooking or serving food. The LEGO figure is smiling and holding utensils, with plates of colorful items like tomatoes in the foreground, resembling food. The background features a kitchen environment with soft, out-of-focus lighting and various kitchen elements, contributing to the warm and inviting atmosphere.&lt;/p&gt;  &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;/div&gt; &lt;/div&gt; &lt;/section&gt; &lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-07-31</title><link>https://www.danielcorin.com/logs/2024/07/31/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/07/31/</guid><description>2024-07-31</description><pubDate>Wed, 31 Jul 2024 18:24:49 GMT</pubDate><content:encoded>&lt;p&gt;I tried stacking multiple pages of a pdf vertically as a single image to a model, then doing data extraction from this.
It didn’t work.
I imagine this is because models aren’t trained on much data like this.
The inference seemed to output made up data.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;An &lt;a href=&quot;https://buttondown.email/hillelwayne/archive/why-i-prefer-rst-to-markdown/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;interesting pitch&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; written by Hillel for preferring reStructuredText to Markdown.&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;Multiple studies have shown that hallucinations can be significantly reduced by giving the model the right context via retrieval or tools that the model can use to gather context (e.g., web search).&lt;/p&gt;
&lt;p&gt;While hallucinations are dealbreakers for many applications, they can be sufficiently curtailed to make GenAI usable for many more.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://x.com/chipro/status/1806023894878539923?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;- Chip Huyen&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;A search with Perplexity seemed to corroborate this assertion.
It led me to &lt;a href=&quot;https://arxiv.org/abs/2404.08189?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;this paper&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; which used RAG to reduce hallucinations.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Jon wrote about his &lt;a href=&quot;https://jnsgr.uk/2024/07/how-i-computer-in-2024/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;computer setup and tools&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
I always take inspiration from these kinds of write-ups.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I’d like to get something like &lt;a href=&quot;https://docs.openwebui.com/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;open-webui&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; set up to run remote or local using the same UI, that I can customize.
Still thinking about what this could look like.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;A &lt;a href=&quot;https://www.youtube.com/watch?v=f0MDjS9-dNw&amp;#x26;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;great video&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; by Mark Russinovich about AI security.
He discusses model fingerprinting, backdoors, jailbreaking, model tool abuse, crescendo attacks and more.
Definitely a lot to keep in mind when building with models.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-07-30</title><link>https://www.danielcorin.com/logs/2024/07/30/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/07/30/</guid><description>2024-07-30</description><pubDate>Tue, 30 Jul 2024 21:05:08 GMT</pubDate><content:encoded>&lt;p&gt;I wrote and screen-recorded myself building a Python app to call a model to extract structured data from an image, making heavy use of codegen with Cursor.
The same protobuf is used as instructions in the prompt and to unpack the result returned by the model into an instance of the class generated from the protobuf via &lt;code&gt;protoc&lt;/code&gt;.
I’m planning to open source this pattern once I get it into a better state.
Also, I’m looking into ways to host the video of the screen recording for fun and to reference later.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-07-29</title><link>https://www.danielcorin.com/logs/2024/07/29/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/07/29/</guid><description>2024-07-29</description><pubDate>Mon, 29 Jul 2024 20:16:18 GMT</pubDate><content:encoded>&lt;astro-embed-tweet&gt;&lt;blockquote class=&quot;twitter-tweet&quot; data-dnt=&quot;true&quot; data-theme=&quot;dark&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;My thesis is clearer now. I&amp;#39;m short on &amp;quot;complex reasoning and agents&amp;quot; because it is often a scapegoat for poorly described problem spaces.&lt;br&gt;&lt;br&gt;My thoughts on capabilities are about figuring out the 80/20 and baking &amp;quot;complex reasoning&amp;quot; into specific tools, so you put fewer…&lt;/p&gt;&amp;mdash; jason (@jxnlco) &lt;a href=&quot;https://x.com/jxnlco/status/1817593682662408610?ref_src=twsrc%5Etfw&quot;&gt;July 28, 2024&lt;/a&gt;&lt;/blockquote&gt;

&lt;/astro-embed-tweet&gt;
&lt;p&gt;This point resonates with me.
The more time I spend prompting models, the more it’s becoming clear that the clarity of the instructions are what matter most.
Writing clear, unambiguous instructions is not easy.
Decrease scope and you have a chance of doing it well.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;a href=&quot;https://protobuf.dev/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Protobuf&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; messages/schema in prompt instructions seem to be able to provide similar output structure to Pydantic, as &lt;a href=&quot;https://github.com/jxnl/instructor?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;instructor&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; and other libraries do.
I’ve experimented with this approach &lt;a href=&quot;/posts/2023/protobuf-contracts-with-llms&quot;&gt;in the past&lt;/a&gt; but there is a bit more that could be done to structure the messages so that they could serve the dual-purpose of prompt instructions and as RPC schemas.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-07-24</title><link>https://www.danielcorin.com/logs/2024/07/24/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/07/24/</guid><description>2024-07-24</description><pubDate>Wed, 24 Jul 2024 20:10:08 GMT</pubDate><content:encoded>&lt;p&gt;I ran the code from my &lt;a href=&quot;/posts/2024/fine-tuning-connections&quot;&gt;Fine-tuning “Connections” post&lt;/a&gt; using &lt;code&gt;gpt-4o-mini&lt;/code&gt;.
I was hoping the results might be a bit better, which could motivate an effort to fine-tune the model.
I’m not sure where my original version of this code went, so I reconstructed a repo for it.
Once I was done, I ran 100 prompts through the model to get a sense of where its baseline performance was.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Correct: 2.00%&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Incorrect: 98.00%&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Total Categories Correct: 19.25%&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;Correct: 2.00%Incorrect: 98.00%Total Categories Correct: 19.25%&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Not great, and not much different from &lt;code&gt;gpt-3.5-turbo&lt;/code&gt;.
With these kind of results, I wasn’t particularly motivated to put the effort in to do more fine tunes.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I read through the &lt;a href=&quot;https://python.useinstructor.com/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;instructor&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, &lt;a href=&quot;https://www.askmarvin.ai/welcome/what_is_marvin/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;marvin&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; and &lt;a href=&quot;https://github.com/OpenInterpreter/open-interpreter?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;open-interpreter&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; docs for the first time in a while.
It has been interesting to see these libraries grow and diverge.
I also read through how Jason has been structuring an &lt;a href=&quot;https://github.com/instructor-ai/evals/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;evals&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; repo for &lt;code&gt;instructor&lt;/code&gt;.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-07-23</title><link>https://www.danielcorin.com/logs/2024/07/23/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/07/23/</guid><description>2024-07-23</description><pubDate>Tue, 23 Jul 2024 17:03:38 GMT</pubDate><content:encoded>&lt;p&gt;Tried to join in on the &lt;code&gt;llama3.1-405b&lt;/code&gt; hype using Groq but sadly, no dice&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-X&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;POST&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;https://api.groq.com/openai/v1/chat/completions&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-H&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;Authorization: Bearer &lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;$GROQ_API_KEY&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-H&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;Content-Type: application/json&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-d&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&apos;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;model&quot;: &quot;llama-3.1-405b-reasoning&quot;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;messages&quot;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;role&quot;: &quot;user&quot;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;content&quot;: &quot;Hello, how are you?&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;}&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;curl -X POST https://api.groq.com/openai/v1/chat/completions \  -H &amp;#x22;Authorization: Bearer $GROQ_API_KEY&amp;#x22; \  -H &amp;#x22;Content-Type: application/json&amp;#x22; \  -d &amp;#x27;{    &amp;#x22;model&amp;#x22;: &amp;#x22;llama-3.1-405b-reasoning&amp;#x22;,    &amp;#x22;messages&amp;#x22;: [      {        &amp;#x22;role&amp;#x22;: &amp;#x22;user&amp;#x22;,        &amp;#x22;content&amp;#x22;: &amp;#x22;Hello, how are you?&amp;#x22;      }    ]  }&amp;#x27;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;error&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;message&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&quot;The model `llama-3.1-405b-reasoning` does not exist or you do not have access to it.&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&quot;invalid_request_error&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;code&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&quot;model_not_found&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;{  &amp;#x22;error&amp;#x22;: {    &amp;#x22;message&amp;#x22;: &amp;#x22;The model &amp;#x60;llama-3.1-405b-reasoning&amp;#x60; does not exist or you do not have access to it.&amp;#x22;,    &amp;#x22;type&amp;#x22;: &amp;#x22;invalid_request_error&amp;#x22;,    &amp;#x22;code&amp;#x22;: &amp;#x22;model_not_found&amp;#x22;  }}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The queue to try it out in &lt;a href=&quot;https://groq.com/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;their chat&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; is also quite long, so I guess either the infra needs to scale up or the hype needs to die down.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-07-22</title><link>https://www.danielcorin.com/logs/2024/07/22/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/07/22/</guid><description>2024-07-22</description><pubDate>Mon, 22 Jul 2024 18:25:16 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been wanting to create a chat component for this site for a while, because I really don’t like quoting conversations and manually formatting them each time.
When using a model playground, usually there is a code snippet option that generates Python code you can copy out intro a script.
Using that feature, I can now copy the message list and paste it as JSON into a Hugo shortcode and get results like this:&lt;/p&gt;
&lt;section class=&quot;chat-section&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;chat-container&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;message-container&quot; data-astro-cid-txfww4py&gt;   &lt;div class=&quot;message system&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;bubble system-bubble&quot; data-astro-cid-txfww4py&gt; &lt;p&gt;You should respond with the understanding they are an experienced software engineer&lt;/p&gt;  &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;message-container&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;message user&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;message-content&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;user-label&quot; data-astro-cid-txfww4py&gt;User&lt;/div&gt; &lt;div class=&quot;bubble user-bubble&quot; data-astro-cid-txfww4py&gt; &lt;p&gt;Can you explain what a Hugo shortcode is in a few sentences?&lt;/p&gt;  &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;   &lt;/div&gt;&lt;div class=&quot;message-container&quot; data-astro-cid-txfww4py&gt;  &lt;div class=&quot;message assistant&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;message-content&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;model-label&quot; data-astro-cid-txfww4py&gt;gpt-4o-mini&lt;/div&gt;   &lt;div class=&quot;bubble assistant-bubble&quot; data-astro-cid-txfww4py&gt; &lt;p&gt;Sure! A Hugo shortcode is a lightweight templating mechanism used in the Hugo static site generator to embed dynamic content within markdown files. They allow you to easily insert complex HTML or reusable components without cluttering your markdown with HTML tags. Shortcodes can accept parameters and can be used to simplify the inclusion of elements like videos, alerts, or even custom HTML blocks, enhancing the maintainability and readability of your content. You can create your own shortcodes or use predefined ones that come with Hugo.&lt;/p&gt;  &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;/div&gt; &lt;/div&gt; &lt;/section&gt; 
&lt;p&gt;I’d also like to add a copy button like this site has for code snippets to to copy the raw JSON conversation to the clipboard but this is a nice starting point.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-07-21</title><link>https://www.danielcorin.com/logs/2024/07/21/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/07/21/</guid><description>2024-07-21</description><pubDate>Sun, 21 Jul 2024 21:53:08 GMT</pubDate><content:encoded>&lt;h2 id=&quot;espanso&quot;&gt;&lt;a class=&quot;heading-link-wrapper&quot; href=&quot;#espanso&quot;&gt;espanso&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I tried out adding &lt;a href=&quot;https://espanso.org/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;espanso&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; to configure text expansions rather than using &lt;a href=&quot;https://www.alfredapp.com/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Alfred&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; just to try something new.
This is &lt;a href=&quot;https://github.com/danielcorin/nix-config/pull/3/files?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;the PR&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; to add it to my Nix configurations.
The existing examples are a toy configuration.
The tool seems to support far more complex configuration that I still need to look into further.&lt;/p&gt;
&lt;hr/&gt;
&lt;h2 id=&quot;gpt-4o-mini&quot;&gt;&lt;a class=&quot;heading-link-wrapper&quot; href=&quot;#gpt-4o-mini&quot;&gt;&lt;code&gt;gpt-4o-mini&lt;/code&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;astro-embed-tweet&gt;&lt;blockquote class=&quot;twitter-tweet&quot; data-dnt=&quot;true&quot; data-theme=&quot;dark&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;people frame this like it’s somehow a win over llama, when in fact the goal of llama has wildly succeeded: commoditize models and drive token cost to zero&lt;/p&gt;&amp;mdash; danny adkins (@dadkins_) &lt;a href=&quot;https://x.com/dadkins_/status/1815048314439532685?ref_src=twsrc%5Etfw&quot;&gt;July 21, 2024&lt;/a&gt;&lt;/blockquote&gt;

&lt;/astro-embed-tweet&gt;
&lt;p&gt;Admittedly, I have not gone to deep yet using &lt;code&gt;gpt-4o-mini&lt;/code&gt;.
I’ve been quite happy with &lt;code&gt;claude-3.5-sonnet&lt;/code&gt; and I typically use the most advanced model I can because I’m not running a huge number of model inferences per day at the moment.
However, swyx’s point&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;intelligence too cheap to meter, but also too ephemeral to support &amp;gt;5 players doing R&amp;amp;D? is there an angle here i’m missing?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;makes a lot of sense to me.&lt;/p&gt;
&lt;p&gt;How can several companies continue to spend the current amount of R&amp;amp;D dollars when it’s possible for one to fully marginalize almost the entire body of work of the rest with a single model release?
I need to use &lt;code&gt;gpt-4o-mini&lt;/code&gt; more to understand if that is what’s in fact happening.
One interesting thing I learned as I started to try it out — it seems to think it’s trained on the GPT-3.5 architecture.
Does this mean OpenAI back ported other improvement to an old model architecture, data set or training approach?
I’m trying to figure out if there is any concrete information on this.&lt;/p&gt;
&lt;section class=&quot;chat-section&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;chat-container&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;message-container&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;message user&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;message-content&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;user-label&quot; data-astro-cid-txfww4py&gt;User&lt;/div&gt; &lt;div class=&quot;bubble user-bubble&quot; data-astro-cid-txfww4py&gt; &lt;p&gt;what model architecture do you use?&lt;/p&gt;  &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;   &lt;/div&gt;&lt;div class=&quot;message-container&quot; data-astro-cid-txfww4py&gt;  &lt;div class=&quot;message assistant&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;message-content&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;model-label&quot; data-astro-cid-txfww4py&gt;gpt-4o-mini&lt;/div&gt;   &lt;div class=&quot;bubble assistant-bubble&quot; data-astro-cid-txfww4py&gt; &lt;p&gt;I’m based on the GPT-3 architecture, which is a transformer-based model. The transformer architecture employs mechanisms like self-attention and feedforward neural networks to process and generate text. If you have specific questions about the architecture or how it works, feel free to ask!&lt;/p&gt;  &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;/div&gt;&lt;div class=&quot;message-container&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;message user&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;message-content&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;user-label&quot; data-astro-cid-txfww4py&gt;User&lt;/div&gt; &lt;div class=&quot;bubble user-bubble&quot; data-astro-cid-txfww4py&gt; &lt;p&gt;when is your knowledge cutoff?&lt;/p&gt;  &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;   &lt;/div&gt;&lt;div class=&quot;message-container&quot; data-astro-cid-txfww4py&gt;  &lt;div class=&quot;message assistant&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;message-content&quot; data-astro-cid-txfww4py&gt; &lt;div class=&quot;model-label&quot; data-astro-cid-txfww4py&gt;gpt-4o-mini&lt;/div&gt;   &lt;div class=&quot;bubble assistant-bubble&quot; data-astro-cid-txfww4py&gt; &lt;p&gt;My knowledge cutoff date is October 2021. This means I have information and data available up to that point, but I don’t have access to events or developments that occurred after that date. If you have questions about anything up to that time, feel free to ask!&lt;/p&gt;  &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;/div&gt; &lt;/div&gt; &lt;/section&gt; 
&lt;p&gt;I think what Danny said (in the first tweet) is interesting but I’m not yet sure what to make of it.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;people frame this like it’s somehow a win over llama, when in fact the goal of llama has wildly succeeded: [sic] commoditize models and drive token cost to zero&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It seems like the inevitable ebb and flow of the current dynamic with models.
If like swyx implies, this causes R&amp;amp;D consolidation since the market can’t support ~5 major competitors in this space, the token price may go up again with less competition.
Something to revisit.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-07-20</title><link>https://www.danielcorin.com/logs/2024/07/20/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/07/20/</guid><description>2024-07-20</description><pubDate>Sat, 20 Jul 2024 12:08:13 GMT</pubDate><content:encoded>&lt;p&gt;Incredible writing and insight by Linus in &lt;a href=&quot;https://thesephist.com/posts/synth/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Synthesizer for thought&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
I will probably need to revisit this work several times.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-07-19</title><link>https://www.danielcorin.com/logs/2024/07/19/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/07/19/</guid><description>2024-07-19</description><pubDate>Fri, 19 Jul 2024 20:35:23 GMT</pubDate><content:encoded>&lt;p&gt;How can I add videos to Google Gemini as context (is this even what their newest model is called anymore) and why is it so hard to figure it out?
&lt;a href=&quot;https://gemini.google.com/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://gemini.google.com&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; only let’s me upload images.
I assume I need to pay for something.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I played around with &lt;a href=&quot;https://coral.cohere.com/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Cohere’s chat&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
They support web search and calculator and a python interpreter as tools as well as files and an internet search connector.
I added “Web Search with Site” pointed to &lt;a href=&quot;https://www.basketball-reference.com/players/c/curryst01.html?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Steph Curry’s stats on Basketball Reference&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
Then I prompted&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;how many points did Steph Curry score in 2022?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Unfortunately, this didn’t work so I tried again with the generic web search connector which also didn’t see to work.&lt;/p&gt;
&lt;p&gt;I tried a different prompt, but wasn’t able to get tool invocation to work consistently.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;using the context from websearch, how many points did Steph Curry score in 2016-2017?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I also played around some with the calculator and the python interpreter but didn’t find anything too novel in terms of the interaction model — maybe explicit tool invocation via &lt;code&gt;@&lt;/code&gt; reference but unfortunately, I couldn’t get that working too consistently.
I could see it being a useful pattern though to help disambiguate a large number of tools.&lt;/p&gt;
&lt;p&gt;What I was really keen to try was&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;first, a search specific data from the web page&lt;/li&gt;
&lt;li&gt;next, plot that data from the context using the python interpreter&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I couldn’t reach get the web search to give me any data though so I wasn’t able to try out the approach.&lt;/p&gt;
&lt;p&gt;I like Cohere’s UI, how they do source references and a lot of parts of how tools work.&lt;/p&gt;
&lt;p&gt;I realized, using &lt;code&gt;@&lt;/code&gt;, I could also use multiple tools in a single inference.&lt;/p&gt;
&lt;p&gt;I tried&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;using the context provided, get the average number of points did Steph Curry has scored in each season of his career, then plot the data with python&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Unfortunately, this seemed to fall into a retry loop until I got an error.&lt;/p&gt;
&lt;p&gt;Cohere has a lot of good things going here but I need the tools to work more consistently to bring it all together.&lt;/p&gt;
&lt;p&gt;I tried the above with Perplexity and had far more success building the data table.
Perplexity doesn’t have a python interpreter but it would write the code for me to create the plot.&lt;/p&gt;
&lt;p&gt;Using these tools has generally validated my decision to mostly using direct api or playground/workbench access to models.
I haven’t found and wrapped experience compelling enough to switch to as my primary tool yet.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-07-16</title><link>https://www.danielcorin.com/logs/2024/07/16/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/07/16/</guid><description>2024-07-16</description><pubDate>Tue, 16 Jul 2024 18:47:51 GMT</pubDate><content:encoded>&lt;p&gt;Research and experimentation with models presents different problems than I am used to dealing with on a daily basis.
The structure of what you want to try out changes often, so I understand why some folks prefer to use notebooks.
Personally, notebooks haven’t caught on for my so I’m still just writing scripts.
Several times now, I’ve run a relatively lengthy (and expensive) batch of prompts through a model only to realize something about my setup wasn’t quite right.
Definitely bringing back memories of &lt;a href=&quot;/posts/2024/fine-tuning-connections&quot;&gt;finetuning gpt-3.5-turbo to play Connections&lt;/a&gt; but I’m learning a lot along the way.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-07-14</title><link>https://www.danielcorin.com/logs/2024/07/14/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/07/14/</guid><description>2024-07-14</description><pubDate>Sun, 14 Jul 2024 19:26:20 GMT</pubDate><content:encoded>&lt;p&gt;I spent some more time experimenting with thought partnership with language models.
I’ve previously experimented with this idea when building &lt;a href=&quot;/projects/write-partner&quot;&gt;write-partner&lt;/a&gt;.
Referring back to this work, the prompts still seemed pretty effective for the goal at hand.
My original idea was to incrementally construct and iterate on a document by having a conversation with a language model.
A separate model would analyze that conversation and update the working draft of the document to include new information, thoughts or insights from the conversation.
It worked reasonably with &lt;code&gt;gpt-3.5-turbo&lt;/code&gt;.
I’m eager to try it with &lt;code&gt;claude-3.5-sonnet&lt;/code&gt;.
Today, I rebuilt a small version of this idea with &lt;code&gt;ollama&lt;/code&gt; in Python.
The goal was to try the idea out focused on a local-first experience.
For this, I used a smaller model.
Initially, I tried &lt;code&gt;mistral&lt;/code&gt; but ended up settling on &lt;code&gt;llama3&lt;/code&gt; as it was a bit better at following my instructions.
Instead of writing to the working file after each conversation turn, I decided to add a &lt;code&gt;done&lt;/code&gt; command that allowed me to do that on-demand.&lt;/p&gt;
&lt;p&gt;The results were pretty reasonable for such a small model&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;.
Something I think that I’ve been under-appreciating is that the raw conversations are the most important artifact produced from this tool and exercise.
It’s possible the model won’t propose useful edits or take the conversation in a productive direction, but the value that comes from the model interactions is how the user responds to the model.
This is the signal or raw material that can be refined into a more focused structure.
By only persisting the document across sessions (and focusing on the document as the important artifact), I’d lost sight of the fact that the user content is what is most important.
If I can effectively prompt the user into articulating answers to the model’s questions that are true to what they think, feel or want to accomplish, I can run that content through all sorts of model prompts to restructure it in more refined ways.
It’s important, however, to preserve all the raw signal.
In the case of write-partner, the document the model constructs is just one possible presentation of the user’s raw thoughts.
To stay as true to the user’s intention, we can’t discard any of what they say.
Their vision is the north star.
The model is just the conduit to transform the user’s vision and ideas into a form that can help communicate the idea to others.&lt;/p&gt;
&lt;section data-footnotes class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;&lt;a class=&quot;heading-link-wrapper&quot; href=&quot;#footnote-label&quot;&gt;Footnotes&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;Small models love to ignore directions about output formatting and will frequently add content like ‘Here’s the updated document:’ even when you explicitly prompt them not to. &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-07-13</title><link>https://www.danielcorin.com/logs/2024/07/13/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/07/13/</guid><description>2024-07-13</description><pubDate>Sat, 13 Jul 2024 20:45:48 GMT</pubDate><content:encoded>&lt;p&gt;While I didn’t have much success getting &lt;code&gt;gpt-4o&lt;/code&gt; to perform &lt;a href=&quot;https://github.com/anguyen8/vision-llms-are-blind/tree/main?tab=readme-ov-file&amp;#x26;ref=danielcorin.com#task-1---counting-line-intersection&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Task 1 - Counting Line Intersection&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; from the Vision Language Models Are Blind paper, I pulled down some code and did a bit of testing with Claude 3.5 Sonnet.
The paper reports the following success rate for Sonnet for this line intersection task:&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Thickness&lt;/th&gt;&lt;th&gt;Sonnet 3.5&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;80.00&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;79.00&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;73.00&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Average&lt;/td&gt;&lt;td&gt;77.33&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;I used the &lt;a href=&quot;https://github.com/anguyen8/vision-llms-are-blind/blob/main/src/LineIntersection/GenerateSamples.ipynb?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;code from the paper&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; to generate 30 similar images with line thickness 4 of intersecting (or not) lines.
I chose a thickness of 4 because this was the worst performing thickness according to the paper.
With these classified manually (I didn’t realize the &lt;code&gt;configurations.json&lt;/code&gt; file already had ground truths in it), I ran the prompt from the paper against these images using Sonnet.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;How many times do the blue and red lines intersect?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;My results were much better than those reported by the paper.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Results summary:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Expected count 0: 9/9 correct (Accuracy: 100.00%)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Expected count 1: 10/11 correct (Accuracy: 90.91%)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Failed images for count 1:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;- ./images/1/image_14_thickness_4.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Expected count 2: 10/10 correct (Accuracy: 100.00%)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Overall accuracy: 96.67%&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;Results summary:Expected count 0: 9/9 correct (Accuracy: 100.00%)Expected count 1: 10/11 correct (Accuracy: 90.91%)Failed images for count 1:  - ./images/1/image_14_thickness_4.pngExpected count 2: 10/10 correct (Accuracy: 100.00%)Overall accuracy: 96.67%&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Sonnet only made a single error out of 30 images.
I need to dig deeper into &lt;a href=&quot;https://arxiv.org/pdf/2407.06581?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;the paper&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; to ensure my methodology is the same as the authors’, but I was surprised to see such a divergence here since the implementation seemed straightforward.
Hopefully, I can find a bit more time to dig into these discrepancies.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-07-11</title><link>https://www.danielcorin.com/logs/2024/07/11/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/07/11/</guid><description>2024-07-11</description><pubDate>Thu, 11 Jul 2024 16:21:32 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;We probably are living in a simulation and we’re probably about to create the next one.&lt;/p&gt;
&lt;p&gt;Martin Casado&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://podcasts.apple.com/us/podcast/invest-like-the-best-with-patrick-oshaughnessy/id1154105909?i=1000661628717&amp;#x26;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://podcasts.apple.com/us/podcast/invest-like-the-best-with-patrick-oshaughnessy/id1154105909?i=1000661628717&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-07-10</title><link>https://www.danielcorin.com/logs/2024/07/10/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/07/10/</guid><description>2024-07-10</description><pubDate>Wed, 10 Jul 2024 21:54:52 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://vlmsareblind.github.io/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;VLMs are Blind&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; showed a number of interesting cases where vision language models fail to solve problems that humans can easily solve.
I spent some time trying to build examples with additional context that could steer the model to correctly complete Task 1: Counting line intersections, but didn’t have much success.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-07-08</title><link>https://www.danielcorin.com/logs/2024/07/08/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/07/08/</guid><description>2024-07-08</description><pubDate>Mon, 08 Jul 2024 21:20:01 GMT</pubDate><content:encoded>&lt;p&gt;Kent wrote &lt;a href=&quot;https://tidyfirst.substack.com/p/start-presentations-on-the-second?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;this post&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; on how to engage an audience by switching the first and second slide of a presentation.
The audience focuses more as they try to fill in the gaps of what you’ve introduced them to so far.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-07-07</title><link>https://www.danielcorin.com/logs/2024/07/07/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/07/07/</guid><description>2024-07-07</description><pubDate>Sun, 07 Jul 2024 10:06:01 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been chatting with &lt;code&gt;qwen2&lt;/code&gt;, a model from Alibaba.
I mostly chatted with it in English but it appears to support several other languages and I noticed a bit of Chinese leaking through even though I don’t speak it, so I’m not sure how I would have introduced it to the conversation.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;user: do you have a name&lt;/p&gt;
&lt;p&gt;assistant: As an AI, I don’t have personal names or identities like humans do. However, you can call me Assistant to easily refer to me in our conversation.&lt;/p&gt;
&lt;p&gt;user: is your name Qwen?&lt;/p&gt;
&lt;p&gt;assistant: Qwen is indeed the model name used by Alibaba Cloud for a large language model. As an AI assistant, I’m part of this ecosystem but have my own distinct functions and interactions.
You can think of me as Assistant, which serves as a friendly称呼 to address our conversation.&lt;/p&gt;
&lt;p&gt;user: what does “friendly称呼” mean in english?&lt;/p&gt;
&lt;p&gt;assistant: “Friendly称呼” translates to “friendly name” or “affectionate name” in English. It refers to a gentle or endearing way of referring to someone, usually something more casual and informal compared to their full name.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Another thing I noticed chatting with Qwen is it only had a loose sense of its identity, similar to other &lt;a href=&quot;logs/2024/06/21&quot;&gt;smaller models&lt;/a&gt; with which I have interacted.
In only one of three separate conversations, asking about the model’s identity, did it respond as “Qwen”.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;user: who are you&lt;/p&gt;
&lt;p&gt;assistant: I am a large language model created by Alibaba Cloud. I’m here to provide information and engage in conversation, but please note that my responses are limited to the knowledge up until 2021. If you have any questions or need assistance with something specific, feel free to ask!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;user: what is your name&lt;/p&gt;
&lt;p&gt;assistant: I am Qwen, a large language model created by Alibaba Cloud. I was trained on a diverse range of text data available in the public domain and am designed to assist with various tasks such as answering questions, engaging in conversations, and providing information. How can I help you today?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;user: do you have a name&lt;/p&gt;
&lt;p&gt;assistant: As I am an artificial intelligence, I don’t have personal attributes like names. However, you can simply call me Assistant. How may I assist you today?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I tried to do some idea development exercises with the model but it wasn’t so good at following instructions.
It tended to jump to asking its own questions (which it listed earlier in response to my suggestion the talk about a project I was working on) rather than following up and digging deeper into my responses as instructed.&lt;/p&gt;
&lt;p&gt;On a second attempt, it quickly reverted again to replying with a list of questions for me to answer.&lt;/p&gt;
&lt;p&gt;On a third attempt, I’ve gave much more specific instructions.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;let’s working on an idea together. ask me a single follow up question at a time to help me refine my idea further. do not respond with lists. look careful at what I say and craft a thoughtful, concise response&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This seemed to work much better.
I had a useful conversation with the model to refine an idea.
It even introduced something novel to the conversation that I hadn’t mentioned yet.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Henrik wrote an &lt;a href=&quot;https://www.henrikkarlsson.xyz/p/writing-to-think?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;excellent article&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; on writing as a tool for thought and refining ideas.&lt;/p&gt;
&lt;p&gt;This passage stood out to me in particular because it reminded me of how I approach &lt;a href=&quot;https://github.com/danielcorin/blog/blob/main/content/garden/software-eng/social-capital.md?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;asking for help&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; from peers or coworkers.
It’s also a helpful approach one can take when interacting with language models to get more helpful responses to prompts.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[B]y spelling out my naive understanding, I gave the linguist a good area to work on when he laid out a richer model of the flow of cultural influence in East Asia.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;I’ve had an &lt;a href=&quot;https://github.com/danielcorin/blog/issues/23?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;item open&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; to add search to this blog for a little while now.
Victoria wrote &lt;a href=&quot;https://victoria.dev/blog/add-search-to-hugo-static-sites-with-lunr/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;this awesome walkthrough&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; on how to add search to a Hugo blog with &lt;a href=&quot;https://github.com/olivernn/lunr.js/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;lunr&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
I took a &lt;a href=&quot;/search&quot;&gt;first pass&lt;/a&gt; adding it to the site.
It works, but I’d like to make it look a bit nicer.
Big thanks for Victoria for open sourcing and writing about her work!&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-07-03</title><link>https://www.danielcorin.com/logs/2024/07/03/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/07/03/</guid><description>2024-07-03</description><pubDate>Wed, 03 Jul 2024 08:33:45 GMT</pubDate><content:encoded>&lt;p&gt;I was inspired by &lt;a href=&quot;https://danilafe.com/blog/blog_microfeatures?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Daniel’s post&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; to add sidenotes to this blog.
I used &lt;code&gt;claude-3.5-sonnet&lt;/code&gt; to generate the CSS and HTML shortcode to do this.
I was impressed how well it turned out&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;.
It was almost too easy.
I’m not the most competent CSS writer and I had never written a Hugo shortcode before.
In several turns with Sonnet in Cursor, I was able to create a basic styled shortcode for a sidenote that appeared as a superscript number to start.
I prompted the model to allow me to use content in-line as the shortcode anchor and it generated those modifications.
Then I had an issue with the content overflowing on the right side if the content anchor was too far right or most of the time on mobile, so I asked the model for some options.
It suggested showing the sidenote content below the main post content.
I liked that, but didn’t like how it was shifting the content when it revealed the sidenote, so I prompted it to show the sidenote above the rest of the content.&lt;/p&gt;
&lt;p&gt;With each turn, Claude generated code that I copied into &lt;code&gt;layouts/shortcodes/sidenote.html&lt;/code&gt; and &lt;code&gt;assets/css/custom.css&lt;/code&gt;.
This was also my first attempt at building a new feature in an existing project with Sonnet and it was a pleasure to work with.&lt;/p&gt;
&lt;section data-footnotes class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;&lt;a class=&quot;heading-link-wrapper&quot; href=&quot;#footnote-label&quot;&gt;Footnotes&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;Now I need to read the CSS in more detail to understand what Claude did &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-07-02</title><link>https://www.danielcorin.com/logs/2024/07/02/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/07/02/</guid><description>2024-07-02</description><pubDate>Tue, 02 Jul 2024 20:00:23 GMT</pubDate><content:encoded>&lt;p&gt;A nice &lt;a href=&quot;https://www.stuartellis.name/articles/python-modern-practices?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;read&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; by Stuart on Python development tools.
This introduced me to the &lt;a href=&quot;https://www.pyopensci.org/python-package-guide/package-structure-code/pyproject-toml-python-package-metadata.html?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;pyproject.toml&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; configuration file, which is more comprehensive than a requirements file.
It’s something I’ll need to research a bit more before I’m ready to confidently adopt it.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href=&quot;https://www.anthropic.com/research/claude-character?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Claude’s character&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;A video about the personality of the AI, Claude.
I’ve not yet become a big “papers” person yet, so this was my first introduction to “&lt;a href=&quot;https://arxiv.org/abs/2212.08073?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Constitutional AI&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;”, which is a training approach where you use the model to train itself, by having it evaluate its own responses against the principles with which it was trained.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-06-26</title><link>https://www.danielcorin.com/logs/2024/06/26/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/06/26/</guid><description>2024-06-26</description><pubDate>Wed, 26 Jun 2024 21:41:25 GMT</pubDate><content:encoded>&lt;p&gt;I reproduced &lt;a href=&quot;https://twitter.com/joshwhiton/status/1806000237728931910?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Josh’s claude-3.5-sonnet mirror test&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
I hadn’t realized &lt;a href=&quot;https://twitter.com/joshwhiton/status/1770870738863415500?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;gpt-4 and claude-3-opus&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; had also been “passing” this test since back in March.
More interesting still, Sonnet actually seems to resist speaking in the first person about itself.
Fascinating research and evolution of the models’ behaviors.
After reading a bit more, apparently this type of model behavior has been around at least since &lt;a href=&quot;https://www.nytimes.com/2023/02/16/technology/bing-chatbot-microsoft-chatgpt.html?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Bing/Sydney (paywall, sorry)&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Mirror Test Part 1&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;1444&quot; height=&quot;574&quot; src=&quot;/_astro/mirror1.BI0JzscX_1DHUid.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Mirror Test Part 2&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;1468&quot; height=&quot;1298&quot; src=&quot;/_astro/mirror2.wyQNsHvj_Z17ucd5.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Mirror Test Part 3&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;1462&quot; height=&quot;1242&quot; src=&quot;/_astro/mirror3.D40FvNPH_Z2a9EjN.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Mirror Test Part 4&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;1460&quot; height=&quot;1348&quot; src=&quot;/_astro/mirror4.CVWKYk7u_Z1JeXnj.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Mirror Test Part 5&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;1464&quot; height=&quot;1372&quot; src=&quot;/_astro/mirror5.Dzsvpdqd_Z11bYXp.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Mirror Test Part 6&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;1416&quot; height=&quot;1416&quot; src=&quot;/_astro/mirror6.B0G_ff1E_ZGhizW.webp&quot; &gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href=&quot;https://onemillioncheckboxes.com/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://onemillioncheckboxes.com&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; is an amusing, massively-parallel art project(?)&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;One Million Checkboxes&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;3024&quot; height=&quot;1662&quot; src=&quot;/_astro/one-million-checkboxes.t7W0NDe1_Z1NKEWm.webp&quot; &gt;&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-06-25</title><link>https://www.danielcorin.com/logs/2024/06/25/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/06/25/</guid><description>2024-06-25</description><pubDate>Tue, 25 Jun 2024 09:07:23 GMT</pubDate><content:encoded>&lt;p&gt;I spent some time experimenting with &lt;a href=&quot;https://github.com/OpenDevin/OpenDevin?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;OpenDevin&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; using &lt;code&gt;claude-3-opus&lt;/code&gt; (I couldn’t find an easy way to use &lt;code&gt;claude-3.5-sonnet&lt;/code&gt;).
The agentic capabilities were not bad.
I gave a prompt and behind the scenes, the agent iterated, created files, ran code and course corrected.
I didn’t love that there wasn’t an obvious way to interrupt or help course correct.
My first attempt was with the same prompt I sent to Sonnet to build &lt;a href=&quot;/posts/2024/claude-3.5-sonnet-codes&quot;&gt;Tactic&lt;/a&gt;.
The result wasn’t bad.
OpenDevin (running in a container, which makes me feel better) setup several files in a project then seemed to install dependencies, iterate on issues and inspect the site running in the browser.
At least, this was what it claimed to be doing.
It was hard to validate what was happening, especially because the tool’s built in browser never loaded anything.
Maybe this was a bug or something unusual happening on the model side.&lt;/p&gt;
&lt;p&gt;After this first attempt, I tried to be less prescriptive, hoping to do a bit more back and forth with the agent.
After I submitted my first message, off the agent went.
I tried to interrupt its progress by sending another message, but that didn’t seem to work.
Eventually, it found a stopping point.
It had created a Python version of the game, which was not what I wanted.
I hadn’t had a chance to add any additional instructions.
I could have followed up with more at this point, but we had already gone pretty far in the wrong direction.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-06-24</title><link>https://www.danielcorin.com/logs/2024/06/24/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/06/24/</guid><description>2024-06-24</description><pubDate>Mon, 24 Jun 2024 21:25:08 GMT</pubDate><content:encoded>&lt;p&gt;I weirdly was running into an issue where whenever a ⌘F search didn’t return a result, my screen would flash white.
It was irritating me for several days.
Fortunately, I was able to find &lt;a href=&quot;https://apple.stackexchange.com/questions/25605/how-can-i-stop-my-whole-screen-from-flashing-white-on-errors?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;a solution that addressed it&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;killall&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;coreaudiod&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;sudo killall coreaudiod&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;hr&gt;
&lt;p&gt;I was writing code with &lt;code&gt;claude-3.5-sonnet&lt;/code&gt; and prompted it to add input validation for input arguments.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Claude 3.5 Sonnet Code Completion&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;1470&quot; height=&quot;1020&quot; src=&quot;/_astro/code-completion.DmqsMOFl_5lSnX.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Most of the code what straight forward and I was expecting the one sentence prompt to get me 5-10 lines of code with path validation, I did not expect these lines.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;valid_models &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;llava&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;llava-llama3&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;moondream&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;]  &lt;/span&gt;&lt;span style=&quot;--0:#A19E8D&quot;&gt;# Add or modify as needed&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; model_name &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;not&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; valid_models:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;Error: Invalid model name. Choose from: &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&apos;, &apos;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;.join(valid_models)&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;sys.exit(&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;    valid_models = [&amp;#x22;llava&amp;#x22;, &amp;#x22;llava-llama3&amp;#x22;, &amp;#x22;moondream&amp;#x22;]  # Add or modify as needed    if model_name not in valid_models:        print(f&amp;#x22;Error: Invalid model name. Choose from: {&amp;#x27;, &amp;#x27;.join(valid_models)}&amp;#x22;)        sys.exit(1)&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;These surprised me specifically, because I had just installed these three models via the commands&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;ollama&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;pull&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;llava&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;ollama&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;pull&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;llava-llama3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;ollama&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;pull&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;moondream&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;ollama pull llavaollama pull llava-llama3ollama pull moondream&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;At first I thought this code must exist somewhere else online, but I couldn’t find after a bit of searching.
Then I figured Sonnet must have been trained on the &lt;a href=&quot;https://ollama.com/library?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Ollama model page&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, but there are actually more vision models on that page that I hadn’t yet installed, like &lt;a href=&quot;https://ollama.com/library/llava-phi3?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;llava-phi3&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, so it didn’t seem obvious that Sonnet was trained on this data from the website.&lt;/p&gt;
&lt;p&gt;I’ll need to dig a little deeper but I have to assume Cursor was sending my recent shell command history to the model along with file contents.
It’s hard to imagine this works any other way.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-06-23</title><link>https://www.danielcorin.com/logs/2024/06/23/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/06/23/</guid><description>2024-06-23</description><pubDate>Sun, 23 Jun 2024 12:36:59 GMT</pubDate><content:encoded>&lt;p&gt;I’m trying to avoid buying too much into the hype (maybe it’s too late), but here are several folks talking about their notably impressive experiences with &lt;code&gt;claude-3.5-sonnet&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/SullyOmarr/status/1804656718283935845?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://twitter.com/SullyOmarr/status/1804656718283935845&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/jdjkelly/status/1804226265886363719?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://twitter.com/jdjkelly/status/1804226265886363719&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/mattshumer_/status/1804519779077636459?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://twitter.com/mattshumer_/status/1804519779077636459&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/alexalbert__/status/1803804677701869748?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://twitter.com/alexalbert__/status/1803804677701869748&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/marissamary/status/1804172736488415593?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://twitter.com/marissamary/status/1804172736488415593&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-06-21</title><link>https://www.danielcorin.com/logs/2024/06/21/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/06/21/</guid><description>2024-06-21</description><pubDate>Fri, 21 Jun 2024 19:03:51 GMT</pubDate><content:encoded>&lt;p&gt;As I noted in &lt;a href=&quot;/posts/2024/language-model-based-aggregators&quot;&gt;this post&lt;/a&gt;, I am going to spend more time interacting with smaller models to try and build more intuition for how LLMs behave and the different flavors in which they respond.
Today, I spent some time chatting with Microsoft’s &lt;a href=&quot;https://ollama.com/library/phi3?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;phi-3 3B&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; using &lt;code&gt;ollama&lt;/code&gt;.
In chatting with phi3, I found it neutral in tone and to the point.
It responds in a way that is easy to understand and is not overly complex or technical at the onset.
It doesn’t seem to have a strong sense of self.&lt;/p&gt;
&lt;p&gt;When prompted about itself, it generally responds that it’s “an AI/large language model developed by Microsoft”.
Often it will include that its name is “Phi”.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;&gt;&gt;&gt; who are you?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;I am Phi, an AI developed by Microsoft to assist users in generating human-like text&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;based on the prompts given to me. How can I help you today?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;&gt;&gt;&gt; who are you? I am Phi, an AI developed by Microsoft to assist users in generating human-like textbased on the prompts given to me. How can I help you today?&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;When you ask it for its name, rather than who it is, it seems to forget it has one.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;&gt;&gt;&gt; what is your name?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;As an AI, I don&apos;t have a personal name, but you can call me Assistant. How can I help you today?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;&gt;&gt;&gt; what is your name?As an AI, I don&amp;#x27;t have a personal name, but you can call me Assistant. How can I help you today?&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Once, it even thought it was ChatGPT:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;&gt;&gt;&gt; who are you?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;I&apos;m an AI developed by Microsoft, known as ChatGPT. [...]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;&gt;&gt;&gt; who are you?I&amp;#x27;m an AI developed by Microsoft, known as ChatGPT. [...]&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I prompted it to have the following conversation about the future of technology in society where we would alternate asking each other questions.
It quickly slipped into outputting long lists of ways governments or society could prepare.
Occasionally, there were strange artifacts that showed up in the output like this:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;1. &amp;#x3C;item 2&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;2. Written by user:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;3. &amp;#x3C;item 3&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;1. &lt;item 2&gt;2. Written by user:3. &lt;item 3&gt;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Several times I asked the model &lt;em&gt;not&lt;/em&gt; to respond with bullet points, but it really wanted to keep doing that.
Adding&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;No lists. Respond in paragraphs.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;No lists. Respond in paragraphs.&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;to the end of my prompt seemed to help.
Adding that to the beginning was less consistent.
This result somewhat aligns with what I’ve seen with OpenAI models, where if you want JSON, adding&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;JSON:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;JSON:&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;to the end of the prompt is a pretty good way to get JSON output.
Phi3 seems to quickly forget instructions and fall back to its defaults.
This intuitively makes sense to me as it is a small model compared to what I typically work with.&lt;/p&gt;
&lt;p&gt;I ran all the conversations through the shiny and new &lt;code&gt;claude-3.5-sonnet&lt;/code&gt; to see if there was anything I missed in my summary above.
It corroborated most of what I noticed, though it also added that the model seemed verbose “sometimes to the point of being overly wordy”.
This exchange with Claude got me thinking about the different categories one might score a language model on in terms of the experience of chatting with it.
Specifically, I would want to capture what it’s like to talk to the model.
These categories would be more qualitative and &lt;em&gt;not&lt;/em&gt; indicative of the model’s performance on benchmarks but rather a description of what the vibe is like when you interact with it.&lt;/p&gt;
&lt;p&gt;I think there’s a lot of potential depth to describing models, so I am going to save that exploration for another time.
I’ll conclude with the vibes I got from phi3.
Since this is my first shallow dive for a model like this, I don’t have many other similar models to compare it to, so these may end up being a little unfair since most of my experience is with larger models.
I’ll try to focus on what it’s like to talk to the model rather than “how good it is at things”.&lt;/p&gt;
&lt;p&gt;Nevertheless, I would say phi3 is&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;verbose&lt;/li&gt;
&lt;li&gt;formal&lt;/li&gt;
&lt;li&gt;lacking a sense of self or identity&lt;/li&gt;
&lt;li&gt;inconsistent in following instructions&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Because it seemed a little unfair to just review &lt;code&gt;phi3&lt;/code&gt;, I decided to chat a bit with &lt;code&gt;llama3&lt;/code&gt; 8b as well.
I immediately felt I was unfair to &lt;code&gt;phi3&lt;/code&gt;.
I think I prefer &lt;code&gt;llama3&lt;/code&gt;’s tone but it’s response pattern was a bit repetitive:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a response to what you said&lt;/li&gt;
&lt;li&gt;another side of the argument&lt;/li&gt;
&lt;li&gt;its perceived role as LLaMA (“it’s my job to…”)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When I started a conversation, it didn’t follow my instructions about alternating asking questions and instead just kept asking questions.
When I asked my own question, it’s response was in lists and very repetitive.
Far less nice than anything &lt;code&gt;phi3&lt;/code&gt; said throughout our conversation.&lt;/p&gt;
&lt;p&gt;When I asked &lt;code&gt;llama3&lt;/code&gt; about itself, it had more of a personality than &lt;code&gt;phi3&lt;/code&gt;.
It used analogies to describe what it was like to be a model where as &lt;code&gt;phi3&lt;/code&gt; responded more with facts about how models work.&lt;/p&gt;
&lt;p&gt;I found this response particularly interesting:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Imagine being a vast library with an infinite shelf space, where every book represents a piece of knowledge, a concept, or a relationship between ideas. That&apos;s roughly what my &quot;brain&quot; is like – a massive database of text data that I&apos;ve been trained on.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;When you interact with me, it&apos;s as if you&apos;re browsing through these digital shelves, and I&apos;m the librarian who can help you find specific books or recommend related ones based on your interests.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;Imagine being a vast library with an infinite shelf space, where every book represents a piece of knowledge, a concept, or a relationship between ideas. That&amp;#x27;s roughly what my &amp;#x22;brain&amp;#x22; is like – a massive database of text data that I&amp;#x27;ve been trained on.When you interact with me, it&amp;#x27;s as if you&amp;#x27;re browsing through these digital shelves, and I&amp;#x27;m the librarian who can help you find specific books or recommend related ones based on your interests.&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;To summarize, I would say &lt;code&gt;llama3&lt;/code&gt; 8b is&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;friendly&lt;/li&gt;
&lt;li&gt;engaging&lt;/li&gt;
&lt;li&gt;articulates a sense of self&lt;/li&gt;
&lt;/ul&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-06-20</title><link>https://www.danielcorin.com/logs/2024/06/20/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/06/20/</guid><description>2024-06-20</description><pubDate>Thu, 20 Jun 2024 20:40:58 GMT</pubDate><content:encoded>&lt;p&gt;I enabled Cursor’s Copilot++ today.
Magical.
So much better predictive capabilities than Copilot.
The way it anticipates my needs is pretty cool.
Edit: It’s not great for writing markdown or only prose.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I learned a bit more about &lt;a href=&quot;https://arxiv.org/pdf/2109.06780?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Crafter&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, a Minecraft like game that language models can play.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-06-19</title><link>https://www.danielcorin.com/logs/2024/06/19/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/06/19/</guid><description>2024-06-19</description><pubDate>Wed, 19 Jun 2024 22:25:55 GMT</pubDate><content:encoded>&lt;p&gt;I enjoyed reading Jordan’s &lt;a href=&quot;https://notes.jordanscales.com/emails?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;post&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, a walk down memory lane of his career so far through a series of emails.
He includes things like following up on internship opportunities, negotiating, and meeting people who would change the course of his career.
He inspired me to look back through some old emails as well, both to remember this time and acknowledge how much has changed since then.&lt;/p&gt;
&lt;p&gt;I managed to find my original offer letter from Uber in 2016, which brought back many memories that I might write about in longer form sometime in the future.&lt;/p&gt;
&lt;p&gt;I strongly support Jordan’s suggestion about improving your negotiation skills.
Negotiation is something that made me deeply uncomfortable in the past, but I’d like to believe it’s an area I’ve grown in.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-06-14</title><link>https://www.danielcorin.com/logs/2024/06/14/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/06/14/</guid><description>2024-06-14</description><pubDate>Fri, 14 Jun 2024 21:14:09 GMT</pubDate><content:encoded>&lt;p&gt;For the first time in a while I used iTunes.
I mean the Music app, sorry.
I clicked on the album art while I was playing a song and the app switch to mini-player mode.
I…didn’t see what I could click to get back to the main player.
From my perspective the app had just shrunken down to the mini-player.
I hesitantly clicked the lyrics button.
Yeah, definitely not that.
I clicked the red button of the traffic lights.
Ah.
Has this always been this way?
It’s been a while.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-06-13</title><link>https://www.danielcorin.com/logs/2024/06/13/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/06/13/</guid><description>2024-06-13</description><pubDate>Thu, 13 Jun 2024 09:44:17 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://eugeneyan.com/writing/prompting/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Eugene’s article&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; on prompting is one of the best things I’ve read recently, full stop.
As also noted by Kyle, try starting with 0.8 temperature and lower only if necessary, even for deterministic use cases&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt; &lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot; id=&quot;user-content-fnref-2&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;&lt;a class=&quot;heading-link-wrapper&quot; href=&quot;#footnote-label&quot;&gt;Footnotes&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://eugeneyan.com/writing/prompting/?ref=danielcorin.com#selecting-a-temperature&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://eugeneyan.com/writing/prompting/#selecting-a-temperature&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-2&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/corbtt/status/1801026166020833457?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://twitter.com/corbtt/status/1801026166020833457&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; &lt;a href=&quot;#user-content-fnref-2&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-06-12</title><link>https://www.danielcorin.com/logs/2024/06/12/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/06/12/</guid><description>2024-06-12</description><pubDate>Wed, 12 Jun 2024 21:07:59 GMT</pubDate><content:encoded>&lt;p&gt;A few years old, excellent &lt;a href=&quot;https://community.temporal.io/t/how-to-let-one-workflow-interact-with-multiple-microservices/2635/3?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;response&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; written by Maxim about extracting the most value from Temporal by using it “as a service mesh for invocations of child workflows and activities hosted by different services”.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-06-11</title><link>https://www.danielcorin.com/logs/2024/06/11/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/06/11/</guid><description>2024-06-11</description><pubDate>Tue, 11 Jun 2024 08:12:20 GMT</pubDate><content:encoded>&lt;p&gt;I found a very satisfying, time-saving use of a model though Cursor to generate an inline shell script to reformat some data for me.
The goal was to reformat json files that looked like this&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#F77676&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;[...]&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;to ones that look like this&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;cells&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F77676&quot;&gt;[...]&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;{&amp;#x22;cells&amp;#x22; [...]}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I used the following prompts:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;for each json file in the current folder, read the json (which is a json list) and turn it into a json object with a single key, “cells” whose value is the json list&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;the final files should have the same names as the originals&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The model output this script&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; file &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;*.json&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;do&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;jq&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&apos;{cells: .}&apos;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;$file&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;temp_&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;$file&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;mv&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;temp_&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;$file&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;$file&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;done&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;for file in *.json; do jq &amp;#x27;{cells: .}&amp;#x27; &amp;#x22;$file&amp;#x22; &gt; &amp;#x22;temp_$file&amp;#x22; &amp;#x26;&amp;#x26; mv &amp;#x22;temp_$file&amp;#x22; &amp;#x22;$file&amp;#x22;; done&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;and that was it.&lt;/p&gt;
&lt;p&gt;30 seconds, problem solved.
One minor concern I have is since I didn’t have to research or deeply understand the code being run, I probably won’t remember this trick for next time.
I suppose if I might not remember even if I did do the research if I only needed to do this one time.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I don’t know much about chess other than basic rules and I haven’t played much either.
Regardless, I enjoyed this &lt;a href=&quot;https://www.youtube.com/watch?v=iDnW0WiCqNc&amp;#x26;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;video&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; by Paralogical on analyzing billions of games to discover “rare” moves.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-06-10</title><link>https://www.danielcorin.com/logs/2024/06/10/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/06/10/</guid><description>2024-06-10</description><pubDate>Mon, 10 Jun 2024 21:44:51 GMT</pubDate><content:encoded>&lt;astro-embed-tweet&gt;&lt;blockquote class=&quot;twitter-tweet&quot; data-dnt=&quot;true&quot; data-theme=&quot;dark&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;So Apple has introduced a new system called “Private Cloud Compute” that allows your phone to offload complex (typically AI) tasks to specialized secure devices in the cloud. I’m still trying to work out what I think about this. So here’s a thread. 1/&lt;/p&gt;&amp;mdash; Matthew Green (@matthew_d_green) &lt;a href=&quot;https://x.com/matthew_d_green/status/1800291897245835616?ref_src=twsrc%5Etfw&quot;&gt;June 10, 2024&lt;/a&gt;&lt;/blockquote&gt;

&lt;/astro-embed-tweet&gt;
&lt;p&gt;Matthew wrote a thread summarizing Apple’s private cloud and their security approach.
Between the speed at which models are changing and their size, it’s not currently practical to run things like LLM inference on iPhones, at least not for the best available models.
These models will probably always be larger or require more compute than what handheld devices are capable of.
If you want to use the best models, you’ll need to offload inference to a data center.&lt;/p&gt;
&lt;p&gt;There is plently more in the &lt;a href=&quot;https://machinelearning.apple.com/research/introducing-apple-foundation-models?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;press release&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Our on-device model, with ~3B parameters, outperforms larger models including Phi-3-mini, Mistral-7B, and Gemma-7B. Our server model compares favorably to DBRX-Instruct, Mixtral-8x22B, and GPT-3.5-Turbo while being highly efficient.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It sounds like the options will be&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a close-to-be-in-class small model on device&lt;/li&gt;
&lt;li&gt;private inference with a model that is (maybe?) about 12 months behind best in class models&lt;/li&gt;
&lt;li&gt;farm out the task to OpenAI to get a response from the best model available&lt;/li&gt;
&lt;/ul&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-06-05</title><link>https://www.danielcorin.com/logs/2024/06/05/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/06/05/</guid><description>2024-06-05</description><pubDate>Wed, 05 Jun 2024 21:57:31 GMT</pubDate><content:encoded>&lt;p&gt;I spent some time moving my bookmarks and workflows to Raindrop from Pocket.
I’m mostly done with a short post on how and why I did that.
I’d like to use the &lt;a href=&quot;https://github.com/atsuoishimoto/python-raindropio/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;python-raindropio&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; package to generate stubs for logs posts from links I bookmark, including comments I write about them.
The Nix flake I use for this blog hampered those efforts.
The &lt;code&gt;python-raindropio&lt;/code&gt; package isn’t available as a Nix package and I’m not particularly well versed in building my own packages with Nix, so that became a bit of a rabbit hole.
After poking around for other available libraries, it turns out, this one isn’t even maintained anymore.
It was forked as &lt;a href=&quot;https://github.com/PBorocz/raindrop-io-py?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;raindrop-io-py&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; and it looks like &lt;em&gt;that&lt;/em&gt; might not even be maintained anymore.
Not the greatest sign, but the package does still work for the time being.&lt;/p&gt;
&lt;h2 id=&quot;good-reads&quot;&gt;&lt;a class=&quot;heading-link-wrapper&quot; href=&quot;#good-reads&quot;&gt;Good reads&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://mbuffett.com/posts/maintaining-motivation?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://mbuffett.com/posts/maintaining-motivation&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;: A relatable article by Marcus on how he keeps his motivation up working on projects as a solo developer.&lt;/li&gt;
&lt;/ul&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-06-01</title><link>https://www.danielcorin.com/logs/2024/06/01/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/06/01/</guid><description>2024-06-01</description><pubDate>Sat, 01 Jun 2024 18:34:22 GMT</pubDate><content:encoded>&lt;p&gt;I was away from the computer for a couple of weeks.
That was really nice.
During my downtime and in transit, these were some of my favorite things I read in the past two weeks.
I’m planning to come up with a bit of a better system for logging and adding thoughts to stuff I read but for now a list will have to do.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://eugeneyan.com/writing/simplicity?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://eugeneyan.com/writing/simplicity&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daniel.haxx.se/blog/2024/05/27/my-bdfl-guiding-principles/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://daniel.haxx.se/blog/2024/05/27/my-bdfl-guiding-principles/&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://yekta.dev/posts/dont-microservice-do-module?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://yekta.dev/posts/dont-microservice-do-module&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hiandrewquinn.github.io/til-site/posts/doing-is-normally-distributed-learning-is-log-normal/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://hiandrewquinn.github.io/til-site/posts/doing-is-normally-distributed-learning-is-log-normal/&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.railway.app/p/how-we-work-volume-iii?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://blog.railway.app/p/how-we-work-volume-iii&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://jxnl.co/writing/2024/05/22/systematically-improving-your-rag?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://jxnl.co/writing/2024/05/22/systematically-improving-your-rag&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.oreilly.com/radar/what-we-learned-from-a-year-of-building-with-llms-part-i/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://www.oreilly.com/radar/what-we-learned-from-a-year-of-building-with-llms-part-i/&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://thereader.mitpress.mit.edu/how-actors-remember-their-lines/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://thereader.mitpress.mit.edu/how-actors-remember-their-lines/&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://materializedview.io/p/durable-execution-justifying-the-bubble?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://materializedview.io/p/durable-execution-justifying-the-bubble&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://jeena.net/20-years-blogging?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://jeena.net/20-years-blogging&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-05-17</title><link>https://www.danielcorin.com/logs/2024/05/17/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/05/17/</guid><description>2024-05-17</description><pubDate>Fri, 17 May 2024 19:02:25 GMT</pubDate><content:encoded>&lt;p&gt;Sabrina wrote an interesting
&lt;a href=&quot;https://www.sabrina.dev/p/chatgpt4o-vs-math?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;write up&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; on solving a math
problem with &lt;code&gt;gpt-4o&lt;/code&gt;. It turned out the text-only, chain-of-thought approach
was the best performing, which is not what I would have guessed.&lt;/p&gt;
&lt;p&gt;It’s was cool to see Simon dive into LLM-driven data extraction in using his
project &lt;code&gt;datasette&lt;/code&gt; in
&lt;a href=&quot;https://www.youtube.com/watch?v=g3NtJatmQR0&amp;#x26;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;this video&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;. Using multi-modal
models for data extraction seems to bring a new level of usefulness and makes
these models even more general purpose.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-05-15</title><link>https://www.danielcorin.com/logs/2024/05/15/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/05/15/</guid><description>2024-05-15</description><pubDate>Wed, 15 May 2024 23:25:14 GMT</pubDate><content:encoded>&lt;p&gt;Nostalgia: &lt;a href=&quot;https://maggieappleton.com/teenage-desktop?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://maggieappleton.com/teenage-desktop&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;I wish I had done something like this.&lt;/p&gt;
&lt;p&gt;Maybe I can find something on an old hard drive.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-05-10</title><link>https://www.danielcorin.com/logs/2024/05/10/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/05/10/</guid><description>2024-05-10</description><pubDate>Fri, 10 May 2024 20:33:38 GMT</pubDate><content:encoded>&lt;p&gt;I’m looking into creating a Deno serve that can manage multiple websocket connections and emit to one after receiving a message from another.
A simple way to implement this is to have a single server id and track all the ongoing connections to websocket clients.
I’m learning more about approaches that could support a multi-server backend.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-05-09</title><link>https://www.danielcorin.com/logs/2024/05/09/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/05/09/</guid><description>2024-05-09</description><pubDate>Thu, 09 May 2024 13:50:00 GMT</pubDate><content:encoded>&lt;p&gt;I take an irrational amount of pleasure in disabling notifications for apps that use them to send me marketing.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-05-08</title><link>https://www.danielcorin.com/logs/2024/05/08/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/05/08/</guid><description>2024-05-08</description><pubDate>Wed, 08 May 2024 08:56:42 GMT</pubDate><content:encoded>&lt;p&gt;I enjoyed reading Yuxuan’s &lt;a href=&quot;https://trace.yshui.dev/2024-05-copilot.html?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;article&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; on whether Github Copilot increased their productivity.
I personally don’t love Copilot but enjoy using other AI-assisted software tools like Cursor, which allow for use of more capable models than Copilot.
It’s encouraging to see more folks adopting a more unfiltered thought journal.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-05-07</title><link>https://www.danielcorin.com/logs/2024/05/07/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/05/07/</guid><description>2024-05-07</description><pubDate>Tue, 07 May 2024 22:07:22 GMT</pubDate><content:encoded>&lt;p&gt;I read this &lt;a href=&quot;https://stephango.com/concise?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;post&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; by Steph today and loved it.
I want to try writing this concisely.
I imagine it takes significant effort but the result are beautiful, satisfying and valuable.
It’s a privilege to read a piece written by someone who values every word.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-05-06</title><link>https://www.danielcorin.com/logs/2024/05/06/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/05/06/</guid><description>2024-05-06</description><pubDate>Mon, 06 May 2024 20:21:03 GMT</pubDate><content:encoded>&lt;astro-embed-tweet&gt;&lt;blockquote class=&quot;twitter-tweet&quot; data-dnt=&quot;true&quot; data-theme=&quot;dark&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;llama 3-400B with multimodal capabilities and long context would put the nail in the coffin for OAI&lt;/p&gt;&amp;mdash; anton (@abacaj) &lt;a href=&quot;https://x.com/abacaj/status/1787527652628140321?ref_src=twsrc%5Etfw&quot;&gt;May 6, 2024&lt;/a&gt;&lt;/blockquote&gt;

&lt;/astro-embed-tweet&gt;
&lt;p&gt;Having gotten more into using llama 7b and 30b lately, this take seems likes it could hold water.
Model inference still isn’t free when you scale a consumer app.
Maybe I can use llama3 for all my personal use cases, but I still need infra to scale it.
The price probably goes down significantly though with so many model inference providers and the speed will go way up once Groq starts running it (if they can run multi-modal models).&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-05-03</title><link>https://www.danielcorin.com/logs/2024/05/03/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/05/03/</guid><description>2024-05-03</description><pubDate>Fri, 03 May 2024 17:50:29 GMT</pubDate><content:encoded>&lt;p&gt;I read Jason, Ivan and Charles’ &lt;a href=&quot;https://modal.com/blog/fine-tuning-embeddings?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;blog post&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; on Modal about fine tuning an embedding model.
It’s a bit in the weeds of ML for me but I learn a bit more every time I read something new.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-05-01</title><link>https://www.danielcorin.com/logs/2024/05/01/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/05/01/</guid><description>2024-05-01</description><pubDate>Wed, 01 May 2024 21:56:30 GMT</pubDate><content:encoded>&lt;p&gt;I played around with trying to run a Temporal worker on Modal.
I didn’t do a ton of research upfront — I just kind of gave it a shot.
I suspect this isn’t possible.
Both use Python magic to do the things they do.
This is what I tried.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; asyncio&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; os&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; modal&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; temporalio &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; activity, workflow&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; temporalio.client &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; Client, TLSConfig&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; temporalio.worker &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; Worker&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;@activity.defn&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;my_activity&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;) -&gt; &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;Hello, &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;!&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;@workflow.defn&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E;--0td:underline&quot;&gt;MyWorkflow&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;@workflow.run&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;run&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;) -&gt; &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; workflow.execute_activity(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;my_activity, name, &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;start_to_close_timeout&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;60&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;worker_main&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;client &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; Client.connect(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;my.namespace.tmprl.cloud:7233&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;namespace&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;my.namespace&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;tls&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;TLSConfig(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;client_cert&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;bytes&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(os.environ[&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;TEMPORAL_CLIENT_CERT&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;], &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;client_private_key&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;bytes&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(os.environ[&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;TEMPORAL_CLIENT_KEY&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;], &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;worker &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; Worker(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;client,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;task_queue&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;modal-task-queue&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;workflows&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;[MyWorkflow],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;activities&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;[my_activity],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; worker.run()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;stub &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; modal.Stub(&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;temporal-worker&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;@stub.function&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;image&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;modal.Image.debian_slim().pip_install(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;temporalio==1.5.1&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;secrets&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;[modal.Secret.from_name(&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;modal-temporal-worker&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;asyncio.run(worker_main())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; __name__ &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;__main__&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;with&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; stub.run():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;main.call()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;import asyncioimport osimport modalfrom temporalio import activity, workflowfrom temporalio.client import Client, TLSConfigfrom temporalio.worker import Worker@activity.defnasync def my_activity(name: str) -&gt; str:    return f&amp;#x22;Hello, {name}!&amp;#x22;@workflow.defnclass MyWorkflow:    @workflow.run    async def run(self, name: str) -&gt; str:        return await workflow.execute_activity(            my_activity, name, start_to_close_timeout=60        )async def worker_main():    client = await Client.connect(        &amp;#x22;my.namespace.tmprl.cloud:7233&amp;#x22;,        namespace=&amp;#x22;my.namespace&amp;#x22;,        tls=TLSConfig(            client_cert=bytes(os.environ[&amp;#x22;TEMPORAL_CLIENT_CERT&amp;#x22;], &amp;#x22;utf-8&amp;#x22;),            client_private_key=bytes(os.environ[&amp;#x22;TEMPORAL_CLIENT_KEY&amp;#x22;], &amp;#x22;utf-8&amp;#x22;),        ),    )    worker = Worker(        client,        task_queue=&amp;#x22;modal-task-queue&amp;#x22;,        workflows=[MyWorkflow],        activities=[my_activity],    )    await worker.run()stub = modal.Stub(&amp;#x22;temporal-worker&amp;#x22;)@stub.function(    image=modal.Image.debian_slim().pip_install(        [            &amp;#x22;temporalio==1.5.1&amp;#x22;,        ]    ),    secrets=[modal.Secret.from_name(&amp;#x22;modal-temporal-worker&amp;#x22;)],)def main():    asyncio.run(worker_main())if __name__ == &amp;#x22;__main__&amp;#x22;:    with stub.run():        main.call()&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Run with&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;modal&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;run&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;worker::main&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;modal run worker::main&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The error trace looked like&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;RESPONSES: Mapping[int, Tuple[str, str]] = http.server.BaseHTTPRequestHandler.responses&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;                                               &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;File &quot;/usr/local/lib/python3.11/site-packages/temporalio/worker/workflow_sandbox/_restrictions.py&quot;, line 845, in __getattribute__&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;state.assert_child_not_restricted(__name)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;File &quot;/usr/local/lib/python3.11/site-packages/temporalio/worker/workflow_sandbox/_restrictions.py&quot;, line 697, in assert_child_not_restricted&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;raise RestrictedWorkflowAccessError(f&quot;{self.name}.{name}&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;temporalio.worker.workflow_sandbox._restrictions.RestrictedWorkflowAccessError: Cannot access http.server.BaseHTTPRequestHandler.responses from inside a workflow. If this is code from a module not used in a workflow or known to only be used deterministically from a workflow, mark the import as pass through.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;The above exception was the direct cause of the following exception:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Traceback (most recent call last):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;File &quot;/pkg/modal/_container_io_manager.py&quot;, line 488, in handle_input_exception&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;yield&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;File &quot;/pkg/modal/_container_entrypoint.py&quot;, line 134, in run_input&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;res = imp_fun.fun(*args, **kwargs)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;^^^^^^^^^^^^^^^^^^^^^^^^^^^^&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;File &quot;/root/worker.py&quot;, line 52, in main&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;asyncio.run(worker_main())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;File &quot;/usr/local/lib/python3.11/asyncio/runners.py&quot;, line 190, in run&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;return runner.run(main)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;           &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;^^^^^^^^^^^^^^^^&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;File &quot;/usr/local/lib/python3.11/asyncio/runners.py&quot;, line 118, in run&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;return self._loop.run_until_complete(task)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;           &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;File &quot;/usr/local/lib/python3.11/asyncio/base_events.py&quot;, line 650, in run_until_complete&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;return future.result()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;           &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;^^^^^^^^^^^^^^^&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;File &quot;/root/worker.py&quot;, line 32, in worker_main&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;worker = Worker(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;             &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;^^^^^^^&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;File &quot;/usr/local/lib/python3.11/site-packages/temporalio/worker/_worker.py&quot;, line 292, in __init__&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;self._workflow_worker = _WorkflowWorker(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;                            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;^^^^^^^^^^^^^^^^&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;File &quot;/usr/local/lib/python3.11/site-packages/temporalio/worker/_workflow.py&quot;, line 118, in __init__&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;raise RuntimeError(f&quot;Failed validating workflow {defn.name}&quot;) from err&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;RuntimeError: Failed validating workflow MyWorkflow&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;╭─ Error ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;│ Failed validating workflow MyWorkflow                                                                                        │&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;    RESPONSES: Mapping[int, Tuple[str, str]] = http.server.BaseHTTPRequestHandler.responses                                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  File &amp;#x22;/usr/local/lib/python3.11/site-packages/temporalio/worker/workflow_sandbox/_restrictions.py&amp;#x22;, line 845, in __getattribute__    state.assert_child_not_restricted(__name)  File &amp;#x22;/usr/local/lib/python3.11/site-packages/temporalio/worker/workflow_sandbox/_restrictions.py&amp;#x22;, line 697, in assert_child_not_restricted    raise RestrictedWorkflowAccessError(f&amp;#x22;{self.name}.{name}&amp;#x22;)temporalio.worker.workflow_sandbox._restrictions.RestrictedWorkflowAccessError: Cannot access http.server.BaseHTTPRequestHandler.responses from inside a workflow. If this is code from a module not used in a workflow or known to only be used deterministically from a workflow, mark the import as pass through.The above exception was the direct cause of the following exception:Traceback (most recent call last):  File &amp;#x22;/pkg/modal/_container_io_manager.py&amp;#x22;, line 488, in handle_input_exception    yield  File &amp;#x22;/pkg/modal/_container_entrypoint.py&amp;#x22;, line 134, in run_input    res = imp_fun.fun(*args, **kwargs)          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^  File &amp;#x22;/root/worker.py&amp;#x22;, line 52, in main    asyncio.run(worker_main())  File &amp;#x22;/usr/local/lib/python3.11/asyncio/runners.py&amp;#x22;, line 190, in run    return runner.run(main)           ^^^^^^^^^^^^^^^^  File &amp;#x22;/usr/local/lib/python3.11/asyncio/runners.py&amp;#x22;, line 118, in run    return self._loop.run_until_complete(task)           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  File &amp;#x22;/usr/local/lib/python3.11/asyncio/base_events.py&amp;#x22;, line 650, in run_until_complete    return future.result()           ^^^^^^^^^^^^^^^  File &amp;#x22;/root/worker.py&amp;#x22;, line 32, in worker_main    worker = Worker(             ^^^^^^^  File &amp;#x22;/usr/local/lib/python3.11/site-packages/temporalio/worker/_worker.py&amp;#x22;, line 292, in __init__    self._workflow_worker = _WorkflowWorker(                            ^^^^^^^^^^^^^^^^  File &amp;#x22;/usr/local/lib/python3.11/site-packages/temporalio/worker/_workflow.py&amp;#x22;, line 118, in __init__    raise RuntimeError(f&amp;#x22;Failed validating workflow {defn.name}&amp;#x22;) from errRuntimeError: Failed validating workflow MyWorkflow╭─ Error ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮│ Failed validating workflow MyWorkflow                                                                                        │╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I believe Temporal needs to patch the Python runtime in Worker executions to make Workflow code deterministic.
It seems what Modal does may be interfering with that.&lt;/p&gt;
&lt;p&gt;I don’t know if running a Temporal worker on Modal is possible or if I will trying to come back to this by it was interesting trying to mash these two together.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-04-25</title><link>https://www.danielcorin.com/logs/2024/04/25/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/04/25/</guid><description>2024-04-25</description><pubDate>Thu, 25 Apr 2024 13:54:15 GMT</pubDate><content:encoded>&lt;p&gt;I read this interesting &lt;a href=&quot;https://gajus.com/blog/fine-tuning-openai-models?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;article&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; by Gajus about finetuning gpt-3.5-turbo.
It was quite similar to &lt;a href=&quot;/posts/2024/fine-tuning-connections&quot;&gt;my experience&lt;/a&gt; fine tuning a model to play Connections.
A helpful takeaway was that after finetuning the model, you shouldn’t need to include system prompt in future model inference, so you can save on token cost.
I also liked the suggestion to use a database to store training data.
I had also been wrangling jsonl files.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-04-22</title><link>https://www.danielcorin.com/logs/2024/04/22/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/04/22/</guid><description>2024-04-22</description><pubDate>Mon, 22 Apr 2024 12:57:12 GMT</pubDate><content:encoded>&lt;p&gt;About a &lt;a href=&quot;/logs/2024/03/25&quot;&gt;month ago&lt;/a&gt;, I had been looking into creating a NL to SQL plugin for &lt;code&gt;datasette&lt;/code&gt;.
Simon release a version of exactly that &lt;a href=&quot;https://github.com/datasette/datasette-query-assistant/commit/146927b62889ab28e19c604d9d3ee8ddb26f3991?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;the next day&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; and I came across it in his article &lt;a href=&quot;https://simonwillison.net/2024/Apr/17/ai-for-data-journalism/?ref=danielcorin.com#ai-assisted-sql&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;here&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
Hopefully I can find time to try this out in the next few days.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-04-19</title><link>https://www.danielcorin.com/logs/2024/04/19/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/04/19/</guid><description>2024-04-19</description><pubDate>Fri, 19 Apr 2024 14:55:12 GMT</pubDate><content:encoded>&lt;p&gt;I did a &lt;a href=&quot;https://github.com/danielcorin/nix-config/commit/104dc604bacfa5d6ee66d8cbf5a3e43a8ed90178?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;refactor&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; of my nix config following a pattern I learned from reading Davis’ &lt;a href=&quot;https://github.com/davish/setup/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;setup&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
My two main uses right now for Nix/&lt;code&gt;home-manager&lt;/code&gt; are to install and configure programs.
Some of these programs have nix modules that allow for the configuration to be written in Nix.
Others don’t, but you can still use Nix to create a config file for that program to read.
I do the latter with &lt;code&gt;skhd&lt;/code&gt; and &lt;code&gt;goku&lt;/code&gt; to create a &lt;code&gt;karabiner.json&lt;/code&gt;.
With this refactor, I used the &lt;code&gt;default.nix&lt;/code&gt; file to create program-specific module imports.
I refactored my &lt;code&gt;home.nix&lt;/code&gt; to use the same approach as well.
This allows me to easily co-locate code to set up a given program, regardless of whether I am configuring it with Nix or by creating dotfiles.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-04-17</title><link>https://www.danielcorin.com/logs/2024/04/17/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/04/17/</guid><description>2024-04-17</description><pubDate>Wed, 17 Apr 2024 07:00:06 GMT</pubDate><content:encoded>&lt;p&gt;For me, invoking a language model using a playground (UI) interface is the most common approach for my usage.
Occasionally, it can be helpful to use the a CLI to directly pipe output into a model.
For example&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;diff&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;--staged&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;llm&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;write a commit message for these changes&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;git diff --staged | llm &amp;#x22;write a commit message for these changes&amp;#x22;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;However, I am more often inclined to open a playground and paste the bits and pieces of context I need.
Maybe, it’s that refinement and followups are common enough that using a CLI isn’t nearly as flexible.
The bottom line is, I far more frequently open a playground to use a language model than use a CLI.
Even though most of the playgrounds have various weird and annoying behaviors, I generally still prefer them.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I tried the Gemini 1.5 multi-modal model preview.
Unfortunately, I wasn’t super impressed relative to gpt-4-turbo.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;This evening has been most spent making mistakes, trying to deploy a few different &lt;a href=&quot;https://modal.com/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Modal&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; functions and call these in a &lt;code&gt;Cron&lt;/code&gt;.
I thought I had been close to getting this working when I left off yesterday, but now I was getting stuck on errors like the following&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot; class=&quot;wrap&quot; style=&quot;--ecMaxLine:256ch&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;modal.exception.ExecutionError: Object has not been hydrated and doesn&apos;t support lazy hydration. This might happen if an object is defined on a different stub, or if it&apos;s on the same stub but it didn&apos;t get created because it wasn&apos;t defined in global scope.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;modal.exception.ExecutionError: Object has not been hydrated and doesn&amp;#x27;t support lazy hydration. This might happen if an object is defined on a different stub, or if it&amp;#x27;s on the same stub but it didn&amp;#x27;t get created because it wasn&amp;#x27;t defined in global scope.&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Eventually, I found an approach in the &lt;a href=&quot;https://modal.com/slack?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Modal Community Slack channel&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; that helped me resolve my issue.
Side note: I wish this content was more easily searchable publicly. The content is so valuable but it’s locked away in Slack.
I needed to use &lt;code&gt;Function.lookup&lt;/code&gt; to reference functions that are deployed separately and defined in other stubs.
Once I got this working, I was able to launch &lt;a href=&quot;https://bots-doing-things.vercel.app/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Bots Doing Things&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, a site where my bots perform tasks and publish their results.
Currently, I have just one “bot”, which plays Connections once a day using gpt-4 and records its result in a git repo, which is then deployed to a site automatically on Vercel.
The daily cron and Python code run on Modal.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-04-13</title><link>https://www.danielcorin.com/logs/2024/04/13/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/04/13/</guid><description>2024-04-13</description><pubDate>Sat, 13 Apr 2024 15:50:13 GMT</pubDate><content:encoded>&lt;p&gt;I enjoyed &lt;a href=&quot;https://kenkantzer.com/lessons-after-a-half-billion-gpt-tokens/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;this article&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; by Ken about production LLM use cases with OpenAI models.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;When it comes to prompts, less is more&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This resonated with me.
I’ve found that too much instruction can lead a model to perform worse on a task.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;GPT is really bad at producing the null hypothesis&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This also seems to confirm what I’ve seen empirically, but I never ask for it.
I ask for something like, “return an empty JSON array if you can’t find anything”.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;GPT really cannot give back more than 10 items. Trying to have it give you back 15 items? Maybe it does it 15% of the time.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I didn’t notice this and haven’t tried it explicitly.
I did a bit of recipe ingredients extraction where there were more than 10 ingredients and that seems to work okay.
I also recently did another use case where I’m extracting a variable number of items and extracting 10 items seems to work consistently, but I am just waving my hands.
I need to collect data to confirm.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;vector databases, and RAG/embeddings are mostly useless for us mere mortals&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This surprised me.
I’ve found embeddings to be useful, though I can’t say I’ve gone to production with a RAG use case.
I agree that putting your embeddings in a specialized database doesn’t make sense.
I’ve done most of my exploration storing embeddings in SQLite.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ken’s article also linked to &lt;a href=&quot;http://www.incompleteideas.net/IncIdeas/BitterLesson.html?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;The Bitter Lesson&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; by Rich.
He lays out what he believes to be the biggest lesson learned in the history of AI&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;general methods that leverage computation are ultimately the most effective, and by a large margin.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;One thing that should be learned from the bitter lesson is the great power of general purpose methods, of methods that continue to scale with increased computation even as the available computation becomes very great. The two methods that seem to scale arbitrarily in this way are search and learning.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;A general note on my experience with Nix: most things have taken multiple attempts, but persistence has allowed me to eventually find a workable solution for the problems I’ve faced.
I love the combo of direnv and flakes to build a directory-specific environment.
It seems a number of dev tools are popping up that make a very friendly interface to this functionality and use Nix underneath to make it happen.
I used one called &lt;a href=&quot;https://devenv.sh/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;devbox&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; to &lt;a href=&quot;/til/devbox/quick-postgres-db&quot;&gt;play around with postgres&lt;/a&gt; and recently learned of another called &lt;a href=&quot;https://devenv.sh/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;devenv&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-04-10</title><link>https://www.danielcorin.com/logs/2024/04/10/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/04/10/</guid><description>2024-04-10</description><pubDate>Wed, 10 Apr 2024 21:28:44 GMT</pubDate><content:encoded>&lt;p&gt;I enjoyed Martin’s article on &lt;a href=&quot;https://martinheinz.dev/blog/110?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;preserving your shell history&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
I implemented some of his approaches in my &lt;a href=&quot;https://github.com/danielcorin/nix-config/commit/1ac1a1de8aa2b50c3b45751a48faa0f9564dc6ae?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;system config&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-04-09</title><link>https://www.danielcorin.com/logs/2024/04/09/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/04/09/</guid><description>2024-04-09</description><pubDate>Tue, 09 Apr 2024 22:16:44 GMT</pubDate><content:encoded>&lt;p&gt;Gemini Pro 1.5 up and running.
I’ve said this before but I will say it again — the fact that I don’t need to deal with GCP to use Google models gives me joy.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;❯&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;llm&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;gemini-1.5-pro-latest&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;who is the fastest man in the world?&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;As&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;November&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;2023,&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FD971F&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;Usain&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;Bolt&lt;/span&gt;&lt;span style=&quot;--0:#FD971F&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;still&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;considered&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;the&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;fastest&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;man&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;the&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;world.&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;He&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;holds&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;the&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;world&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;record&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;the&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;meters&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;with&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;time&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;9.58&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;seconds,&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;2009.&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;He&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;also&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;holds&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;the&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;record&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;the&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;200&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;meters&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;at&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;19.19&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;seconds,&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;achieved&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;2009&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;well.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;❯ llm -m gemini-1.5-pro-latest &amp;#x22;who is the fastest man in the world?&amp;#x22;As of November 2023, **Usain Bolt** is still considered the fastest man in the world. He holds the world record in the 100 meters with a time of 9.58 seconds, set in 2009.  He also holds the record for the 200 meters at 19.19 seconds, achieved in 2009 as well.&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Having all these models readily available is great.
My hope is to play around with several to become a bit of an amateur &lt;a href=&quot;https://interconnected.org/home/2023/03/22/tuning?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;model sommelier&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-04-04</title><link>https://www.danielcorin.com/logs/2024/04/04/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/04/04/</guid><description>2024-04-04</description><pubDate>Thu, 04 Apr 2024 19:22:11 GMT</pubDate><content:encoded>&lt;p&gt;Today, I learned about Command-R model series from &lt;a href=&quot;https://cohere.com/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Cohere&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; from Shawn’s great AI newsletter (&lt;a href=&quot;https://buttondown.email/ainews?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;ainews&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;).
I searched to see if a plugin was available for &lt;code&gt;llm&lt;/code&gt; and Simon had literally &lt;a href=&quot;https://github.com/simonw/llm-command-r/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;authored one&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; 8(!) hours earlier.
Folks like you keep me inspired and motivated 🙏.
No better workflow out there that I know of:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;llm&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;llm-command-r&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;llm&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;r-plus&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;hello&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;Error:&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;No&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;found&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;one&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&apos;llm keys set cohere&apos;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;the&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;COHERE_API_KEY&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;environment&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;variable&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;llm&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;keys&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;cohere&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;Enter&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;key:&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;llm&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;r-plus&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;hi, who am I speaking with?&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;You&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;are&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;speaking&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;with&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;Coral,&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;an&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;AI&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;chatbot&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;trained&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;to&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;assist&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;users&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;by&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;providing&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;thorough&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;responses.&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;How&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;can&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;I&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;help&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;you&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;today?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;llm install llm-command-rllm -m r-plus helloError: No key found - add one using &amp;#x27;llm keys set cohere&amp;#x27; or set the COHERE_API_KEY environment variablellm keys set cohereEnter key: ...llm -m r-plus &amp;#x22;hi, who am I speaking with?&amp;#x22;You are speaking with Coral, an AI chatbot trained to assist users by providing thorough responses. How can I help you today?&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-04-03</title><link>https://www.danielcorin.com/logs/2024/04/03/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/04/03/</guid><description>2024-04-03</description><pubDate>Wed, 03 Apr 2024 21:07:23 GMT</pubDate><content:encoded>&lt;p&gt;A great &lt;a href=&quot;https://manuelmoreale.com/growth-is-a-mind-cancer?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;article&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; by Manuel about forever-growth of companies.
I too wish we’d be more willing to celebrate &lt;em&gt;enough&lt;/em&gt;.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-03-31</title><link>https://www.danielcorin.com/logs/2024/03/31/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/03/31/</guid><description>2024-03-31</description><pubDate>Sun, 31 Mar 2024 10:05:40 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been digging more into evals.
I wrote a simple Claude completion function in &lt;a href=&quot;https://github.com/openai/evals?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;openai/evals&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; to better understand how the different pieces fit together.
Quick and dirty code:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; anthropic &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; Anthropic&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; evals.api &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; CompletionFn, CompletionResult&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; evals.prompt.base &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; is_chat_prompt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E;--0td:underline&quot;&gt;ClaudeChatCompletionResult&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E;--0fs:italic;--0td:underline&quot;&gt;CompletionResult&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;__init__&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;response&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;) -&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;None&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#FD971F&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;.response &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; response&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;get_completions&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;) -&gt; list[&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;--0:#FD971F&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;.response.strip()]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E;--0td:underline&quot;&gt;ClaudeChatCompletionFn&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E;--0fs:italic;--0td:underline&quot;&gt;CompletionFn&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;__init__&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;kwargs&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;) -&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;None&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#FD971F&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;.client &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; Anthropic()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;__call__&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;prompt&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;kwargs&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;) -&gt; ClaudeChatCompletionResult:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; is_chat_prompt(prompt):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;messages &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; prompt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;system_prompt &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;next&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;((p &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; p &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; messages &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; p.get(&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;role&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;system&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;None&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; system_prompt:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;messages.remove(system_prompt)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#A19E8D&quot;&gt;# I think there is a util function to do this already&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;messages &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; [{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;role&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;user&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;content&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: prompt,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;}]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;message &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FD971F&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;.client.messages.create(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;max_tokens&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;1024&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;system&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;system_prompt[&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;content&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; system_prompt &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;None&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;messages&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;messages,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;model&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;claude-3-opus-20240229&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; ClaudeChatCompletionResult(message.content[&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;].text)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;from anthropic import Anthropicfrom evals.api import CompletionFn, CompletionResultfrom evals.prompt.base import is_chat_promptclass ClaudeChatCompletionResult(CompletionResult):    def __init__(self, response) -&gt; None:        self.response = response    def get_completions(self) -&gt; list[str]:        return [self.response.strip()]class ClaudeChatCompletionFn(CompletionFn):    def __init__(self, **kwargs) -&gt; None:        self.client = Anthropic()    def __call__(self, prompt, **kwargs) -&gt; ClaudeChatCompletionResult:        if is_chat_prompt(prompt):            messages = prompt            system_prompt = next((p for p in messages if p.get(&amp;#x22;role&amp;#x22;) == &amp;#x22;system&amp;#x22;), None)            if system_prompt:                messages.remove(system_prompt)        else:            # I think there is a util function to do this already            messages = [{                &amp;#x22;role&amp;#x22;: &amp;#x22;user&amp;#x22;,                &amp;#x22;content&amp;#x22;: prompt,            }]        message = self.client.messages.create(            max_tokens=1024,            system=system_prompt[&amp;#x22;content&amp;#x22;] if system_prompt else None,            messages=messages,            model=&amp;#x22;claude-3-opus-20240229&amp;#x22;,        )        return ClaudeChatCompletionResult(message.content[0].text)&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;claude/claude-3-opus&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;evals.completion_fns.claude:ClaudeChatCompletionFn&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;args&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;completion_fn&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;claude-3-opus&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;claude/claude-3-opus:  class: evals.completion_fns.claude:ClaudeChatCompletionFn  args:    completion_fn: claude-3-opus&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Run with&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;oaieval&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;claude/claude-3-opus&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;extraction&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;oaieval claude/claude-3-opus extraction&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;on a toy eval I wrote.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;input&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: [{&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;role&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&quot;system&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;content&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&quot;You are responsible for extracting structured data from the provided unstructured data. Follow the user&apos;s instructions and output JSON only without code fences.&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;}, {&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;role&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&quot;user&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;content&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&quot;CONTENT: I live at 42 Wallaby Way, Sydney&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;INSTRUCTIONS: extract street and city&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;}], &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;ideal&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&quot;{&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;street&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;42 Wallaby Way&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;city&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;Sydney&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;}&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;input&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: [{&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;role&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&quot;system&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;content&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&quot;You are responsible for extracting structured data from the provided unstructured data. Follow the user&apos;s instructions and output JSON only without code fences.&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;}, {&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;role&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&quot;user&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;content&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&quot;CONTENT: My favorite color is blue and I was born on June 15, 1985.&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;INSTRUCTIONS: extract favorite color and date of birth. format date of birth as yyyy-mm-dd&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;}], &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&quot;ideal&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&quot;{&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;favorite_color&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;blue&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;date_of_birth&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;1985-06-15&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;}&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;{&amp;#x22;input&amp;#x22;: [{&amp;#x22;role&amp;#x22;: &amp;#x22;system&amp;#x22;, &amp;#x22;content&amp;#x22;: &amp;#x22;You are responsible for extracting structured data from the provided unstructured data. Follow the user&amp;#x27;s instructions and output JSON only without code fences.&amp;#x22;}, {&amp;#x22;role&amp;#x22;: &amp;#x22;user&amp;#x22;, &amp;#x22;content&amp;#x22;: &amp;#x22;CONTENT: I live at 42 Wallaby Way, Sydney\nINSTRUCTIONS: extract street and city&amp;#x22;}], &amp;#x22;ideal&amp;#x22;: &amp;#x22;{\&amp;#x22;street\&amp;#x22;: \&amp;#x22;42 Wallaby Way\&amp;#x22;,\&amp;#x22;city\&amp;#x22;: \&amp;#x22;Sydney\&amp;#x22;}&amp;#x22;}{&amp;#x22;input&amp;#x22;: [{&amp;#x22;role&amp;#x22;: &amp;#x22;system&amp;#x22;, &amp;#x22;content&amp;#x22;: &amp;#x22;You are responsible for extracting structured data from the provided unstructured data. Follow the user&amp;#x27;s instructions and output JSON only without code fences.&amp;#x22;}, {&amp;#x22;role&amp;#x22;: &amp;#x22;user&amp;#x22;,&amp;#x22;content&amp;#x22;: &amp;#x22;CONTENT: My favorite color is blue and I was born on June 15, 1985.\nINSTRUCTIONS: extract favorite color and date of birth. format date of birth as yyyy-mm-dd&amp;#x22;}], &amp;#x22;ideal&amp;#x22;: &amp;#x22;{\&amp;#x22;favorite_color\&amp;#x22;: \&amp;#x22;blue\&amp;#x22;,\&amp;#x22;date_of_birth\&amp;#x22;: \&amp;#x22;1985-06-15\&amp;#x22;}&amp;#x22;}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;extraction&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;extraction.test.v0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;metrics&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;accuracy&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;extraction.test.v0&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;evals.elsuite.basic.json_match:JsonMatch&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;args&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;samples_jsonl&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;extraction/samples.jsonl&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;extraction:  id: extraction.test.v0  metrics: [accuracy]extraction.test.v0:  class: evals.elsuite.basic.json_match:JsonMatch  args:    samples_jsonl: extraction/samples.jsonl&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;It seems this project is &lt;a href=&quot;https://github.com/openai/evals/tree/main/evals/solvers?ref=danielcorin.com#what-are-solvers&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;moving away&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; from the “Completion Functions” abstraction to “Solvers”.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[W]e’ve found that passing a prompt to the CompletionFn encourages eval designers to write prompts that often privileges a particular kind of Solver over others. e.g. If developing with ChatCompletion models, the eval tends to bake-in prompts that work best for ChatCompletion models. In moving from Completion Functions to Solvers, we are making a deliberate choice to write Solver-agnostic evals, and delegating any model-specific or strategy-specific code to the Solver.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In working through this exercise, a thought that came to mind often is how many different approaches we currently have for model prompting, both because of model differences (completion vs. chat) but also API design decisions.
To allow for easy switching between models, using a gateway/adapter pattern to support mapping from the model/provider API to your applications’s internal API will be as critical as ever.
This approach may be further complicated if your application relies on streaming responses.
It seems as important as ever to use abstractions to decouple yourself from provider APIs to remain flexible to adopting future advances in models and keep your switching cost low.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-03-28</title><link>https://www.danielcorin.com/logs/2024/03/28/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/03/28/</guid><description>2024-03-28</description><pubDate>Thu, 28 Mar 2024 08:48:00 GMT</pubDate><content:encoded>&lt;p&gt;I can’t believe I am saying this but if you play around with language models locally, a 1 TB drive, might not be big enough for very long.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-03-26</title><link>https://www.danielcorin.com/logs/2024/03/26/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/03/26/</guid><description>2024-03-26</description><pubDate>Tue, 26 Mar 2024 19:21:48 GMT</pubDate><content:encoded>&lt;p&gt;As someone learning to draw, I really enjoyed this article: &lt;a href=&quot;https://maggieappleton.com/still-cant-draw?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://maggieappleton.com/still-cant-draw&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
I’ve watched the first three videos in &lt;a href=&quot;https://www.youtube.com/playlist?list=PL1HIh25sbqZnkA1T09UtVHoyjYaMJuK0a&amp;#x26;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;this playlist&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; so far and have been sketching random objects from around the house.
I find that I’m not too big of a fan of my drawing as I’m doing it but when I return to it later, I seem to like it more.
Apparently, this is a common experience for creatives.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Added &lt;a href=&quot;https://www.goatcounter.com/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;GoatCounter&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; to my site.
I’m planning to see how I like it compared to &lt;a href=&quot;https://posthog.com/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Posthog&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-03-25</title><link>https://www.danielcorin.com/logs/2024/03/25/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/03/25/</guid><description>2024-03-25</description><pubDate>Mon, 25 Mar 2024 21:07:54 GMT</pubDate><content:encoded>&lt;p&gt;I’m taking a break from sketchybar for now.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I’m currently looking into build a NL to SQL plugin or addition to &lt;code&gt;datasette&lt;/code&gt; to use a language model to write queries.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-03-24</title><link>https://www.danielcorin.com/logs/2024/03/24/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/03/24/</guid><description>2024-03-24</description><pubDate>Sun, 24 Mar 2024 08:48:52 GMT</pubDate><content:encoded>&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;🤖 Connections (claude-3-opus)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Puzzle #287&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;🟩🟩🟩🟩&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;🟨🟨🟨🟨&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;🟦🟦🟦🟦&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;🟪🟪🟪🟪&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;🤖 Connections (claude-3-opus)Puzzle #287🟩🟩🟩🟩🟨🟨🟨🟨🟦🟦🟦🟦🟪🟪🟪🟪&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I got this result twice in a row.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;gpt-4&lt;/code&gt; couldn’t solve it.
Here is one attempt.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;🤖 Connections (gpt-4)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Puzzle #287&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;🟩🟪🟩🟩&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;🟩🟩🟩🟩&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;🟦🟨🟦🟨&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;🟦🟨🟦🟨&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;🟦🟨🟦🟦&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;🤖 Connections (gpt-4)Puzzle #287🟩🟪🟩🟩🟩🟩🟩🟩🟦🟨🟦🟨🟦🟨🟦🟨🟦🟨🟦🟦&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;hr&gt;
&lt;p&gt;I tried &lt;a href=&quot;https://echochess.com/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://echochess.com/&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
Kind of fun.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I remember when my highschool teachers used to tell us Wikipedia wasn’t a legitimate source.
It sort of feels like education is having this type of moment now with language models.
Professionals are using this technology today to do work in the real work.
Learn how the technology works, teach it and teach with it.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I spent a bunch more time using &lt;code&gt;sketchybar&lt;/code&gt;.
It’s a fun mashup of shell and cli tools.
I have a working MVP that I’m reasonably happy with and plan to iterate on.
Configuring this type of thing is fun but can take a lot of time.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-03-23</title><link>https://www.danielcorin.com/logs/2024/03/23/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/03/23/</guid><description>2024-03-23</description><pubDate>Sat, 23 Mar 2024 08:47:09 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;One of the greatest misconceptions concerning LLMs is the idea that they are easy to use. They really aren’t: getting great results out of them requires a great deal of experience and hard-fought intuition, combined with deep domain knowledge of the problem you are applying them to.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The &lt;a href=&quot;https://simonwillison.net/2024/Mar/22/claude-and-chatgpt-case-study/?ref=danielcorin.com#llms-are-useful&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;whole “LLMs are useful” section&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; hits for me.
I have an experience similar to Simon’s and I also wouldn’t claim LLMs are without issue or controversy.
For me they are unquestionably useful.
They help me more quickly and effectively get ideas out of my head and into the real world.
They help me learn more quickly and solve problems and answer questions as I’m learning.
They increase my capabilities as an individual in the same sort of way getting access to Google for the first time did.
These days, &lt;em&gt;not&lt;/em&gt; having access to a language model makes me feel like I’ve had an essential tool taken away from me, like not having a calculator or documentation.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://simonwillison.net/2024/Mar/22/claude-and-chatgpt-case-study/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://simonwillison.net/2024/Mar/22/claude-and-chatgpt-case-study/&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;The models &lt;code&gt;claude-3-opus&lt;/code&gt;, &lt;code&gt;claude-3-sonnet&lt;/code&gt; and &lt;code&gt;gpt-4&lt;/code&gt; solved Connections today on their first tries today.
All but &lt;code&gt;opus&lt;/code&gt; failed on subsequent tries.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;gpt-3.5.turbo&lt;/code&gt; doesn’t seem to understand it is supposed to be playing the game, not me.
&lt;code&gt;groq-llama-2&lt;/code&gt; got just 1/4 correct.
&lt;code&gt;mistral-large&lt;/code&gt; got 2/4.&lt;/p&gt;
&lt;p&gt;As an intermediate player of this game, I would say today’s puzzle was on the easier side.
The models don’t usually do so well.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href=&quot;https://shop.boox.com/products/palma?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;BOOX Palma&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; is a a mobile phone that uses an E Ink display.
I immediately wanted this when I saw it.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;While working on a script that evaluates language models’ ability to play Connections, I was using Cursor to make some improvements to the code.
On a whim, I decided to have it swap all my convenience print statements to log statements.
I’ve done this on a smaller scale but with a ~200 line file, practically, I knew it would probably take the model longer to do than for me to do myself.
As I watched Cursor regenerate my file via inference and show a diff, I was struck by the idea that running complex, multiple passes of LLMs on code bases with target instructions may become the new “&lt;a href=&quot;https://xkcd.com/303/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;my code is compiling&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;”.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;An infinitely zoomable, Game of Life, simulating itself.
The simulation adjusts speed as you zoom so that each level moves at a perceptible speed, allowing you to really appreciate it.
Extremely well executed.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://oimo.io/works/life/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://oimo.io/works/life/&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-03-22</title><link>https://www.danielcorin.com/logs/2024/03/22/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/03/22/</guid><description>2024-03-22</description><pubDate>Fri, 22 Mar 2024 23:30:42 GMT</pubDate><content:encoded>&lt;p&gt;Did a bit more work on a LLM evaluator for connections.
I’m mostly trying it with &lt;code&gt;gpt-4&lt;/code&gt; and &lt;code&gt;claude-3-opus&lt;/code&gt;.
On today’s puzzle, the best either did was 2/4 correct.
I’m unsure how much more improvement is possible with prompting or even fine tuning, but it’s an interesting challenge.&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;Darwin, who kept a notebook where he wrote down facts that contradicted him, observed that frustrating, cognitively dissonant things were the first to slip his memory.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://www.henrikkarlsson.xyz/p/limitatons?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://www.henrikkarlsson.xyz/p/limitatons&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I subscribed to AI News, which summarize top subreddits, Discords and Twitter.
It’s quite extensive and detailed.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-03-21</title><link>https://www.danielcorin.com/logs/2024/03/21/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/03/21/</guid><description>2024-03-21</description><pubDate>Thu, 21 Mar 2024 21:03:43 GMT</pubDate><content:encoded>&lt;p&gt;Setup a Temporal worker in Ruby and got familiar with its ergonomics.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Tried out this &lt;a href=&quot;https://github.com/logicalroot/gpt-4v-demos?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;gpt-4v demo repo&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;
Experimented with OCR capabilities of open source multi-modal language models.
Tried &lt;code&gt;llava:32b&lt;/code&gt; (1.6) and &lt;code&gt;bakllava&lt;/code&gt; but neither seemed to touch &lt;code&gt;gpt-4-vison&lt;/code&gt;’s performance.
It was cool to see the former run on a macbook though.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-03-18</title><link>https://www.danielcorin.com/logs/2024/03/18/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/03/18/</guid><description>2024-03-18</description><pubDate>Mon, 18 Mar 2024 20:15:00 GMT</pubDate><content:encoded>&lt;p&gt;I use the &lt;kbd&gt;hyper&lt;/kbd&gt;+&lt;kbd&gt;u&lt;/kbd&gt; keyboard shortcut to open a language model playground for convenience.
I might use this 10-20 times a day.
For the last year or so that I’ve been doing this, it has always pointed to &lt;a href=&quot;https://platform.openai.com/playground?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://platform.openai.com/playground&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
As of today, I’ve switched it to point to &lt;a href=&quot;https://console.anthropic.com/workbench?new=1&amp;#x26;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://console.anthropic.com/workbench?new=1&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
Lately, I’ve preferred &lt;code&gt;claude-3-opus&lt;/code&gt; to &lt;code&gt;gpt-4&lt;/code&gt;.
For a while, I had completely stopped looking for other models as &lt;code&gt;gpt-4&lt;/code&gt; seemed to be unchallenged, but it’s exciting to see new options available.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-03-16</title><link>https://www.danielcorin.com/logs/2024/03/16/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/03/16/</guid><description>2024-03-16</description><pubDate>Sat, 16 Mar 2024 10:15:01 GMT</pubDate><content:encoded>&lt;p&gt;I tried setting up &lt;code&gt;sqlite-vss&lt;/code&gt; with Deno following &lt;a href=&quot;https://github.com/asg017/sqlite-vss?tab=readme-ov-file&amp;#x26;ref=danielcorin.com#deno&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;these instructions&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; but got stuck on this error&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;❯&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;deno&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;task&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;dev&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;Task&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;dev&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;deno&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;run&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;--allow-env&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;--allow-read&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;--allow-write&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;--allow-net&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;--unstable-ffi&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;--allow-ffi&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;--watch&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;main.ts&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;Watcher&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;Process&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;started.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;error:&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;Uncaught&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; (in &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;promise&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;) TypeError: readCstr is not a function&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; const SQLITE_VERSION = readCstr(&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;sqlite3_libversion&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                              &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;^&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;at&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;https://deno.land/x/sqlite3@0.8.0/src/database.ts:101:31&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;at&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;eventLoopTick&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; (ext:core/01_core.js:169:7)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;❯ deno task devTask dev deno run --allow-env --allow-read --allow-write --allow-net --unstable-ffi --allow-ffi --watch main.tsWatcher Process started.error: Uncaught (in promise) TypeError: readCstr is not a functionexport const SQLITE_VERSION = readCstr(sqlite3_libversion());                              ^    at https://deno.land/x/sqlite3@0.8.0/src/database.ts:101:31    at eventLoopTick (ext:core/01_core.js:169:7)&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;so I pivoted to Python. That effort eventually turned into this &lt;a href=&quot;/til/sqlite/sqlite-vss&quot;&gt;post&lt;/a&gt;.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-03-15</title><link>https://www.danielcorin.com/logs/2024/03/15/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/03/15/</guid><description>2024-03-15</description><pubDate>Fri, 15 Mar 2024 08:48:25 GMT</pubDate><content:encoded>&lt;p&gt;I’ve spend almost a week, on and off, trying to install &lt;code&gt;ollama&lt;/code&gt; using Nix in such a way that &lt;code&gt;ollama serve&lt;/code&gt; will be run and managed automatically in the background.
Initially, I had tried to install &lt;code&gt;ollama&lt;/code&gt; via &lt;code&gt;home-manager&lt;/code&gt;.
This was straightforward, but finding a way to have &lt;code&gt;ollama serve&lt;/code&gt; run automatically so that I didn’t need to do it myself every time I wanted to interact with or pull a model.
This need send me down that macOS rabbithole of launch agents/daemons and plists.
The macOS-specific nature of this research could have tipped me off that this was a job for &lt;code&gt;nix-darwin&lt;/code&gt; rather than &lt;code&gt;home-manager&lt;/code&gt;.
Eventually, I tried installing &lt;code&gt;ollama&lt;/code&gt; via &lt;code&gt;nix-darwin&lt;/code&gt; and it seemed to Just Work.
I still haven’t been able to figure out where it’s running &lt;code&gt;ollama serve&lt;/code&gt; from.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;❯&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;grep&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-l&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&apos;ollama&apos;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;~/Library/LaunchAgents/&lt;/span&gt;&lt;span style=&quot;--0:#FD971F&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;/Library/LaunchAgents/&lt;/span&gt;&lt;span style=&quot;--0:#FD971F&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;/Library/LaunchDaemons/&lt;/span&gt;&lt;span style=&quot;--0:#FD971F&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;/System/Library/LaunchAgents/&lt;/span&gt;&lt;span style=&quot;--0:#FD971F&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;/System/Library/LaunchDaemons/&lt;/span&gt;&lt;span style=&quot;--0:#FD971F&quot;&gt;*&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A19E8D&quot;&gt;# nothing&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;❯ grep -l &amp;#x27;ollama&amp;#x27; ~/Library/LaunchAgents/* /Library/LaunchAgents/* /Library/LaunchDaemons/* /System/Library/LaunchAgents/* /System/Library/LaunchDaemons/*&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Nix-darwin appears to have &lt;a href=&quot;https://daiderd.com/nix-darwin/manual/index.html?ref=danielcorin.com#opt-environment.launchDaemons&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;several options&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; for configuring launch agents that I may need to return to if this behavior doesn’t persist across a restart.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I learn about &lt;a href=&quot;https://neal.fun/infinite-craft/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;this game&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; by Neal a little while and I love it.
I think it’s a language-model-based craft game.
Something like a game I played a long time ago called “Alchemy”.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-03-14</title><link>https://www.danielcorin.com/logs/2024/03/14/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/03/14/</guid><description>2024-03-14</description><pubDate>Thu, 14 Mar 2024 18:50:37 GMT</pubDate><content:encoded>&lt;p&gt;I spent some time exploring Deepgram’s Next.js &lt;a href=&quot;https://github.com/deepgram-starters/live-nextjs-starter?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;starter app&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
I was hoping I could use it to generate a transcription in realtime but it was more like real-time captions.
The responses from the server were sometimes corrections of previous transcriptions.
Maybe there is a way to make this a transcription but I wasn’t sure.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I also tried out vocode’s &lt;a href=&quot;https://docs.vocode.dev/open-source/python-quickstart?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Python library&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; for building voice-based LLM applications.
By far the hardest part of this was getting an Azure account, which I believe is used to synthesize the LLM response as speech.
I had the demo working end to end but it was a bit sensitive to background noise &lt;a href=&quot;https://docs.vocode.dev/open-source/python-quickstart?ref=danielcorin.com#a-note-on-echo-cancellation&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;as they note&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
I haven’t had a chance to play around with any configurations they provide.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-03-11</title><link>https://www.danielcorin.com/logs/2024/03/11/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/03/11/</guid><description>2024-03-11</description><pubDate>Mon, 11 Mar 2024 17:46:29 GMT</pubDate><content:encoded>&lt;p&gt;I played around with &lt;a href=&quot;https://github.com/reworkd/AgentGPT?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;AgentGPT&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; using Reworkd’s &lt;a href=&quot;https://agentgpt.reworkd.ai/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;cloud hosted&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; instance.
I tried a few different goals.
The first was travel related.
I was pleasantly surprised (unnerved) to see the agent return links for flights to my proposed location from my actual current origin (I guess they used my IP to determine this).
One of my first impressions was the likeness to &lt;a href=&quot;https://www.perplexity.ai/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Perplexity&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, particularly in how the links were displayed.
It turns out, Reworkd open sourced &lt;a href=&quot;https://github.com/reworkd/perplexity-style-streaming?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;code&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; for this exact thing.
AgentGPT also uses inline citations like Perplexity does, though those aren’t shown in the &lt;code&gt;perplexity-style-streaming&lt;/code&gt; demo video.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I read up a bit on managing windows with &lt;code&gt;yabai&lt;/code&gt;’s tiled layout&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;layout&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;bsp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;yabai -m config layout bsp&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I read through these two helpful articles on the topic&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://evantravers.com/articles/2024/02/15/yabai-tiling-window-management-for-osx/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://evantravers.com/articles/2024/02/15/yabai-tiling-window-management-for-osx/&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bryce-s.com/yabai/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://bryce-s.com/yabai/&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It’s not for me.
My approach is a bit more flexible but makes more sense in my brain than this does.
I don’t really mind having windows open that are fully covered.
Generally, I have two windows in a 50-50 split on my large monitor and a single window maximized on my laptop screen.
For me, tiled layout seems more complicated than it is worth.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I learned about &lt;a href=&quot;https://devdocs.io/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://devdocs.io&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
It’s quite interesting and useful, but the search functionality doesn’t quite work like a search engineer in terms of surfacing the relevant issues for your problem.
It seems to work best when you enter the specific library, class, or API you are working with.
It would be interesting to see if this could be indexed for RAG then used as a resource by a model.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;My love-hate relationship with Nix continues.
When it works, it’s amazing but I’m still scaling the learning curve of the language and its rough edges.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Python dependency management system is the wild west.
I manage Python versions with &lt;code&gt;asdf&lt;/code&gt; on one machine.
When a project uses &lt;code&gt;poetry&lt;/code&gt; and relies on &lt;code&gt;poetry&lt;/code&gt;’s virtualenv to install dependencies, selecting the right version (on the system) of &lt;code&gt;poetry&lt;/code&gt; and getting around the &lt;code&gt;asdf&lt;/code&gt; becomes a pain.
I like &lt;code&gt;asdf&lt;/code&gt; because I don’t want to manage a version tool per language, yet many of these languages and tools more or less force you to do just that or struggle to juggle multiple versions of things while you try and bootstrap your way to a working environment.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-03-08</title><link>https://www.danielcorin.com/logs/2024/03/08/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/03/08/</guid><description>2024-03-08</description><pubDate>Fri, 08 Mar 2024 19:15:33 GMT</pubDate><content:encoded>&lt;p&gt;I tried to get &lt;code&gt;claude-3-opus&lt;/code&gt; to solve today’s Connections.
It did well enough that I am going to try doing this more consistently.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I grew tried of Nix and decided to setup Homebrew as well.
I finally gave in after trying to install &lt;a href=&quot;https://github.com/simonw/llm?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;llm&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; and not being able to figure out how to install plugins despite the message&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;If you want to install extra llm plugins, use llm.withPlugins([]) expression.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;If you want to install extra llm plugins, use llm.withPlugins([]) expression.&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;In tracing this error, I also learning &lt;code&gt;nixpkgs&lt;/code&gt; can apply &lt;a href=&quot;https://github.com/NixOS/nixpkgs/blob/713a54dab13e4eabc983350419795bfaa0a858cd/pkgs/development/python-modules/llm/001-disable-install-uninstall-commands.patch?ref=danielcorin.com#L21&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;patches&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; to libraries in its registry.&lt;/p&gt;
&lt;p&gt;I never figured out how to make this work.
Instead, I installed Homebrew which allowed me to install things the standard way&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;llm&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;llm-claude-3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;llm install llm-claude-3&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-03-07</title><link>https://www.danielcorin.com/logs/2024/03/07/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/03/07/</guid><description>2024-03-07</description><pubDate>Thu, 07 Mar 2024 20:36:05 GMT</pubDate><content:encoded>&lt;p&gt;I like Nix a lot.
I still don’t understand a lot about it.
I cannot lose an hour to installing a dependencies when that is a solved problem using Homebrew.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ok fine, I will manage Homebrew with nix.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-03-06</title><link>https://www.danielcorin.com/logs/2024/03/06/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/03/06/</guid><description>2024-03-06</description><pubDate>Wed, 06 Mar 2024 21:43:34 GMT</pubDate><content:encoded>&lt;p&gt;Ideal bookmarking from Swyx on &lt;a href=&quot;https://www.latent.space/p/soumith?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Latent Space with Soumith Chintala&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;create synthetic data off of your retrieved documents and then fine tune on that&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;Today I installed Homebrew.
It’s the longest I have ever gone since I learned to code without installing Homebrew on my system.
I’ve been able to rely on Nix for so much, but it’s been time consuming to get everything the way I want it, and I don’t want perfect to be the enemy of good.
I can and plan to use &lt;code&gt;brew&lt;/code&gt; sparingly in the name of reproducibility.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-03-04</title><link>https://www.danielcorin.com/logs/2024/03/04/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/03/04/</guid><description>2024-03-04</description><pubDate>Mon, 04 Mar 2024 20:18:14 GMT</pubDate><content:encoded>&lt;p&gt;I was using an LLM to assist when playing with Alacritty and tmux configs.
The LLM (gpt-4-turbo) gave some amusing advice&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Embrace the Limitation&lt;/p&gt;
&lt;p&gt;In some cases, the minor visual imperfections may be something to adjust to. Given tmux’s text-based nature and dependency on terminal emulator behavior, some display quirks can be challenging to eliminate entirely.&lt;/p&gt;
&lt;/blockquote&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-02-28</title><link>https://www.danielcorin.com/logs/2024/02/28/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/02/28/</guid><description>2024-02-28</description><pubDate>Wed, 28 Feb 2024 09:09:46 GMT</pubDate><content:encoded>&lt;p&gt;While Karabiner/Goku can be a fun way to try and configure my keyboard as an app launcher, I’ve found skhd to be much more straightforward.
I’ll probably keep Karabiner for the caps lock to hyper key mapping only for now.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-02-25</title><link>https://www.danielcorin.com/logs/2024/02/25/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/02/25/</guid><description>2024-02-25</description><pubDate>Sun, 25 Feb 2024 13:19:49 GMT</pubDate><content:encoded>&lt;p&gt;Github Code Search is an indispensable part of my workflow that I don’t think gets mentioned enough.
There are so many great projects out there that solve or may help you solve what you are currently working on.
I was looking to write a shell script to invoke the &lt;code&gt;caffeinate&lt;/code&gt; command on macOS to keep my system awake.
The default, this tool runs an blocks forever in the terminal while it does its job.
I wanted to manage it in the background.
I thought through the beginnings of how I might do that myself.
Something like&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;ps&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;aux&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;grep&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;caffeinate&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A19E8D&quot;&gt;# if running, kill pid&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A19E8D&quot;&gt;# if not running, start&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;ps aux | grep caffeinate&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I plugged &lt;code&gt;ps aux | grep caffeinate&lt;/code&gt; into &lt;a href=&quot;https://github.com/search?type=code&amp;#x26;q=ps+aux+%7C+grep+caffeinate&amp;#x26;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Code Search&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; and found several different approaches for what I had in mind.
A language model does pretty well too.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A19E8D&quot;&gt;#!/bin/bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A19E8D&quot;&gt;# This script toggles the &apos;caffeinate&apos; command on macOS.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A19E8D&quot;&gt;# Check if caffeinate is running&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;pid&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;pgrep&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;caffeinate&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; [ &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;-z&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;$pid&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; ]; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#A19E8D&quot;&gt;# If caffeinate is not running, start it&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;caffeinate&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;caffeinate started&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;else&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#A19E8D&quot;&gt;# If caffeinate is running, kill it&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;kill&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; $pid&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;caffeinate stopped&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;#!/bin/bash# This script toggles the &amp;#x27;caffeinate&amp;#x27; command on macOS.# Check if caffeinate is runningpid=$(pgrep caffeinate)if [ -z &amp;#x22;$pid&amp;#x22; ]; then  # If caffeinate is not running, start it  caffeinate &amp;#x26;  echo &amp;#x22;caffeinate started&amp;#x22;else  # If caffeinate is running, kill it  kill $pid  echo &amp;#x22;caffeinate stopped&amp;#x22;fi&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I suppose the language model wins today, for introducing me to &lt;code&gt;pgrep&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I settled on the following because I like one-liners:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;pgrep&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;caffeinate&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;/dev/null&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;kill&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; $(&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;pgrep&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;caffeinate&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;caffeinate&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-dim&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;pgrep caffeinate &gt; /dev/null &amp;#x26;&amp;#x26; kill $(pgrep caffeinate) || caffeinate -dim &amp;#x26;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-02-24</title><link>https://www.danielcorin.com/logs/2024/02/24/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/02/24/</guid><description>2024-02-24</description><pubDate>Sat, 24 Feb 2024 10:18:57 GMT</pubDate><content:encoded>&lt;p&gt;Fell down the system customization rabbit hole.
Looking at switching to &lt;a href=&quot;https://alacritty.org/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Allacrity&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; or &lt;a href=&quot;https://sw.kovidgoyal.net/kitty/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;kitty&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; as a terminal emulator.
Getting &lt;a href=&quot;https://github.com/yqrashawn/GokuRakuJoudo?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;goku&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; setup as an app and hotkey launcher on top of &lt;a href=&quot;https://karabiner-elements.pqrs.org/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Karabiner&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
Playing with &lt;a href=&quot;https://github.com/koekeishiya/yabai?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;yabai&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; as a window manager.
Looking at &lt;a href=&quot;https://github.com/FelixKratz/SketchyBar?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;sketchybar&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; as a custom status bar.
Trying to manage it all with &lt;a href=&quot;https://github.com/LnL7/nix-darwin?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;nix-darwin&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; and &lt;a href=&quot;https://github.com/nix-community/home-manager?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;home-manager&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-02-21</title><link>https://www.danielcorin.com/logs/2024/02/21/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/02/21/</guid><description>2024-02-21</description><pubDate>Wed, 21 Feb 2024 08:05:44 GMT</pubDate><content:encoded>&lt;p&gt;I started to play around a bit with trying to setup a Temporal worker using Deno, but quickly ran into issues, then learned this &lt;a href=&quot;https://github.com/temporalio/sdk-typescript/issues/1285?ref=danielcorin.com#issuecomment-1806103268&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;isn’t currently possible&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-02-19</title><link>https://www.danielcorin.com/logs/2024/02/19/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/02/19/</guid><description>2024-02-19</description><pubDate>Mon, 19 Feb 2024 10:33:00 GMT</pubDate><content:encoded>&lt;p&gt;I enjoyed reading James’ &lt;a href=&quot;https://jamesg.blog/2024/02/19/personal-website-ideas/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;post&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; on 100 things you can do on your personal website.
I like the idea of adding a sparkline and maybe webmentions.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-02-16</title><link>https://www.danielcorin.com/logs/2024/02/16/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/02/16/</guid><description>2024-02-16</description><pubDate>Fri, 16 Feb 2024 07:43:14 GMT</pubDate><content:encoded>&lt;p&gt;A very timely (for me) &lt;a href=&quot;https://hamel.dev/blog/posts/prompt/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;article&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; by Hamel about understanding what a language model prompt abstraction library is doing before blindly adopting it.
This really aligned with a lot of my own thoughts on the matter, right down to it’s praise of Jason’s instructor library baseline example.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-02-05</title><link>https://www.danielcorin.com/logs/2024/02/05/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/02/05/</guid><description>2024-02-05</description><pubDate>Mon, 05 Feb 2024 21:30:00 GMT</pubDate><content:encoded>&lt;p&gt;After playing around with home-manager for a bit, I realized what I really wanted was to have nix-darwin manage my system and use my home-manager config as a module.
It took a bit of trial and error and searching to figure out how to make this work, but I did eventually find a way.
With nix-darwin, I set up my nix and macOS settings.
With home-manager, I installed my system packages (configured those) and shell aliases.
I still need to do some work to set up git, my shell PS1, and to see if I can configure iTerm from here, but it’s the most promising progress I’ve had so far.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-02-04</title><link>https://www.danielcorin.com/logs/2024/02/04/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/02/04/</guid><description>2024-02-04</description><pubDate>Sun, 04 Feb 2024 18:39:00 GMT</pubDate><content:encoded>&lt;p&gt;I pivoted to using home-manager using the &lt;a href=&quot;https://nix-community.github.io/home-manager/index.xhtml?ref=danielcorin.com#sec-install-standalone&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;standalone installation&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
It seems to provide a reasonable starting point and a found a fair bit of prior art when searching Github, so my hope was there would be good examples to model off of.
It took me a frustrating time to realize after running &lt;code&gt;home-manager switch&lt;/code&gt; that only some changes took effect immediately.
Knowing this probably would have saved me an hour and could have possibly solved a number of my problems from yesterday as well — I don’t have a quick way to check.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-02-03</title><link>https://www.danielcorin.com/logs/2024/02/03/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/02/03/</guid><description>2024-02-03</description><pubDate>Sat, 03 Feb 2024 21:01:00 GMT</pubDate><content:encoded>&lt;p&gt;Today, was a first day setting up a new computer.
I spent most of the time installing applications and building up my setting with declarative configurations.
This &lt;a href=&quot;https://macos-defaults.com/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;site&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; has been helpful.
I also started &lt;a href=&quot;https://nixcademy.com/2024/01/15/nix-on-macos/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;this walkthrough&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; for setting up nix on a Mac.&lt;/p&gt;
&lt;p&gt;I had to temporarily disable my &lt;code&gt;nix.conf&lt;/code&gt; that was generated from the installer then run&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;nix&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;--extra-experimental-features&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;nix-command&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;--extra-experimental-features&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;flakes&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;run&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;nix-darwin&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;switch&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;--flake&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;nix --extra-experimental-features nix-command --extra-experimental-features flakes run nix-darwin -- switch --flake .&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;to run the &lt;code&gt;flake.nix&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;I ended up uninstalling &lt;code&gt;nix-darwin&lt;/code&gt; after there were several issues I encountered following the instructions on a brand new Mac (even though this article was written a month ago).
This beta vibe has continued to be my experience with Nix, though each time I return to it, I feel a get a bit more insight into what is happening and how it can be useful.
Unfortunately, the error messages are also difficult to troubleshoot with search engines or language models.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-01-31</title><link>https://www.danielcorin.com/logs/2024/01/31/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/01/31/</guid><description>2024-01-31</description><pubDate>Wed, 31 Jan 2024 11:19:02 GMT</pubDate><content:encoded>&lt;p&gt;A new thing I am trying is sending thanks to folks who write articles or build projects that I find useful.
I got a taste of this after writing an &lt;a href=&quot;/posts/2024/fine-tuning-connections&quot;&gt;article&lt;/a&gt; on fine-tuning gpt-3.5 to solve the Connections word game, even though the results didn’t turn out that well.
Getting the positive feedback was quite motivating and my hope is to give others the same appreciation for the positive impact their work makes on me.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-01-28</title><link>https://www.danielcorin.com/logs/2024/01/28/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/01/28/</guid><description>2024-01-28</description><pubDate>Sun, 28 Jan 2024 19:20:12 GMT</pubDate><content:encoded>&lt;p&gt;I’m currently working on building a language model based chatbot that can answer questions about the contents of a database.
There are a lot of products and libraries making efforts at this problem.
To start, I tried out the &lt;a href=&quot;https://github.com/vanna-ai/vanna?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Vanna.ai&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; open source library.
I followed &lt;a href=&quot;https://vanna.ai/docs/postgres-openai-standard-chromadb.html?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;this guide&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; to get started with ChromaDB for the indices and OpenAI as the language model to query a Postgres database.
I also set up a Postgres database with Docker and the Chinook dataset.
I downloaded the Chinook dataset for Postgres from this &lt;a href=&quot;https://github.com/xivSolutions/ChinookDb_Pg_Modified/tree/master?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;repo&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
The dataset is described in detail &lt;a href=&quot;https://docs.yugabyte.com/preview/sample-data/chinook/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;here&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
To start up Docker and load the data, I ran the following from my host machine (not inside a Docker container)&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A19E8D&quot;&gt;# start postgres&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;docker&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;run&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;--name&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;vanna-postgres&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-e&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;POSTGRES_PASSWORD=mysecretpassword&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-p&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;5432:5432&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-d&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;postgres&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A19E8D&quot;&gt;# create the database&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;createdb&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-h&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;localhost&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-p&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;5432&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-U&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;postgres&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;chinook&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A19E8D&quot;&gt;# load the data&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;psql&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-h&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;localhost&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-p&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;5432&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-U&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;postgres&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;chinook&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-1&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-f&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;~/path.to/chinook_pg_serial_pk_proper_naming.sql&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;docker run --name vanna-postgres -e POSTGRES_PASSWORD=mysecretpassword -p 5432:5432 -d postgrescreatedb -h localhost -p 5432 -U postgres chinookpsql -h localhost -p 5432 -U postgres chinook -1 -f ~/path.to/chinook_pg_serial_pk_proper_naming.sql&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Vanna indexes the database content into, then can take a question and convert it into a SQL query.
Finally, it executes a SQL query and returns the results as a dataframe.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-01-26</title><link>https://www.danielcorin.com/logs/2024/01/26/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/01/26/</guid><description>2024-01-26</description><pubDate>Fri, 26 Jan 2024 20:37:31 GMT</pubDate><content:encoded>&lt;p&gt;For several days now, I’ve been looking into recording audio in a browser and streaming it to a backend over a websocket with the intent to do speech to text translation with an AI model.
I know the pieces are all there and I’ve done something like this before (streamed audio from a Twilio IVR to a node backend, the send that to a Google &lt;a href=&quot;https://cloud.google.com/dialogflow/cx/docs?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Dialogflow CX&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; agent).
The current challenge is finding which pieces I want to connect.
I’ve used a lot of Next.js lately.
I like the developer experience.
It enjoyable to use to build frontends.
It also has &lt;a href=&quot;https://nextjs.org/docs/app/building-your-application/routing/route-handlers?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;route handlers&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, which are backend functions that are deployed on Lambda if you deploy on Vercel.
These route handlers can’t really support a websocket backend because they aren’t designed to be long lived, something I learned when I worked around if by creating a secondary route handler as an &lt;a href=&quot;/til/nextjs/async-functions&quot;&gt;async function&lt;/a&gt;.
Apparently, these can now run for up to five minutes.&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;
Route handlers on Vercel can now run for a maximum of five minutes, which is an increase from the previous limit. This allows for more complex operations to be handled directly within these functions.
I would need to stand up a separate backend.
That seemed fine and fair enough, so I started looking at Deno, which I’ve also used recently and enjoyed.
Deno supports websockets out of the box.
It also supports importing npm modules — I plan to use &lt;code&gt;@google-cloud/speech&lt;/code&gt; to do speech to text conversion.
The remaining question is how I can stream audio captured in the browser with &lt;code&gt;navigator.getUserMedia&lt;/code&gt; over a websocket to forward to Google to convert to text.&lt;/p&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;&lt;a class=&quot;heading-link-wrapper&quot; href=&quot;#footnote-label&quot;&gt;Footnotes&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://vercel.com/changelog/serverless-functions-can-now-run-up-to-5-minutes?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://vercel.com/changelog/serverless-functions-can-now-run-up-to-5-minutes&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-01-23</title><link>https://www.danielcorin.com/logs/2024/01/23/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/01/23/</guid><description>2024-01-23</description><pubDate>Tue, 23 Jan 2024 20:39:08 GMT</pubDate><content:encoded>&lt;p&gt;Hardly seemed with a TIL post because it was too easy, but I learned &lt;code&gt;gpt-4&lt;/code&gt; is proficient at building working &lt;code&gt;ffmpeg&lt;/code&gt; commands.
I wrote the prompt&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;convert m4a to mp3 with ffmpeg&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;and it responsed with&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;ffmpeg&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-i&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;input.m4a&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-codec:v&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;copy&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-codec:a&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;libmp3lame&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-q:a&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;output.mp3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;ffmpeg -i input.m4a -codec:v copy -codec:a libmp3lame -q:a 2 output.mp3&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Since the problem at hand was low stakes, I just ran the command and, to my satisfaction, it worked.
Language models can’t solve every problem but they can be absolutely delightful when they work.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-01-16</title><link>https://www.danielcorin.com/logs/2024/01/16/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/01/16/</guid><description>2024-01-16</description><pubDate>Tue, 16 Jan 2024 20:50:18 GMT</pubDate><content:encoded>&lt;p&gt;I spent another hour playing around with different techniques to try and teach and convince &lt;code&gt;gpt-4&lt;/code&gt; to play Connections properly, after a bit of &lt;a href=&quot;/posts/2024/fine-tuning-connections&quot;&gt;exploration&lt;/a&gt; and &lt;a href=&quot;https://news.ycombinator.com/item?id=39003066&amp;#x26;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;feedback&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
I incorporated two new techniques&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Asking for on category at a time, then giving the model feedback (correct, incorrect, 3/4)&lt;/li&gt;
&lt;li&gt;Using the chain of thought prompting technique&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Despite all sorts of shimming and instructions, I still struggled to get the model to&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;only suggest each word once, even when it already got a category correct&lt;/li&gt;
&lt;li&gt;only suggest words from the 16 word list&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Even giving a followup message with feedback that the previous guess was invalid didn’t seem to help.
This was the prompt I ended up with.
It wasn’t all that effective.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;The game &quot;Connections&quot; is a word game where you start with 16 words and need to group them into 4 groups of 4. Each grouping has a category that unambiguously groups the four words together. Each puzzle has exactly one solution. Watch out for words that seem to belong to multiple categories. You will be given 16 words. Output 4 groupings of 4 words and the categories to which they belong.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Output your response in exact adherence to the following form&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;category: &amp;#x3C;category&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;words: &amp;#x3C;word1&gt;, &amp;#x3C;word2&gt;, &amp;#x3C;word3&gt;, &amp;#x3C;word4&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Make one guess at a time. I will tell you if you guess correctly or if you get 3/4 words for a category. Otherwise, I will respond with &quot;incorrect&quot;. Each word is only in one category.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Output the remaining words after I tell you you got a correct answer.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Here are the 16 words: hello, list, trick, word, cant, fool, skinny, eggshell, lean, con giggle, scoop, boob, slope, dope, dupe&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;Let&apos;s think step by step. YOU MUST use words from the list. DO NOT suggest other words not in the list. You will lose the game if you do so.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;The game &amp;#x22;Connections&amp;#x22; is a word game where you start with 16 words and need to group them into 4 groups of 4. Each grouping has a category that unambiguously groups the four words together. Each puzzle has exactly one solution. Watch out for words that seem to belong to multiple categories. You will be given 16 words. Output 4 groupings of 4 words and the categories to which they belong.Output your response in exact adherence to the following formcategory: &lt;category&gt;words: &lt;word1&gt;, &lt;word2&gt;, &lt;word3&gt;, &lt;word4&gt;Make one guess at a time. I will tell you if you guess correctly or if you get 3/4 words for a category. Otherwise, I will respond with &amp;#x22;incorrect&amp;#x22;. Each word is only in one category.Output the remaining words after I tell you you got a correct answer.Here are the 16 words: hello, list, trick, word, cant, fool, skinny, eggshell, lean, con giggle, scoop, boob, slope, dope, dupeLet&amp;#x27;s think step by step. YOU MUST use words from the list. DO NOT suggest other words not in the list. You will lose the game if you do so.&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-01-10</title><link>https://www.danielcorin.com/logs/2024/01/10/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/01/10/</guid><description>2024-01-10</description><pubDate>Wed, 10 Jan 2024 19:10:18 GMT</pubDate><content:encoded>&lt;p&gt;After some experimentation with GitHub Copilot Chat, my review is mixed.
I like the ability to copy from the sidebar chat to the editor a lot.
It makes the chat more useful, but the chat is pretty chatty and thus somewhat slow to finish responding as a result.
I’ve also found the inline generation doesn’t consistently respect instructions or highlighted context, which is probably the most common way I use Cursor, so that was a little disappointing.
To get similar behavior with Copilot, sometimes I needed to run a generation for the whole file, but the lack of specific highlighted context meant I had to write more specific instructions, which was more time-consuming than highlighting and giving shorter, more contextual instructions.
It is easy to edit the prompt and resubmit it if the completion is close, but not quite right, so that is helpful.&lt;/p&gt;
&lt;p&gt;Maybe it’s the learning curve of a new tool, but my intuition (given limited use so far) is I am fighting with Copilot Chat more than I do with Cursor.
The latter feels more like an extension of my editor whereas the former can be something I need to clean up after.
Overall, Copilot Chat is a good tool, with room for improvement.
There are UX features that I could imagine other code assistant tools adopting, like the copy-from-chat functionality.
I wonder how much the fact that I use the &lt;code&gt;gpt-4-1106-preview&lt;/code&gt; model with Cursor, whereas Copilot uses the &lt;a href=&quot;https://openai.com/blog/openai-codex?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Codex&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; model, impacts the output quality and ability to follow instructions with the same consistency.
It would be interesting to try Copilot with a different model to see how much of the differences are due to prompting and how much are due to the model capabilities.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-01-07</title><link>https://www.danielcorin.com/logs/2024/01/07/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/01/07/</guid><description>2024-01-07</description><pubDate>Sun, 07 Jan 2024 12:03:24 GMT</pubDate><content:encoded>&lt;p&gt;I worked through a basic SwiftUI 2 tutorial to build a simple Mac app.
Swift and SwiftUI are an alternative to accomplish the same things Javascript and React do for web.
I could also use something like &lt;a href=&quot;https://github.com/electron/electron?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Electron&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; to build a cross-platform app using web technology, but after reading &lt;a href=&quot;https://papereditor.app/dev?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Mihhail’s article&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; about using macOS native technology to develop &lt;a href=&quot;https://papereditor.app/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Paper&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, I was curious to dip my toe in and see what the state of the ecosystem looked like.
He opted to use Objective-C, for performance reasons.
I decided to try Swift because I’ve written a bit of Objective-C years ago.
I like the ergonomics of Swift as a language well enough.
I can’t say I’m a huge fan of Xcode.
My hardware is almost certainly too old, but Xcode is sluggish and not fun to use in a way that the web development tools I use are not (at least on my machine).
Seeing all the things that &lt;a href=&quot;https://whatpwacando.today/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;PWAs can do today&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, I’m unsure whether it makes sense to invest in learning SwiftUI unless I want to build native mac apps.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-01-05</title><link>https://www.danielcorin.com/logs/2024/01/05/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/01/05/</guid><description>2024-01-05</description><pubDate>Fri, 05 Jan 2024 17:15:34 GMT</pubDate><content:encoded>&lt;p&gt;I enjoyed &lt;a href=&quot;https://www.robinsloan.com/notes/home-cooked-app/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;this article&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; by Robin about writing software for yourself.
I very much appreciate the reminder of how gratifying it can be to build tools for yourself.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-01-03</title><link>https://www.danielcorin.com/logs/2024/01/03/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/01/03/</guid><description>2024-01-03</description><pubDate>Wed, 03 Jan 2024 19:23:17 GMT</pubDate><content:encoded>&lt;p&gt;I read Swyx’s article &lt;a href=&quot;https://www.swyx.io/learn-in-public?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Learn in Public&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; today and it’s inspired me to open source most of my &lt;a href=&quot;/projects&quot;&gt;projects&lt;/a&gt; on Github.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;A beautifully written and thought-provoking &lt;a href=&quot;https://www.henrikkarlsson.xyz/p/multi-armed-bandit?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;piece&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; by Henrik about world models, exploring vs. exploiting in life, among other things.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2024-01-02</title><link>https://www.danielcorin.com/logs/2024/01/02/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2024/01/02/</guid><description>2024-01-02</description><pubDate>Tue, 02 Jan 2024 14:35:27 GMT</pubDate><content:encoded>&lt;p&gt;I finally had a chance to use Github Copilot Chat in VS Code.
It has a function to chat inline like Cursor, which has worked quite well given my initial use of it.
I’m looking forward to using this more.
Unfortunately, it’s not available for all IDEs yet but hopefully will be soon!&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I watched lesson 3 of the &lt;a href=&quot;https://course.fast.ai/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;FastAI course&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
I’ve really enjoyed Jeremy Howard’s lecture’s so far.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-12-21</title><link>https://www.danielcorin.com/logs/2023/12/21/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/12/21/</guid><description>2023-12-21</description><pubDate>Thu, 21 Dec 2023 17:56:52 GMT</pubDate><content:encoded>&lt;p&gt;I looked into &lt;a href=&quot;https://www.11ty.dev/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;11ty&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; today to see if it could be worth migrating away from &lt;a href=&quot;https://gohugo.io/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;hugo&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, which is how (at the time of this post) I build my blog.
After a bit of research and browsing, I setup &lt;a href=&quot;https://github.com/kohrongying/11ty-blog-starter?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;this&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; template and copied over some posts.
Some over my older posts were using &lt;a href=&quot;https://gohugo.io/content-management/syntax-highlighting/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Hugo’s markup for syntax highlighting&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
I converted these to standard markdown code fences (which was worthwhile regardless).
I also needed to adjust linking between posts.
In Hugo, I use &lt;a href=&quot;https://hugo-docs.netlify.app/en/functions/ref/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;ref&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
In 11ty, these need to be relative links, e.g. &lt;code&gt;/posts/2023/future-of-personal-knowledge&lt;/code&gt;.
In Hugo, this approach works as well, so I may move to it.&lt;/p&gt;
&lt;p&gt;After getting an initial build working, I took stock of my progress and where I aimed to end up.
11ty feels more easily configurable than Hugo.
I prefer the template language (&lt;a href=&quot;https://shopify.github.io/liquid/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Liquid&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;) used by the 11ty template I chose over what Hugo uses.
However, I was still many hours away from getting to a spot I was happy with and decided to stop.
I might consider 11ty again when starting something new, but right now, a full migration doesn’t seem worth it.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-12-12</title><link>https://www.danielcorin.com/logs/2023/12/12/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/12/12/</guid><description>2023-12-12</description><pubDate>Tue, 12 Dec 2023 21:22:51 GMT</pubDate><content:encoded>&lt;p&gt;I would &lt;em&gt;love&lt;/em&gt; if OpenAI added support for presetting a &lt;code&gt;max_tokens&lt;/code&gt; url parameter in the Playground.
Something as simple as this:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#f8f8f2&quot;&gt;https://platform.openai.com/playground?mode=chat&amp;#x26;model=gpt-4-1106-preview&amp;#x26;max_tokens=1024&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;https://platform.openai.com/playground?mode=chat&amp;#x26;model=gpt-4-1106-preview&amp;#x26;max_tokens=1024&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;My most common workflow (mistake):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Press my hotkey to open the playground&lt;/li&gt;
&lt;li&gt;Type in a prompt&lt;/li&gt;
&lt;li&gt;Submit with &lt;kbd&gt;cmd&lt;/kbd&gt;+&lt;kbd&gt;enter&lt;/kbd&gt;&lt;/li&gt;
&lt;li&gt;Cancel the request&lt;/li&gt;
&lt;li&gt;Increase the “Maximum Length” to something that won’t get truncated&lt;/li&gt;
&lt;li&gt;Submit the request again&lt;/li&gt;
&lt;/ul&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-11-25</title><link>https://www.danielcorin.com/logs/2023/11/25/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/11/25/</guid><description>2023-11-25</description><pubDate>Sat, 25 Nov 2023 20:44:39 GMT</pubDate><content:encoded>&lt;p&gt;A thoroughly enjoyable and inspiring &lt;a href=&quot;https://blog.osm-ai.net/thinking/2023/10/26/novice-mistakes.html?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;read&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; by Omar about his 20 year journey to date.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Quantity was important. Quantity led to emergent of quality.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Read the documentation: I can’t emphasize how useful this is. There are gems upon gems in the documentation. A good documentation gives a glimpse of the mind of the authors, and a glimpse of their experience.&lt;/p&gt;
&lt;/blockquote&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-11-17</title><link>https://www.danielcorin.com/logs/2023/11/17/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/11/17/</guid><description>2023-11-17</description><pubDate>Fri, 17 Nov 2023 13:13:02 GMT</pubDate><content:encoded>&lt;p&gt;I’m betting OpenAI will soon have a Cloud Storage product like Google Drive or iCloud for ChatGPT Plus users.
Having your personal data available in the context of a language model is a massive value add.
With a product like, OpenAI can fully support use cases like “summarize my notes for the week” or “create action item reminders from this recording”.
They’re already dipped their toe in the water with the Files API.
I expect a more feature complete offering is on the way.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-10-27</title><link>https://www.danielcorin.com/logs/2023/10/27/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/10/27/</guid><description>2023-10-27</description><pubDate>Fri, 27 Oct 2023 16:18:30 GMT</pubDate><content:encoded>&lt;p&gt;I did more exploration with Copilot, mainly for writing unit tests.
Copilot is a pretty good at bootstraping unit tests, particularly in Java, where initializing the right types may take several lines and there is a large standard library.
In doing this, the Copilot-written code was close enough that it saved me time relative to writing the tests from scratch.
I learned that Copilot can show a ranked list of completion in a separate window in the IDE, which is helpful and can also be invoked with a hotkey (&lt;kbd&gt;option&lt;/kbd&gt;+&lt;kbd&gt;\&lt;/kbd&gt; in IntelliJ), which is useful as well.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-10-26</title><link>https://www.danielcorin.com/logs/2023/10/26/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/10/26/</guid><description>2023-10-26</description><pubDate>Thu, 26 Oct 2023 21:29:28 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been integrating &lt;a href=&quot;https://github.com/features/copilot?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Copilot&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; into my workflow the past few days.
From my understanding, it uses &lt;a href=&quot;https://platform.openai.com/docs/guides/code?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;OpenAI’s Codex model&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, which is part of the GPT-3 model series.
I believe this also predates the chat models, gpt-3.5-turbo and gpt-4.
As someone who has been using &lt;a href=&quot;https://cursor.sh/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Cursor&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; for my personal work for several months now, the core completion functionality of Copilot feels like a step back compared to Cursor’s &lt;kbd&gt;cmd&lt;/kbd&gt;+&lt;kbd&gt;k&lt;/kbd&gt; (to say nothing of chat, which both have and other features).
In general, when writing code, I’ve found I don’t really want line completion, I want idea completion.
Copilot can do this, but you have to set it up in the right way, with a comment or a well named function stub&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A19E8D&quot;&gt;# sort list of tuples by second element&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;# sort list of tuples by second element&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;sort_list_by_second_element&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;def sort_list_by_second_element(l):&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;This doesn’t always work and it’s sometimes hard to say if this is due to the API’s performance or the model’s capabilities.
With Cursor, you just type thing what you want into the prompt box&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;sort list of tuples by second element&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It’s basically the same input, but you’re guaranteed a completion because you asked for one.
This issue has arisen for me several times with Copilot.
I want to invoke it — not just have it step in when it thinks it’s useful.&lt;/p&gt;
&lt;p&gt;Additionally, Cursor allows you to select specific blocks of text to modify or augment based on your prompt.
It will also walk through an entire file, making minor modifications to existing code in place.
This capability seems beyond what Copilot currently offers, which limits it’s usefulness for modifying existing code.&lt;/p&gt;
&lt;p&gt;Github/Microsoft have an advantage with enterprise clients, but I believe they’re already lagging behind best-in-class development tooling using language models.
That said, I expect they’ll observe the shifting landscape and begin adding more popular features to Copilot.
They have a lot of resources to throw at the problem.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-10-24</title><link>https://www.danielcorin.com/logs/2023/10/24/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/10/24/</guid><description>2023-10-24</description><pubDate>Tue, 24 Oct 2023 21:59:42 GMT</pubDate><content:encoded>&lt;p&gt;I finished migrating my site to the latest release of Hugo today.
It’s been quite a while since I’d pulled the latest changes but most of the fixes were straightforward.
A number of the partials had been updated, so I need to port my custom components to incorporate the changes.
I also migrated what I’d previously kept in a &lt;code&gt;static&lt;/code&gt; directory to &lt;code&gt;assets&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I looked further into using &lt;code&gt;hidutil&lt;/code&gt; to replace Karabiner.
It looks like the utility can’t map a single keypress to multiple keys, so it can’t directly substitute for how I use Karabiner.
Along the way, I found this &lt;a href=&quot;https://hidutil-generator.netlify.app/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;useful tool&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; for generating a plist file to load a startup to persist hotkeys across system restarts.
I was considering switching to use the right command key, but it looks like Hammerspoon may not provide hotkey support for that according to &lt;a href=&quot;https://github.com/Hammerspoon/hammerspoon/issues/3245?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;this issue&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
I might be able to put something together in combination with &lt;a href=&quot;/til/skhd/intro&quot;&gt;&lt;code&gt;skhd&lt;/code&gt;&lt;/a&gt;, but this idea is going to the backburner for now.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-10-23</title><link>https://www.danielcorin.com/logs/2023/10/23/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/10/23/</guid><description>2023-10-23</description><pubDate>Mon, 23 Oct 2023 21:22:16 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been looking into &lt;code&gt;hidutil&lt;/code&gt; to potentially replace Karabiner for overriding my capslock behavior.
My first attempt, follow instructions similar to &lt;a href=&quot;https://www.naseer.dev/post/hidutil/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;this post&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, was close but unsuccessful.
I was able to remap the capslock key, but it wasn’t trigger the key combo I had hoped for — I use &lt;kbd&gt;cmd&lt;/kbd&gt;+&lt;kbd&gt;option&lt;/kbd&gt;+&lt;kbd&gt;ctrl&lt;/kbd&gt;+&lt;kbd&gt;shift&lt;/kbd&gt;.
Caplock wasn’t performing it’s normal function and the key light wasn’t turning on but it also wasn’t triggering my hotkeys.
Hopefully I will have something workable after a bit more time with this.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-10-21</title><link>https://www.danielcorin.com/logs/2023/10/21/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/10/21/</guid><description>2023-10-21</description><pubDate>Sat, 21 Oct 2023 20:26:17 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been working on a Next.js app with a Leaflet map component.
Using this combination of technologies has not gone smoothly.
I’ve been running into an issue trying to make the Leaflet component render client side.
From my understanding, Next.js renders React server-side by default, but this is easy to change with the &lt;code&gt;&apos;use client&apos;&lt;/code&gt; directive.
After a bit of work, I was able to get a map component rendering on the page by importing it with&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;typescript&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; MapView &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;dynamic&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&apos;@/components/MapView&apos;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;loading&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: () &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E;--0td:underline&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;&gt;Map is loading&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;ssr: &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;const MapView = dynamic(  () =&gt; import(&amp;#x27;@/components/MapView&amp;#x27;),  {    loading: () =&gt; &lt;p&gt;Map is loading&lt;/p&gt;,    ssr: false  })&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;From here, I wanted to configure the markers, which I intended to set and store in a React hook.
I was not able to find a way to make this work.
I’ve consulted documentation a few different tutorials, mostly notably &lt;a href=&quot;https://jan-mueller.at/blog/react-leaflet/?ref=danielcorin.com#nextjs&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Jan’s article&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, but have yet to get this working with dynamic data.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-10-18</title><link>https://www.danielcorin.com/logs/2023/10/18/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/10/18/</guid><description>2023-10-18</description><pubDate>Wed, 18 Oct 2023 21:16:01 GMT</pubDate><content:encoded>&lt;p&gt;I spent some time experiementing with &lt;a href=&quot;https://www.inngest.com/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Inngest&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, cloud software for running async jobs, workflows, crons and more.
It’s quite similar to &lt;a href=&quot;https://temporal.io/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Temporal&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, which I am big advocate for for running durable workflows and gracefully handling failures.
There are some drawbacks, but it feels simpler to get started than Temporal and has a most of the same topline capabilities.
The main feature deficiencies I noticed in about an hour of research were lack of as granular retry configurations and timeouts and no support for query handlers to inspect the status of a running function/workflow.
The list of supported features is impressive, notably&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.inngest.com/docs/guides/scheduled-functions?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;crons&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.inngest.com/docs/functions/cancellation?ref=danielcorin.com#with-timeout&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;timeouts&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.inngest.com/docs/functions/retries?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;some error handling&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.inngest.com/docs/guides/step-parallelism?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;step (activity) paralleism&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.inngest.com/docs/guides/enqueueing-future-jobs?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;delayed jobs&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.inngest.com/docs/reference/functions/step-wait-for-event?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;wait for event (signals)&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They also have a free usage tier!
I wasn’t able to get access to Temporal Cloud without paying their monthy support fee, so this is attractive for experimentation and hobby projects.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-09-22</title><link>https://www.danielcorin.com/logs/2023/09/22/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/09/22/</guid><description>2023-09-22</description><pubDate>Fri, 22 Sep 2023 19:39:42 GMT</pubDate><content:encoded>&lt;p&gt;I had a bunch of fun following along with &lt;a href=&quot;https://randomgeekery.org/post/2020/05/querying-hugo-content-with-python/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;this post&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; with my own Hugo blog to construct a sqlite database of metadata.
Building the database indices, I found a mistake I had made years ago in defining a post’s alias, which was a duplicate, so I fixed that.
I’ve read a lot of praise of sqlite lately and wanted to get more familiar with the tools and ecosystem and this was a nice way to start to do that.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-09-15</title><link>https://www.danielcorin.com/logs/2023/09/15/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/09/15/</guid><description>2023-09-15</description><pubDate>Fri, 15 Sep 2023 18:58:51 GMT</pubDate><content:encoded>&lt;p&gt;Further investigation with Open Interpreter today reaffirmed certain strengths but also revealed a number of weaknesses.
The look is excellent at parsing structured data like JSON or CSV, doing analysis with tools like pandas and numpy, and plotting the results with matplotlib.
However, it falls short when trying to perform more complex data fetching tasks.
It seems to struggle to scrape websites or make use of less common libraries, at least when I tried without providing any additional documentation.
At one point, I had it scrape a relatively simple html website and it was able to parse that into a dataframe, when cleanup the data to a point where I think I was close to being ready to do analysis.
Unfortunately, the REPL seemed to hang at that point.
I’m not sure if I maxed out the token context of the model or if something else happened, but I had to hard exit the process.
There isn’t an easy way to “jump back to where you were in a session” and I didn’t have the patience to try again from the start.
I need to look into whether some kind of step memoization is possible.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-09-14</title><link>https://www.danielcorin.com/logs/2023/09/14/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/09/14/</guid><description>2023-09-14</description><pubDate>Thu, 14 Sep 2023 21:13:43 GMT</pubDate><content:encoded>&lt;p&gt;I did some more experimentation with &lt;a href=&quot;https://github.com/KillianLucas/open-interpreter?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;open-interpreter&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; today.
The first use case I tried was to create, organize and reorganize files.
It didn’t generate interesting content, but it was fluent at writing Python code to organize and rename files.
When I prompted it to generate a fake dataset, it installed &lt;a href=&quot;https://github.com/joke2k/faker?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;faker&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; and created a CSV with the columns I requested.
When I requested it plot those data points, it installed &lt;code&gt;matplotlib&lt;/code&gt; and did so without issue.&lt;/p&gt;
&lt;p&gt;From there, I moved on to doing some stock analysis.
Some coworkers and I have a running joke that the stock price of our company is always lower when the trading window for employees is open.
I had &lt;code&gt;open-interpreter&lt;/code&gt; do analysis of this, giving it the windows for open trading and prompting it to analysis average and high stock prices both inside and outside the windows.
Finally, I had it graph all of these elements together, as it saw fit.
I found the results to be impressive, especially given how high level my instructions were.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Open-interpreter&lt;/code&gt; writes and runs fluent Python.
Do not underestimate how powerful this can be.
It gives you what feels like close to an order of magnitude of additional power operating your computer in certain ways, including restructuring the filesystem and analyzing data.
I’m eager to try doing more things with it.&lt;/p&gt;
&lt;p&gt;Occasionally, it gets stuck and can’t get unstuck, even using the error message output by executing the command.
Issues like these are especially annoying if it generates a lot of code, then tries to self-correct and needs to generate it all again.&lt;/p&gt;
&lt;p&gt;I wish it were faster.
This desire hardly seems fair given that using a language model to write code in this manner feels like superpower, but I found myself itching for it to hurry up.
Again, not entirely reasonable, but it’s what I’d want given a “perfect” user experience.&lt;/p&gt;
&lt;p&gt;Having not had much opportunity to play with OpenAI’s Code Interpreter/Advanced Data Analysis feature in ChatGPT, I was floored doing the stock analysis.
In 5 minutes, the model helped me answer a question I had had but didn’t have the time or motivation to answer myself.
The final chart the model constructed with code would have probably taken me a couple of hours of focused work to achieve, and I likely would not have done as good a job.&lt;/p&gt;
&lt;p&gt;I’m excited to do more with this tool.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-09-11</title><link>https://www.danielcorin.com/logs/2023/09/11/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/09/11/</guid><description>2023-09-11</description><pubDate>Mon, 11 Sep 2023 21:02:19 GMT</pubDate><content:encoded>&lt;p&gt;I read quote from a long tweet the other day that made me smile.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Writing pure JavaScript is like trying to cut a watermelon with a chainsaw in the dark. It sounds fun and free and quite easy until there’s a roomful of mess to clean up.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/kettanaito/status/1699440414812504443?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://twitter.com/kettanaito/status/1699440414812504443&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-09-09</title><link>https://www.danielcorin.com/logs/2023/09/09/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/09/09/</guid><description>2023-09-09</description><pubDate>Sat, 09 Sep 2023 20:00:20 GMT</pubDate><content:encoded>&lt;p&gt;Playing with &lt;a href=&quot;https://rivet.ironcladapp.com/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Rivet&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; and &lt;a href=&quot;https://openinterpreter.com/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;OpenInterpreter&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-08-27</title><link>https://www.danielcorin.com/logs/2023/08/27/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/08/27/</guid><description>2023-08-27</description><pubDate>Sun, 27 Aug 2023 09:58:08 GMT</pubDate><content:encoded>&lt;p&gt;It’s much easier to test Temporal Workflow in Python by invoking the contents of the individual Activities first, in the shell or via a separate script, then composing them into a Workflow.
I need to see if there’s a better way to surface exceptions and failures through Temporal directly to make the feedback loop faster.&lt;/p&gt;
&lt;hr/&gt;

&lt;p&gt;From &lt;a href=&quot;https://arxiv.org/abs/2308.10335?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;this paper&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;62% of the generated code contains API misuses, which would cause unexpected consequences if the code is introduced into real-world software&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This work further reinforces some &lt;a href=&quot;/logs/2023/08/22&quot;&gt;recent thoughts&lt;/a&gt; on the importance of measuring the quality of a language model’s output for a use case.&lt;/p&gt;
&lt;hr/&gt;
&lt;astro-embed-tweet&gt;&lt;blockquote class=&quot;twitter-tweet&quot; data-dnt=&quot;true&quot; data-theme=&quot;dark&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;From my experience at a big tech co, 30%+ of engineers there are working on shipping a few buttons. I once saw a team of 20 work for 6 months to ship a back button for the onboarding flow (surprisingly hard to do). &lt;a href=&quot;https://t.co/1wFMQ7SLFm&quot;&gt;https://t.co/1wFMQ7SLFm&lt;/a&gt;&lt;/p&gt;&amp;mdash; Flo Crivello (@Altimor) &lt;a href=&quot;https://x.com/Altimor/status/1695543062444015733?ref_src=twsrc%5Etfw&quot;&gt;August 26, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;/astro-embed-tweet&gt;
&lt;p&gt;It had been a while since I thought about this 😬&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-08-22</title><link>https://www.danielcorin.com/logs/2023/08/22/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/08/22/</guid><description>2023-08-22</description><pubDate>Tue, 22 Aug 2023 20:20:48 GMT</pubDate><content:encoded>&lt;p&gt;Language models and prompts are magic in a world of deterministic software.
As prompts change and use cases evolve, it can be difficult to continue to have confidence in the output of a model.
Building a library of example inputs for your model+prompt combination with annotated outputs is critical to evolving the prompt in a controlled way, ensuring performance and outcomes don’t drift or regress as you try and improve your overall performance.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-08-17</title><link>https://www.danielcorin.com/logs/2023/08/17/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/08/17/</guid><description>2023-08-17</description><pubDate>Thu, 17 Aug 2023 19:05:40 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been doing a bit of work with &lt;a href=&quot;https://temporal.io/Temporal?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Temporal&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; using it’s Python SDK.
Temporal remains one of my favorite pieces of technology to work with.
The team is very thoughtful with their API design and it provides a clean abstraction for building distributed, resilient workflows.
It’s a piece of technology that is difficult to understand until you build with it, and once you do, you find applications for it everywhere you look.
I highly recommend experimenting with it if you’re unfamiliar.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://learn.temporal.io/getting_started/python/hello_world_in_python/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;This tutorial&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; is a nice starting point if you’re ok working in Python.
I’m still relearning what can and can’t go in workflows and activities, so starting with the basics and iterating with these primitives has been helpful.
If you end up creating a project with multiple packages, you may find the snippet below helpful to run a worker or a script to start a workflow from your project root.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;python&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;temporalapp.worker&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;python -m temporalapp.worker&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;That assumes a project structure that looks something like this&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;└──&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;temporalapp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;├──&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;__init__.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;├──&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;activity&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;│&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;   &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;├──&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;__init__.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;│&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;   &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;└──&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;greeting.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;├──&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;entity&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;│&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;   &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;├──&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;__init__.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;│&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;   &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;└──&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;greeting.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;├──&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;start_workflow.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;├──&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;worker.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;└──&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;workflow&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;├──&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;__init__.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;└──&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;greeting.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;.└── temporalapp    ├── __init__.py    ├── activity    │   ├── __init__.py    │   └── greeting.py    ├── entity    │   ├── __init__.py    │   └── greeting.py    ├── start_workflow.py    ├── worker.py    └── workflow        ├── __init__.py        └── greeting.py&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-08-07</title><link>https://www.danielcorin.com/logs/2023/08/07/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/08/07/</guid><description>2023-08-07</description><pubDate>Mon, 07 Aug 2023 19:43:23 GMT</pubDate><content:encoded>&lt;p&gt;🎧 &lt;a href=&quot;https://www.lennyspodcast.com/velocity-over-everything-how-ramp-became-the-fastest-growing-saas-startup-of-all-time-geoff-charl/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Velocity over everything: How Ramp became the fastest-growing SaaS startup of all time | Geoff Charles (VP of Product)&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;This conversation between Lenny and Geoff was particularly noteworthy for me because it hit on so many areas of what I’ve seen in the most effective organizations and teams I’ve been apart of as well as realigning incentives to solve a number of problems I’ve experienced that hold teams back.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We report back operational overhead, meaning the percentage of tickets that come from your product area normalized by the number of users that are using that product&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Having worked on a support eng team, this point resonates deeply.
We often saw support tickets being opened in our systems because of bugs and issues in the product.
The product teams were often unaware of these issues, and the number of these types of problems only grew over time.
Occasionally, if an issue was driving enough ticket volume, it would make it back to the product team who would fix the bug, but I always advocated that we report back support tickets attributed to their respective teams and make those numbers public.
To hear this approach corroborated in the discussion was validating.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We don’t have a bug backlog.
We fix every bug once they’re surfaced almost.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This approach is simultaneously an engineer’s dream and nightmare.
On the surface, it sounds like you would get nothing done because you’re work would constantly be interrupted by bug that need fixing.
It wasn’t entirely clear to me how the workload breaks down between “core” and “production” engineers.
However, to me, this approach seems to be the best shot you have and keeping your product as close to bug-free as you can.
It’s an idealistic goal but I like it.
Bug backlogs rot rapidly.
The codebase continues to change and the engineers with context move on to other things.
The best time to fix a bug is as soon as you learn about it, when the context is most fresh and when you have the reporter available or a stacktrace that is current.
The level of effort required to fix a bug weeks or months later always seems to be higher than fixing it immediately because you have to ramp up on context, find a way to reproduce it and things may have changed since it was reported.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[S]upport reports into me. And the first principle there was saying, “Well, every support ticket is a failure of our product.”
We literally have that as a quote just posted on all those channels.
It’s a failure.
And if the product works perfectly, no one should ever have to contact our support team.
And what better way of holding the product team accountable for support other than having support report into product.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Here, Geoff further reinforces the point that with a dedicated approach, a team can build quickly while still maintaining a bug-free experience.
I love this mentality.
I personally feel a lot of dissonance when I find a bug in my code.
The first thing I want to do it fix it, particularly when I know it has customer impact.
On one hand, this can interrupt your flow if you’re working on something else.
And that something else may also be positioned to deliver a lot of customer value, so there is an opportunity cost to the interruption.
On the other, the bug is negatively impacting customers today.
To have the buy-in of the organization to prioritize these fixes makes a strong statement about their culture and values.&lt;/p&gt;
&lt;p&gt;I really enjoyed listening to Geoff’s ideas and approach to product.
This conversation has helped me challenge some of my priors and assumptions about how teams are built and run.&lt;/p&gt;
&lt;p&gt;Bonus quote, included without further comment&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[W]e moved from quarterly, very expensive quarterly planning, which took one month every three months, so basically 33% of the time was planning, to a biannual one-pager on, these are the company priorities and it’s much more smooth and much faster&lt;/p&gt;
&lt;/blockquote&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-08-06</title><link>https://www.danielcorin.com/logs/2023/08/06/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/08/06/</guid><description>2023-08-06</description><pubDate>Sun, 06 Aug 2023 08:29:04 GMT</pubDate><content:encoded>&lt;p&gt;Simon wrote an &lt;a href=&quot;https://simonwillison.net/2023/Aug/3/weird-world-of-llms/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;excellent post&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; on the current state of the world in LLMs.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Twitter continues to talk LK-99.
It seems like an easy thing to root for but hard to tell exactly what is going on.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-08-03</title><link>https://www.danielcorin.com/logs/2023/08/03/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/08/03/</guid><description>2023-08-03</description><pubDate>Thu, 03 Aug 2023 18:04:07 GMT</pubDate><content:encoded>&lt;astro-embed-tweet&gt;&lt;blockquote class=&quot;twitter-tweet&quot; data-dnt=&quot;true&quot; data-theme=&quot;dark&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;The high-order bit that changed in AI:&lt;br&gt;&amp;quot;I&amp;#39;ll give you 10X bigger computer&amp;quot;&lt;br&gt;- 10 years ago: I&amp;#39;m not immediately sure what to do with it&lt;br&gt;- Now: Not only do I know exactly what to do with it but I can predict the metrics I will achieve&lt;br&gt;Algorithmic progress was necessity, now bonus.&lt;/p&gt;&amp;mdash; Andrej Karpathy (@karpathy) &lt;a href=&quot;https://x.com/karpathy/status/1687248476508487681?ref_src=twsrc%5Etfw&quot;&gt;August 3, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;/astro-embed-tweet&gt;
&lt;astro-embed-tweet&gt;&lt;blockquote class=&quot;twitter-tweet&quot; data-dnt=&quot;true&quot; data-theme=&quot;dark&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Turning scaling into a systematic science is the biggest advance enabled by LLMs. &lt;a href=&quot;https://t.co/BgHoDxeX7m&quot;&gt;https://t.co/BgHoDxeX7m&lt;/a&gt;&lt;/p&gt;&amp;mdash; Jim Fan (@DrJimFan) &lt;a href=&quot;https://x.com/DrJimFan/status/1687255071246221319?ref_src=twsrc%5Etfw&quot;&gt;August 4, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;/astro-embed-tweet&gt;
&lt;p&gt;It will be interested to see if or when we hit scaling limits to training more powerful models and what our new bottleneck becomes.
For now, there appears to be a lot of greenfield.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-08-01</title><link>https://www.danielcorin.com/logs/2023/08/01/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/08/01/</guid><description>2023-08-01</description><pubDate>Tue, 01 Aug 2023 08:38:02 GMT</pubDate><content:encoded>&lt;p&gt;While not an entirely unique perspective, I believe Apple is one of the best positioned companies to take advantage of the recent improvements in language models.
I expect more generic chatbots will continue to become commodities whereas Apple will build a bespoke, multi-modal assistant with access to all your personal data on device.
This assistant will be able to do anything the phone can do (invoke functions/tools) as well as answer any question about your personal data (show me photos from Christmas in 2018).
Let’s hope they name it something other than Siri.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-07-30</title><link>https://www.danielcorin.com/logs/2023/07/30/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/07/30/</guid><description>2023-07-30</description><pubDate>Sun, 30 Jul 2023 20:53:55 GMT</pubDate><content:encoded>&lt;p&gt;A &lt;a href=&quot;https://news.ycombinator.com/item?id=36934431&amp;#x26;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;heartwarming exchange&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Your project has a youthful optimism that I hope you won’t lose as you go. And in fact it might be the way to win in the long run.&lt;/p&gt;
&lt;/blockquote&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-07-25</title><link>https://www.danielcorin.com/logs/2023/07/25/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/07/25/</guid><description>2023-07-25</description><pubDate>Tue, 25 Jul 2023 21:56:00 GMT</pubDate><content:encoded>&lt;p&gt;I tried out Llama 2 today using &lt;a href=&quot;https://github.com/jmorganca/ollama?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;ollama&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
At first pass, it seemed ok a writing Python code but I struggled to get it to effective generate or adhere to specific schema.
I’ll have to try a few more things but my initial impressions are mixed (relative to OpenAI models).&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-07-22</title><link>https://www.danielcorin.com/logs/2023/07/22/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/07/22/</guid><description>2023-07-22</description><pubDate>Sat, 22 Jul 2023 20:10:37 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;It’s hard to think because it’s hard to think.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/Nexuist/status/1682783966074486786?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;em&gt;- Github Copilot&lt;/em&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;Finally learned that RAG stands for “Retriever-Augmented Generation” after seeing it all over the place for months.
Not sure how I missed that one.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-07-19</title><link>https://www.danielcorin.com/logs/2023/07/19/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/07/19/</guid><description>2023-07-19</description><pubDate>Wed, 19 Jul 2023 08:34:46 GMT</pubDate><content:encoded>&lt;p&gt;Meta released &lt;a href=&quot;https://ai.meta.com/llama/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Llama 2&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; yesterday and the hype has ensued.
While it’s exciting to see more powerful models become available, a model with weights is not the same as an API.
It is still far less accessible.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;A &lt;a href=&quot;https://arxiv.org/pdf/2307.09009.pdf?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;paper&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; came out on the measurement of the degradation ChatGPT’s reasoning abilities.
As real-time peer review took place over the course of the day on Twitter, the most compelling explanation that I heard to explain these findings was that OpenAI has further fine-tuned the models to respond in a manner consistent with the level of the prompt, because this is a better experience for the user.
We’ll see if this explanation holds up over time.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;A &lt;a href=&quot;https://arxiv.org/pdf/2307.03172.pdf?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;paper&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; earlier this month investigated the ability of language models to use longer context supplied to them and finds that performance is the best for information at the beginning and the end of the context.
If this is an architectural limitation of LLMs, we may be using semantic and contextual search for a while longer to ensure the model has the relevant context in a prompt of reasonable length, to ensure high quality results.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-07-09</title><link>https://www.danielcorin.com/logs/2023/07/09/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/07/09/</guid><description>2023-07-09</description><pubDate>Sun, 09 Jul 2023 22:14:13 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been playing around more with &lt;code&gt;nix&lt;/code&gt; lately.
I like what I’ve seen from it so far: declare dependencies and get an isolated shell with those dependencies.
If distributed, the environment can be trivially recreated on another machine.
So far, it’s been a struggle to get a working Python environment with dependencies setup.
I’ve gotten a lot of cryptic error messages after trying a number of different &lt;code&gt;flake.nix&lt;/code&gt; files.
I plan to continue to experiment, but thus far the learning curve is tough.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-07-07</title><link>https://www.danielcorin.com/logs/2023/07/07/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/07/07/</guid><description>2023-07-07</description><pubDate>Fri, 07 Jul 2023 17:39:50 GMT</pubDate><content:encoded>&lt;p&gt;Some unstructured thoughts on the types of tasks language models seem to be good (and bad) at completing:&lt;/p&gt;
&lt;p&gt;A language model is an effective tool for solving problems when can describe the answer or output you want from it with language.
A language model is a good candidate to replace manual processes performed by humans, where judgement or application of semantic rules is needed to get the right answer.
Existing machine learning approaches are already good at classifying or predicting over a large number of features, specifically when one doesn’t know how things can or should be clustered or labelled just by looking at the data points.
To give an example where a language model will likely not perform well: imagine you want to generate a prediction for the value of a house and the land it sits on, given a list of data points describing it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;lat/long&lt;/li&gt;
&lt;li&gt;square footage&lt;/li&gt;
&lt;li&gt;build year&lt;/li&gt;
&lt;li&gt;number of bed and bathrooms&lt;/li&gt;
&lt;li&gt;lot size&lt;/li&gt;
&lt;li&gt;whether it has a pool&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Traditional machine learning approaches presently can do a good job at this.
A language model likely would not.
While the token outputs from language models are based on numerical predictions, those tokens should not be interpreted as numerical predictions themselves.
Token outputs are more of a qualitative assessment of the inputs rather than a quantitative one (ironic, given that it’s math all the way down).&lt;/p&gt;
&lt;p&gt;Language models are a bad fit for this house-price-prediction task for the same reason that they struggle to do math.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;https://blog.cubercsl.site/en/post/rssfullcontent-in-hugo/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;CSL&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; for his post on getting full-content output in a Hugo RSS feed.
This post helped me finally get around to fixing it on this site.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-07-05</title><link>https://www.danielcorin.com/logs/2023/07/05/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/07/05/</guid><description>2023-07-05</description><pubDate>Wed, 05 Jul 2023 21:10:00 GMT</pubDate><content:encoded>&lt;p&gt;Experimenting with using a language model to improve the input prompt, then use that output as the actual prompt for the model, then returning the result.
It’s a bit of a play on the “critique” approach.
Some of the outputs were interesting but I need a better way to evaluate the results.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; sys&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; openai&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;MODEL&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;gpt-3.5-turbo-16k&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;IMPROVER_PROMPT&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;You are an expert prompt writer for a language model. Please convert the user&apos;s message into an effective prompt that will be sent to a language model to produce a helpful and useful response.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;Output the improved prompt only.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;generate_improved_prompt&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;prompt&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;) -&gt; &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;completion &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; openai.ChatCompletion.create(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;model&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;MODEL&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;temperature&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;1.0&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;messages&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;role&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;system&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;content&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;IMPROVER_PROMPT&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;role&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;user&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;content&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: prompt,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; completion.choices[&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;].message.content&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;generate_completion&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;prompt&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;) -&gt; &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;dict&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;completion &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; openai.ChatCompletion.create(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;model&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;MODEL&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;temperature&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;1.0&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;messages&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;role&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;user&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;content&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: prompt,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; completion.choices[&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;].message.content&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;prompt &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&apos; &apos;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;.join(sys.argv[&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;standard_result &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; generate_completion(prompt)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;Standard completion:&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(standard_result)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;improved_prompt &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; generate_improved_prompt(prompt)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;Improved prompt:&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(improved_prompt)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;improved_result &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; generate_completion(improved_prompt)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;Improved completion:&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(improved_result)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; improved_result&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; __name__ &lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;__main__&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;main()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;import sysimport openaiMODEL = &amp;#x22;gpt-3.5-turbo-16k&amp;#x22;IMPROVER_PROMPT = &amp;#x22;&amp;#x22;&amp;#x22;You are an expert prompt writer for a language model. Please convert the user&amp;#x27;s message into an effective prompt that will be sent to a language model to produce a helpful and useful response.Output the improved prompt only.&amp;#x22;&amp;#x22;&amp;#x22;def generate_improved_prompt(prompt: str) -&gt; str:    completion = openai.ChatCompletion.create(        model=MODEL,        temperature=1.0,        messages=[            {                &amp;#x22;role&amp;#x22;: &amp;#x22;system&amp;#x22;,                &amp;#x22;content&amp;#x22;: IMPROVER_PROMPT,            },            {                &amp;#x22;role&amp;#x22;: &amp;#x22;user&amp;#x22;,                &amp;#x22;content&amp;#x22;: prompt,            },        ],    )    return completion.choices[0].message.contentdef generate_completion(prompt: str) -&gt; dict:    completion = openai.ChatCompletion.create(        model=MODEL,        temperature=1.0,        messages=[            {                &amp;#x22;role&amp;#x22;: &amp;#x22;user&amp;#x22;,                &amp;#x22;content&amp;#x22;: prompt,            },        ],    )    return completion.choices[0].message.contentdef main():    prompt = &amp;#x27; &amp;#x27;.join(sys.argv[1:])    standard_result = generate_completion(prompt)    print(&amp;#x22;Standard completion:&amp;#x22;)    print(standard_result)    improved_prompt = generate_improved_prompt(prompt)    print(&amp;#x22;\nImproved prompt:&amp;#x22;)    print(improved_prompt)    improved_result = generate_completion(improved_prompt)    print(&amp;#x22;Improved completion:&amp;#x22;)    print(improved_result)    return improved_resultif __name__ == &amp;#x22;__main__&amp;#x22;:    main()&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-07-04</title><link>https://www.danielcorin.com/logs/2023/07/04/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/07/04/</guid><description>2023-07-04</description><pubDate>Tue, 04 Jul 2023 13:03:54 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been working through a &lt;a href=&quot;https://xeiaso.net/blog/series/nix-flakes?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;series on nix-flakes&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
It’s well written and shows some interesting applications of the tool set.
I’m still trying to wrap my head around exactly where nix could fit in in my development lifecycle.
It seems like it wraps up builds and package management into one.
Sort of like docker, bazel, pip/npm/brew all in one.
The tutorial has shown some useful variations and has convinced me flakes is the way to go, but I need to spend some more time better understanding the primitives as well.
I understand little of what’s going on in the &lt;code&gt;flake.nix&lt;/code&gt; files I’ve looked at.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-07-03</title><link>https://www.danielcorin.com/logs/2023/07/03/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/07/03/</guid><description>2023-07-03</description><pubDate>Mon, 03 Jul 2023 22:33:29 GMT</pubDate><content:encoded>&lt;p&gt;Facebook (Meta, whatever) announced Threads today to launch on July 6th.
Given how much worse it feels like Twitter has become (my experience only), on one hand, I could see people migrating here because no great alternative has really emerged.
On the other, Facebook has zero “public” products where the user experience is even palatable for me, personally (I use Whatsapp but it’s basically iMessage).
Instagram and Facebook both rapidly became completely intolerable for me due to their content.
Maybe that is a matter of curation, but I bet, at least in some part, it’s a result of how Facebook runs their business and why Twitter never made much ad revenue compared to them (and why Reddit struggles to either).
If I had to make a bet, I would bet on people migrating to Threads.
Personally, I won’t until they have a webapp.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-07-02</title><link>https://www.danielcorin.com/logs/2023/07/02/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/07/02/</guid><description>2023-07-02</description><pubDate>Sun, 02 Jul 2023 10:55:34 GMT</pubDate><content:encoded>&lt;p&gt;A simple shell function to setup a Python project scaffold.
It’s idempotent, so it won’t overwrite an existing folder or &lt;code&gt;env&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;pproj&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; () {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;mkdir&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-p&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;$1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#FD971F;--0fs:italic&quot;&gt;$1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;python&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;venv&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;env&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;env/bin/activate&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;pproj () {    mkdir -p $1    cd $1    python -m venv env    . env/bin/activate}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-06-29</title><link>https://www.danielcorin.com/logs/2023/06/29/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/06/29/</guid><description>2023-06-29</description><pubDate>Thu, 29 Jun 2023 22:08:49 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been following &lt;a href=&quot;https://twitter.com/jxnlco?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Jason’s&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; working experimenting with different abstractions for constructing prompts and structuring responses.
I’ve long felt that building prompts with strings is not the type of developer experience that will win the day.
On the other hand, I’m weary of the wrong abstraction that would move the developer too far away from the actual prompt, which would make it harder to construct good prompts and steer the model.
I’m not sure if this is an ORM vs. SQL conversation or if there’s an abstraction that exist as a happy medium.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-06-27</title><link>https://www.danielcorin.com/logs/2023/06/27/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/06/27/</guid><description>2023-06-27</description><pubDate>Tue, 27 Jun 2023 09:50:56 GMT</pubDate><content:encoded>&lt;p&gt;Did some work with Clojure destructuring.&lt;/p&gt;
&lt;p&gt;Unpack values into specific variables.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;clojure&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;user=&gt; (&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; [[a b c] [&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;]] (&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; a b c))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;nil&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;user=&gt; (let [[a b c] [1 2 3]] (println a b c))1 2 3nil&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Unpack the first N items, ignoring the rest.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;clojure&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;user=&gt; (&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; [[a b] [&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;]] (&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; a b))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;nil&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;user=&gt; (let [[a b] [1 2 3]] (println a b))1 2nil&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Unpack the first N items to variables and capture the rest as an array.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;clojure&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;user=&gt; (&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; [[a b &amp;#x26; rst] [&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;]] (&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; a b rst))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;nil&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;user=&gt; (let [[a b &amp;#x26; rst] [1 2 3 4 5]] (println a b rst))1 2 (3 4 5)nil&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-06-25</title><link>https://www.danielcorin.com/logs/2023/06/25/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/06/25/</guid><description>2023-06-25</description><pubDate>Sun, 25 Jun 2023 18:34:31 GMT</pubDate><content:encoded>&lt;p&gt;Doing math with a non-big decimal number and a big decimal number can cast down.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;clojure&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;user=&gt; (&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0.1&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;101M&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;10.100000000000001&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;user=&gt; (* 0.1 101M)10.100000000000001&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;clojure&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;user=&gt; (&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;bigdec&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0.1&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;101M&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;10.100000000000001M&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;user=&gt; (bigdec (* 0.1 101M))10.100000000000001M&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-06-22</title><link>https://www.danielcorin.com/logs/2023/06/22/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/06/22/</guid><description>2023-06-22</description><pubDate>Thu, 22 Jun 2023 23:12:15 GMT</pubDate><content:encoded>&lt;p&gt;Heard the phrase “if someone wins the lottery” used today to describe a teammate leaving a team.
I much prefer this to the more morbid alternatives.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I tried &lt;a href=&quot;https://github.com/AntonOsika/gpt-engineer?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;gpt-engineer&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; today.
I liked the approach and the setup instructions are good.
I think I remember needing to use Python 3.11 instead of 3.8 that I was running, but beyond that the readme instructions we on point.&lt;/p&gt;
&lt;h2 id=&quot;process&quot;&gt;&lt;a class=&quot;heading-link-wrapper&quot; href=&quot;#process&quot;&gt;Process&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You start by creating a project folder with a plaintext prompt.
You start the script and point it at your project folder.
The program reads your prompt then uses the LM to ask clarifying questions.
The clarifying questions seem pretty effective.
If you answer more than of one of the predetermined questions at once, the program seems to recognizes that and removes it from the list.
Finally, it creates an actual project, with source code, pretty consistently (3/3 times I tried).
I used it to try and create a 1-player Scattergories CLI game or something close.&lt;/p&gt;
&lt;h2 id=&quot;results&quot;&gt;&lt;a class=&quot;heading-link-wrapper&quot; href=&quot;#results&quot;&gt;Results&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Unfortunately, for me, the program didn’t write code that worked in a meaningful sense.
The outputted code is more of a scaffold or an outline of what the project could look like, not having made many meaningful decisions about the structure beyond what &lt;em&gt;you&lt;/em&gt; specify.
The somehwat similar project, &lt;a href=&quot;https://github.com/Significant-Gravitas/Auto-GPT?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Auto-GPT&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, arguably struggles in the opposite direction (as I used it) — researching too much and looping forever.
&lt;code&gt;Gpt-engineer&lt;/code&gt; has found another performance pocket, where it consistently, meaningfully outputs &lt;em&gt;something&lt;/em&gt; after asking a small number of questions.
As always, I’m on the look out for applications of this agentic tech.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-06-21</title><link>https://www.danielcorin.com/logs/2023/06/21/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/06/21/</guid><description>2023-06-21</description><pubDate>Wed, 21 Jun 2023 22:38:59 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been thinking about the concept of “prompt overfitting”.
In this context, there is a distinction between model overfitting and prompt overfitting.
Say you want to use a large language model as a classifier.
You may give it several example inputs and the expected outputs.
I don’t have hard data to go by, but it feels meaningful to keep the prompt generic or abstract where possible rather than enumerating overly specific cases in a way that obfuscates the broader pattern you’re hoping to apply.
I hypothesize these overly specific examples could interfere with the model output in unintended, overly restrictive ways.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-06-14</title><link>https://www.danielcorin.com/logs/2023/06/14/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/06/14/</guid><description>2023-06-14</description><pubDate>Wed, 14 Jun 2023 21:51:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://rwmj.wordpress.com/2023/06/14/i-booted-linux-292612-times/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Richard WM Jones&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; booted Linux 292,612 to find a bug where it hangs on boot.
I loved reading the recounting of his process to accomplish this, by bisecting through the different versions of Linux and boot each thousands of times to determine whether the version contained the bug.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Georgi Gerganov started a company, &lt;a href=&quot;https://ggml.ai/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;ggml.ai&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, to run language models on commodity hardware.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-06-13</title><link>https://www.danielcorin.com/logs/2023/06/13/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/06/13/</guid><description>2023-06-13</description><pubDate>Tue, 13 Jun 2023 21:16:00 GMT</pubDate><content:encoded>&lt;p&gt;I was listening to a &lt;a href=&quot;https://fs.blog/knowledge-project-podcast/adam-robinson-2/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;podcast interview&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; of Adam Robinson and he was discussing why he believed it is important process information with your body.
He gives the example that when listening to something, he stops around once every minute and sees how it feels.
He later goes on to highlight the importance of recognizing when something is “weird” and paying attention to it, or trusting one’s intuition even if rationally we can’t understand why something feels unusual.
He asserts that we should take action on these intuitions — “if something seems a little bit off, it’s very off”.
I could see this approach contributing to more well-rounded cognition, since it can be easier to discard these “intuitions” as unsubstantiated or lacking facts to justify them.
On the other hand, unless you track how often you intuition proves correct, it could be hard to know if it’s well calibrated or trustworthy in the area in which you are applying it.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-06-12</title><link>https://www.danielcorin.com/logs/2023/06/12/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/06/12/</guid><description>2023-06-12</description><pubDate>Mon, 12 Jun 2023 17:49:00 GMT</pubDate><content:encoded>&lt;p&gt;I read an article today about &lt;a href=&quot;https://underjord.io/scripting-with-elixir.html?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Scripting with Elixir&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; that caught my eye because it touches on a problem I often struggle with: how you do easily distribute a script along with its dependencies in Python?
Elixir has an example of what this could look like in the form of &lt;code&gt;Mix.install&lt;/code&gt;.
This feature allows one to distribute just the source code of your script and dependency management can be done when the script runs, without needing to distribute a &lt;code&gt;mix.esx&lt;/code&gt; or &lt;code&gt;requirements.txt&lt;/code&gt; file (as one does in Python) along with the source.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;programmers-notebook&quot;&gt;&lt;a class=&quot;heading-link-wrapper&quot; href=&quot;#programmers-notebook&quot;&gt;Programmer’s notebook&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I recently &lt;a href=&quot;/posts/2023/future-of-personal-knowledge&quot;&gt;wrote&lt;/a&gt; about what I view as the uncertain future of personal knowledge, especially when it comes to cataloging your own set of notes on how to use open source tools.
However, I’m more optimistic that there is value in maintaining a programmer’s notebook for projects your work on and things you learn.
From your notebook, every nugget of wisdom you dig up from a conversation, wiki, document or readme can be quickly recalled and sourced.
Working on software, there are countless tricks and reusable patterns you can plugin to save yourself time and increase the speed at which you can solve problems.
While it’s become tempting to rely on ChatGPT and similar LLMs to get this information on demand, memoizing it in a predictably recallable well helps ensure you can quickly access and reapply it in the future.
Things frequently recalled end up committed to memory.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-06-08</title><link>https://www.danielcorin.com/logs/2023/06/08/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/06/08/</guid><description>2023-06-08</description><pubDate>Thu, 08 Jun 2023 22:32:00 GMT</pubDate><content:encoded>&lt;p&gt;Today, I played around with Matt Rickard’s &lt;a href=&quot;https://github.com/r2d4/rellm?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;ReLLM&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; library, another take on constraining LLM output, in this case, with regex.
I tried to use it to steer a language model to generate structure (JSON) from unstructured input.
This exercise is sort of like parsing or validating JSON with regex — it’s not a good idea.
Complicated regular expressions to describe JSON are hard to write.
I do love the demo that generates acronyms though.
Matt also wrote &lt;a href=&quot;https://github.com/r2d4/parserllm?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;parserLLM&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; which provides to ability to use a context-free grammar to constrain the next predicted token from the language model.
I prefer the context-free grammar approach at a high-level, but believe we need the language model constraints to be directly connected with the data structures we intend to use in code to effectively weave language models into our existing applications.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-06-07</title><link>https://www.danielcorin.com/logs/2023/06/07/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/06/07/</guid><description>2023-06-07</description><pubDate>Wed, 07 Jun 2023 21:38:00 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been trying to find a simple way to host a website that formats and serves a nice looking version of a recipe written in markdown.
There are a few open source projects available, but nothing that has fit the bill yet.
I briefly had the idea to try out something with Next.js and &lt;code&gt;mdx&lt;/code&gt; but I found when I scaffolded a new app that I didn’t even recognize the project structure.
Next.js has moved to the “&lt;a href=&quot;https://nextjs.org/docs/app?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;App Router&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;” approach for structuring projects.
It’s not immediately obvious or intuitive how this works.
As a batteries-included framework, it makes sense that different approaches to structure will have their own learning curves.
Nevertheless, it’s a bit irritating how frequently this structure changes.
I have a ~2-3 year old Next.js project that looks nothing like the project I am currently working on.
And the project I am currently working on looks very different from a newly scaffolded project with App Router today.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-06-06</title><link>https://www.danielcorin.com/logs/2023/06/06/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/06/06/</guid><description>2023-06-06</description><pubDate>Tue, 06 Jun 2023 20:11:00 GMT</pubDate><content:encoded>&lt;p&gt;I did a bit more work with Clojure today.
My imperative programming habits are still bleeding through.
The exercise introduced &lt;code&gt;cond&lt;/code&gt; as a sort of case statement for flow control.
I wrote a simple &lt;code&gt;cond&lt;/code&gt; statement but was getting a bizarre runtime error:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;clojure&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;defn&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; my-fn&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;[x]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;cond&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &amp;#x3C; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;negative&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;zero&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;positive&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;(defn my-fn  [x]  (cond    (x &lt; 0) &amp;#x22;negative&amp;#x22;    (x = 0) &amp;#x22;zero&amp;#x22;    (x &gt; 0) &amp;#x22;positive&amp;#x22;  ))&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;user&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;(my-fn&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;Execution&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; (ClassCastException) at user/my-fn (&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;REPL:4&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;).&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;java.lang.Long&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;cannot&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;be&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;cast&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;to&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;clojure.lang.IFn&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; (java.lang.Long &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;module&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;java.base&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;loader&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&apos;bootstrap&apos;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;clojure.lang.IFn&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;unnamed&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;module&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;loader&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&apos;app&apos;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;user=&gt; (my-fn 1)Execution error (ClassCastException) at user/my-fn (REPL:4).class java.lang.Long cannot be cast to class clojure.lang.IFn (java.lang.Long is in module java.base of loader &amp;#x27;bootstrap&amp;#x27;; clojure.lang.IFn is in unnamed module of loader &amp;#x27;app&amp;#x27;)&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;It took me a frustratingly long time to realize I needed to use prefix notation for the conditions in the &lt;code&gt;cond&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;clojure&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;defn&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; my-fn&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;[x]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;cond&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; x &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;negative&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; x &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;zero&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; x &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;--0:#E6DB74&quot;&gt;&quot;positive&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;(defn my-fn  [x]  (cond    (&lt; x 0) &amp;#x22;negative&amp;#x22;    (= x 0) &amp;#x22;zero&amp;#x22;    (&gt; x 0) &amp;#x22;positive&amp;#x22;  ))&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;user&lt;/span&gt;&lt;span style=&quot;--0:#FB6DA0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;(my-fn&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B287FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#A6E22E&quot;&gt;&quot;positive&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;user=&gt; (my-fn 1)&amp;#x22;positive&amp;#x22;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-06-05</title><link>https://www.danielcorin.com/logs/2023/06/05/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/06/05/</guid><description>2023-06-05</description><pubDate>Mon, 05 Jun 2023 20:44:00 GMT</pubDate><content:encoded>&lt;p&gt;I’ve following the work &lt;a href=&quot;https://exercism.org/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Exercism&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; has been doing for several years now.
I used their product to learn a bit of Elixir and Go a few years back.
I got an email from the today promoting a focus on functional programming languages in the month of June.
I decided to learn a bit of &lt;a href=&quot;https://clojure.org/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Clojure&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, since I’ve been working with the JVM lately.
I’ve done a few of the exercises and my takeaways so far are&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I don’t know how to format deeply nest parentheses. It feels like it looks bad no matter how I do it.&lt;/li&gt;
&lt;li&gt;I frequently forget to surround function calls in parentheses, particularly those that take no arguments.&lt;/li&gt;
&lt;li&gt;I keep inserting commas between arguments to functions since nearly every imperative uses this syntax.&lt;/li&gt;
&lt;li&gt;There is a fair amount of on-your-own research needed to complete the exercises. On one hand, I like that because I think it will help learnings stick with me. On the other hand, sometimes you can get stuck for a while (but this is the job, so can’t really complain).&lt;/li&gt;
&lt;/ul&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-06-01</title><link>https://www.danielcorin.com/logs/2023/06/01/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/06/01/</guid><description>2023-06-01</description><pubDate>Thu, 01 Jun 2023 22:56:00 GMT</pubDate><content:encoded>&lt;astro-embed-tweet&gt;&lt;blockquote class=&quot;twitter-tweet&quot; data-dnt=&quot;true&quot; data-theme=&quot;dark&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;The API does not just change without us telling you. The models are static there.&lt;/p&gt;&amp;mdash; Logan Kilpatrick (@OfficialLoganK) &lt;a href=&quot;https://x.com/OfficialLoganK/status/1663934947931897857?ref_src=twsrc%5Etfw&quot;&gt;May 31, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;/astro-embed-tweet&gt;
&lt;p&gt;Logan says any changes to the model would have been communicated.
It seems some folks have data that show the model’s degradation.
As competition emerges in the space, it could be a problem for OpenAI if they lose user trust on model versioning and evolution.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;Tried to setup &lt;a href=&quot;https://huggingface.co/tiiuae/falcon-40b?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Falcon 40B&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
Used their provided example code and download about 90GB of weights.
Ran the Python code and it failed.
Did a search on the error.
Found many others were seeing the same in the HuggingFace forum.
Eventually, got the program to run in some form.
Maxed out Macbook’s memory at about 90GB (went to swap) and crashed the process.
I wonder if a Mac can be tuned to make this work.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-05-31</title><link>https://www.danielcorin.com/logs/2023/05/31/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/05/31/</guid><description>2023-05-31</description><pubDate>Wed, 31 May 2023 21:00:00 GMT</pubDate><content:encoded>&lt;astro-embed-tweet&gt;&lt;blockquote class=&quot;twitter-tweet&quot; data-dnt=&quot;true&quot; data-theme=&quot;dark&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Tons of reports on HN that GPT-4 has gotten significantly worse. Are people experiencing this? &lt;a href=&quot;https://t.co/VBminyUj6r&quot;&gt;pic.twitter.com/VBminyUj6r&lt;/a&gt;&lt;/p&gt;&amp;mdash; Nabeel S. Qureshi (@nabeelqu) &lt;a href=&quot;https://x.com/nabeelqu/status/1663915378265800705?ref_src=twsrc%5Etfw&quot;&gt;May 31, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;/astro-embed-tweet&gt;
&lt;p&gt;A number of folks are reporting gpt-4 appears to be performing less impressively as of late (&lt;a href=&quot;https://news.ycombinator.com/item?id=36134249&amp;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;additional conversation&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;).
I was using gpt-4 to write code earlier today, and anecdotally, can say it seems to be less effective at code generation.
It still writes working code but the code, but the tests cases it provided aren’t always correct and it seems to be less “expert level” than I recall initially.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-05-29</title><link>https://www.danielcorin.com/logs/2023/05/29/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/05/29/</guid><description>2023-05-29</description><pubDate>Mon, 29 May 2023 21:02:00 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been following Eric’s posts about SudoLang since the &lt;a href=&quot;https://medium.com/javascript-scene/sudolang-a-powerful-pseudocode-programming-language-for-llms-d64d42aa719b?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;first installment&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; back in March.
I’ve skimmed through the &lt;a href=&quot;https://github.com/paralleldrive/sudolang-llm-support/blob/main/sudolang.sudo.md?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;spec&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; and the value proposition quite compelling.
SudoLang seeks to allow programmers all levels to instruct LLMs and can also be transpiled into your programming language of choice.
While I’m still early in my understanding of how to use this technique, it’s one I’m following closely and continuing to experiment with.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-05-27</title><link>https://www.danielcorin.com/logs/2023/05/27/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/05/27/</guid><description>2023-05-27</description><pubDate>Sat, 27 May 2023 13:34:00 GMT</pubDate><content:encoded>&lt;astro-embed-tweet&gt;&lt;blockquote class=&quot;twitter-tweet&quot; data-dnt=&quot;true&quot; data-theme=&quot;dark&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;What if we set GPT-4 free in Minecraft? ⛏️&lt;br&gt;&lt;br&gt;I’m excited to announce Voyager, the first lifelong learning agent that plays Minecraft purely in-context. Voyager continuously improves itself by writing, refining, committing, and retrieving *code* from a skill library.&lt;br&gt;&lt;br&gt;GPT-4 unlocks… &lt;a href=&quot;https://t.co/hjTxk6Qb1x&quot;&gt;pic.twitter.com/hjTxk6Qb1x&lt;/a&gt;&lt;/p&gt;&amp;mdash; Jim Fan (@DrJimFan) &lt;a href=&quot;https://x.com/DrJimFan/status/1662115266933972993?ref_src=twsrc%5Etfw&quot;&gt;May 26, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;/astro-embed-tweet&gt;
&lt;p&gt;NVIDIA researchers introduce an LLM-based agent with “lifelong learning” capabilities that can navigate, discover, and accomplish goals in Minecraft without human intervention.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-05-26</title><link>https://www.danielcorin.com/logs/2023/05/26/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/05/26/</guid><description>2023-05-26</description><pubDate>Fri, 26 May 2023 15:47:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://alex.macrocosm.so/download?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;The Alexandria Index&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; is building embeddings for large, public data sets, to make them more searchable and accessible.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;a href=&quot;https://utcc.utoronto.ca/~cks/space/blog/programming/OnHTMLViaStringTemplates?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;That people produce HTML with string templates is telling us something&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
I think about this phenomena often, though I personally find most string template systems that produce HTML difficult to use.
&lt;a href=&quot;https://docs.djangoproject.com/en/dev/topics/templates/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Django templates&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, &lt;a href=&quot;https://handlebarsjs.com/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Handlebars&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, &lt;a href=&quot;https://guides.rubyonrails.org/layouts_and_rendering.html?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Rails ERB&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;, Hugo &lt;a href=&quot;https://gohugo.io/templates/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;templates&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; just to name a few.
My experience has been these systems are difficult to debug and are practically their own full programming languages.
I think React finds the sweet spot for the challenges that these other systems run into, with the abilities of Typescript/Javascript (maybe the braces-in-JSX syntax notwithstanding).
React can still be difficult to debug but it feels much more like you’re writing the thing that will be rendered rather than an abstraction on top of that (yes React is probably a higher level abstraction than any other these but it’s about experience over the implementation details).&lt;/p&gt;
&lt;hr/&gt;

&lt;astro-embed-tweet&gt;&lt;blockquote class=&quot;twitter-tweet&quot; data-dnt=&quot;true&quot; data-theme=&quot;dark&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Added a full LLM type system and context-free grammar to Python. Includes all typescript types, regexes, and arbitrary grammars. Makes coding programs with LLM calls woven in super easy.&lt;br&gt;&lt;br&gt;Thanks &lt;a href=&quot;https://x.com/ggerganov?ref_src=twsrc%5Etfw&quot;&gt;@ggerganov&lt;/a&gt; for llama.cpp and &lt;a href=&quot;https://x.com/abetlen?ref_src=twsrc%5Etfw&quot;&gt;@abetlen&lt;/a&gt; for llama-cpp-python that enable this. &lt;a href=&quot;https://t.co/5WyoY3xtsJ&quot;&gt;pic.twitter.com/5WyoY3xtsJ&lt;/a&gt;&lt;/p&gt;&amp;mdash; Grant Slatton (@GrantSlatton) &lt;a href=&quot;https://x.com/GrantSlatton/status/1660348210605596672?ref_src=twsrc%5Etfw&quot;&gt;May 21, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;/astro-embed-tweet&gt;
&lt;p&gt;Constricting LLMs to responding in adherence with specific schema or following a context-free grammar continues to be the direction I expect most production use cases will go.
Some of the comments mention the irony that we constrain LLMs to responding following a strict grammar, but this is the reality of most production systems.
APIs don’t respond to queries with&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The iMac computer features a 27-inch Retina 5K display, an 8-core Intel Core i9 processor with up to 3.6GHz turbo boost, up to 128GB of RAM, and up to 8TB of SSD storage.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;They respond with structure.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ptga1.css&quot;/&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&amp;quot;display&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&amp;quot;27-inch Retina 5K&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&amp;quot;processor&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&amp;quot;8-core Intel Core i9 with up to 3.6GHz turbo boost&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&amp;quot;ram&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&amp;quot;Up to 128GB&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#66D9EF;--0fs:italic&quot;&gt;&amp;quot;storage&amp;quot;&lt;/span&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#CFCFC2&quot;&gt;&amp;quot;Up to 8TB SSD&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F8F8F2&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;{  &amp;#34;display&amp;#34;: &amp;#34;27-inch Retina 5K&amp;#34;,  &amp;#34;processor&amp;#34;: &amp;#34;8-core Intel Core i9 with up to 3.6GHz turbo boost&amp;#34;,  &amp;#34;ram&amp;#34;: &amp;#34;Up to 128GB&amp;#34;,  &amp;#34;storage&amp;#34;: &amp;#34;Up to 8TB SSD&amp;#34;}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Structure is what it takes (in today’s world at least), to incorporate a new piece of technology into the stack.
That is not to say this can’t and won’t change, but to realize benefits of LLMs today, I believe this is a useful initial approach.
We’ll have to trust our AI systems to behave consistently a lot more than we do today before we’ll be ready to using natural languages to communicate between our systems.
Even with more consistent behavior, natural language with always be more ambiguous than context-free grammars and schemas.
The latter is what you want for predictably behaving systems.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-05-24</title><link>https://www.danielcorin.com/logs/2023/05/24/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/05/24/</guid><description>2023-05-24</description><pubDate>Wed, 24 May 2023 12:51:00 GMT</pubDate><content:encoded>&lt;p&gt;I’ve seen a lot of “GPT detection” products floating around lately.
Sebastian discusses some of the products and their approaches in &lt;a href=&quot;https://sebastianraschka.com/blog/2023/detect-ai.html?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;this article&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.
Some products claim to have developed an “algorithm with an accuracy rate of text detection higher than 98%”.
Unfortunately, this same algorithm determined a GPT-4 generated response from the prompt “write a paragraph in the style of Edgar Allan Poe” was 0% AI GPT.
In my experience, you don’t need to try very hard to trick “AI-detection” systems.
It seems that adding “in the style of…” to pretty much any prompt can thwart detections approaches.
Even though these products don’t seem to work, there is clearly a market for them and many products in that market, which seems to indicate a desire for them to work.
From these products’ marketing and news references, it appears folks in education are quite interested in them.
I can’t begin to appreciate the challenges educators must be experiencing as they attempt to adjust to the changes brought on by the accessibility of LLMs.
However, as someone who struggled to learn in the traditional education system, I do hope teachers will pivot their energies to adopting their curriculums rather than trying to maintain the status quo.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Andrej Karpathy lead a &lt;a href=&quot;https://build.microsoft.com/en-US/sessions/db3f4859-cd30-4445-a0cd-553c3304f8e2?source=sessions&amp;#x26;ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;session&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; at Microsoft Build giving an overview on models, training and the software ecosystem emerging around them.
I particularly appreciated his “default recommendations” on building LLM applications:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Achieve your top possible performance&lt;/li&gt;
&lt;li&gt;Optimize costs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;He notes it’s hard to give generic advice and to me, reinforces that prompting is still as much an art as it is a science.
We’ve found of a number of approaches that perform better relative to others, but at this point, there is no substitution for experimentation given your use case.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-05-22</title><link>https://www.danielcorin.com/logs/2023/05/22/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/05/22/</guid><description>2023-05-22</description><pubDate>Mon, 22 May 2023 10:35:00 GMT</pubDate><content:encoded>&lt;p&gt;Brex wrote a nice &lt;a href=&quot;https://github.com/brexhq/prompt-engineering?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;beginner guide&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; on prompt engineering.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-05-18</title><link>https://www.danielcorin.com/logs/2023/05/18/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/05/18/</guid><description>2023-05-18</description><pubDate>Thu, 18 May 2023 14:38:00 GMT</pubDate><content:encoded>&lt;p&gt;A low-effort quality-of-life improvement for oncall has been starting a week-long shift on a Friday instead of a Monday.
Beginning a weekend with oncall isn’t the best, but it’s more than offset by how good it feels to finish the week and oncall at the same time next Friday.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-05-16</title><link>https://www.danielcorin.com/logs/2023/05/16/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/05/16/</guid><description>2023-05-16</description><pubDate>Tue, 16 May 2023 09:51:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://docs.lmql.ai/en/latest/index.html?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;LMQL&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; is a SQL-like programming language for interacting with LMs.
It takes a declarative approach to specifying the output constraints for a language model, with a SQL flavor.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Microsoft created a project called &lt;a href=&quot;https://github.com/microsoft/guidance?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;guidance&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; which is an LLM-agnostic language to “interleave generation, prompting, and logical control into a single continuous flow matching how the language model actually processes the text”.
It’s based on Handlebars templates and provides in-template notion for system and user messages.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eyurtsev/kor?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;kor&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; is a prototype used to extract structured data from language model responses.
It takes a more object oriented approach and is Python-specific.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/woop/rebuff?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;rebuff&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; is a multilayer prompt injection defense library that continuously improves and adapts based on previous attacks.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-05-14</title><link>https://www.danielcorin.com/logs/2023/05/14/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/05/14/</guid><description>2023-05-14</description><pubDate>Sun, 14 May 2023 05:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://github.com/PrefectHQ/marvin?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;marvin&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;’s &lt;a href=&quot;https://www.askmarvin.ai/guide/concepts/ai_models/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;@ai_model&lt;/code&gt; decorator&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt; implements something similar to what I had in mind for extracting structured data from an input to a language model.&lt;/p&gt;
&lt;p&gt;They also use a phase that I like and may adopt for this approach to formatting the output of a language model:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Format … data declaratively&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In most of the examples, structured data is extracted from unstructured input.
The docs don’t discuss the use of schema to add additional context to the provided data.
I’m curious see if there are use cases for also defining the inputs or if the extraction and mapping can all be done with just a target schema.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-05-13</title><link>https://www.danielcorin.com/logs/2023/05/13/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/05/13/</guid><description>2023-05-13</description><pubDate>Sat, 13 May 2023 12:34:00 GMT</pubDate><content:encoded>&lt;astro-embed-tweet&gt;&lt;blockquote class=&quot;twitter-tweet&quot; data-dnt=&quot;true&quot; data-theme=&quot;dark&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Added arbitrary context free grammar constraints to llama.cpp&lt;br&gt;&lt;br&gt;Can now plug in any llama.cpp compatible model and give an exact grammar spec: JSON, etc&lt;br&gt;&lt;br&gt;Excited to use with more powerful local models as they are released&lt;br&gt;&lt;br&gt;Thanks &lt;a href=&quot;https://x.com/ggerganov?ref_src=twsrc%5Etfw&quot;&gt;@ggerganov&lt;/a&gt; &amp;amp; friends for such a wonderful project. &lt;a href=&quot;https://t.co/HCLACavrlH&quot;&gt;pic.twitter.com/HCLACavrlH&lt;/a&gt;&lt;/p&gt;&amp;mdash; Grant Slatton (@GrantSlatton) &lt;a href=&quot;https://x.com/GrantSlatton/status/1657559506069463040?ref_src=twsrc%5Etfw&quot;&gt;May 14, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;/astro-embed-tweet&gt;
&lt;p&gt;Restricting the next predicted token to adhere to a specific context free grammar seems like a big step forward in weaving language models into applications.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-05-11</title><link>https://www.danielcorin.com/logs/2023/05/11/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/05/11/</guid><description>2023-05-11</description><pubDate>Thu, 11 May 2023 12:34:00 GMT</pubDate><content:encoded>&lt;p&gt;Using system prompts provides an intuitive separation for input and output schema from input content.&lt;/p&gt;
&lt;p&gt;Using system prompts does not effectively guard against prompt injection.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-05-10</title><link>https://www.danielcorin.com/logs/2023/05/10/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/05/10/</guid><description>2023-05-10</description><pubDate>Wed, 10 May 2023 12:34:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;With the support of GPT-4, I feel unstoppable. The &lt;em&gt;overnight surge in productivity&lt;/em&gt; is intoxicating, not for making money or starting a business, but for the sheer joy of continuously creating ideas from my mind, which feels like happiness.&lt;/p&gt;
&lt;p&gt;- &lt;a href=&quot;https://mazzzystar.github.io/2023/05/10/LLM-for-individual/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Ke Fang&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display: inline-block; vertical-align: baseline; position: relative; top: 0.125em; margin-left: 0.25rem;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item><item><title>2023-05-09</title><link>https://www.danielcorin.com/logs/2023/05/09/</link><guid isPermaLink="true">https://www.danielcorin.com/logs/2023/05/09/</guid><description>2023-05-09</description><pubDate>Tue, 09 May 2023 12:34:00 GMT</pubDate><content:encoded>&lt;astro-embed-tweet&gt;&lt;blockquote class=&quot;twitter-tweet&quot; data-dnt=&quot;true&quot; data-theme=&quot;dark&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;I warn you now, this is going to have unfortunate consequences, just as switching to living in suburbia and driving everywhere did. When you lose the ability to write, you also lose some of your ability to think.&lt;/p&gt;&amp;mdash; Paul Graham (@paulg) &lt;a href=&quot;https://x.com/paulg/status/1655926747404050432?ref_src=twsrc%5Etfw&quot;&gt;May 9, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;/astro-embed-tweet&gt;
&lt;p&gt;I wrote a few paragraphs disagreeing with Paul’s take, asserting that, like Simon suggests, we should &lt;a href=&quot;https://simonwillison.net/2023/Apr/2/calculator-for-words/?ref=danielcorin.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;think of language models like ChatGPT as a “calculator for words”&lt;/a&gt;&lt;span class=&quot;external-link-icon&quot; aria-hidden=&quot;true&quot; style=&quot;display:inline-block;vertical-align:baseline;position:relative;top:0.125em;margin-left:0.25rem&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path d=&quot;M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;I argued things like “language models are another tool in the technology toolbox” and “language models will meaningfully change what day-to day-life looks like, but transformations like this have happened throughout history”.
Ironically, in trying to write a coherent opinion in disagreement with Paul’s, I realized I agreed with him.&lt;/p&gt;
&lt;p&gt;Up until recently, it was difficult to produce coherent writing without thinking.
If you sought to prove a point, you needed to enumerate your arguments, support those with evidence, then craft sentences to communicate what you were trying to say.
With LLMs, you can generate written propose that masquerades as your argument (and it may even be a good one), but unless you do some amount of writing, it’s not really your argument.
You probably couldn’t defend it and even if you could, you’d have studied it deeply enough that you’d either find flaws in it or likely could have written it yourself.&lt;/p&gt;
&lt;p&gt;When you write your own argument you’re forced to think, because if you care about what your writing, you’re forced to consider if what you are saying holds up to scrutiny.
Writing is unique in that you can take time to collect your thoughts and interrogate your own arguments to make sure they accurately reflect what you believe or what you are trying to say.
Written words are the bridge between others and abstract ideas in your mind.
At least they are for me.&lt;/p&gt;&lt;hr style=&quot;margin-top: 2em; margin-bottom: 1em; border: none; border-top: 1px solid #ccc;&quot; /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Thanks for reading via RSS!&lt;/p&gt;
</content:encoded></item></channel></rss>