Update AI model references to latest versions

Replace Claude Sonnet 4.6 with Sonnet 5 as default model, add Claude Fable 5, update OpenAI models to include versioned releases (GPT-5.5 Pro, dated variants), and update all references across enums, settings, tests, and documentation.
This commit is contained in:
Andrew Beal 2026-07-06 19:37:41 +01:00
parent f57438dd54
commit 1c5834e858
11 changed files with 33 additions and 55 deletions

View file

@ -66,7 +66,8 @@ export enum AIProvider {
export enum AIProviderModel {
// Claude models
ClaudeSonnet_4_6 = "claude-sonnet-4-6",
ClaudeFable_5 = "claude-fable-5",
ClaudeSonnet_5 = "claude-sonnet-5",
ClaudeOpus_4_8 = "claude-opus-4-8",
ClaudeHaiku_4_5 = "claude-haiku-4-5-20251001",
@ -77,9 +78,10 @@ export enum AIProviderModel {
GeminiPro_3_1_Preview = "gemini-3.1-pro-preview",
// OpenAI models
GPT_5_5 = "gpt-5.5",
GPT_5_4_Mini = "gpt-5.4-mini",
GPT_5_4_Nano = "gpt-5.4-nano",
GPT_5_5_Pro = "gpt-5.5-pro-2026-04-23",
GPT_5_5 = "gpt-5.5-2026-04-23",
GPT_5_4_Mini = "gpt-5.4-mini-2026-03-17",
GPT_5_4_Nano = "gpt-5.4-nano-2026-03-17",
// Mistral models
MistralMedium = "mistral-medium-3-5",
@ -124,7 +126,7 @@ export const DEFAULT_QUICK_MODEL_BY_PROVIDER: Record<AIProvider, AIProviderModel
}
export const DEFAULT_MODEL_BY_PROVIDER: Record<AIProvider, AIProviderModel> = {
[AIProvider.Claude]: AIProviderModel.ClaudeSonnet_4_6,
[AIProvider.Claude]: AIProviderModel.ClaudeSonnet_5,
[AIProvider.Gemini]: AIProviderModel.GeminiFlash_3_5_Flash,
[AIProvider.OpenAI]: AIProviderModel.GPT_5_5,
[AIProvider.Mistral]: AIProviderModel.MistralMedium,

View file

@ -6,7 +6,8 @@ export enum Copy {
NoUserInstruction = "No custom instructions",
// Model Display Names
ClaudeSonnet_4_6 = "Claude Sonnet 4.6",
ClaudeFable_5 = "Claude Fable 5",
ClaudeSonnet_5 = "Claude Sonnet 5",
ClaudeOpus_4_8 = "Claude Opus 4.8",
ClaudeHaiku_4_5 = "Claude Haiku 4.5",
@ -15,6 +16,7 @@ export enum Copy {
GeminiFlash_3_5_Flash = "Gemini 3.5 Flash",
GeminiPro_3_1_Preview = "Gemini 3.1 Pro Preview",
GPT_5_5_Pro = "GPT-5.5 Pro",
GPT_5_5 = "GPT-5.5",
GPT_5_4_Mini = "GPT-5.4 Mini",
GPT_5_4_Nano = "GPT-5.4 Nano",

View file

@ -70,38 +70,6 @@
## Usage
### Switching Between Models
The plugin supports multiple AI models:
**Claude (Anthropic)**
- Claude Sonnet 4.6 ⚡ (Recommended)
- Claude Sonnet 4.5, 4
- Claude Opus 4.6, 4.5, 4.1, 4
- Claude Haiku 4.5
**Gemini (Google)**
- Gemini 3.1 Pro Preview, 3 Pro Preview, 3 Flash Preview
- Gemini 2.5 Flash, Pro
- Gemini 2.5 Flash Lite
**OpenAI**
- GPT-5.2 (Instant, Thinking, Pro)
- GPT-5.1, GPT-5 (Mini, Nano)
**Mistral**
- Mistral Large
- Mistral Medium
- Mistral Small
**Local**
- Any model served by an OpenAI-compatible local server (LM Studio, Ollama, vLLM, etc.) - enter the model name yourself, no preset list
Switch models anytime in the settings without losing your conversation context.
### Chat Modes
@ -347,7 +315,7 @@ See `EXAMPLE_INSTRUCTIONS.md` in your vault for a template.
**Planning Model**
- Select a separate model for the planning agent (used in Planning Mode)
- Default: Claude Sonnet 4.6
- Defaults to your provider's recommended model
- Allows cost optimization by using a more capable model for planning and a faster/cheaper model for execution
- The planning model dropdown updates to match your selected provider

View file

@ -21,7 +21,7 @@ export const DEFAULT_SETTINGS: IVaultkeeperAISettings = {
userInstruction: "",
provider: AIProvider.Local,
model: AIProviderModel.ClaudeSonnet_4_6,
model: AIProviderModel.ClaudeSonnet_5,
planningModel: AIProviderModel.ClaudeOpus_4_8,
quickActionModel: AIProviderModel.ClaudeHaiku_4_5,

View file

@ -487,16 +487,18 @@ export class VaultkeeperAISettingTab extends PluginSettingTab {
switch (providerFilter) {
case AIProvider.Claude:
dropdown.addOptions({
[AIProviderModel.ClaudeSonnet_4_6]: Copy.ClaudeSonnet_4_6,
[AIProviderModel.ClaudeFable_5]: Copy.ClaudeFable_5,
[AIProviderModel.ClaudeSonnet_5]: Copy.ClaudeSonnet_5,
[AIProviderModel.ClaudeOpus_4_8]: Copy.ClaudeOpus_4_8,
[AIProviderModel.ClaudeHaiku_4_5]: Copy.ClaudeHaiku_4_5,
[AIProviderModel.ClaudeHaiku_4_5]: Copy.ClaudeHaiku_4_5
});
break;
case AIProvider.OpenAI:
dropdown.addOptions({
[AIProviderModel.GPT_5_5_Pro]: Copy.GPT_5_5_Pro,
[AIProviderModel.GPT_5_5]: Copy.GPT_5_5,
[AIProviderModel.GPT_5_4_Mini]: Copy.GPT_5_4_Mini,
[AIProviderModel.GPT_5_4_Nano]: Copy.GPT_5_4_Nano,
[AIProviderModel.GPT_5_4_Nano]: Copy.GPT_5_4_Nano
});
break;
case AIProvider.Gemini:
@ -504,13 +506,13 @@ export class VaultkeeperAISettingTab extends PluginSettingTab {
[AIProviderModel.GeminiFlash_3_1_Lite]: Copy.GeminiFlash_3_1_Lite,
[AIProviderModel.GeminiFlash_3_Flash]: Copy.GeminiFlash_3_Flash,
[AIProviderModel.GeminiFlash_3_5_Flash]: Copy.GeminiFlash_3_5_Flash,
[AIProviderModel.GeminiPro_3_1_Preview]: Copy.GeminiPro_3_1_Preview,
[AIProviderModel.GeminiPro_3_1_Preview]: Copy.GeminiPro_3_1_Preview
});
break;
case AIProvider.Mistral:
dropdown.addOptions({
[AIProviderModel.MistralMedium]: Copy.MistralMedium,
[AIProviderModel.MistralSmall]: Copy.MistralSmall,
[AIProviderModel.MistralSmall]: Copy.MistralSmall
});
break;
case AIProvider.Local:

View file

@ -19,7 +19,7 @@ describe('ClaudeConversationNamingAgent', () => {
// Mock SettingsService
mockSettingsService = {
settings: {
model: AIProviderModel.ClaudeSonnet_4_6,
model: AIProviderModel.ClaudeSonnet_5,
apiKeys: {
claude: 'test-claude-key',
openai: 'test-openai-key',

View file

@ -36,6 +36,7 @@ describe('AIControllerService - Integration Tests', () => {
onPlanningStarted: vi.fn(),
onPlanningFinished: vi.fn(),
onUserQuestion: vi.fn(),
onPlanApprovalRequest: vi.fn(),
onPlanUpdate: vi.fn(),
onPlanStepUpdate: vi.fn(),
onPlanReset: vi.fn(),

View file

@ -33,6 +33,7 @@ describe('ExecutionAgent - Unit Tests', () => {
onPlanningStarted: vi.fn(),
onPlanningFinished: vi.fn(),
onUserQuestion: vi.fn().mockResolvedValue('User answer'),
onPlanApprovalRequest: vi.fn(),
onPlanUpdate: vi.fn(),
onPlanStepUpdate: vi.fn(),
onPlanReset: vi.fn(),

View file

@ -42,6 +42,7 @@ describe('Multi-Agent Integration Tests', () => {
onPlanningStarted: vi.fn(),
onPlanningFinished: vi.fn(),
onUserQuestion: vi.fn().mockResolvedValue('User answer'),
onPlanApprovalRequest: vi.fn(),
onPlanUpdate: vi.fn(),
onPlanStepUpdate: vi.fn(),
onPlanReset: vi.fn(),

View file

@ -35,6 +35,7 @@ describe('PlanningAgent - Unit Tests', () => {
onPlanningStarted: vi.fn(),
onPlanningFinished: vi.fn(),
onUserQuestion: vi.fn().mockResolvedValue('User answer'),
onPlanApprovalRequest: vi.fn(),
onPlanUpdate: vi.fn(),
onPlanStepUpdate: vi.fn(),
onPlanReset: vi.fn(),

View file

@ -27,7 +27,7 @@ describe('SettingsService', () => {
settingsService = new SettingsService({});
expect(settingsService.settings.firstTimeStart).toBe(true);
expect(settingsService.settings.model).toBe(AIProviderModel.ClaudeSonnet_4_6);
expect(settingsService.settings.model).toBe(AIProviderModel.ClaudeSonnet_5);
expect(settingsService.settings.apiKeys).toEqual({
claude: '',
openai: '',
@ -172,7 +172,7 @@ describe('SettingsService', () => {
beforeEach(() => {
const loadedSettings = makeTestSettings({
provider: AIProvider.Claude,
model: AIProviderModel.ClaudeSonnet_4_6,
model: AIProviderModel.ClaudeSonnet_5,
apiKeys: {
claude: 'claude-api-key',
openai: 'openai-api-key',
@ -220,7 +220,7 @@ describe('SettingsService', () => {
it('should return Claude key when current model is Claude', () => {
const loadedSettings = makeTestSettings({
provider: AIProvider.Claude,
model: AIProviderModel.ClaudeSonnet_4_6,
model: AIProviderModel.ClaudeSonnet_5,
apiKeys: {
claude: 'claude-key',
openai: 'openai-key',
@ -336,7 +336,7 @@ describe('SettingsService', () => {
beforeEach(() => {
const loadedSettings = makeTestSettings({
provider: AIProvider.Claude,
model: AIProviderModel.ClaudeSonnet_4_6
model: AIProviderModel.ClaudeSonnet_5
});
settingsService = new SettingsService(loadedSettings);
});
@ -396,7 +396,7 @@ describe('SettingsService', () => {
beforeEach(() => {
const loadedSettings = makeTestSettings({
provider: AIProvider.Claude,
model: AIProviderModel.ClaudeSonnet_4_6,
model: AIProviderModel.ClaudeSonnet_5,
apiKeys: {
claude: 'test-key',
openai: '',
@ -441,8 +441,8 @@ describe('SettingsService', () => {
describe('Provider Detection from Model Names', () => {
it('should correctly identify Claude models', () => {
const claudeModels = [
AIProviderModel.ClaudeSonnet_4_6,
AIProviderModel.ClaudeSonnet_4_6,
AIProviderModel.ClaudeSonnet_5,
AIProviderModel.ClaudeSonnet_5,
AIProviderModel.ClaudeOpus_4_8,
AIProviderModel.ClaudeHaiku_4_5
];
@ -526,7 +526,7 @@ describe('SettingsService', () => {
describe('Settings Immutability and Reference', () => {
it('should maintain reference to settings object', () => {
settingsService = new SettingsService({
model: AIProviderModel.ClaudeSonnet_4_6,
model: AIProviderModel.ClaudeSonnet_5,
apiKeys: { claude: 'key', openai: '', gemini: '', mistral: '', local: '' }
});
@ -539,7 +539,7 @@ describe('SettingsService', () => {
it('should allow modification of settings properties via updateSettings', async () => {
settingsService = new SettingsService({
model: AIProviderModel.ClaudeSonnet_4_6,
model: AIProviderModel.ClaudeSonnet_5,
apiKeys: { claude: '', openai: '', gemini: '', mistral: '', local: '' },
exclusions: []
});