11import React , { memo , useCallback , useEffect , useMemo , useState } from "react"
2- import { useAppTranslation } from "@/i18n/TranslationContext"
3- import { Trans } from "react-i18next"
4- import { getRequestyAuthUrl , getOpenRouterAuthUrl , getGlamaAuthUrl } from "@src/oauth/urls"
52import { useDebounce , useEvent } from "react-use"
3+ import { Trans } from "react-i18next"
64import { LanguageModelChatSelector } from "vscode"
75import { Checkbox } from "vscrui"
86import { VSCodeLink , VSCodeRadio , VSCodeRadioGroup , VSCodeTextField } from "@vscode/webview-ui-toolkit/react"
97import { ExternalLinkIcon } from "@radix-ui/react-icons"
108
9+ import { ReasoningEffort as ReasoningEffortType } from "@roo/schemas"
1110import {
1211 ApiConfiguration ,
1312 ModelInfo ,
@@ -21,21 +20,22 @@ import {
2120 ApiProvider ,
2221} from "@roo/shared/api"
2322import { ExtensionMessage } from "@roo/shared/ExtensionMessage"
24- import { AWS_REGIONS } from "@roo/shared/aws_regions"
2523
2624import { vscode } from "@src/utils/vscode"
2725import { validateApiConfiguration , validateModelId , validateBedrockArn } from "@src/utils/validate"
28- import { useRouterModels } from "@/components/ui/hooks/useRouterModels"
29- import { useSelectedModel } from "@/components/ui/hooks/useSelectedModel"
26+ import { useAppTranslation } from "@src/i18n/TranslationContext"
27+ import { useRouterModels } from "@src/components/ui/hooks/useRouterModels"
28+ import { useSelectedModel } from "@src/components/ui/hooks/useSelectedModel"
3029import {
3130 useOpenRouterModelProviders ,
3231 OPENROUTER_DEFAULT_PROVIDER_NAME ,
3332} from "@src/components/ui/hooks/useOpenRouterModelProviders"
3433import { Select , SelectContent , SelectItem , SelectTrigger , SelectValue , Button } from "@src/components/ui"
34+ import { getRequestyAuthUrl , getOpenRouterAuthUrl , getGlamaAuthUrl } from "@src/oauth/urls"
3535
3636import { VSCodeButtonLink } from "../common/VSCodeButtonLink"
3737
38- import { MODELS_BY_PROVIDER , PROVIDERS , VERTEX_REGIONS , REASONING_MODELS } from "./constants"
38+ import { MODELS_BY_PROVIDER , PROVIDERS , VERTEX_REGIONS , REASONING_MODELS , AWS_REGIONS } from "./constants"
3939import { ModelInfoView } from "./ModelInfoView"
4040import { ModelPicker } from "./ModelPicker"
4141import { ApiErrorMessage } from "./ApiErrorMessage"
@@ -851,6 +851,41 @@ const ApiOptions = ({
851851 ) }
852852 </ div >
853853
854+ < div className = "flex flex-col gap-1" >
855+ < Checkbox
856+ checked = { apiConfiguration . enableReasoningEffort ?? false }
857+ onChange = { ( checked : boolean ) => {
858+ setApiConfigurationField ( "enableReasoningEffort" , checked )
859+
860+ if ( ! checked ) {
861+ const { reasoningEffort : _ , ...openAiCustomModelInfo } =
862+ apiConfiguration . openAiCustomModelInfo || openAiModelInfoSaneDefaults
863+
864+ setApiConfigurationField ( "openAiCustomModelInfo" , openAiCustomModelInfo )
865+ }
866+ } } >
867+ { t ( "settings:providers.setReasoningLevel" ) }
868+ </ Checkbox >
869+ { ! ! apiConfiguration . enableReasoningEffort && (
870+ < ReasoningEffort
871+ apiConfiguration = { {
872+ ...apiConfiguration ,
873+ reasoningEffort : apiConfiguration . openAiCustomModelInfo ?. reasoningEffort ,
874+ } }
875+ setApiConfigurationField = { ( field , value ) => {
876+ if ( field === "reasoningEffort" ) {
877+ const openAiCustomModelInfo =
878+ apiConfiguration . openAiCustomModelInfo || openAiModelInfoSaneDefaults
879+
880+ setApiConfigurationField ( "openAiCustomModelInfo" , {
881+ ...openAiCustomModelInfo ,
882+ reasoningEffort : value as ReasoningEffortType ,
883+ } )
884+ }
885+ } }
886+ />
887+ ) }
888+ </ div >
854889 < div className = "flex flex-col gap-3" >
855890 < div className = "text-sm text-vscode-descriptionForeground whitespace-pre-line" >
856891 { t ( "settings:providers.customModel.capabilities" ) }
0 commit comments