diff --git a/web/features/agent-v2/agent-detail/configure/__tests__/model-compatibility.spec.ts b/web/features/agent-v2/agent-detail/configure/__tests__/model-compatibility.spec.ts index 7254ae17873..fdac19b0cce 100644 --- a/web/features/agent-v2/agent-detail/configure/__tests__/model-compatibility.spec.ts +++ b/web/features/agent-v2/agent-detail/configure/__tests__/model-compatibility.spec.ts @@ -126,8 +126,9 @@ describe('isAgentCompatibleModel', () => { ) expect(isAgentCompatibleModel(provider, createModelItem('qwen3-coder-plus'))).toBe(false) expect(isAgentCompatibleModel(provider, createModelItem('qwen3.5-max'))).toBe(false) - expect(isAgentCompatibleModel(provider, createModelItem('qwen3.7-flash'))).toBe(false) + expect(isAgentCompatibleModel(provider, createModelItem('qwen3.5-flash'))).toBe(false) expect(isAgentCompatibleModel(provider, createModelItem('qwen-flash'))).toBe(false) + expect(isAgentCompatibleModel(provider, createModelItem('qwen-mt-flash'))).toBe(false) expect(isAgentCompatibleModel(provider, createModelItem('farui-plus'))).toBe(false) expect(isAgentCompatibleModel(provider, createModelItem('chatglm-3-turbo'))).toBe(false) expect(isAgentCompatibleModel(provider, createModelItem('glm-3-turbo'))).toBe(false) @@ -172,6 +173,15 @@ describe('isAgentCompatibleModel', () => { expect(isAgentCompatibleModel(provider, createModelItem('grok-4'))).toBe(true) expect(isAgentCompatibleModel(provider, createModelItem('qwen3.7-max'))).toBe(true) }) + + it('should allow Qwen flash models from 3.6 onward', () => { + const provider = createModel('any-provider') + + expect(isAgentCompatibleModel(provider, createModelItem('qwen3.6-flash'))).toBe(true) + expect(isAgentCompatibleModel(provider, createModelItem('qwen3.7-flash'))).toBe(true) + expect(isAgentCompatibleModel(provider, createModelItem('qwen3.7-flash-2026-07-15'))).toBe(true) + expect(isAgentCompatibleModel(provider, createModelItem('qwen3.8-flash'))).toBe(true) + }) }) describe('isAgentSuggestedModel', () => { @@ -202,6 +212,31 @@ describe('isAgentSuggestedModel', () => { expect(isAgentSuggestedModel(provider, createModelItem('other-model'))).toBe(false) }) + it('should suggest the latest flagship models by their official plugin labels', () => { + const provider = createModel('any-provider') + + expect(isAgentSuggestedModel(provider, createModelItem('claude-opus-4-8'))).toBe(true) + expect(isAgentSuggestedModel(provider, createModelItem('claude-opus-4-7'))).toBe(true) + expect(isAgentSuggestedModel(provider, createModelItem('claude-sonnet-4-6'))).toBe(true) + expect(isAgentSuggestedModel(provider, createModelItem('claude-opus-5-5'))).toBe(true) + expect(isAgentSuggestedModel(provider, createModelItem('claude-sonnet-5-5'))).toBe(true) + expect(isAgentSuggestedModel(provider, createModelItem('claude-fable-5-1'))).toBe(true) + expect(isAgentSuggestedModel(provider, createModelItem('gpt-6-astra'))).toBe(true) + expect(isAgentSuggestedModel(provider, createModelItem('gpt-6-sol'))).toBe(true) + expect(isAgentSuggestedModel(provider, createModelItem('gpt-6-luna'))).toBe(true) + expect( + isAgentSuggestedModel( + provider, + createModelItem('GPT-6 Luna (Question Classifier ยท Decisions)'), + ), + ).toBe(false) + expect(isAgentSuggestedModel(provider, createModelItem('grok-4.6'))).toBe(true) + expect(isAgentSuggestedModel(provider, createModelItem('qwen3.8-max'))).toBe(true) + expect(isAgentSuggestedModel(provider, createModelItem('kimi-k3.1-pro'))).toBe(true) + expect(isAgentSuggestedModel(provider, createModelItem('kimi-k3.1-pro-highspeed'))).toBe(false) + expect(isAgentSuggestedModel(provider, createModelItem('glm-5.3'))).toBe(true) + }) + it('should evaluate suggestions against the English model label', () => { const provider = createModel('any-provider') diff --git a/web/features/agent-v2/agent-detail/configure/model-compatibility.ts b/web/features/agent-v2/agent-detail/configure/model-compatibility.ts index ba67ab80772..d7f01e0b7d1 100644 --- a/web/features/agent-v2/agent-detail/configure/model-compatibility.ts +++ b/web/features/agent-v2/agent-detail/configure/model-compatibility.ts @@ -40,7 +40,6 @@ const agentIncompatibleModelPatterns: RegExp[] = [ /^qwen2/i, /^qwen3-/i, /^qwen3\.5/i, - /^qwen.*flash/i, /^farui-plus$/i, // zhipu ai @@ -65,17 +64,22 @@ const agentSuggestedModelPatterns: RegExp[] = [ /^gpt[ .-]5\.5$/i, /^gpt[ .-]5\.5[ .-]pro$/i, /^gpt[ .-]5\.6(?:[ .-](?:sol|terra|luna))?$/i, + /^gpt[ .-]6[ .-](?:astra|sol|luna)$/i, // anthropic - /^(?:claude[ .-])?opus[ .-]4\.8$/i, - /^(?:claude[ .-])?opus[ .-]4\.7$/i, - /^(?:claude[ .-])?sonnet[ .-]4\.6$/i, + /^(?:claude[ .-])?opus[ .-]4[ .-]8$/i, + /^(?:claude[ .-])?opus[ .-]4[ .-]7$/i, + /^(?:claude[ .-])?sonnet[ .-]4[ .-]6$/i, + /^(?:claude[ .-])?opus[ .-]5[ .-]5$/i, + /^(?:claude[ .-])?sonnet[ .-]5[ .-]5$/i, + /^(?:claude[ .-])?fable[ .-]5[ .-]1$/i, // The Gemini model plugin quality is not strong enough yet, so do not recommend it for now. // /^gemini 3\.1 pro preview$/i, // x /^grok[ .-]4\.3$/i, + /^grok[ .-]4\.6$/i, // deepseek /^deepseek[ .-]v4[ .-]pro$/i, @@ -83,16 +87,19 @@ const agentSuggestedModelPatterns: RegExp[] = [ // qwen /^qwen[ .-]?3\.7[ .-]max$/i, + /^qwen[ .-]?3\.8[ .-]max$/i, /^qwen[ .-]?3[ .-]coder[ .-]plus$/i, // moonshot /^kimi[ .-]k2\.6$/i, + /^kimi[ .-]k3\.1[ .-]pro$/i, // minimax /^minimax[ .-]m3$/i, // zhipuai /^glm[ .-]5\.1$/i, + /^glm[ .-]5\.3$/i, ] export function isAgentCompatibleModel(