@@ -517,103 +517,112 @@ export const ChatSettingsDropdown: React.FC = () => {
517517 disabled = { thinkingDisabled }
518518 />
519519 </ Flex >
520- { isBoostReasoningEnabled && selectedModelDetail ?. supportsReasoning && (
521- < >
522- { /* OpenAI/Mistral: low/medium/high */ }
523- { ( selectedModelDetail . supportsReasoning === "openai" ||
524- selectedModelDetail . supportsReasoning === "mistral" ) && (
525- < Flex align = "center" justify = "between" gap = "2" mt = "2" >
526- < Text size = "1" color = "gray" >
527- Effort
528- </ Text >
529- < Flex gap = "1" >
530- { ( [ "low" , "medium" , "high" ] as const ) . map ( ( level ) => (
531- < button
532- key = { level }
533- type = "button"
534- className = { `${ styles . effortButton } ${
535- ( threadReasoningEffort ?? "medium" ) === level
536- ? styles . effortButtonActive
537- : ""
538- } `}
539- onClick = { ( ) =>
540- dispatch ( setReasoningEffort ( { chatId, value : level } ) )
541- }
542- disabled = { isInteractionDisabled }
543- >
544- < Text size = "1" > { level } </ Text >
545- </ button >
546- ) ) }
547- </ Flex >
548- </ Flex >
549- ) }
550- { /* xAI/Gemini 3: low/high only */ }
551- { ( selectedModelDetail . supportsReasoning === "xai" ||
552- selectedModelDetail . supportsReasoning === "gemini" ) && (
553- < Flex align = "center" justify = "between" gap = "2" mt = "2" >
554- < Text size = "1" color = "gray" >
555- Level
556- </ Text >
557- < Flex gap = "1" >
558- { ( [ "low" , "high" ] as const ) . map ( ( level ) => (
559- < button
560- key = { level }
561- type = "button"
562- className = { `${ styles . effortButton } ${
563- ( threadReasoningEffort ?? "high" ) === level
564- ? styles . effortButtonActive
565- : ""
566- } `}
567- onClick = { ( ) =>
568- dispatch ( setReasoningEffort ( { chatId, value : level } ) )
569- }
570- disabled = { isInteractionDisabled }
571- >
572- < Text size = "1" > { level } </ Text >
573- </ button >
574- ) ) }
575- </ Flex >
576- </ Flex >
577- ) }
578- { /* Anthropic/Qwen/Zhipu: thinking budget slider */ }
579- { ( selectedModelDetail . supportsReasoning === "anthropic" ||
580- selectedModelDetail . supportsReasoning === "qwen" ||
581- selectedModelDetail . supportsReasoning === "zhipu" ) && (
582- < Flex direction = "column" gap = "1" mt = "2" >
583- < Flex align = "center" justify = "between" >
520+ { isBoostReasoningEnabled &&
521+ selectedModelDetail ?. supportsReasoning && (
522+ < >
523+ { /* OpenAI/Mistral: low/medium/high */ }
524+ { ( selectedModelDetail . supportsReasoning === "openai" ||
525+ selectedModelDetail . supportsReasoning === "mistral" ) && (
526+ < Flex align = "center" justify = "between" gap = "2" mt = "2" >
584527 < Text size = "1" color = "gray" >
585- Thinking tokens
586- </ Text >
587- < Text size = "1" weight = "medium" >
588- { displayThinkingBudget ?? 16384 }
528+ Effort
589529 </ Text >
530+ < Flex gap = "1" >
531+ { ( [ "low" , "medium" , "high" ] as const ) . map ( ( level ) => (
532+ < button
533+ key = { level }
534+ type = "button"
535+ className = { `${ styles . effortButton } ${
536+ ( threadReasoningEffort ?? "medium" ) === level
537+ ? styles . effortButtonActive
538+ : ""
539+ } `}
540+ onClick = { ( ) =>
541+ dispatch (
542+ setReasoningEffort ( { chatId, value : level } ) ,
543+ )
544+ }
545+ disabled = { isInteractionDisabled }
546+ >
547+ < Text size = "1" > { level } </ Text >
548+ </ button >
549+ ) ) }
550+ </ Flex >
590551 </ Flex >
591- < Flex align = "center" gap = "2" >
592- < Text size = "1" color = "gray" >
593- 1K
594- </ Text >
595- < Slider
596- size = "1"
597- min = { 1024 }
598- max = { 32768 }
599- step = { 1024 }
600- value = { [ displayThinkingBudget ?? 16384 ] }
601- onValueChange = { ( values ) => setLocalThinkingBudget ( values [ 0 ] ) }
602- onValueCommit = { ( values ) => {
603- dispatch ( setThinkingBudget ( { chatId, value : values [ 0 ] } ) ) ;
604- setLocalThinkingBudget ( null ) ;
605- } }
606- disabled = { isInteractionDisabled }
607- />
552+ ) }
553+ { /* xAI/Gemini 3: low/high only */ }
554+ { ( selectedModelDetail . supportsReasoning === "xai" ||
555+ selectedModelDetail . supportsReasoning === "gemini" ) && (
556+ < Flex align = "center" justify = "between" gap = "2" mt = "2" >
608557 < Text size = "1" color = "gray" >
609- 32K
558+ Level
610559 </ Text >
560+ < Flex gap = "1" >
561+ { ( [ "low" , "high" ] as const ) . map ( ( level ) => (
562+ < button
563+ key = { level }
564+ type = "button"
565+ className = { `${ styles . effortButton } ${
566+ ( threadReasoningEffort ?? "high" ) === level
567+ ? styles . effortButtonActive
568+ : ""
569+ } `}
570+ onClick = { ( ) =>
571+ dispatch (
572+ setReasoningEffort ( { chatId, value : level } ) ,
573+ )
574+ }
575+ disabled = { isInteractionDisabled }
576+ >
577+ < Text size = "1" > { level } </ Text >
578+ </ button >
579+ ) ) }
580+ </ Flex >
611581 </ Flex >
612- </ Flex >
613- ) }
614- { /* DeepSeek/Kimi: no additional config needed */ }
615- </ >
616- ) }
582+ ) }
583+ { /* Anthropic/Qwen/Zhipu: thinking budget slider */ }
584+ { ( selectedModelDetail . supportsReasoning === "anthropic" ||
585+ selectedModelDetail . supportsReasoning === "qwen" ||
586+ selectedModelDetail . supportsReasoning === "zhipu" ) && (
587+ < Flex direction = "column" gap = "1" mt = "2" >
588+ < Flex align = "center" justify = "between" >
589+ < Text size = "1" color = "gray" >
590+ Thinking tokens
591+ </ Text >
592+ < Text size = "1" weight = "medium" >
593+ { displayThinkingBudget ?? 16384 }
594+ </ Text >
595+ </ Flex >
596+ < Flex align = "center" gap = "2" >
597+ < Text size = "1" color = "gray" >
598+ 1K
599+ </ Text >
600+ < Slider
601+ size = "1"
602+ min = { 1024 }
603+ max = { 32768 }
604+ step = { 1024 }
605+ value = { [ displayThinkingBudget ?? 16384 ] }
606+ onValueChange = { ( values ) =>
607+ setLocalThinkingBudget ( values [ 0 ] )
608+ }
609+ onValueCommit = { ( values ) => {
610+ dispatch (
611+ setThinkingBudget ( { chatId, value : values [ 0 ] } ) ,
612+ ) ;
613+ setLocalThinkingBudget ( null ) ;
614+ } }
615+ disabled = { isInteractionDisabled }
616+ />
617+ < Text size = "1" color = "gray" >
618+ 32K
619+ </ Text >
620+ </ Flex >
621+ </ Flex >
622+ ) }
623+ { /* DeepSeek/Kimi: no additional config needed */ }
624+ </ >
625+ ) }
617626 </ div >
618627 ) }
619628
@@ -654,15 +663,15 @@ export const ChatSettingsDropdown: React.FC = () => {
654663 "0.7" ) + " (default)" }
655664 </ Text >
656665 { threadTemperature != null && (
657- < button
658- type = "button"
659- className = { styles . resetButton }
660- onClick = { handleTemperatureReset }
661- disabled = { isInteractionDisabled }
662- >
663- ✕
664- </ button >
665- ) }
666+ < button
667+ type = "button"
668+ className = { styles . resetButton }
669+ onClick = { handleTemperatureReset }
670+ disabled = { isInteractionDisabled }
671+ >
672+ ✕
673+ </ button >
674+ ) }
666675 </ Flex >
667676 </ Flex >
668677 < Slider
@@ -728,11 +737,12 @@ export const ChatSettingsDropdown: React.FC = () => {
728737 disabled = { isInteractionDisabled }
729738 />
730739 < Text size = "1" color = "gray" >
731- { formatTokens ( selectedModelDetail ?. maxOutputTokens ?? 16384 ) }
740+ { formatTokens (
741+ selectedModelDetail ?. maxOutputTokens ?? 16384 ,
742+ ) }
732743 </ Text >
733744 </ Flex >
734745 </ div >
735-
736746 </ div >
737747 </ Collapsible . Content >
738748 </ Collapsible . Root >
0 commit comments