feat(xAI): Add support for Grok-3-mini and update reasoning effort logic (#4657)
* feat(models): add grok-3-mini support and update reasoning effort logic in SettingsTab and OpenAIProvider * feat(settings): update reasoning effort logic for Grok models and enhance localization in multiple languages * fix(models): correct spelling of reasoning in model support functions * fix(settings): correct spelling of reasoning_effort in OpenAIProvider
This commit is contained in:
parent
2e0251aed7
commit
57fa0aad38
@ -186,7 +186,7 @@ export const TEXT_TO_IMAGE_REGEX = /flux|diffusion|stabilityai|sd-|dall|cogview|
|
|||||||
|
|
||||||
// Reasoning models
|
// Reasoning models
|
||||||
export const REASONING_REGEX =
|
export const REASONING_REGEX =
|
||||||
/^(o\d+(?:-[\w-]+)?|.*\b(?:reasoner|thinking)\b.*|.*-[rR]\d+.*|.*\bqwq(?:-[\w-]+)?\b.*|.*\bhunyuan-t1(?:-[\w-]+)?\b.*|.*\bglm-zero-preview\b.*)$/i
|
/^(o\d+(?:-[\w-]+)?|.*\b(?:reasoner|thinking)\b.*|.*-[rR]\d+.*|.*\bqwq(?:-[\w-]+)?\b.*|.*\bhunyuan-t1(?:-[\w-]+)?\b.*|.*\bglm-zero-preview\b.*|.*\bgrok-3-mini(?:-[\w-]+)?\b.*)$/i
|
||||||
|
|
||||||
// Embedding models
|
// Embedding models
|
||||||
export const EMBEDDING_REGEX =
|
export const EMBEDDING_REGEX =
|
||||||
@ -2202,12 +2202,29 @@ export function isOpenAIWebSearch(model: Model): boolean {
|
|||||||
return model.id.includes('gpt-4o-search-preview') || model.id.includes('gpt-4o-mini-search-preview')
|
return model.id.includes('gpt-4o-search-preview') || model.id.includes('gpt-4o-mini-search-preview')
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isSupportedResoningEffortModel(model?: Model): boolean {
|
export function isSupportedReasoningEffortModel(model?: Model): boolean {
|
||||||
if (!model) {
|
if (!model) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
if (model.id.includes('claude-3-7-sonnet') || model.id.includes('claude-3.7-sonnet') || isOpenAIoSeries(model)) {
|
if (
|
||||||
|
model.id.includes('claude-3-7-sonnet') ||
|
||||||
|
model.id.includes('claude-3.7-sonnet') ||
|
||||||
|
isOpenAIoSeries(model) ||
|
||||||
|
isGrokReasoningModel(model)
|
||||||
|
) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
export function isGrokReasoningModel(model?: Model): boolean {
|
||||||
|
if (!model) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if (model.id.includes('grok-3-mini')) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -59,7 +59,7 @@
|
|||||||
"settings.reasoning_effort.low": "low",
|
"settings.reasoning_effort.low": "low",
|
||||||
"settings.reasoning_effort.medium": "medium",
|
"settings.reasoning_effort.medium": "medium",
|
||||||
"settings.reasoning_effort.off": "off",
|
"settings.reasoning_effort.off": "off",
|
||||||
"settings.reasoning_effort.tip": "Only supports OpenAI o-series and Anthropic reasoning models",
|
"settings.reasoning_effort.tip": "Only supported by OpenAI o-series, Anthropic, and Grok reasoning models",
|
||||||
"settings.more": "Assistant Settings"
|
"settings.more": "Assistant Settings"
|
||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
|
|||||||
@ -59,7 +59,7 @@
|
|||||||
"settings.reasoning_effort.low": "短い",
|
"settings.reasoning_effort.low": "短い",
|
||||||
"settings.reasoning_effort.medium": "中程度",
|
"settings.reasoning_effort.medium": "中程度",
|
||||||
"settings.reasoning_effort.off": "オフ",
|
"settings.reasoning_effort.off": "オフ",
|
||||||
"settings.reasoning_effort.tip": "OpenAIのoシリーズとAnthropicの推論モデルのみサポートしています",
|
"settings.reasoning_effort.tip": "OpenAI o-series、Anthropic、および Grok の推論モデルのみサポート",
|
||||||
"settings.more": "アシスタント設定"
|
"settings.more": "アシスタント設定"
|
||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
|
|||||||
@ -59,7 +59,7 @@
|
|||||||
"settings.reasoning_effort.low": "Короткая",
|
"settings.reasoning_effort.low": "Короткая",
|
||||||
"settings.reasoning_effort.medium": "Средняя",
|
"settings.reasoning_effort.medium": "Средняя",
|
||||||
"settings.reasoning_effort.off": "Выключено",
|
"settings.reasoning_effort.off": "Выключено",
|
||||||
"settings.reasoning_effort.tip": "Поддерживается только моделями с рассуждением OpenAI o-series и Anthropic",
|
"settings.reasoning_effort.tip": "Поддерживается только моделями рассуждений OpenAI o-series, Anthropic и Grok",
|
||||||
"settings.more": "Настройки ассистента"
|
"settings.more": "Настройки ассистента"
|
||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
|
|||||||
@ -59,7 +59,7 @@
|
|||||||
"settings.reasoning_effort.low": "短",
|
"settings.reasoning_effort.low": "短",
|
||||||
"settings.reasoning_effort.medium": "中",
|
"settings.reasoning_effort.medium": "中",
|
||||||
"settings.reasoning_effort.off": "关",
|
"settings.reasoning_effort.off": "关",
|
||||||
"settings.reasoning_effort.tip": "仅支持 OpenAI o-series 和 Anthropic 推理模型",
|
"settings.reasoning_effort.tip": "仅支持 OpenAI o-series、Anthropic、Grok 推理模型",
|
||||||
"settings.more": "助手设置"
|
"settings.more": "助手设置"
|
||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
|
|||||||
@ -59,7 +59,7 @@
|
|||||||
"settings.reasoning_effort.low": "短",
|
"settings.reasoning_effort.low": "短",
|
||||||
"settings.reasoning_effort.medium": "中",
|
"settings.reasoning_effort.medium": "中",
|
||||||
"settings.reasoning_effort.off": "關",
|
"settings.reasoning_effort.off": "關",
|
||||||
"settings.reasoning_effort.tip": "僅支援 OpenAI o-series 和 Anthropic 推理模型",
|
"settings.reasoning_effort.tip": "僅支援 OpenAI o-series、Anthropic 和 Grok 推理模型",
|
||||||
"settings.more": "助手設定"
|
"settings.more": "助手設定"
|
||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
|
|||||||
@ -8,7 +8,7 @@ import {
|
|||||||
isMac,
|
isMac,
|
||||||
isWindows
|
isWindows
|
||||||
} from '@renderer/config/constant'
|
} from '@renderer/config/constant'
|
||||||
import { isSupportedResoningEffortModel } from '@renderer/config/models'
|
import { isGrokReasoningModel, isSupportedReasoningEffortModel } from '@renderer/config/models'
|
||||||
import { codeThemes } from '@renderer/context/SyntaxHighlighterProvider'
|
import { codeThemes } from '@renderer/context/SyntaxHighlighterProvider'
|
||||||
import { useAssistant } from '@renderer/hooks/useAssistant'
|
import { useAssistant } from '@renderer/hooks/useAssistant'
|
||||||
import { useSettings } from '@renderer/hooks/useSettings'
|
import { useSettings } from '@renderer/hooks/useSettings'
|
||||||
@ -146,7 +146,21 @@ const SettingsTab: FC<Props> = (props) => {
|
|||||||
setMaxTokens(assistant?.settings?.maxTokens ?? DEFAULT_MAX_TOKENS)
|
setMaxTokens(assistant?.settings?.maxTokens ?? DEFAULT_MAX_TOKENS)
|
||||||
setStreamOutput(assistant?.settings?.streamOutput ?? true)
|
setStreamOutput(assistant?.settings?.streamOutput ?? true)
|
||||||
setReasoningEffort(assistant?.settings?.reasoning_effort)
|
setReasoningEffort(assistant?.settings?.reasoning_effort)
|
||||||
}, [assistant])
|
|
||||||
|
// 当是Grok模型时,处理reasoning_effort的设置
|
||||||
|
// For Grok models, only 'low' and 'high' reasoning efforts are supported.
|
||||||
|
// This ensures compatibility with the model's capabilities and avoids unsupported configurations.
|
||||||
|
if (isGrokReasoningModel(assistant?.model || getDefaultModel())) {
|
||||||
|
const currentEffort = assistant?.settings?.reasoning_effort
|
||||||
|
if (!currentEffort || currentEffort === 'low') {
|
||||||
|
setReasoningEffort('low') // Default to 'low' if no effort is set or if it's already 'low'.
|
||||||
|
onReasoningEffortChange('low')
|
||||||
|
} else if (currentEffort === 'medium' || currentEffort === 'high') {
|
||||||
|
setReasoningEffort('high') // Force 'high' for 'medium' or 'high' to simplify the configuration.
|
||||||
|
onReasoningEffortChange('high')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, [assistant, onReasoningEffortChange])
|
||||||
|
|
||||||
const formatSliderTooltip = (value?: number) => {
|
const formatSliderTooltip = (value?: number) => {
|
||||||
if (value === undefined) return ''
|
if (value === undefined) return ''
|
||||||
@ -263,7 +277,7 @@ const SettingsTab: FC<Props> = (props) => {
|
|||||||
</Col>
|
</Col>
|
||||||
</Row>
|
</Row>
|
||||||
)}
|
)}
|
||||||
{isSupportedResoningEffortModel(assistant?.model || getDefaultModel()) && (
|
{isSupportedReasoningEffortModel(assistant?.model || getDefaultModel()) && (
|
||||||
<>
|
<>
|
||||||
<SettingDivider />
|
<SettingDivider />
|
||||||
<Row align="middle">
|
<Row align="middle">
|
||||||
@ -282,12 +296,19 @@ const SettingsTab: FC<Props> = (props) => {
|
|||||||
setReasoningEffort(typedValue)
|
setReasoningEffort(typedValue)
|
||||||
onReasoningEffortChange(typedValue)
|
onReasoningEffortChange(typedValue)
|
||||||
}}
|
}}
|
||||||
options={[
|
options={
|
||||||
|
isGrokReasoningModel(assistant?.model || getDefaultModel())
|
||||||
|
? [
|
||||||
|
{ value: 'low', label: t('assistants.settings.reasoning_effort.low') },
|
||||||
|
{ value: 'high', label: t('assistants.settings.reasoning_effort.high') }
|
||||||
|
]
|
||||||
|
: [
|
||||||
{ value: 'low', label: t('assistants.settings.reasoning_effort.low') },
|
{ value: 'low', label: t('assistants.settings.reasoning_effort.low') },
|
||||||
{ value: 'medium', label: t('assistants.settings.reasoning_effort.medium') },
|
{ value: 'medium', label: t('assistants.settings.reasoning_effort.medium') },
|
||||||
{ value: 'high', label: t('assistants.settings.reasoning_effort.high') },
|
{ value: 'high', label: t('assistants.settings.reasoning_effort.high') },
|
||||||
{ value: 'off', label: t('assistants.settings.reasoning_effort.off') }
|
{ value: 'off', label: t('assistants.settings.reasoning_effort.off') }
|
||||||
]}
|
]
|
||||||
|
}
|
||||||
name="group"
|
name="group"
|
||||||
block
|
block
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
import { DEFAULT_MAX_TOKENS } from '@renderer/config/constant'
|
import { DEFAULT_MAX_TOKENS } from '@renderer/config/constant'
|
||||||
import {
|
import {
|
||||||
getOpenAIWebSearchParams,
|
getOpenAIWebSearchParams,
|
||||||
|
isGrokReasoningModel,
|
||||||
isHunyuanSearchModel,
|
isHunyuanSearchModel,
|
||||||
isOpenAIoSeries,
|
isOpenAIoSeries,
|
||||||
isOpenAIWebSearch,
|
isOpenAIWebSearch,
|
||||||
@ -243,6 +244,12 @@ export default class OpenAIProvider extends BaseProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isGrokReasoningModel(model)) {
|
||||||
|
return {
|
||||||
|
reasoning_effort: assistant?.settings?.reasoning_effort
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (isOpenAIoSeries(model)) {
|
if (isOpenAIoSeries(model)) {
|
||||||
return {
|
return {
|
||||||
reasoning_effort: assistant?.settings?.reasoning_effort
|
reasoning_effort: assistant?.settings?.reasoning_effort
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user