agent-ecosystem/test/renderer/utils/openCodeModelRecommendations.test.ts

218 lines
8.1 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import {
compareOpenCodeTeamModelRecommendations,
getOpenCodeTeamModelRecommendation,
isOpenCodeTeamModelRecommended,
} from '@renderer/utils/openCodeModelRecommendations';
describe('getOpenCodeTeamModelRecommendation', () => {
it('marks models that passed real OpenCode Agent Teams E2E as recommended', () => {
expect(getOpenCodeTeamModelRecommendation('openrouter/qwen/qwen3-coder-flash')).toMatchObject({
level: 'recommended',
label: 'Recommended',
});
expect(
getOpenCodeTeamModelRecommendation(' OPENROUTER/GOOGLE/GEMINI-3-FLASH-PREVIEW ')
).toMatchObject({
level: 'recommended',
label: 'Recommended',
});
expect(getOpenCodeTeamModelRecommendation('openrouter/moonshotai/kimi-k2.6')).toMatchObject({
level: 'recommended',
label: 'Recommended',
});
expect(getOpenCodeTeamModelRecommendation('openrouter/z-ai/glm-5.1')).toMatchObject({
level: 'recommended',
label: 'Recommended',
});
expect(getOpenCodeTeamModelRecommendation('openrouter/z-ai/glm-5')).toMatchObject({
level: 'recommended',
label: 'Recommended',
});
expect(getOpenCodeTeamModelRecommendation('openrouter/minimax/minimax-m2.7')).toMatchObject({
level: 'recommended',
label: 'Recommended',
});
expect(
getOpenCodeTeamModelRecommendation('openrouter/google/gemini-3.1-pro-preview')
).toMatchObject({
level: 'recommended',
label: 'Recommended',
});
expect(
getOpenCodeTeamModelRecommendation('openrouter/anthropic/claude-sonnet-4.6')
).toMatchObject({
level: 'recommended',
label: 'Recommended',
});
expect(getOpenCodeTeamModelRecommendation('openrouter/anthropic/claude-opus-4.6')).toMatchObject({
level: 'recommended',
label: 'Recommended',
});
expect(getOpenCodeTeamModelRecommendation('openrouter/anthropic/claude-opus-4.7')).toMatchObject({
level: 'recommended',
label: 'Recommended',
});
expect(getOpenCodeTeamModelRecommendation('openrouter/mistralai/devstral-2512')).toMatchObject({
level: 'recommended',
label: 'Recommended',
});
expect(getOpenCodeTeamModelRecommendation('openrouter/openai/gpt-5.4')).toMatchObject({
level: 'recommended',
label: 'Recommended',
});
expect(getOpenCodeTeamModelRecommendation('openrouter/openai/gpt-5.3-codex')).toMatchObject({
level: 'recommended',
label: 'Recommended',
});
expect(getOpenCodeTeamModelRecommendation('openrouter/x-ai/grok-4-fast')).toMatchObject({
level: 'recommended',
label: 'Recommended',
});
expect(getOpenCodeTeamModelRecommendation('openrouter/x-ai/grok-4.1-fast')).toMatchObject({
level: 'recommended',
label: 'Recommended',
});
expect(getOpenCodeTeamModelRecommendation('openrouter/xiaomi/mimo-v2-pro')).toMatchObject({
level: 'recommended',
label: 'Recommended',
});
expect(getOpenCodeTeamModelRecommendation('openrouter/openai/gpt-5.1-codex')).toMatchObject({
level: 'recommended',
label: 'Recommended',
});
expect(getOpenCodeTeamModelRecommendation('openrouter/qwen/qwen3-max')).toMatchObject({
level: 'recommended',
label: 'Recommended',
});
expect(
getOpenCodeTeamModelRecommendation('openrouter/mistralai/mistral-medium-3.1')
).toMatchObject({
level: 'recommended',
label: 'Recommended',
});
expect(
getOpenCodeTeamModelRecommendation('openrouter/google/gemini-3.1-flash-lite-preview')
).toMatchObject({
level: 'recommended',
label: 'Recommended',
});
expect(isOpenCodeTeamModelRecommended('openrouter/qwen/qwen3-coder-flash')).toBe(true);
});
it('keeps similarly named models distinct when real E2E disagreed', () => {
expect(getOpenCodeTeamModelRecommendation('opencode/minimax-m2.5-free')).toMatchObject({
level: 'recommended-with-limits',
label: 'Recommended with limits',
});
expect(
getOpenCodeTeamModelRecommendation('openrouter/minimax/minimax-m2.5:free')
).toMatchObject({
level: 'not-recommended',
});
});
it('marks passing free routes as recommended with limits', () => {
expect(getOpenCodeTeamModelRecommendation('openrouter/openai/gpt-oss-120b:free')).toMatchObject(
{
level: 'recommended-with-limits',
label: 'Recommended with limits',
}
);
expect(isOpenCodeTeamModelRecommended('openrouter/openai/gpt-oss-120b:free')).toBe(true);
});
it('marks models with real launch or messaging failures as not recommended', () => {
expect(getOpenCodeTeamModelRecommendation('openrouter/openai/gpt-oss-20b:free')).toMatchObject({
level: 'not-recommended',
label: 'Not recommended',
});
expect(
getOpenCodeTeamModelRecommendation('openrouter/google/gemini-3-pro-preview')
).toMatchObject({
level: 'not-recommended',
label: 'Not recommended',
});
expect(
getOpenCodeTeamModelRecommendation('openrouter/google/gemini-2.5-flash-lite')
).toMatchObject({
level: 'not-recommended',
label: 'Not recommended',
});
expect(getOpenCodeTeamModelRecommendation('openrouter/deepseek/deepseek-v3.2')).toMatchObject({
level: 'not-recommended',
label: 'Not recommended',
});
expect(getOpenCodeTeamModelRecommendation('openrouter/x-ai/grok-code-fast-1')).toMatchObject({
level: 'not-recommended',
label: 'Not recommended',
});
expect(getOpenCodeTeamModelRecommendation('openrouter/openai/gpt-5.2-codex')).toMatchObject({
level: 'not-recommended',
label: 'Not recommended',
});
expect(getOpenCodeTeamModelRecommendation('openrouter/moonshotai/kimi-k2-thinking')).toMatchObject({
level: 'not-recommended',
label: 'Not recommended',
});
expect(getOpenCodeTeamModelRecommendation('openrouter/openai/gpt-5.1-chat')).toMatchObject({
level: 'not-recommended',
label: 'Not recommended',
});
});
it('marks OpenRouter routes missing from the OpenCode catalog as unavailable, not bad', () => {
expect(getOpenCodeTeamModelRecommendation('openrouter/qwen/qwen3-coder-plus')).toMatchObject({
level: 'unavailable-in-opencode',
label: 'Unavailable in OpenCode',
});
expect(getOpenCodeTeamModelRecommendation('openrouter/qwen/qwen3-coder-next')).toMatchObject({
level: 'unavailable-in-opencode',
label: 'Unavailable in OpenCode',
});
expect(getOpenCodeTeamModelRecommendation('openrouter/qwen/qwen3-max-thinking')).toMatchObject({
level: 'unavailable-in-opencode',
label: 'Unavailable in OpenCode',
});
expect(
getOpenCodeTeamModelRecommendation('openrouter/mistralai/mistral-large-2512')
).toMatchObject({
level: 'unavailable-in-opencode',
label: 'Unavailable in OpenCode',
});
expect(getOpenCodeTeamModelRecommendation('openrouter/mistralai/devstral-medium')).toMatchObject(
{
level: 'unavailable-in-opencode',
label: 'Unavailable in OpenCode',
}
);
expect(isOpenCodeTeamModelRecommended('openrouter/qwen/qwen3-coder-plus')).toBe(false);
});
it('does not label noisy or unproven models as good or bad', () => {
expect(getOpenCodeTeamModelRecommendation('opencode/big-pickle')).toBeNull();
expect(getOpenCodeTeamModelRecommendation('openrouter/x-ai/grok-4.20')).toBeNull();
expect(getOpenCodeTeamModelRecommendation('')).toBeNull();
});
it('sorts recommended, limited, neutral, unavailable, and not-recommended routes by status', () => {
const models = [
'openrouter/openai/gpt-oss-20b:free',
'openrouter/qwen/qwen3-coder-plus',
'opencode/big-pickle',
'openrouter/openai/gpt-oss-120b:free',
'openrouter/qwen/qwen3-coder-flash',
];
expect(
[...models].sort((left, right) => compareOpenCodeTeamModelRecommendations(left, right))
).toEqual([
'openrouter/qwen/qwen3-coder-flash',
'openrouter/openai/gpt-oss-120b:free',
'opencode/big-pickle',
'openrouter/qwen/qwen3-coder-plus',
'openrouter/openai/gpt-oss-20b:free',
]);
});
});