HNHacker News
TopNewBestAskShowJobs

edunteman

357 karma · joined June 21, 2018

Previously founded Banana.dev serverless GPUs, growth eng at Modal.com

Now working on determinism in agents

submissionscomments
edunteman··on Show HN: Rampart on CoreML
Nice work! Had to do similar serverside for stripping named entities and ended up burning way too much LLM cash
edunteman··on Ask HN: Has anyone here ever rebuilt themselves in their late 30s?
I hate to be that guy, but you can just choose to do these things. Learn to set SMART goals. Then set just one, so there's no excuses around priorities. Obviously, choose well. Make that goal your life.
edunteman··on Show HN: Sub-millisecond VM sandboxes using CoW memory forking
I’ve been a big fan of “what’s the thinnest this could be” interpretations of sandboxes. This is a great example of that. On the other end of the spectrum there’s just-bash from the Vercel folks.
edunteman··on Why Go Can't Try
The llm detector in my brain went off too
edunteman··on Show HN: BVisor – An Embedded Bash Sandbox, 2ms Boot, Written in Zig
Your repo was actually a major point of reference! Thank you for open sourcing it. Ironically when I first got into zig I built a similar generator for python bridging which your project reminded me of https://github.com/erik-dunteman/zigpy

Ultimate decision for not using a bindings generator was primarily to deeply understand NAPI.

edunteman··on Show HN: BVisor – An Embedded Bash Sandbox, 2ms Boot, Written in Zig
Exactly, that’d be the intention. For compute-heavy or long running jobs you’d still probably want a dedicated VM like on E2B but for quick stuff, bVisor
edunteman··on Show HN: BVisor – An Embedded Bash Sandbox, 2ms Boot, Written in Zig
Correct, your PATH resolves to your local tools as if it was unprotected bash, but syscalls are filtered/virtualized
edunteman··on Show HN: BVisor – An Embedded Bash Sandbox, 2ms Boot, Written in Zig
Hell yeah, love to hear it! Happy to answer any questions or issues you run into
edunteman··on After two years of vibecoding, I'm back to writing by hand
The part that most resonates with me is the lingering feeling of “oh but it must be my fault for underspecifying” which blocks the outright belief that models are just still sloppy at certain things
edunteman··on Show HN: Butter – A Behavior Cache for LLMs
Good question, I imagine you’d need to set up an ngrok endpoint to tunnel to local LLMs.

In those cases perhaps an open source (maybe even local) version would make more sense. For our hosted version we’d need to charge something, given storage requirements to run such a service, but especially for local models that feels wrong. I’ve been considering open source for this reason.

edunteman··on Show HN: Butter – A Behavior Cache for LLMs
Ah yes that makes sense, have heard of those cases too but hadn’t put much thought into it. Thanks for pointing it out!
edunteman··on Show HN: Butter – A Behavior Cache for LLMs
I’d love your opinion here!

Right now, we assume first call is correct, and will eagerly take the first match we find while traversing the tree.

One of the worst things that could currently happen is we cache a bad run, and now instead of occasional failures you’re given 100% failures.

A few approaches we’ve considered - maintain a staging tree, and only promote to live if multiple sibling nodes (messages) look similar enough. Decision to promote could be via tempting, regex, fuzzy, semantic, or LLM-judged - add some feedback APIs for a client to score end-to-end runs so that path could develop some reputation

edunteman··on Show HN: Butter – A Behavior Cache for LLMs
Very, very common approach!

Wrote more on that here: https://blog.butter.dev/the-messy-world-of-deterministic-age...

edunteman··on Show HN: Butter – A Behavior Cache for LLMs
Awesome to hear you’ve done similar. JSON artifacts from runs seem to be a common approach for building this in house, similar to what we did with the muscle mem. Detecting cache misses is a bit hard without seeing what the model sees, part of what inspired this proxy direction.

Thanks for the nice words!

edunteman··on Show HN: Butter – A Behavior Cache for LLMs
I feel the same - we’ll use it as long as we can since it’s customer aligned but I wouldn’t be surprised if competitive or COGs costs force us to change in the future.
edunteman··on Show HN: Butter – A Behavior Cache for LLMs
It’s bring-your-own-key, so any calls proxied to OpenAI just end up billing directly to your account as normal.

You’d only pay Butter for calls that don’t go to the provider. That’d be a separate billing account with butter.

edunteman··on Show HN: Butter – A Behavior Cache for LLMs
I couldn’t see how it wouldn’t be, as it’s a free market opt-in decision to use Butter
edunteman··on Show HN: Butter, a muscle memory cache for LLMs
I've got a blog on this from the launch of Muscle Mem, which should paint a better picture https://erikdunteman.com/blog/muscle-mem

Computer use agents (as an RPA alternative) is the easiest example to reach to: UIs change but not often, so the "trajectory" of click and key entry tool calls is mostly fixed over time and worth feeding to the agent as a canned trajectory. I discuss the flaws of computer use and RPA in the blog above.

A counterexample is coding agents: it's a deeply user-interractive workflow reading from a codebase that's evolving. So the set of things the model is inferencing on is always different, and trajectories are never repeated.

Hope this helps

edunteman··on Show HN: Butter, a muscle memory cache for LLMs
Thanks! For langchain you can repoint your base_url in the client. Autogpt I'm not as familiar with. Closed loop robotics using LLMs may be a stretch for now, especially since vision is a heavy component, but theoretically the patterns baked into small language models running on-device or hosted LLMs at higher level planning loops, could be emulated by a butter cache if observed in high enough volume.
edunteman··on Show HN: Butter, a muscle memory cache for LLMs
An interesting alternative product to offer is injecting prompt cache tokens into requests where they could be helpful; not bypassing generations but at least low hanging fruit for cost savings
edunteman··on We reverse-engineered Flash Attention 4
I'd argue that understanding disassembled assembly could be considered reverse engineering, which would logically extend to source code unless we draw the line at compilation
edunteman··on Show HN: Muscle-Mem, a behavior cache for AI agents
Love your sleep time stuff! It's an inspiration for Muscle Mem
edunteman··on Show HN: Muscle-Mem, a behavior cache for AI agents
Great to see you here :) thanks for the kind words!
edunteman··on Show HN: Muscle-Mem, a behavior cache for AI agents
totally follows! thanks for sharing, will noodle on it
edunteman··on Show HN: Muscle-Mem, a behavior cache for AI agents
Definitely, but there's lots of API surface area to figure out first, so will stick strictly to python for now. I can see a future where this ends up with a native storage/query core and with python/js bindings on top.
edunteman··on Show HN: Muscle-Mem, a behavior cache for AI agents
you mean like https://www.anthropic.com/news/prompt-caching

or just saving LLM chat message history?

If the latter, saving chat history is useless without some snapshot of the environment in which it was performed. Muscle Mem is an environment cache more than it is an LLM cache.

edunteman··on Show HN: Muscle-Mem, a behavior cache for AI agents
Thank you!
edunteman··on Show HN: Muscle-Mem, a behavior cache for AI agents
This is very similar to what Voyager did https://arxiv.org/abs/2305.16291

Their implementation uses actual code, JS scripts in their case, as the stored trajectories, which has the neat feature of parameterization built in so trajectories are more reusable.

I experimented with this for a bit for Muscle Mem, but a trajectory being performed by just-in-time generated scripts felt too magical and wild west. An explicit goal of Muscle Mem is to be a deterministic system, more like a DB, on which you as a user can layer as much nondeterminism as you feel comfortable with.

edunteman··on Show HN: Muscle-Mem, a behavior cache for AI agents
another currently unanswered question in Muscle Mem is how to more cleanly express the targeting of named entities.

Currently, a user would have to explicitly have their @engine.tool call take an element ID as an argument to a click_element_by_name(id) in order for it to be reused. This works, but for Muscle Mem would lead to the codebase getting littered with hyper-specific functions that are there just to differentiate tools for Muscle Mem, which goes against the agent agnostic thesis of the project.

Still figuring out how to do this.

edunteman··on Show HN: Muscle-Mem, a behavior cache for AI agents
Our experience working with A11y apis like above is that data is frequently missing, and the APIs can be shockingly slow to read from. The highest performing agents in WindowsArena use a mixture of A11y and yolo-like grounding models such as Omniparser, with A11y seeming shifting out of vogue in favor of computer vision, due to it giving incomplete context.

Talking with users who just write their own RPA, they most loved APIs for doing so was consistently https://github.com/asweigart/pyautogui, which does offer A11y APIs but they're messy enough that many of the teams I talked to used the pyautogui.locateOnScreen('button.png') fuzzy image matching feature.

Page 1 of 5Next →