Use kimi 2.6 for planning and a cheap model (preferably local) for execution, and then kimi once again for reviewing it. Then finally I review the code. Saves a lot on tokens.
HN user
prvnsmpth
You can sign up for a plan on the kimi code platform and use it via the pi.dev coding agent, or opencode. In planning, I’d say it’s almost on par with Claude Opus.
Thanks Philippe! You guys have been super helpful on slack!
So it depends on the app - e.g., Google has domain-wide delegation where the workspace admin can provide service account creds that allow us to impersonate all users in the workspace and index all their files/email. During indexing, we determine the users/groups who have permissions file and persist that in the db. (It's not perfect, because Google Drive permission model is a bit complex, but I'm working on it.) This model is much simpler than doing per-user OAuth.
In general, the goal is to use an org-wide installation method wherever possible, and record the identify of the user we are impersonating when ingesting data in the ACL. There are some gaps in the permission-gathering step in some of the connectors, I'm still working on fixing those.
Fair point, although I think we have OpenAI to blame for that - for buying chat.com and pointing it to the most popular textual AI interface of them all :)
So far both projects are quite similar… the only major difference being the search index. Onyx uses vespa.ai for BM25 and vector search, I decided to go down the Postgres-only route.
That's a good point, it might make sense to clarify that for individuals who want to self-host. I'll make the change, thanks!
Exactly, enterprise customers almost always use private model endpoints on their cloud provider for any serious deployments. Data stays within the customer's VPC, data security and privacy is guaranteed by the cloud providers.
Thank you!
Typical RAG implementations I’ve seen take the user query and directly run it against the full-text search and embedding indexes. This produces sub-par results because the query embedding doesn’t really capture fully what the user is really looking for.
A better solution is to send the user query to the LLM, and let it construct and run queries against the index via tool calling. Nothing too ground-breaking tbh, pretty much every AI search agent does this now. But it produces much better results.
Not yet, there’s a Microsoft connector implementation, but it only does Sharepoint, OneDrive, Outlook etc. and I haven’t tested it thoroughly yet. Teams required some special setup to work IIRC, so I skipped it. Will keep it on the roadmap though!
Thanks for sharing! Big part of the reason why I decided on postgres, everything I've read about people using it in prod tells me that most organizations never really grow beyond requiring anything more than what it offers.
Yeah, Omni uses Postgres and pgvector for search. ParadeDB is essentially just Postgres with the pgsearch extension that brings in Tantivy, a full-text search engine (like Apache Lucene).
Oops, sorry! That page is still a WIP, haven't pushed it yet. The plan was to expose the main search and chat APIs so that users can build integrations with third-party messaging apps (e.g. Slack), but haven't gotten around to properly documenting all the APIs yet.
I've done small scale experiments with up to 100-500k rows, and did not notice any significant degradation in search query latency - p95 still well under 1s.
I haven't directly compared against Elasticsearch yet, but I plan to do that next and publish some numbers. There's a benchmark harness setup already: https://github.com/getomnico/omni/tree/master/benchmarks, but there's a couple issues with it right now that I need to address first before I do a large scale run (the ParadeDB index settings need some tuning).
Thank you!
Currently permissions are handled in the app layer - it's simply a WHERE clause filter that restricts access to only those records that the user has read permissions for in the source. But I plan to upgrade this to use RLS in Postgres eventually.
For Slack specifically, right now the connector only indexes public channels. For private channels, I'm still working on full permission inheritance - capturing all channel members, and giving them read permissions to messages indexed from that channel. It's a bit challenging because channel members can change over time, and you'll have to keep permissions updated in real-time.
A platform for consulting aspirants to practice business case interviews.
Finding case prep partners is a major pain point for B-school students/consulting aspirants. Fortunately, frontier AI models are now good enough to function as surprisingly competent case interviewers.
I wrote a short article explaining the Transformer model and how it works, using the Manim library for generating animations. Please read through if the topic interests you, and leave your thoughts and feedback!
It doesn’t make sense to have your build tool call another build tool to actually perform the build. In that case, why I would not just use Gradle directly?
Congrats on building and launching your project!
That said, let me just go ahead and share the obvious: https://xkcd.com/936/
The botanical classification doesn’t matter - coconut oil is primarily saturated fat which is what makes it better for you over the PUFA that comes from seed oils.
There should be an 'X' at the top right, is it missing for you?
Thanks for pointing it out! Gotta fix this on Android...
Yes! I plan to add that next.
Thanks :) I'm going to update the dictionary to use the same one as Wordle's, so that should be fixed.
Yeah I guess so! It isn't too much work :)
Agreed, tracking time is an interesting idea!
That's right, wouldn't want to make it too easy!
Ah, yes I should have done that to begin with. Thanks!
Ah, yes, I think the instructions should be a bit clearer about that.
Well, you can blame my bad programming for that :)
When you press backspace, the focus shifts to the previous cell, deleting the contents of the current cell. When you've entered < 5 characters in the current row, the focus is on the next empty cell. So the first backspace only takes you back to the previous cell, and the second backspace clears the last entered character.