Skip to content

Commit 2e76b0a

Browse files
committed
feat: implement caching for Mistral model to improve performance
1 parent 9623561 commit 2e76b0a

File tree

2 files changed

+51
-9
lines changed

2 files changed

+51
-9
lines changed

src/api/providers/mistral.ts

Lines changed: 50 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export class MistralHandler implements ApiHandler {
1313
private client: Mistral
1414
private readonly enableDebugOutput: boolean
1515
private readonly outputChannel?: vscode.OutputChannel
16+
private cachedModel: { id: MistralModelId; info: ModelInfo; forModelId: string | undefined } | null = null
1617

1718
private static readonly outputChannelName = "Roo Code Mistral"
1819
private static sharedOutputChannel: vscode.OutputChannel | undefined
@@ -22,6 +23,30 @@ export class MistralHandler implements ApiHandler {
2223
throw new Error("Mistral API key is required")
2324
}
2425

26+
// Clear cached model if options change
27+
this.cachedModel = null
28+
29+
// Destructure only the options we need
30+
const {
31+
apiModelId,
32+
mistralApiKey,
33+
mistralCodestralUrl,
34+
mistralModelStreamingEnabled,
35+
modelTemperature,
36+
stopToken,
37+
includeMaxTokens,
38+
} = options
39+
40+
this.options = {
41+
apiModelId: apiModelId || mistralDefaultModelId,
42+
mistralApiKey,
43+
mistralCodestralUrl,
44+
mistralModelStreamingEnabled,
45+
modelTemperature,
46+
stopToken,
47+
includeMaxTokens,
48+
}
49+
2550
const config = vscode.workspace.getConfiguration("roo-cline")
2651
this.enableDebugOutput = config.get<boolean>("debug.mistral", false)
2752

@@ -32,13 +57,7 @@ export class MistralHandler implements ApiHandler {
3257
this.outputChannel = MistralHandler.sharedOutputChannel
3358
}
3459

35-
// Set default model ID if not provided
36-
this.options = {
37-
...options,
38-
apiModelId: options.apiModelId || mistralDefaultModelId,
39-
}
40-
41-
this.logDebug(`Initializing MistralHandler with options: ${JSON.stringify(options, null, 2)}`)
60+
this.logDebug(`Initializing MistralHandler with options: ${JSON.stringify(this.options, null, 2)}`)
4261
const baseUrl = this.getBaseUrl()
4362
this.logDebug(`MistralHandler using baseUrl: ${baseUrl}`)
4463

@@ -131,16 +150,38 @@ export class MistralHandler implements ApiHandler {
131150
}
132151

133152
getModel(): { id: MistralModelId; info: ModelInfo } {
153+
// Check if cache exists and is for the current model
154+
if (this.cachedModel && this.cachedModel.forModelId === this.options.apiModelId) {
155+
return {
156+
id: this.cachedModel.id,
157+
info: this.cachedModel.info,
158+
}
159+
}
160+
134161
const modelId = this.options.apiModelId
135162
if (modelId && modelId in mistralModels) {
136163
const id = modelId as MistralModelId
137164
this.logDebug(`Using model: ${id}`)
138-
return { id, info: mistralModels[id] }
165+
this.cachedModel = {
166+
id,
167+
info: mistralModels[id],
168+
forModelId: modelId,
169+
}
170+
return {
171+
id: this.cachedModel.id,
172+
info: this.cachedModel.info,
173+
}
139174
}
175+
140176
this.logDebug(`Using default model: ${mistralDefaultModelId}`)
141-
return {
177+
this.cachedModel = {
142178
id: mistralDefaultModelId,
143179
info: mistralModels[mistralDefaultModelId],
180+
forModelId: undefined,
181+
}
182+
return {
183+
id: this.cachedModel.id,
184+
info: this.cachedModel.info,
144185
}
145186
}
146187

webview-ui/tsconfig.tsbuildinfo

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"root":["./src/app.tsx","./src/index.tsx","./src/setuptests.ts","./src/vite-env.d.ts","./src/__mocks__/pretty-bytes.js","./src/__mocks__/vscrui.ts","./src/__mocks__/@vscode/webview-ui-toolkit/react.ts","./src/__tests__/app.test.tsx","./src/components/chat/announcement.tsx","./src/components/chat/autoapprovemenu.tsx","./src/components/chat/browsersessionrow.tsx","./src/components/chat/chatrow.tsx","./src/components/chat/chattextarea.tsx","./src/components/chat/chatview.tsx","./src/components/chat/contextmenu.tsx","./src/components/chat/reasoningblock.tsx","./src/components/chat/taskheader.tsx","./src/components/chat/__tests__/chattextarea.test.tsx","./src/components/chat/__tests__/chatview.auto-approve.test.tsx","./src/components/chat/__tests__/chatview.test.tsx","./src/components/chat/checkpoints/checkpointmenu.tsx","./src/components/chat/checkpoints/checkpointsaved.tsx","./src/components/chat/checkpoints/schema.ts","./src/components/common/careticon.tsx","./src/components/common/codeaccordian.tsx","./src/components/common/codeblock.tsx","./src/components/common/markdownblock.tsx","./src/components/common/thumbnails.tsx","./src/components/common/vscodebuttonlink.tsx","./src/components/common/__mocks__/codeblock.tsx","./src/components/common/__mocks__/markdownblock.tsx","./src/components/history/deletetaskdialog.tsx","./src/components/history/historypreview.tsx","./src/components/history/historyview.tsx","./src/components/history/__tests__/historyview.test.tsx","./src/components/mcp/mcpenabledtoggle.tsx","./src/components/mcp/mcpresourcerow.tsx","./src/components/mcp/mcptoolrow.tsx","./src/components/mcp/mcpview.tsx","./src/components/mcp/__tests__/mcptoolrow.test.tsx","./src/components/prompts/promptsview.tsx","./src/components/prompts/__tests__/promptsview.test.tsx","./src/components/settings/apiconfigmanager.tsx","./src/components/settings/apioptions.tsx","./src/components/settings/experimentalfeature.tsx","./src/components/settings/glamamodelpicker.tsx","./src/components/settings/modeldescriptionmarkdown.tsx","./src/components/settings/modelinfoview.tsx","./src/components/settings/modelpicker.tsx","./src/components/settings/openaimodelpicker.tsx","./src/components/settings/openroutermodelpicker.tsx","./src/components/settings/requestymodelpicker.tsx","./src/components/settings/settingsview.tsx","./src/components/settings/temperaturecontrol.tsx","./src/components/settings/unboundmodelpicker.tsx","./src/components/settings/styles.ts","./src/components/settings/__tests__/apiconfigmanager.test.tsx","./src/components/settings/__tests__/apioptions.test.tsx","./src/components/settings/__tests__/modelpicker.test.tsx","./src/components/settings/__tests__/settingsview.test.tsx","./src/components/settings/__tests__/temperaturecontrol.test.tsx","./src/components/ui/alert-dialog.tsx","./src/components/ui/autosize-textarea.tsx","./src/components/ui/badge.tsx","./src/components/ui/button.tsx","./src/components/ui/collapsible.tsx","./src/components/ui/command.tsx","./src/components/ui/dialog.tsx","./src/components/ui/dropdown-menu.tsx","./src/components/ui/index.ts","./src/components/ui/input.tsx","./src/components/ui/popover.tsx","./src/components/ui/progress.tsx","./src/components/ui/separator.tsx","./src/components/ui/slider.tsx","./src/components/ui/textarea.tsx","./src/components/ui/tooltip.tsx","./src/components/ui/chat/chat.tsx","./src/components/ui/chat/chatinput.tsx","./src/components/ui/chat/chatinputprovider.ts","./src/components/ui/chat/chatmessage.tsx","./src/components/ui/chat/chatmessageprovider.ts","./src/components/ui/chat/chatmessages.tsx","./src/components/ui/chat/chatprovider.ts","./src/components/ui/chat/index.ts","./src/components/ui/chat/types.ts","./src/components/ui/chat/usechatinput.ts","./src/components/ui/chat/usechatmessage.ts","./src/components/ui/chat/usechatui.ts","./src/components/ui/hooks/index.ts","./src/components/ui/hooks/useclipboard.ts","./src/components/ui/markdown/blockquote.tsx","./src/components/ui/markdown/codeblock.tsx","./src/components/ui/markdown/markdown.tsx","./src/components/ui/markdown/index.ts","./src/components/welcome/welcomeview.tsx","./src/context/extensionstatecontext.tsx","./src/context/__tests__/extensionstatecontext.test.tsx","./src/lib/utils.ts","./src/stories/autosizetextarea.stories.tsx","./src/stories/badge.stories.tsx","./src/stories/button.stories.ts","./src/stories/chat.stories.tsx","./src/stories/collapsible.stories.tsx","./src/stories/combobox.stories.tsx","./src/stories/dropdownmenu.stories.tsx","./src/stories/progress.stories.tsx","./src/stories/slider.stories.tsx","./src/utils/clipboard.ts","./src/utils/command-validation.ts","./src/utils/context-mentions.ts","./src/utils/format.ts","./src/utils/formatprice.ts","./src/utils/getlanguagefrompath.ts","./src/utils/highlight.ts","./src/utils/mcp.ts","./src/utils/textmatetohljs.ts","./src/utils/validate.ts","./src/utils/vscode.ts","./src/utils/__tests__/command-validation.test.ts","./src/utils/__tests__/context-mentions.test.ts","../src/shared/extensionmessage.ts","../src/shared/historyitem.ts","../src/shared/webviewmessage.ts","../src/shared/api.ts","../src/shared/array.ts","../src/shared/checkexistapiconfig.ts","../src/shared/combineapirequests.ts","../src/shared/combinecommandsequences.ts","../src/shared/context-mentions.ts","../src/shared/experiments.ts","../src/shared/getapimetrics.ts","../src/shared/mcp.ts","../src/shared/modes.ts","../src/shared/support-prompt.ts","../src/shared/tool-groups.ts","../src/shared/vscodeselectorutils.ts","../src/shared/__tests__/checkexistapiconfig.test.ts","../src/shared/__tests__/experiments.test.ts","../src/shared/__tests__/modes.test.ts","../src/shared/__tests__/support-prompts.test.ts","../src/shared/__tests__/vscodeselectorutils.test.ts"],"errors":true,"version":"5.7.2"}

0 commit comments

Comments
 (0)