refactor: centralize default thinking resolution

This commit is contained in:
liruifengv 2026-05-25 18:21:01 +08:00
parent 5d96b97654
commit ee261d9af8
3 changed files with 22 additions and 11 deletions

View file

@ -113,7 +113,10 @@ export class ProviderManager {
}
resolveThinkingLevel(requestedThinking?: string): ThinkingEffort {
return resolveThinkingEffort(requestedThinking, this.state.config.thinking);
return resolveThinkingEffort(
requestedThinking ?? defaultThinkingToRuntime(this.state.config.defaultThinking),
this.state.config.thinking,
);
}
resolveSelectedModel(requestedModel: string | undefined): string | undefined {
@ -137,3 +140,8 @@ function normalizeString(value: string | undefined): string | undefined {
const trimmed = value.trim();
return trimmed.length > 0 ? trimmed : undefined;
}
function defaultThinkingToRuntime(defaultThinking: boolean | undefined): string | undefined {
if (defaultThinking === undefined) return undefined;
return defaultThinking ? 'on' : 'off';
}

View file

@ -143,9 +143,7 @@ export class KimiCore implements PromisableMethods<CoreAPI> {
const config = this.reloadProviderManager();
const id = options.id ?? createSessionId();
const modelName = this.providerManager.resolveSelectedModel(options.model);
const thinkingLevel = this.providerManager.resolveThinkingLevel(
options.thinking ?? defaultThinkingToRuntime(config.defaultThinking),
);
const thinkingLevel = this.providerManager.resolveThinkingLevel(options.thinking);
const permissionMode = options.permission ?? config.defaultPermissionMode;
const mcpConfig = await resolveSessionMcpConfig({
cwd: workDir,
@ -682,11 +680,6 @@ function requiredWorkDir(operation: string, value: string): string {
return normalizeWorkDir(value);
}
function defaultThinkingToRuntime(defaultThinking: boolean | undefined): string | undefined {
if (defaultThinking === undefined) return undefined;
return defaultThinking ? 'on' : 'off';
}
function createSessionId(): string {
return `session_${randomUUID()}`;
}

View file

@ -585,16 +585,26 @@ describe('ProviderManager thinking level', () => {
const manager = new ProviderManager({
config: {
providers: {},
defaultThinking: false,
thinking: { effort: 'medium', mode: 'auto' },
},
});
expect(manager.resolveThinkingLevel('on')).toBe('medium');
expect(manager.resolveThinkingLevel('off')).toBe('off');
expect(manager.resolveThinkingLevel('low')).toBe('low');
expect(manager.resolveThinkingLevel()).toBe('medium');
expect(manager.resolveThinkingLevel()).toBe('off');
const managerOnByDefault = new ProviderManager({
config: {
providers: {},
defaultThinking: true,
thinking: { effort: 'medium', mode: 'auto' },
},
});
expect(managerOnByDefault.resolveThinkingLevel()).toBe('medium');
const managerWithoutEffort = new ProviderManager({
config: { providers: {}, thinking: { mode: 'auto' } },
config: { providers: {}, defaultThinking: true, thinking: { mode: 'auto' } },
});
expect(managerWithoutEffort.resolveThinkingLevel('on')).toBe('high');
expect(managerWithoutEffort.resolveThinkingLevel()).toBe('high');