diff --git a/CHANGELOG.md b/CHANGELOG.md index 43c87c3..d82515d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,42 @@ All notable changes to PriceGhost will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.0.5] - 2026-01-25 + +### Added + +- **AI Model Selector** - Choose your preferred AI model in settings + - Anthropic: Claude Haiku 4.5, Sonnet 4.5, Opus 4.5 + - OpenAI: GPT-4.1 Nano, Mini, and Full + - Ollama: Any locally installed model +- **Per-Product AI Controls** - Disable AI extraction and/or verification on individual products + - Useful for products where AI interferes with manual price selection + - Separate toggles for extraction (fallback) and verification +- **Gotify Notification Support** - Self-hosted push notifications via Gotify + - Test connection before saving to verify server URL and app token + - Full notification support for price drops, target prices, and stock changes +- **AI Stock Status Verification** - Separate AI call to verify stock status for variant products + - When tracking a specific variant price, AI now verifies if that exact variant is in stock + - Fixes false "in stock" status when other variants are available but tracked variant is not + +### Fixed + +- **Ollama Thinking Mode** - Fixed Qwen3 and DeepSeek models outputting `` tags instead of JSON + - Added `/nothink` message before prompts to disable thinking mode + - Added `num_ctx: 16384` for proper context window (was truncating HTML at 4K) + - Added fallback to strip `` tags from responses +- **AI Stock Status "Unknown"** - AI now correctly returns "out_of_stock" for pre-order/coming soon products + - Previously returned "unknown" even when reasoning stated product was unavailable + - Prompt now explicitly requires "out_of_stock" when product cannot be purchased + +### Changed + +- **Recommended AI Models** - Based on testing: + - **Cloud**: Claude Haiku 4.5 (best accuracy for the cost) + - **Local/Free**: Qwen3 (any size, with thinking mode disabled) + +--- + ## [1.0.4] - 2026-01-24 ### Added @@ -162,6 +198,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | Version | Date | Description | |---------|------|-------------| +| 1.0.5 | 2026-01-25 | AI model selector, per-product AI controls, Gotify support, Ollama fixes | | 1.0.4 | 2026-01-24 | Multi-strategy price voting system with user selection for ambiguous prices | | 1.0.3 | 2026-01-24 | Notification history with bell icon, clear button, and full history page | | 1.0.2 | 2026-01-23 | Fixed stock status false positives for in-stock items | diff --git a/README.md b/README.md index 796ba1f..b051319 100644 --- a/README.md +++ b/README.md @@ -119,6 +119,7 @@ The cost is minimal (fractions of a cent per API call with Claude Haiku/GPT-4o-m - **Discord** - Send alerts to any Discord channel via webhooks - **Pushover** - Native Pushover support for mobile push notifications - **ntfy.sh** - Simple, no-account push notifications to any device +- **Gotify** - Self-hosted push notifications via your own Gotify server - **Per-channel toggles** - Enable/disable each notification channel independently - **Test notifications** - Send test alerts to verify your setup @@ -169,7 +170,7 @@ PriceGhost has **site-specific scrapers** optimized for: | **Backend** | Node.js, Express, TypeScript | | **Database** | PostgreSQL | | **Scraping** | Cheerio, Puppeteer (with stealth plugin) | -| **AI Extraction** | Anthropic Claude, OpenAI GPT, Ollama (optional but recommended) | +| **AI Extraction** | Anthropic Claude (Haiku 4.5 recommended), OpenAI GPT, Ollama Qwen3 (optional but recommended) | | **Charts** | Recharts | | **Auth** | JWT + bcrypt | | **Scheduling** | node-cron | @@ -262,6 +263,12 @@ npm run dev 3. Enter your topic name in Settings > Notifications 4. No account or API key needed - it just works! +#### Gotify (Self-Hosted) +1. Set up a [Gotify server](https://gotify.net/docs/install) on your own infrastructure +2. Create an application in Gotify to get an App Token +3. Enter your Gotify server URL and App Token in Settings > Notifications +4. Use "Test Connection" to verify before saving + ### AI Extraction Setup (Highly Recommended) For dramatically improved compatibility with difficult sites: @@ -271,9 +278,22 @@ For dramatically improved compatibility with difficult sites: 3. Choose your provider: - **Anthropic (Claude)** - Get key from [console.anthropic.com](https://console.anthropic.com) - **OpenAI (GPT)** - Get key from [platform.openai.com](https://platform.openai.com/api-keys) - - **Ollama (Local)** - Free, runs locally. Install from [ollama.ai](https://ollama.ai), then `ollama pull llama3.2` + - **Ollama (Local)** - Free, runs locally. Install from [ollama.ai](https://ollama.ai) 4. Enter your API key (or Ollama server URL for local) -5. Use "Test Extraction" to verify it works +5. Select your preferred model +6. Use "Test Extraction" to verify it works + +#### Recommended Models + +Based on testing, these models work best with PriceGhost: + +| Provider | Model | Notes | +|----------|-------|-------| +| **Anthropic** | Claude Haiku 4.5 | ⭐ Best overall - fast, accurate, cheap (~$0.001/check) | +| **Ollama** | Qwen3 (any size) | ⭐ Best free option - run `ollama pull qwen3` | +| OpenAI | GPT-4.1 Nano | Good alternative to Haiku | + +**Note for Ollama users**: Qwen3 works well for price extraction and verification. Other models (llama3, mistral, deepseek) may struggle with structured JSON output or have thinking mode issues. The AI automatically activates when standard scraping fails to extract a price, providing a reliable fallback. @@ -310,6 +330,8 @@ The AI automatically activates when standard scraping fails to extract a price, | POST | `/api/settings/notifications/test/discord` | Send test Discord notification | | POST | `/api/settings/notifications/test/pushover` | Send test Pushover notification | | POST | `/api/settings/notifications/test/ntfy` | Send test ntfy notification | +| POST | `/api/settings/notifications/test/gotify` | Send test Gotify notification | +| POST | `/api/settings/notifications/test-gotify` | Test Gotify connection before saving | | GET | `/api/settings/ai` | Get AI extraction settings | | PUT | `/api/settings/ai` | Update AI settings | | POST | `/api/settings/ai/test` | Test AI extraction on a URL | diff --git a/backend/package.json b/backend/package.json index f71252f..7fc1e53 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "priceghost-backend", - "version": "1.0.2", + "version": "1.0.5", "description": "PriceGhost price tracking API", "main": "dist/index.js", "scripts": { diff --git a/frontend/package.json b/frontend/package.json index 58b1ac0..c32008d 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,7 +1,7 @@ { "name": "priceghost-frontend", "private": true, - "version": "1.0.2", + "version": "1.0.5", "type": "module", "scripts": { "dev": "vite",