My company (actually our two amazing interns) was working on this over the summer, we abandoned it but it’s 85% of the way to doing what you want it to do: https://github.com/accretional/semantifly
We stopped working on it mostly because we had higher priorities and because I became pretty disillusioned with top-K rag. We had to build out a better workflow system anyway, and with that we could instead just have models write and run specific queries (eg list all .ts files containing the word “DatabaseClient”), and otherwise have their context set by users explicitly.
The problem with RAG is that simplistic implementations distract and slow down models. You probably need an implementation that makes multiple passes to prune the context down to what you need to get good results, but that’s complicated enough that you might want to build something else that gives you more bang for your buck.
When we wake up every morning, this is a wide range of options available to us, and we only see a tiny sliver of them.
When we do the same thing we did yesterday, we will see that option more clearly tomorrow, and other options less clearly. Our agency narrows.
When our options have narrowed too much, it can be hard to get unstuck. Hard to get out of the rut. Wake up, go to work, consume content, go to bed. Every day. Sometimes we might dream of other options, but they don't seem attainable, they're just too distant.
I think the only way to expand your options is to actually do new things. The new thing becomes more salient, and the next day you might see more than one option. Build up more ways to be.
Some activities are worse than others about further narrowing your options, and some can help expand your options beyond just becoming more salient themselves.
Scrolling endless content never lets me get bored, never lets me think of something else to do, and doing something else is always a bit harder than continuing to scroll. There's a clear similarity to drug addiction, where options narrow until to just doing that drug all the time, and being wasted on the drug doesn't do anything to expand your options.
Going for a run expands my options. I get a bit bored on the run, and my mind can wander. I can reflect, and may choose to do something new tomorrow. Journaling expands my options. Practicing gratitude can expand my options. Meditating can expand my options. Talking to a therapist can expand my options. All that mental health stuff shares something in common here, it lets me break the cycle of narrowing options and narrowing agency, and instead widen my options a little.
This sentence has five words. Here are five more words. Five-word sentences are fine. But several together become monotonous. Listen to what is happening. The writing is getting boring. The sound of it drones. It’s like a stuck record. The ear demands some variety.
Now listen. I vary the sentence length, and I create music. Music. The writing sings. It has a pleasant rhythm, a lilt, a harmony. I use short sentences. And I use sentences of medium length. And sometimes, when I am certain the reader is rested, I will engage him with a sentence of considerable length, a sentence that burns with energy and builds with all the impetus of a crescendo, the roll of the drums, the crash of the cymbals–sounds that say listen to this, it is important.
So I write with a combination of short, medium, and long sentences. Create a sound that pleases the reader’s ear. Don’t just write words. Write music.
I had the incredible good fortune to not only be in the same YC batch as Airbnb, but also be the only other founder in SF, which meant I just happened to carpool a lot with them and hang at their place a lot.
I still remember when Nate first told me the idea at our first batch meeting and I immediately loved it—at the time I lived in a 4-br house with ~10 people, and we constantly had people on the couches or in a tent on the roof. I would go on to make more money thanks to the Airbnbs during my YC year than I would from my own startup.
But a million times more valuable than money was the path that those guys sent me down. Sure, we both had gotten into YC, but I could immediately sense there was a huge gap between us. I think I've always had a strong work ethic and desire to serve others, but I didn't have the craftsmanship or teamwork skills that these guys had—and they had it in spades. Everyone talks about the cereals, but their apartment had more impressive things they designed and built than that (IMO). Nate was a no non-sense engineer who took software seriously and built great things. His code was far beyond mine at the time. And the team work was incredible.
I dabbled with joining Airbnb early, but never went down that path. I like to joke with my friends that I turned them down, but in reality it wasn't because I had better options, the truth is I knew they were out of my league skills wise, and I had a long way to go to catch up.
The lesson that I learned from the Airbnbs that I think isn't always stressed enough in the "power law startup world" is that you need to be building many, many things—with other people—, and get really, really good at that, before you can go on and "make something people want" and do something world changing, like these guys have done.
I'll never forget driving home in the dark after our Tuesday night dinners in a rental van, the 3 airbnbs and me. After hours of loud demos about their new stuff and listening to everyone in the room about how they could build things better, the drive home would be quiet. You could tell that they were utterly exhausted, but also quietly determined. I doubt that they will stop and rest enough to celebrate this moment, but they "earned this" moment.
They're the real deal. To this day continually inspired by them.
We stopped working on it mostly because we had higher priorities and because I became pretty disillusioned with top-K rag. We had to build out a better workflow system anyway, and with that we could instead just have models write and run specific queries (eg list all .ts files containing the word “DatabaseClient”), and otherwise have their context set by users explicitly.
The problem with RAG is that simplistic implementations distract and slow down models. You probably need an implementation that makes multiple passes to prune the context down to what you need to get good results, but that’s complicated enough that you might want to build something else that gives you more bang for your buck.