# Lede — page summarizer & chat (WIP) A browser extension for Chrome and Firefox that lets you ask questions and summarize any webpage using AI (using Ollama or any OpenAI-compatible API). Works best with the GPT-OSS-20b model. In **Beta**. Not yet in the Chrome Web Store or Firefox Addons. ## Features - 📄 **One-Click Summaries** - Summarize page content efficiently - 🤖 **Follow Up Questions** - Ask questions about the current webpage and summary - 🔌 **OpenAI-Compatible** - Works with Ollama, OpenAI, Groq, and LM Studio - ⚙️ **Configurable** - Choose your own model and API endpoint - 🔒 **Privacy-first** - Keep summaries local with Ollama, or use a cloud provider when you choose one. - ⌨️ **Quick access** - Keyboard shortcut of `Ctrl/Cmd+Shift+U`, use the right click menu, or click the extension icon. ## About Made to solve a very simple problem I had as a user of the Helium web browser. ## Installation (in dev mode) ### Chrome 1. Open Chrome and navigate to `chrome://extensions/` 2. Enable **Developer mode** (toggle in top right) 3. Click **Load unpacked** 4. Select the `webai-summarizer` folder 5. The extension icon should appear in your toolbar 6. Optionally set up the keyboard shortcut at `chrome://extensions/shortcuts` ### Firefox 1. Open Firefox and navigate to `about:debugging#/runtime/this-firefox` 2. Click **Load Temporary Add-on** 3. Select the `manifest.json` file in the `webai-summarizer` folder 4. The extension icon should appear in your toolbar **Note:** Firefox requires you to manually enable the keyboard shortcut: 1. Type `about:addons` in the address bar 2. Click the gear icon (⚙️) → **Manage Extension Shortcuts** ## TODO - [x] Better branding / icon / logo - [ ] Similar to "branding" -- Rename extension to something more unique and not placeholder-y - [ ] Publish to Chrome Web Store - [ ] Publish to Firefox Add-ons ### Build for Specific Browser If needed, you can build for a specific browser: ```bash # For Chrome ./build.sh chrome # For Firefox ./build.sh firefox ``` ## Usage 1. **Navigate to any webpage** 2. **Click the extension icon** in your toolbar, **or press `Ctrl/Cmd+Shift+U`** 3. **Click "Summarize Page"** for an instant summary, **or** 4. **Type a question** about the page content and press Enter ## API Mode Explained ### Ollama Native Mode - Uses Ollama's native `/api/generate` endpoint - Works out of the box if Ollama is installed - Recommended for local Ollama installations - Base URL should NOT include `/v1` ### OpenAI-Compatible Mode - Uses the `/v1/chat/completions` endpoint - Required for OpenAI, Groq, and other cloud providers - Can work with Ollama if you set the `OPENAI_API_BASE` environment variable - Base URL MUST include `/v1` for Ollama compatibility mode ## Privacy Notes - In **Ollama Native** mode, your content stays on your machine (local model/server). - In **OpenAI-compatible** mode, page content is sent to the provider endpoint you configure. - The extension now extracts page text on-demand when you trigger summarize/chat, rather than running a persistent content script on all pages. ## Troubleshooting ### "Cannot connect to localhost:11434" 1. Make sure Ollama is running: `ollama serve` 2. Check that you pulled the model: `ollama list` 3. If using Ollama, make sure your URL doesn't have `/v1` in Native mode 4. Check browser console for detailed error messages ### "HTTP 403" or "HTTP 405" This means the API endpoint is wrong. Try: 1. Switch API Mode from settings 2. For Ollama Native: use `http://localhost:11434` (no /v1) 3. For OpenAI mode: use `http://localhost:11434/v1` (with /v1) ## File Structure ``` webai-summarizer/ ├── manifest.json # Extension configuration (active) ├── manifest-chrome.json # Chrome-specific manifest ├── manifest-firefox.json # Firefox-specific manifest ├── build.sh # Build script for browser switching ├── BROWSER_SUPPORT.md # Browser compatibility documentation ├── popup/ │ ├── popup.html # Chat interface │ ├── popup.css # Styling │ ├── popup.js # Popup logic │ └── marked.min.js # Markdown parser ├── scripts/ │ ├── content.js # Webpage text extraction │ └── background.js # API communication ├── options/ │ ├── options.html # Settings page │ ├── options.css │ └── options.js └── icons/ ├── icon16.png ├── icon32.png ├── icon48.png └── icon128.png ```