Unify AI provider selection across all features
Every LLM-backed feature (Post-Processing, Proofreading, Title Generation, Property Filler) now reads from one CHAT_PROVIDERS registry instead of 5 hand-duplicated provider lists, so they always offer the exact same providers in the exact same order. - Add Groq as a 5th chat-completion provider (was transcription-only despite its OpenAI-compatible API and an already-collected key). - Provider dropdowns disable options with no API key configured (shown as e.g. "Anthropic (no API key)") instead of silently failing at runtime when picked. - Collapse 3 byte-for-byte duplicated resolveProvider() methods (Proofreader, TitleGenerator, PropertyFiller) plus AudioHandler's getPostProcessingApiKey() into one resolveChatProvider() helper (src/ProviderResolver.ts). - Fix Custom provider: previously Proofreading/Title/Property silently reused Post-Processing's postProcessingUrl with no visible field to set it. Renamed to a shared customApiUrl field with its own UI (createCustomProviderFields), now exposed on every tab that offers Custom, plus rows on the API Keys tab. Migrates old data.json values automatically. - Update README settings reference and getting-started sections to match. No behavior change for existing single-provider setups; migration handles the postProcessingUrl -> customApiUrl rename transparently.
This commit is contained in:
@@ -75,11 +75,15 @@ Open **Settings** → **NibbleAI** and add at least one API key:
|
||||
|
||||
| Key | Used For |
|
||||
|-----|----------|
|
||||
| **Transcription API Key** | Whisper transcription (OpenAI, Groq, Azure) |
|
||||
| **OpenAI API Key** | Proofreading, title generation, property filling, post-processing *(recommended: OpenRouter)* |
|
||||
| **Anthropic API Key** | Post-processing with Claude models |
|
||||
| **Groq API Key** | Whisper transcription, and as a chat provider for proofreading/title/property/post-processing |
|
||||
| **OpenAI API Key** | Whisper transcription, and as a chat provider for proofreading/title/property/post-processing |
|
||||
| **Anthropic API Key** | Claude models for proofreading/title/property/post-processing |
|
||||
| **OpenRouter API Key** | Access to hundreds of models for proofreading/title/property/post-processing |
|
||||
| **Custom API Key + URL** | Any OpenAI-compatible endpoint (self-hosted, Azure, etc.) |
|
||||
|
||||
> **Tip:** For proofreading, title generation, and property filling, an [OpenRouter](https://openrouter.ai/keys) API key with a free model like `google/gemini-2.5-flash-lite` costs nothing and works great.
|
||||
Every LLM-backed feature (Proofreading, Title Generation, Property Filler, Post-Processing) shows the same provider dropdown — pick any provider that has a key configured above.
|
||||
|
||||
> **Tip:** An [OpenRouter](https://openrouter.ai/keys) API key with a free model like `google/gemini-2.5-flash-lite` costs nothing and works great across all four AI features.
|
||||
|
||||
### 2. Try the Features
|
||||
|
||||
@@ -172,13 +176,14 @@ Securely stored in your system keychain via Obsidian's SecretStorage. Never writ
|
||||
| Setting | Default | Description |
|
||||
|---------|---------|-------------|
|
||||
| Enable | Off | Clean up transcripts with an LLM |
|
||||
| Provider | Anthropic | Anthropic, OpenAI, or Custom |
|
||||
| Provider | Anthropic | Any configured provider: Anthropic, OpenAI, Groq, OpenRouter, or Custom |
|
||||
| Model | `claude-sonnet-4-20250514` | LLM for cleanup |
|
||||
| Auto-generate title | Off | Create filenames from content |
|
||||
|
||||
### Proofreading
|
||||
| Setting | Default | Description |
|
||||
|---------|---------|-------------|
|
||||
| Provider | OpenRouter | Any configured provider: Anthropic, OpenAI, Groq, OpenRouter, or Custom |
|
||||
| Model | `openai/gpt-4o-mini` | Model for proofreading |
|
||||
| Temperature | `0.2` | Lower = more consistent |
|
||||
| Max tokens | `2000` | Maximum response length |
|
||||
@@ -187,12 +192,16 @@ Securely stored in your system keychain via Obsidian's SecretStorage. Never writ
|
||||
### Title Generation
|
||||
| Setting | Default | Description |
|
||||
|---------|---------|-------------|
|
||||
| Provider | OpenRouter | Any configured provider: Anthropic, OpenAI, Groq, OpenRouter, or Custom |
|
||||
| Model | `openai/gpt-4o-mini` | Model for generating titles |
|
||||
| Mode | Rename file | Rename file or set frontmatter property |
|
||||
| Max title length | 8 words | Maximum words in generated title |
|
||||
|
||||
### Property Filler
|
||||
| Setting | Default | Description |
|
||||
|---------|---------|-------------|
|
||||
| Provider | OpenRouter | Any configured provider: Anthropic, OpenAI, Groq, OpenRouter, or Custom |
|
||||
| Model | `openai/gpt-4o-mini` | Model for generating property values |
|
||||
| Custom prompt | *(built-in)* | Template with `{property}` placeholder |
|
||||
| Overwrite existing | Off | Replace existing property values |
|
||||
|
||||
@@ -205,7 +214,8 @@ NibbleAI/
|
||||
├── main.ts # Plugin entry point, commands, events
|
||||
├── src/
|
||||
│ ├── SettingsManager.ts # Settings + SecretStorage management
|
||||
│ ├── AIService.ts # Unified AI client (OpenAI + Anthropic)
|
||||
│ ├── AIService.ts # Unified AI client (OpenAI-compatible + Anthropic-native)
|
||||
│ ├── ProviderResolver.ts # Shared provider → API key/endpoint resolution
|
||||
│ ├── ModelBrowser.ts # OpenRouter model suggest modal
|
||||
│ ├── PostProcessor.ts # LLM post-processing for transcripts
|
||||
│ ├── NibbleAISettingsTab.ts # Settings UI
|
||||
|
||||
Reference in New Issue
Block a user