# ๐Ÿ”ฎ Sibilla > *L'oracolo AI che cerca nel web e risponde alle tue domande.* > Self-hosted Perplexity-like search engine. **Sibilla** รจ un motore di ricerca AI self-hosted che combina: - ๐Ÿง  **Google Gemini** โ€” LLM per sintesi e query expansion - ๐Ÿ” **Degoog** โ€” metasearch engine self-hosted (primary) con MCP nativo - ๐Ÿ”„ **SearXNG + DuckDuckGo** โ€” fallback a cascata se Degoog non risponde - ๐Ÿ”ง **MCP (Model Context Protocol)** โ€” server stdio per agent AI esterni - ๐Ÿ–ฅ๏ธ **Flask web app** โ€” interfaccia pulita e reattiva ``` Tu chiedi โ†’ Query expansion โ†’ Degoog search โ†’ Fetch pagine โ†’ Gemini sintesi โ†’ Risposta con fonti ``` ## Architettura ``` sibilla/ โ”œโ”€โ”€ src/sibilla/ โ”‚ โ”œโ”€โ”€ app.py # Flask app factory + pipeline /api/ask โ”‚ โ”œโ”€โ”€ cli.py # Entry point server web โ”‚ โ”œโ”€โ”€ search.py # DegoogClient, SearXNGClient, DuckDuckGoClient, PageFetcher โ”‚ โ”œโ”€โ”€ ai.py # GeminiClient (sintesi + query rewriting) โ”‚ โ”œโ”€โ”€ mcp.py # MCP server su stdio (per agent AI esterni) โ”‚ โ””โ”€โ”€ prompts.py # System prompt stile Perplexity โ”œโ”€โ”€ templates/ โ”‚ โ””โ”€โ”€ index.html # Interfaccia di ricerca โ”œโ”€โ”€ static/ โ”‚ โ”œโ”€โ”€ style.css # Stili dark theme โ”‚ โ””โ”€โ”€ app.js # Logica frontend โ””โ”€โ”€ tests/ ``` ## Pipeline di ricerca ``` POST /api/ask {query: "..."} โ”‚ โ”œโ”€ 1. Gemini riscrive la query in 3 varianti (query expansion) โ”œโ”€ 2. Multi-query search: Degoog โ†’ SearXNG โ†’ DuckDuckGo (cascading) โ”œโ”€ 3. PageFetcher scarica il contenuto completo delle top pagine โ”œโ”€ 4. Prompt assembly con fonti numerate โ”œโ”€ 5. Gemini sintesi con citazioni [1], [2], ... โ””โ”€ 6. JSON {answer, sources[], model, search_engine, tokens_used} ``` ## Setup ```bash cd sibilla python3 -m venv .venv source .venv/bin/activate pip install -e ".[dev]" ``` ### Prerequisiti 1. **Google API Key** โ€” [https://aistudio.google.com/apikey](https://aistudio.google.com/apikey) 2. **Degoog** (consigliato) โ€” motore di ricerca primary: ```bash docker run -d --name degoog -p 4444:4444 ghcr.io/degoog-org/degoog:latest ``` 3. **SearXNG** (opzionale, fallback) โ€” se vuoi un secondo motore di backup: ```bash docker run -d -p 8080:8080 searxng/searxng ``` Crea un file `.env`: ```env GOOGLE_API_KEY=la-tua-api-key DEGOOG_URL=http://localhost:4444 ``` Senza Degoog, Sibilla userร  automaticamente SearXNG e DuckDuckGo come fallback. ## Uso ```bash # Avvia la web app sibilla # โ†’ http://127.0.0.1:5000 # Avvia il server MCP (per agent AI esterni) sibilla-mcp ``` ## Sviluppo ```bash pip install -e ".[dev,mcp]" ruff check src tests pytest ``` ## Licenza MIT