Building a Local Perplexity Alternative with Perplexica, Ollama, and SearXNG
jointerminus.medium.com
jointerminus.medium.com
Additionally, the way I see it, running a local Perplexity alternative is not necessarily for better results, but for better privacy protection. Plus, it's cool.
The nice thing about Perplexity is its source annotation. It will show you in real time how it's arriving at its data capture(s), and then annotate the results accordingly.
It really is a lovely service. It has replaced the "normal" search engine for me, for most of my queries. And has completely replaced ChatGPT/Claude as it can fulfill those needs directly (and even let me choose to use one of those models).
They also have an OpenAI-compatible API. I use it in conjunction with https://github.com/thmsmlr/instructor_ex
There are rumours of ads coming though...unclear if just the free version or not
J
To answer your first question, Terminus is a free, self-hosted operating system built on Kubernetes, designed to turn your device/hardware into a homecloud, or a homelab service provider at home as you mentioned.
Terminus is supported on Linux, Raspberry, Windows and Mac.
Much less fuss and zero weird stuff.
But like the difference between FTP and Dropbox
Our guide are designed to enable less-pro users to enjoy the benefits of selfhosting at home cloud.
A key advantage is fast deployment and flexible assemble of apps like Ollama and Perplexica.
In the meantime, compared to Docker Compose, Terminus provides a dedicated domain name for each application and service out-of-the-box. This enables users to access from anywhere via a browser. It will automatically handles all the complicated network configurations, DNS resoluton, and HTTPs certificate.
But when I already have a setup (e.g. traefik + multiple docker-compose environments), I do want to understand what your out-of-the-box setup is doing. Otherwise, I risk that it kills my existing setup.
So far I stopped, after I saw, that https://terminus.sh is just a script to download another installer.tar.gz
During the installation process, Terminus requires over 110+ images. Considering Docker Hub's rate limiting, the script initially prompts users to download all images locally.
The script executes the actual installation command at the end. The installation process generally follows these steps: 1. Install K8S/K3S 2. Import images sequentially 3. Install system applications using Helm 4. Wait for system startup, then user activation
We understand your concerns. As a new system without an established reputation, we recognize it's challenging for users to try it out.
We've added installation methods for Windows WSL and Raspberry Pi, allowing users to test in virtual machines or temporary environments without concerns about their exiting setups.
Over the next two months, we plan to develop a graphical installation tool to further simplify the process.
Thanks again for your input.
My understanding is that Open Web UI and Perplexica each have their own focus.
However, through this tutorial, they can jointly use the same local SearxNG and Ollama service instance.
Is the improvement in productivity that drastic that you'd rather take that approach when possible? I haven't given something like Node-RED a try before because I've been under the assumption that about 60% through any kind of low code prototyping exercise, you begin to hit limits of inflexibility that makes it more painful than dropping into pure code in the first place, but I wonder if I've been overly hasty in this presumption.
- I can write JavaScript inside nodes
- When each event is a JSON blob, it’s trivial to handle data
- You can break down arrays/lists into series of discrete events, and switch them along different paths with simple filtering logic
- You can build sub-flows and re-use them trivially.
- You don’t have to worry with doing HTTP requests or handle database connections (you just receive the request results as a JSON object or create an object you send to a database node
So for me a basic flow is [template node with prompt]->[LLM API call]->[parse and branch out depending on outcome]->[store output], and I only write two snippets of JS inside a couple of nodes.
I do have Jupyter on my stack (another stack, too, with GPU access), but it tends to be linear, messy and impossible to leave running as a service. My Node-RED stuff is effectively “testing in production” and exposing HTTP endpoints as well, and I switch by prod/test by linking the right nodes…
But yeah, when I’m happy with the prompt or the flow I look at it and write some actual code. Just not in Jupyter.
Autocomplete works if you visit localhost:port in the browser.
I've asked around. It seems like an anticompetitive behavior on the part of browser vendors.
[1] https://nypost.com/2024/06/28/business/amazon-probing-ai-sta...
Thanks for correcting and elaborating on this. We used a simplified version (maybe a bit oversimplfiied) to make it easy for the average audience to understand how AI search works. We will be more careful with accuracy in the future.
Uhhh, no.
nope…