mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-07-19 06:01:05 +08:00
Feat/agent thinking switch (#15446)
### What problem does this PR solve? This PR adds an Agent LLM setting to control thinking mode for official providers that expose a thinking switch. Related to #12842. Closes #15445. Some providers expose thinking controls through provider-specific request fields, but Agent LLM settings did not have a unified option for users to enable or disable thinking mode. This PR adds a `Thinking` selector with: - System default - Enabled - Disabled <img width="452" height="278" alt="8566b0b4-0546-4c8a-913d-f9bbd38319f6" src="https://github.com/user-attachments/assets/25b497f7-1ba0-4bfe-940d-6fe79287d6ab" /> <img width="471" height="971" alt="8a0a6bee-f45f-48d5-bd83-17af260de3db" src="https://github.com/user-attachments/assets/41ad43c1-5087-48f1-bf37-f2ca14c2be2f" /> Initial support is limited to the verified official providers: - Qwen / DashScope: `enable_thinking` - Kimi / Moonshot: `thinking.type` - GLM / ZHIPU-AI: `thinking.type` For LiteLLM-based providers, provider-specific fields are forwarded through `extra_body` before `drop_params` filtering so the request parameters are preserved. ### Type of change - [x] New Feature (non-breaking change which adds functionality) --------- Co-authored-by: jiashi <jiashi19@outlook.com> Co-authored-by: Zhichang Yu <yuzhichang@gmail.com>
This commit is contained in:
@@ -38,6 +38,7 @@ interface LlmSettingFieldItemsProps {
|
||||
| 'presence_penalty'
|
||||
| 'frequency_penalty'
|
||||
| 'max_tokens'
|
||||
| 'thinking'
|
||||
>;
|
||||
showCollapse?: boolean;
|
||||
}
|
||||
@@ -61,6 +62,7 @@ export const LlmSettingFieldSchema = {
|
||||
frequency_penalty: z.coerce.number().optional(),
|
||||
max_tokens: z.number().optional(),
|
||||
parameter: z.string().optional(),
|
||||
thinking: z.enum(['default', 'enabled', 'disabled']).optional(),
|
||||
};
|
||||
|
||||
export const LlmSettingSchema = {
|
||||
@@ -80,6 +82,7 @@ export function LlmSettingFieldItems({
|
||||
'presence_penalty',
|
||||
'frequency_penalty',
|
||||
'max_tokens',
|
||||
'thinking',
|
||||
],
|
||||
llmId,
|
||||
showCollapse = false,
|
||||
@@ -249,6 +252,41 @@ export function LlmSettingFieldItems({
|
||||
}}
|
||||
></SliderInputSwitchFormField>
|
||||
)}
|
||||
{showFields.some((item) => item === 'thinking') && (
|
||||
<FormField
|
||||
control={form.control}
|
||||
name={getFieldWithPrefix('thinking')}
|
||||
render={({ field }) => (
|
||||
<FormItem className="flex justify-between items-center">
|
||||
<FormLabel className="flex-1" tooltip={t('thinkingTip')}>
|
||||
{t('thinking')}
|
||||
</FormLabel>
|
||||
<FormControl>
|
||||
<Select
|
||||
value={field.value ?? 'default'}
|
||||
onValueChange={field.onChange}
|
||||
>
|
||||
<SelectTrigger className="flex-1 !m-0">
|
||||
<SelectValue />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
<SelectItem value="default">
|
||||
{t('thinkingDefault')}
|
||||
</SelectItem>
|
||||
<SelectItem value="enabled">
|
||||
{t('thinkingEnabled')}
|
||||
</SelectItem>
|
||||
<SelectItem value="disabled">
|
||||
{t('thinkingDisabled')}
|
||||
</SelectItem>
|
||||
</SelectContent>
|
||||
</Select>
|
||||
</FormControl>
|
||||
<FormMessage />
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
</section>
|
||||
</CollapseComponent>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user