Skip to content

Commit a02bf11

Browse files
authored
getLmStudioModels protobus migration (RooCodeInc#3341)
1 parent 5f4b807 commit a02bf11

File tree

8 files changed

+58
-34
lines changed

8 files changed

+58
-34
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"claude-dev": patch
3+
---
4+
5+
getLmStudioModels protobus migration

proto/models.proto

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,7 @@ import "common.proto";
1010
service ModelsService {
1111
// Fetches available models from Ollama
1212
rpc getOllamaModels(StringRequest) returns (StringArray);
13+
14+
// Fetches available models from LM Studio
15+
rpc getLmStudioModels(StringRequest) returns (StringArray);
1316
}

src/core/controller/index.ts

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -335,13 +335,6 @@ export class Controller {
335335
case "resetState":
336336
await this.resetState()
337337
break
338-
case "requestLmStudioModels":
339-
const lmStudioModels = await this.getLmStudioModels(message.text)
340-
this.postMessageToWebview({
341-
type: "lmStudioModels",
342-
lmStudioModels,
343-
})
344-
break
345338
case "requestVsCodeLmModels":
346339
const vsCodeLmModels = await this.getVsCodeLmModels()
347340
this.postMessageToWebview({ type: "vsCodeLmModels", vsCodeLmModels })
@@ -906,25 +899,6 @@ export class Controller {
906899
}
907900
}
908901

909-
// LM Studio
910-
911-
async getLmStudioModels(baseUrl?: string) {
912-
try {
913-
if (!baseUrl) {
914-
baseUrl = "http://localhost:1234"
915-
}
916-
if (!URL.canParse(baseUrl)) {
917-
return []
918-
}
919-
const response = await axios.get(`${baseUrl}/v1/models`)
920-
const modelsArray = response.data?.data?.map((model: any) => model.id) || []
921-
const models = [...new Set<string>(modelsArray)]
922-
return models
923-
} catch (error) {
924-
return []
925-
}
926-
}
927-
928902
// Account
929903

930904
async fetchUserCreditsData() {
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { Controller } from ".."
2+
import { StringArray, StringRequest } from "../../../shared/proto/common"
3+
import axios from "axios"
4+
5+
/**
6+
* Fetches available models from LM Studio
7+
* @param controller The controller instance
8+
* @param request The request containing the base URL (optional)
9+
* @returns Array of model names
10+
*/
11+
export async function getLmStudioModels(controller: Controller, request: StringRequest): Promise<StringArray> {
12+
try {
13+
let baseUrl = request.value || "http://localhost:1234"
14+
15+
if (!URL.canParse(baseUrl)) {
16+
return StringArray.create({ values: [] })
17+
}
18+
19+
const response = await axios.get(`${baseUrl}/v1/models`)
20+
const modelsArray = response.data?.data?.map((model: any) => model.id) || []
21+
const models = [...new Set<string>(modelsArray)]
22+
23+
return StringArray.create({ values: models })
24+
} catch (error) {
25+
return StringArray.create({ values: [] })
26+
}
27+
}

src/core/controller/models/methods.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33

44
// Import all method implementations
55
import { registerMethod } from "./index"
6+
import { getLmStudioModels } from "./getLmStudioModels"
67
import { getOllamaModels } from "./getOllamaModels"
78

89
// Register all models service methods
910
export function registerAllMethods(): void {
1011
// Register each method with the registry
12+
registerMethod("getLmStudioModels", getLmStudioModels)
1113
registerMethod("getOllamaModels", getOllamaModels)
1214
}

src/shared/WebviewMessage.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ export interface WebviewMessage {
1818
| "selectImages"
1919
| "showTaskWithId"
2020
| "resetState"
21-
| "requestLmStudioModels"
2221
| "openInBrowser"
2322
| "openMention"
2423
| "showChatView"

src/shared/proto/models.ts

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

webview-ui/src/components/settings/ApiOptions.tsx

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -197,10 +197,17 @@ const ApiOptions = ({
197197
setOllamaModels([])
198198
}
199199
} else if (selectedProvider === "lmstudio") {
200-
vscode.postMessage({
201-
type: "requestLmStudioModels",
202-
text: apiConfiguration?.lmStudioBaseUrl,
203-
})
200+
try {
201+
const response = await ModelsServiceClient.getLmStudioModels({
202+
value: apiConfiguration?.lmStudioBaseUrl || "",
203+
})
204+
if (response && response.values) {
205+
setLmStudioModels(response.values)
206+
}
207+
} catch (error) {
208+
console.error("Failed to fetch LM Studio models:", error)
209+
setLmStudioModels([])
210+
}
204211
} else if (selectedProvider === "vscode-lm") {
205212
vscode.postMessage({ type: "requestVsCodeLmModels" })
206213
}
@@ -217,9 +224,7 @@ const ApiOptions = ({
217224

218225
const handleMessage = useCallback((event: MessageEvent) => {
219226
const message: ExtensionMessage = event.data
220-
if (message.type === "lmStudioModels" && message.lmStudioModels) {
221-
setLmStudioModels(message.lmStudioModels)
222-
} else if (message.type === "vsCodeLmModels" && message.vsCodeLmModels) {
227+
if (message.type === "vsCodeLmModels" && message.vsCodeLmModels) {
223228
setVsCodeLmModels(message.vsCodeLmModels)
224229
}
225230
}, [])

0 commit comments

Comments
 (0)