HNHacker News
TopNewBestAskShowJobs

elijahbenizzy

229 karma · joined February 11, 2021

https://github.com/dagworks-inc/hamilton https://github.com/dagworks-inc/burr https://www.dagworks.io
submissionscomments
elijahbenizzy··on Streaming Chatbot with Burr, FastAPI, and React
Hey folks -- enjoyed writing this how-to on using SSEs to stream text back. The technologies are fairly specific but the components can easily be used individually.
elijahbenizzy··on Language is primarily a tool for communication rather than thought [pdf]
There's an interesting debate here -- see this tweet. https://x.com/ylecun/status/1769137037959913690. Cool to see an actual article on it as opposed to speculation from personal experience.

Now for some speculation from personal experience. Some people leverage language more for internal thought and some people have other intermediate representations. I'm personally more of a language thinker except I have a specific avenue for math/programming that is highly optimized. I imagine many use language to solve math problems (and no way is right or wrong).

elijahbenizzy··on One Million Checkboxes
heh, me guarding my area I wrote my name in heavily for a bit
elijahbenizzy··on The biggest CRT ever made: Sony's PVM-4300
It's really fascinating that most things in the US economy inflate (commodities, services, housing, etc...), but some things just inevitably deflate (TVs).
elijahbenizzy··on I kind of like rebasing
100% team rebase -- I think the fear comes from "rewriting history", which sounds scary until you realize that git is entirely immutable data store (through the API at least). Blockchain for the win!

I find merging to be extremely tough to work with -- I don't think I actually got good at git until I learned to rebase entirely.

Also, cherry-picking (effectively an atomic rebase-type) is underrated.

elijahbenizzy··on Why we no longer use LangChain for building our AI agents
Agreed — also I’m generally against prototyping stuff and then entirely rewriting it for production as the default approach. It’s a nice idea but nobody ever actually rewrites it (or they do and it’s exceedingly painful). In true research it makes sense, but very little of what engineers do falls under that category.

Instead, it’s either “welp, pushed this to prod and got promoted and it’s someone else’s problem” or “sorry, this valuable thing is too complex to do right but this cool demo got me promoted...”

elijahbenizzy··on Why we no longer use LangChain for building our AI agents
I really like the idea of "good" and "bad" abstractions. I have absolutely built both.

This sentiment is echoed in this comment in reddit comment as well: https://www.reddit.com/r/LocalLLaMA/comments/1d4p1t6/comment....

Similarly to this post, I think that the "good" abstractions handle application logic (telemetry, state management, common complexity), and the "bad" abstractions make things abstract away tasks that you really need insight into.

This has been a big part of our philosophy on Burr (https://github.com/dagworks-inc/burr), and basically everything we build -- we never want to tell how people should interact with LLMs, rather solve the common problems. Still learning about what makes a good/bad abstraction in this space -- people really quickly reach for something like langchain then get sick of abstractions right after that and build their own stuff.

elijahbenizzy··on KidPix
Oh my god I barely even remembered this until the sound + the name popped right back. Wow!
elijahbenizzy··on The rarest move in chess [video]
This is delightful. I think that the hardest part (that, honestly, he absolutely nailed) is defining "rare" and "move" -- not only did he come up with reasonably satisfactory definitions, but he also was able to walk us through his discovery process.

The rest is a fun programming problem (which he largely glossed over), and it's clear he put a massive amount of care into the video. Thank you!

elijahbenizzy··on Diffusion on syntax trees for program synthesis
Backpropogration is just an application of the chain rule -- cool that we all learned it in high school!
elijahbenizzy··on More Itertools
Nice! These can make code a ton simpler. Also no python dependencies, which is a requirement for me adopting. Would love to see this brought into the standard lib at some point.
elijahbenizzy··on City in a Bottle – A 256 Byte Raycasting System
You’re telling me god didn’t cut corners? /s

Yeah, reacting to so much perceived information being represented in such little code. Versus billions/trillions of weights in LLMs…

elijahbenizzy··on Chameleon: Meta’s New Multi-Modal LLM
Fair enough. More reacting to the concept of a blockchain which is like old news and an extremely inefficient way to do 90% of what people are (we’re) trying to do with it.

Will read!

elijahbenizzy··on Chameleon: Meta’s New Multi-Modal LLM
Yeah so I’m lucky that I work in/adjacent to the space so it doesn’t get buried. Otherwise I think it’s near impossible to retain learning without practice.
elijahbenizzy··on City in a Bottle – A 256 Byte Raycasting System
Meh I don’t (they’re clearly imperfect) but I’m more wondering if we’re leaving lots of efficiency on the table in approaches to modeling the world.
elijahbenizzy··on City in a Bottle – A 256 Byte Raycasting System
that’s spectacular — the information density we perceive is off he charts for such a small amount of code.

Makes me wonder if LLMs aren’t the best way to model the world at all…

elijahbenizzy··on Chameleon: Meta’s New Multi-Modal LLM
I think the opposite. There is value in intelligent software, but IMO we’re a long way from AGI. So lots of grifting but some gold along the way. And it’s intellectually interesting/nuanced (cool math, interesting infra), unlike crypto which was more of a massive energy burning waste than anyone likes to admit.
elijahbenizzy··on Chameleon: Meta’s New Multi-Modal LLM
What's cool (and tough to keep up with) with this wave of tech is just how quickly it moves.

On the plus side there's a lot of interesting things and it is generally easy to follow/figure out what they did.

On the minus side it's a little exhausting, and there's so much money in it feels like the vast majority of it is grifting. To add to that, the people who are trying to catalog it (the AI guy on LI) are the griftiest of them all.

I've found the best way to keep up is find one topic you want to learn about, deep-dive, and read all the related papers, then explore breadth-first from there until you find another topic...

elijahbenizzy··on The world has probably passed peak pollution
“Peak baby” is an objectively bad thing
elijahbenizzy··on Show HN: Hamilton's UI – observability, lineage, and catalog for data pipelines
A bit of both! But closer to MLFlow.

Hamilton/the UI doesn’t run it, but it does give visibility. So it has the tracking/visibility of airflow and the metrics/artifact tracking of MLFlow bundled together. Can also be used with those systems happily.

Our goal was to provide an all-in-one system that provides a host of data/ML/LLMops needs.

elijahbenizzy··on Printing Music with CSS Grid
This is great!
elijahbenizzy··on Double-entry bookkeeping as a directed graph
This is a great write up, thank you! One thing I’m curious about is what properties/metrics of the graph mean for accounting. Spectral properties (eigenvalues, etc…) might have some insightful meaning for the financial system.

Also I’m sure this is extremely well studied but I’m not super familiar — ML on accounting graphs could identify shapes that indicate illegal transactions, etc… Will dig for reading :)

elijahbenizzy··on Show HN: Burr – A framework for building and debugging GenAI apps faster
Yep! That makes sense. As @krawczstef said, building a wrong abstraciton, an overly rigid abstraction, or an overly complex abstraction can all make things worse. With any abstraction there will also always be people who end up outgrowing it or customizing it.

And good point re: good docs for LLMs! On a meta-level there's something very funny about having to write better human-facing docs for the use of computers. Who would have thought that some of our most powerful computing systems emulate how we think!

elijahbenizzy··on Show HN: Burr – A framework for building and debugging GenAI apps faster
Cool! Yeah I think that would pair nicely. You can have the abstraction at the action level, or push it down into the stack (as it seems you're doing). Have also seen some startups building proxy layers for OpenAI/GPT.

It's just a library so it depends on what could be the bottlenecks. Standard ones are: 1. Compute -- just scale horizontally 2. DB -- scale horizontally (and vertically), use intelligent partitioning

(1) is generally easy with autoscaling, (2) is where your queries/data modeling matter, and this is why we made persistence entirely pluggable, figuring we wouldn't know the best usage patterns yet. More reading: https://burr.dagworks.io/concepts/state-persistence/.

One more thing to think about -- Burr isn't opinionated about how you build your app -- E.G. up to you to think about what happens if you have your webapp open in, say, two tabs. You'll need to manage situations like this, but Burr's plugin capabilities should make that easier to iterate on. We're looking to add more examples on this -- also reach out if you have any specific questions/find anything missing/have suggestions.

elijahbenizzy··on Show HN: Burr – A framework for building and debugging GenAI apps faster
Sure, yes, not going to lie I use printlines all the time. There's nothing inherently wrong with it, and meant no offense! In fact, you can even add a hook with Burr that adds as many printlines as you like :) https://burr.dagworks.io/concepts/hooks/. Meant no offense.

That said, logging stuff and using regexes (which is the common way to productionize printlines for live/post-hoc debugging) has a lot of challenges, and this is where we've seen a framework become useful.

There's an obvious trade-off between adopting a framework and rolling your own -- we've seen both work in various contexts (we've been in MLOps for quite a while). Our hope is that this will make people more productive by constraining the space they need to think about and allow more mental room for application logic.

elijahbenizzy··on Show HN: Burr – A framework for building and debugging GenAI apps faster
So I'm a big fan of limiting complexity -- you generally don't want to add something to your stack unless you get value from it.

If you're getting started with LLMs, the first step is an API call to OpenAI (or some other foundational model) to get a feel for it, then think about how you want to integrate with your application. Burr can help standardize the structure, allowing you to think less about it at any given point (as logic is encapsulated into actions). Furthermore, the UI can help you debug.

With a few POCs at your company (assuming you want to iterate and get into production), Burr can help abstract some complex parts away (state management and telemetry), and make your code cleaner and more extensible, which can help you iterate quickly and explain what you're doing (you can always draw a picture of your app).

We think that it buys companies something they really want -- the ability to swap out implementations/vendors as it decouples the logic from application concerns.

So, if you have logic that's starting to get complicated (and might get more-so), I think Burr is good. If all you're doing is a single wrapper over a GPT-call, it might be overkill (or not! things tend to grow in complexity).

elijahbenizzy··on Show HN: Burr – A framework for building and debugging GenAI apps faster
Yep! There's a streaming API. It's a little more technically involved, but you can stream back at the point at which an application "halts", meaning you pause and give control back to the user. It only updates state after the stream completes.

Technical details follow:

You can define an action like this:

    @streaming_action(reads=["prompt"], writes=["prompt"])
    def streaming_chat_call(state: State, **run_kwargs) -> Generator[dict, None, Tuple[dict, State]]:
        client = openai.Client()
        response = client.chat.completions.create(
            ...,
            stream=True,
        )
        buffer = []
        for chunk in response:
            delta = chunk.choices[0].delta.content
            buffer.append(delta)
            yield {'response': delta}
        full_response = ''.join(buffer)
        return {'response': full_response}, state.append(response=full_response)
Then you would call `application.stream_result()` function, which would give you back a container object that you can stream to the user:

    streaming_result_container = application.stream_result(...)
    action_we_just_ran = streaming_result_container.get()
    print(f"getting streaming results for action={action_we_just_ran.name}")

    for result_component in streaming_result_container:
        print(result_component['response']) # this assumes you have a response key in your result

    # get the final result
    final_state, final_result = streaming_result_container.get()
Its nice in a web-server or a streamlit app where you can use streaming responses to connect to the frontend. Here's how we use it in a streamlit app -- we plan for a streaming web server soon: https://github.com/DAGWorks-Inc/burr/blob/main/examples/stre....
elijahbenizzy··on Show HN: Burr – A framework for building and debugging GenAI apps faster
So yeah, shouldn't be too hard, but Burr does not replace LLM API calls -- you can bring whatever frameworks you want. You could do this by writing a simple function:

    @action(reads=["prompt"], writes=["response"])
    def my_action(state: State) -> Tuple[dict, State]:
       prompt = state["prompt"]
       # you stick in whatever library you want for the call 
       llm_response = whatever_library(prompt)
       state = state.update(response=llm_response)
       return {"response" : llm_response}, state.update(response=llm_response)
Does this help?
elijahbenizzy··on Show HN: Burr – A framework for building and debugging GenAI apps faster
Yep! That's the plan. We're actively looking for partners who can test it out while we're building/bring us use-cases to noodle on, so feel free to reach out if you're interested.
elijahbenizzy··on Mintlify GitHub read/write token leak
I really like mintlify and I found this writeup to be straightforward and responsible. Shit happens.
← PreviousPage 2 of 5Next →