Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions src/core/webview/webviewMessageHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -946,6 +946,23 @@ export const webviewMessageHandler = async (
}
break
}
case "requestRequestyModels": {
// Specific handler for Requesty models only.
const { apiConfiguration: requestyApiConfiguration } = await provider.getState()
const requestyOptions = {
provider: "requesty" as const,
baseUrl: requestyApiConfiguration.requestyBaseUrl,
apiKey: requestyApiConfiguration.requestyApiKey,
}

// Flush cache and refresh to ensure fresh models.
await flushModels(requestyOptions, true)

const requestyModels = await getModels(requestyOptions)

provider.postMessageToWebview({ type: "requestyModels", requestyModels: requestyModels })
break
}
case "requestLmStudioModels": {
// Specific handler for LM Studio models only.
const { apiConfiguration: lmStudioApiConfig } = await provider.getState()
Expand Down
2 changes: 2 additions & 0 deletions src/shared/ExtensionMessage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ export interface ExtensionMessage {
| "lmStudioModels"
| "vsCodeLmModels"
| "huggingFaceModels"
| "requestyModels"
| "vsCodeLmApiAvailable"
| "updatePrompt"
| "systemPrompt"
Expand Down Expand Up @@ -184,6 +185,7 @@ export interface ExtensionMessage {
}
}>
}>
requestyModels?: ModelRecord
mcpServers?: McpServer[]
commits?: GitCommit[]
listApiConfig?: ProviderSettingsEntry[]
Expand Down
1 change: 1 addition & 0 deletions src/shared/WebviewMessage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ export interface WebviewMessage {
| "requestRooCreditBalance"
| "requestVsCodeLmModels"
| "requestHuggingFaceModels"
| "requestRequestyModels"
| "openImage"
| "saveImage"
| "openFile"
Expand Down
30 changes: 26 additions & 4 deletions webview-ui/src/components/settings/providers/Requesty.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { VSCodeCheckbox, VSCodeTextField } from "@vscode/webview-ui-toolkit/reac

import { type ProviderSettings, type OrganizationAllowList, requestyDefaultModelId } from "@roo-code/types"

import type { RouterModels } from "@roo/api"
import type { ModelRecord, RouterModels } from "@roo/api"

import { vscode } from "@src/utils/vscode"
import { useAppTranslation } from "@src/i18n/TranslationContext"
Expand All @@ -14,6 +14,8 @@ import { ModelPicker } from "../ModelPicker"
import { RequestyBalanceDisplay } from "./RequestyBalanceDisplay"
import { getCallbackUrl } from "@/oauth/urls"
import { toRequestyServiceUrl } from "@roo/utils/requesty"
import { useEvent } from "react-use"
import { ExtensionMessage } from "@roo/ExtensionMessage"

type RequestyProps = {
apiConfiguration: ProviderSettings
Expand All @@ -29,7 +31,6 @@ type RequestyProps = {
export const Requesty = ({
apiConfiguration,
setApiConfigurationField,
routerModels,
refetchRouterModels,
organizationAllowList,
modelValidationError,
Expand All @@ -38,6 +39,8 @@ export const Requesty = ({
}: RequestyProps) => {
const { t } = useAppTranslation()

const [requestyModels, setRequestyModels] = useState<ModelRecord>({})

const [requestyEndpointSelected, setRequestyEndpointSelected] = useState(!!apiConfiguration.requestyBaseUrl)

// This ensures that the "Use custom URL" checkbox is hidden when the user deletes the URL.
Expand Down Expand Up @@ -65,6 +68,25 @@ export const Requesty = ({
return authUrl.toString()
}

const onMessage = useCallback((event: MessageEvent) => {
const message: ExtensionMessage = event.data

if (message.type !== "requestyModels") {
return
}

const newModels = message.requestyModels ?? {}
setRequestyModels(newModels)
}, [])

useEvent("message", onMessage)

// Refresh models on mount
useEffect(() => {
// Request fresh models - the handler now flushes cache automatically
vscode.postMessage({ type: "requestRequestyModels" })
}, [])

return (
<>
<VSCodeTextField
Expand Down Expand Up @@ -127,7 +149,7 @@ export const Requesty = ({
<Button
variant="outline"
onClick={() => {
vscode.postMessage({ type: "flushRouterModels", text: "requesty" })
vscode.postMessage({ type: "requestRequestyModels" })
refetchRouterModels()
}}>
<div className="flex items-center gap-2">
Expand All @@ -139,7 +161,7 @@ export const Requesty = ({
apiConfiguration={apiConfiguration}
setApiConfigurationField={setApiConfigurationField}
defaultModelId={requestyDefaultModelId}
models={routerModels?.requesty ?? {}}
models={requestyModels}
modelIdKey="requestyModelId"
serviceName="Requesty"
serviceUrl="https://requesty.ai"
Expand Down
Loading