feat: add Mistral AI as first-class alternative provider
This commit is contained in:
@@ -37,6 +37,13 @@ describe('assistant sidebar guard rails', () => {
|
||||
onA2UIMessage: vi.fn(() => vi.fn()),
|
||||
onTokenUsage: vi.fn(() => vi.fn()),
|
||||
dispatchA2UIAction: vi.fn(),
|
||||
validateMistralApiKey: vi.fn().mockResolvedValue({ isValid: false, models: [] }),
|
||||
setMistralApiKey: vi.fn().mockResolvedValue({ success: true }),
|
||||
getMistralApiKey: vi.fn().mockResolvedValue({ hasKey: false, maskedKey: '' }),
|
||||
getTitleModel: vi.fn().mockResolvedValue({ success: true, modelId: 'claude-haiku-4-5' }),
|
||||
setTitleModel: vi.fn().mockResolvedValue({ success: true }),
|
||||
getImageAnalysisModel: vi.fn().mockResolvedValue({ success: true, modelId: 'claude-sonnet-4-5' }),
|
||||
setImageAnalysisModel: vi.fn().mockResolvedValue({ success: true }),
|
||||
} as never;
|
||||
});
|
||||
|
||||
|
||||
@@ -48,6 +48,13 @@ describe('chat surface mode usage guards', () => {
|
||||
onA2UIMessage: vi.fn(() => vi.fn()),
|
||||
onTokenUsage: vi.fn(() => vi.fn()),
|
||||
dispatchA2UIAction: vi.fn(),
|
||||
validateMistralApiKey: vi.fn().mockResolvedValue({ isValid: false, models: [] }),
|
||||
setMistralApiKey: vi.fn().mockResolvedValue({ success: true }),
|
||||
getMistralApiKey: vi.fn().mockResolvedValue({ hasKey: false, maskedKey: '' }),
|
||||
getTitleModel: vi.fn().mockResolvedValue({ success: true, modelId: 'claude-haiku-4-5' }),
|
||||
setTitleModel: vi.fn().mockResolvedValue({ success: true }),
|
||||
getImageAnalysisModel: vi.fn().mockResolvedValue({ success: true, modelId: 'claude-sonnet-4-5' }),
|
||||
setImageAnalysisModel: vi.fn().mockResolvedValue({ success: true }),
|
||||
} as never;
|
||||
});
|
||||
|
||||
|
||||
@@ -51,6 +51,13 @@ describe('chat surface shared usage guards', () => {
|
||||
onA2UIMessage: vi.fn(() => vi.fn()),
|
||||
onTokenUsage: vi.fn(() => vi.fn()),
|
||||
dispatchA2UIAction: vi.fn(),
|
||||
validateMistralApiKey: vi.fn().mockResolvedValue({ isValid: false, models: [] }),
|
||||
setMistralApiKey: vi.fn().mockResolvedValue({ success: true }),
|
||||
getMistralApiKey: vi.fn().mockResolvedValue({ hasKey: false, maskedKey: '' }),
|
||||
getTitleModel: vi.fn().mockResolvedValue({ success: true, modelId: 'claude-haiku-4-5' }),
|
||||
setTitleModel: vi.fn().mockResolvedValue({ success: true }),
|
||||
getImageAnalysisModel: vi.fn().mockResolvedValue({ success: true, modelId: 'claude-sonnet-4-5' }),
|
||||
setImageAnalysisModel: vi.fn().mockResolvedValue({ success: true }),
|
||||
} as never;
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user