Skip to content

About

Multi-engine search consensus: Google, Bing, DuckDuckGo in real Chrome windows + FastAPI UI + local Ollama summary

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

Multi Search Server

Search Google, Bing, and DuckDuckGo at the same time in real Chrome windows, then merge the organic results into a clean, ad-free consensus view — with a local Ollama model summarizing the overlap and picking a best match.

The consensus pane is a small FastAPI app. You type once there; Playwright drives typed searches in the other three windows (so you stay in a normal browser session / profile instead of hitting raw search APIs).

┌─────────────┬─────────────┐
│   Google    │    Bing     │
├─────────────┼─────────────┤
│ DuckDuckGo  │  Consensus  │  ← FastAPI UI + Ollama summary
└─────────────┴─────────────┘

Why this exists

Comparing engines by hand means juggling tabs and ads. Multi Search Server:

  1. Opens four visible Chrome windows (2×2 on a big screen)
  2. Types your query into three engines like a person would
  3. Pulls organic results (and follows Next / More results once for more depth)
  4. Merges by URL / title overlap and ranks consensus hits
  5. Asks local Ollama (gemma4:e4b by default) for a short summary + best match
  6. Shows everything in a sticky-search-bar consensus UI (summary scrolls with results)

Requirements

  • Python 3.11+ (3.12 recommended)
  • Google Chrome (or Chromium)
  • A desktop session (headed Chrome — not pure SSH without a display)
  • Ollama running locally, with a model pulled (default: gemma4:e4b)
  • Optional: Rectangle (macOS) or wmctrl / xdotool (Linux) for auto 2×2 tiling

Install

git clone https://github.com/deneskelenyi/Multi-Search-Server.git
cd Multi-Search-Server

python3.12 -m venv .venv
source .venv/bin/activate   # Windows: .venv\Scripts\activate
pip install -e .

System Chrome is used via Playwright’s channel=chrome — you do not need playwright install for Chromium unless you prefer it.

Usage

# Start Chrome + FastAPI consensus UI at http://127.0.0.1:8765
python -m search_consensus

# Optional initial query (auto-runs when the UI loads)
python -m search_consensus "best espresso machine under 200"

# Custom bind / Ollama
python -m search_consensus --host 127.0.0.1 --port 8765 \
  --ollama-model gemma4:e4b --ollama-url http://127.0.0.1:11434

# Attach to Chrome already started with remote debugging
#   chrome --remote-debugging-port=9222 --user-data-dir="$HOME/.search-consensus-chrome"
python -m search_consensus --cdp http://127.0.0.1:9222

# Use a real Chrome profile (close Chrome first)
python -m search_consensus --profile Default

# Skip automatic window tiling
python -m search_consensus --no-tile

Type in the Consensus window search box. That POSTs to /api/search, which searches the other three windows, merges results, and refreshes the summary + list.

HTTP API

Method Path Purpose
GET / Consensus UI (?q= optional initial query)
GET /health Liveness / engine readiness
POST /api/search Body: {"query": "..."} → consensus JSON + Ollama summary

Chrome profiles

Mode Behavior
(default) Dedicated profile under ~/.search-consensus-chrome
--profile Default System Chrome Default profile (close Chrome first)
--cdp URL Attach to an already-running Chrome with remote debugging

Using your real profile helps avoid bot walls; engines can still show CAPTCHAs — leave the windows visible so you can solve them.

Project layout

search_consensus/
  app.py            # Orchestrates Chrome windows + uvicorn
  server.py         # FastAPI routes
  engines.py        # Typed search + parsers + pagination
  consensus.py      # Merge / rank logic
  ollama_client.py  # Local LLM summary
  ui.py             # Consensus HTML/CSS/JS
  chrome.py         # Persistent profile / CDP launch
  tiling.py         # macOS / Linux 2×2 layout helpers
  cli.py            # `python -m search_consensus`

Notes

  • Google Split View is only two panes; this project uses four windows instead.
  • Page-size URL hints (num=, count=) are best-effort; clicking Next once is the reliable way to deepen results.
  • Works on macOS and Linux with the same Python code.

License

Use and modify as you like for personal or experimental tooling. Respect each search engine’s terms of service.

About

Multi-engine search consensus: Google, Bing, DuckDuckGo in real Chrome windows + FastAPI UI + local Ollama summary

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages