sqlite-utils 4.0rc2, mostly written by Claude Fable (for about $149.25)
50 points
4 hours ago
| 10 comments
| simonwillison.net
| HN
utopiah
42 minutes ago
[-]
Great to see such write ups in particular with money.

At least 2 things the random LinkedIn post will ignore, on purpose or not :

- price today remains low (even though they might feel higher than before), Uber is the business model, no secret there, it's a VC classic

- $150 spent by an expert, a software engineer with significant practical knowledge in AI, is not equivalent to the exact same amount spent by a novice.

Yet now that a number is out, you bet it will be used. Expect alarmist posts tomorrow morning in your feed claiming building software is now as cheap as diner at the restaurant.

reply
uniqueuid
36 minutes ago
[-]
It's also about variance in the number.

Expert software engineers will still accidentally burn $500 or $5000 on tasks that don't work, or are not efficient. Amateurs will accidentally spend $100 to get something great.

So part of the change is a change in the risk structure of using frontier models. Before, you'd burn your quota; now, you can burn uncapped (less-capped) money.

reply
dreadnip
2 hours ago
[-]
The problem I have with this workflow is that the models are still too eager to please. If I ask it to scan a release and note possible issues, it absolutely will find issues. If I keep running the same prompt, it will keep finding issues. I’ve spammed GitHub PR reviews and it just keep finding (or inventing?) new issues. There is never a “Nothing found, good to go!”. I have to keep reminding myself that the model will always give me what I ask for, regardless of the reality/truth.
reply
KronisLV
53 minutes ago
[-]
> There is never a “Nothing found, good to go!”. I have to keep reminding myself that the model will always give me what I ask for, regardless of the reality/truth.

Tell it something like:

  Before doing any commits or producing a summary for the user, you must run a verification sub-agent.
  Its goal is to adversarially and critically check your supposed findings to look out for false positives and hallucinations.
  Doing so with a separate sub-agent with relatively clean context (but with all the relevant details of the problem space that appear to be facts) should improve our confidence in the findings.
Maybe also something like:

    Try to classify each found issue as either SERIOUS, CRITICAL or NITPICK, discard nitpicks, we only care about impactful issues.
It should somewhat cut down on the useless output.

I've largely found the same in regards to generating code - the initial pass will often have bugs that the model itself can find but only when run as a separate sub-agent without the confidence poisoning in its own previous output.

reply
baq
2 hours ago
[-]
You didn’t do it enough. They stop finding bugs eventually. Also, different models can find different bugs (though they do find the same ones, too, which is good and expected). For best results you want to run multi model reviews in loops.

If you had multiple people look at your PRs multiple times on different days results would be very similar.

reply
PunchyHamster
1 hour ago
[-]
I've had it find bug, I asked it to make test to trigger the bug, and then it figured out it's not a bug. It will absolutely do wish fulfilment
reply
left-struck
1 hour ago
[-]
Yeah when these models find a bug i like to ask it to write a test that will fail if the bug is real and pass when the bug is solved.

It’s not perfect but usually it works pretty well, and I’ve had the model come back to me with oh actually the test passed, the bug doesn’t work exist

As a bonus, you’ve now got a test that can detect that bug if it comes up again.

reply
csomar
1 hour ago
[-]
It'll find a non-existent bug - fix it - figure out it broke a previously working thing - try to fix again - etc..

The "keep improving" the code base prompt have been tried and it never works. The LLM has no consciousness of where to stop and where to draw the lines of reasonableness.

reply
MallocVoidstar
2 hours ago
[-]
No, depending on the complexity of the issue models can be into loops, where they go "this is definitely an issue and must be fixed", and then the resulting fixed code gets "this is definitely an issue and must be fixed", and then the resulting fixed code has the original 'issue'.
reply
bfjvibybd6cuvu6
1 hour ago
[-]
That's a different kind of loop.

For a normal review loops you can ask the model to return with nothing found if nothing is found and not invent things and it will do a better job of exiting without anything found.

reply
baq
34 minutes ago
[-]
I've ran into this in the before times with linters and static analyzers. Nothing new.
reply
memoriyato3
1 hour ago
[-]
yeah, happened to me: "A is very wrong, you should do B", and on the next fresh review loop "B is very wrong, you should do A"

typically this means there is some ambiguity in the specification, and the model flips between alternative interpretations

reply
bluenose69
1 hour ago
[-]
I get this sometimes when I ask the agent on GitHub to suggestion improvements to my Julia code. It's kind of fun to watch it struggle to please. I'm reminded of the old "Doctor" mode in Emacs.
reply
imhoguy
1 hour ago
[-]
You need to create review skill and there define what "issue" or "good" are for you to limit sensitiviness. Otherwise you depend on model's random threshold or non of such then you get perfection chasing.

Anyway it will never match your judgemend completely unless you upload your brain dump into model.

reply
JodieBenitez
50 minutes ago
[-]
> There is never a “Nothing found, good to go!”

Not entirely true IME. Eventually the bug hunt will end with general design advices that may not be suitable to your use case and that you can skip.

reply
embedding-shape
2 hours ago
[-]
> There is never a “Nothing found, good to go!”.

Like when you do recursive programming, have you tried providing more/better stop conditions? If you literally just say "Continue until there are no more issues" then it'll do just that, but if you scope it better, like "Only mention issues related to X, Y or that leads to Z" and so on, you'll get less noise and more focus on issues that actually matter (to you).

reply
memoriyato3
1 hour ago
[-]
also helps adding negative conditions like "do not nitpick", or specific bad attractors that you see "do not investigate/report anything related to symlinks, they are not a concern"
reply
onion2k
2 hours ago
[-]
If I keep running the same prompt, it will keep finding issues.

I've had the same experience, but whenever I've reviewed what it finds it's basically right. It's pedantic, and a lot of the problems aren't things I really care about, but they definitely are real problems.

I'm not sure you can blame the AI for always finding problems if a) you asked it to, and b) there are problems to find.

reply
mejutoco
1 hour ago
[-]
You could ask the model to say "nothing found" if the improvement was stylistic, or other constraints.
reply
starquake
2 hours ago
[-]
I use Claude Code and one of the steps in my workflow is do a review loop until no issues are found and it never loops. So my experience is entirely different. Even if I say: fix all issues. So not only the critical issues.
reply
9dev
2 hours ago
[-]
There is a point of diminishing returns though; the issues suggested will get speculative, or point out comment unclarity, or "defense in depth". But I agree it’s somewhat annoying to rarely get clear pushback in terms of "no, this looks good enough to me, release it"
reply
higeorge13
1 hour ago
[-]
You need to run them in review loops, this is the only way to reduce or eliminate these issues.
reply
threatripper
2 hours ago
[-]
You get the same result if you pay humans a good sum of money to find issues.
reply
nvme0n1p1
2 hours ago
[-]
Definitely not. I've never seen a human trapped in that kind of infinite loop. Humans know that if they don't stop at the end of the day, they don't get to go home to their wife, and if they don't finalize their list of issues, they never get their contract paid out.
reply
embedding-shape
2 hours ago
[-]
Pay people per hour of work and even if there is no actual work, people will definitively find a way of spending hours doing things. If you've worked with contractors/outsourced roles before this will happen from time to time.
reply
Myzel394
1 hour ago
[-]
That's just plain wrong. The new models do not hallucinate as much as they used to (in my personal experience)
reply
TripolitianFish
1 hour ago
[-]
> plain wrong > (in my experience) What are you even saying.
reply
girvo
1 hour ago
[-]
That their vibes are more real than your vibes
reply
Tiberium
2 hours ago
[-]
I think this was true with older models, but at least with GPT 5.5 it can genuinely tell you "no issues found" after a few passes of finding real issues.
reply
knorker
1 hour ago
[-]
What do you mean? Are they valid flaws or not?

Would you like it to stop when there's still flaws in the code?

reply
gib444
1 hour ago
[-]
It's not eagerness to please (that's anthropomorphising), rather it's a desire to bill you more money/use more tokens

(The fixed prices are just temporary discounts)

reply
jph00
1 hour ago
[-]
I'm a big fan of sqlite-utils, but I really don't like how Python (particularly 3.12+) changes how sqlite's transactions work -- the native behavior explained in the sqlite docs is much better IMO. I understand why Python had to change it (to be compatible with other databases) but I don't think it's a good model for sqlite.

Therefore, I created apsw-utils, a port of sqlite-utils to the amazingly-awesome apsw lib -- which is a really idiomatic sqlite lib for python. It's here: https://answerdotai.github.io/apswutils/

I've used it in lots of projects including in significant production stuff, and it's always worked great for me. IMO if you're serious about doing sqlite in python, at some point you'll probably want to check out apsw.

reply
jmalicki
50 minutes ago
[-]
> changes how sqlite's transactions work

What specifically are you referring to? The apswutils website also does not explain.

reply
hbplawinski
49 minutes ago
[-]
I'm kind of surprised that there is no test case that would have identified the fact that delete_where() leaves the state corrupted. There would be no need to ask Fable if the problem gets identified by the test. And having a test will also catch all future problems that might arise in the same function. So maybe instead of asking Claude what is wrong it would be wiser to invest in test coverage.
reply
boesboes
20 minutes ago
[-]
Did you check the cost calculation? I wouldn’t trust it to give the correct amount if i put the amount in the prompt
reply
5701652400
1 hour ago
[-]
just a note. in most parts of the world 149.25 USD can cover utilities, water, and food for a month for 1 adult person or even a family.
reply
klustregrif
1 hour ago
[-]
Had this been a corporate environment the net saving by using one person partly and an agent as opposed to one person full time for the time it would take to implement this, would be a net saving enough to cover utilities, water and food for an entire village.

It’s silly to act like this was an added cost in a vacuum, or that any costs translate directly into charity for arbitrary families. Also in some place it would even cover rent for half a day.

reply
xyzzy123
1 hour ago
[-]
In Sydney Australia its < 2 days of median rent.
reply
Muromec
1 hour ago
[-]
That's my electricity bill for a year, okay
reply
mirekrusin
1 hour ago
[-]
In others it's pizza night for family or half a bill for sushi dinner, so what?
reply
Tiberium
2 hours ago
[-]
The title cost is only if this was raw API usage, but it was included in a subscription, so it's a small subset of the $200 plan:

> I upgraded to the Claude Max $200/month plan (I was previously on $100/month) to increase my Fable allowance for the remaining time until the July 7th Fablepocalypse, when even Claude Max subscribers will have to pay full API cost for the model.

I really wonder if Anthropic will stick with their decision to keep Fable on extra usage credits until they "get more compute", especially in the light of GPT 5.6 very likely coming out next week (it's confirmed to have the exact same pricing as GPT 5.5)

reply
embedding-shape
2 hours ago
[-]
> especially in the light of GPT 5.6 very likely coming out next week

Finally have an explanation why GPT 5.5 xhigh felt dumber and dumber these last few weeks, always the same thing when a new model release is about to come out...

reply
toxik
2 hours ago
[-]
Opus has been extremely stupid recently, reckon that's because Fable needs to look appealing?
reply
user43928
1 hour ago
[-]
I have never noticed a degradation in either Claude or OpenAI models, and the benchmarks people set up have never shown a statistically significant deviation either: https://marginlab.ai/trackers/claude-code

Yet the same claim is being posted every single day, including new claims that the Fable 5 model has degraded compared to the initial release, guardrails aside.

reply
embedding-shape
1 hour ago
[-]
Almost slipping into conspiracy territory, but without insights into what the labs actually do internally, hard not to:

Anyways, heard about A/B testing before? ML people tend to like it a lot, hard to imagine neither OpenAI or Anthropic are already deep into categorizing people into buckets and running an wild amount of A/B testing all over the place, especially in the weeks leading up to new model releases, in various ways.

reply
user43928
1 hour ago
[-]
Yes, and we can see A/B testing on the ChatGPT website all the time.

They are also testing the new models in their coding tools with select customers first.

People working at OpenAI have publicly denied that they are performing any kind of hidden routing or quantization of models after release for Codex. I tend to believe them.

reply
andy_ppp
2 hours ago
[-]
This is to prevent Chinese labs distilling Claude again right? And free advertising again?
reply
keizo
1 hour ago
[-]
Glad to see others dual wielding: “I used to think that the idea of having one model review the work of another was somewhat absurd—it felt weirdly superstitious. The problem is it really does work”
reply
shevy-java
1 hour ago
[-]
Skynet wants to make us poorer.
reply
hnbad
2 hours ago
[-]
Fun fact: because AI written works don't have copyright (in the EU at least) and the level of prompting many people engage in doesn't suffice to create a copyrightable "work" and software licenses require you to actually be able to grant a license using rights you hold on a work, not only are many AI generated "works" not actually protected by copyright but by selling licenses you're actually in breach of contract law and may end up owing the licensee software you don't have.
reply
Slothrop99
1 hour ago
[-]
IMO the real "fun fact" is that supposed "IP monopolists" like Microsoft and Oracle's lawyers are apparently totally fine with this stuff.

So obviously people are going to take their lead and not get legal advice from some greasy dweeb at the bottom of HN.

reply
vasco
2 hours ago
[-]
And nothing happened and zero people got in trouble over it.

- Narrator

reply
Muromec
1 hour ago
[-]
...So far
reply