mirror of
https://github.com/tiennm99/ccs.git
synced 2026-10-12 20:15:40 +00:00
feat(cliproxy): promote thinking models as default for agy provider
- Remove deprecated flag from Claude Opus 4.5 Thinking and Sonnet 4.5 Thinking - Reorder models with thinking models at top (Opus → Sonnet Thinking → Sonnet → Gemini) - Change default model to gemini-claude-opus-4-5-thinking - Update tests to reflect new ordering and non-deprecated status
This commit is contained in:
1 parent
f15754d30f
commit
1475adb616
2 files changed
+33
-42
No files matched your search
@@ -48,8 +48,18 @@ export const MODEL_CATALOG: Partial<Record<CLIProxyProvider, ProviderCatalog>> =
|
|||||||
agy: {
|
agy: {
|
||||||
provider: 'agy',
|
provider: 'agy',
|
||||||
displayName: 'Antigravity',
|
displayName: 'Antigravity',
|
||||||
defaultModel: 'gemini-3-pro-preview',
|
defaultModel: 'gemini-claude-opus-4-5-thinking',
|
||||||
models: [
|
models: [
|
||||||
|
{
|
||||||
|
id: 'gemini-claude-opus-4-5-thinking',
|
||||||
|
name: 'Claude Opus 4.5 Thinking',
|
||||||
|
description: 'Most capable, extended thinking',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'gemini-claude-sonnet-4-5-thinking',
|
||||||
|
name: 'Claude Sonnet 4.5 Thinking',
|
||||||
|
description: 'Balanced with extended thinking',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
id: 'gemini-claude-sonnet-4-5',
|
id: 'gemini-claude-sonnet-4-5',
|
||||||
name: 'Claude Sonnet 4.5',
|
name: 'Claude Sonnet 4.5',
|
||||||
@@ -60,22 +70,6 @@ export const MODEL_CATALOG: Partial<Record<CLIProxyProvider, ProviderCatalog>> =
|
|||||||
name: 'Gemini 3 Pro',
|
name: 'Gemini 3 Pro',
|
||||||
description: 'Google latest model via Antigravity',
|
description: 'Google latest model via Antigravity',
|
||||||
},
|
},
|
||||||
{
|
|
||||||
id: 'gemini-claude-opus-4-5-thinking',
|
|
||||||
name: 'Claude Opus 4.5 Thinking',
|
|
||||||
description: 'Most capable, extended thinking',
|
|
||||||
deprecated: true,
|
|
||||||
deprecationReason:
|
|
||||||
'Thinking models are deprecated due to compatibility issues with Antigravity',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'gemini-claude-sonnet-4-5-thinking',
|
|
||||||
name: 'Claude Sonnet 4.5 Thinking',
|
|
||||||
description: 'Balanced with extended thinking',
|
|
||||||
deprecated: true,
|
|
||||||
deprecationReason:
|
|
||||||
'Thinking models are deprecated due to compatibility issues with Antigravity',
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
gemini: {
|
gemini: {
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ describe('Model Catalog', () => {
|
|||||||
describe('AGY models', () => {
|
describe('AGY models', () => {
|
||||||
it('has correct default model', () => {
|
it('has correct default model', () => {
|
||||||
const { MODEL_CATALOG } = modelCatalog;
|
const { MODEL_CATALOG } = modelCatalog;
|
||||||
assert.strictEqual(MODEL_CATALOG.agy.defaultModel, 'gemini-3-pro-preview');
|
assert.strictEqual(MODEL_CATALOG.agy.defaultModel, 'gemini-claude-opus-4-5-thinking');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('includes Claude Opus 4.5 Thinking', () => {
|
it('includes Claude Opus 4.5 Thinking', () => {
|
||||||
@@ -215,60 +215,58 @@ describe('Model Catalog', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Deprecated models', () => {
|
describe('Thinking models ordering', () => {
|
||||||
it('Claude Opus 4.5 Thinking is marked as deprecated', () => {
|
it('Claude Opus 4.5 Thinking is not deprecated', () => {
|
||||||
const { MODEL_CATALOG } = modelCatalog;
|
const { MODEL_CATALOG } = modelCatalog;
|
||||||
const opus = MODEL_CATALOG.agy.models.find(
|
const opus = MODEL_CATALOG.agy.models.find(
|
||||||
(m) => m.id === 'gemini-claude-opus-4-5-thinking'
|
(m) => m.id === 'gemini-claude-opus-4-5-thinking'
|
||||||
);
|
);
|
||||||
assert(opus, 'Should include Claude Opus 4.5 Thinking');
|
assert(opus, 'Should include Claude Opus 4.5 Thinking');
|
||||||
assert.strictEqual(opus.deprecated, true, 'Should be marked as deprecated');
|
assert.strictEqual(opus.deprecated, undefined, 'Should not be marked as deprecated');
|
||||||
assert(opus.deprecationReason, 'Should have deprecation reason');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Claude Sonnet 4.5 Thinking is marked as deprecated', () => {
|
it('Claude Sonnet 4.5 Thinking is not deprecated', () => {
|
||||||
const { MODEL_CATALOG } = modelCatalog;
|
const { MODEL_CATALOG } = modelCatalog;
|
||||||
const sonnetThinking = MODEL_CATALOG.agy.models.find(
|
const sonnetThinking = MODEL_CATALOG.agy.models.find(
|
||||||
(m) => m.id === 'gemini-claude-sonnet-4-5-thinking'
|
(m) => m.id === 'gemini-claude-sonnet-4-5-thinking'
|
||||||
);
|
);
|
||||||
assert(sonnetThinking, 'Should include Claude Sonnet 4.5 Thinking');
|
assert(sonnetThinking, 'Should include Claude Sonnet 4.5 Thinking');
|
||||||
assert.strictEqual(sonnetThinking.deprecated, true, 'Should be marked as deprecated');
|
assert.strictEqual(sonnetThinking.deprecated, undefined, 'Should not be marked as deprecated');
|
||||||
assert(sonnetThinking.deprecationReason, 'Should have deprecation reason');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('deprecated models are at the bottom of the list', () => {
|
it('thinking models are at the top of the list', () => {
|
||||||
const { MODEL_CATALOG } = modelCatalog;
|
const { MODEL_CATALOG } = modelCatalog;
|
||||||
const models = MODEL_CATALOG.agy.models;
|
const models = MODEL_CATALOG.agy.models;
|
||||||
|
|
||||||
// Find indices of deprecated models
|
// Find indices of thinking models
|
||||||
const opusIdx = models.findIndex((m) => m.id === 'gemini-claude-opus-4-5-thinking');
|
const opusIdx = models.findIndex((m) => m.id === 'gemini-claude-opus-4-5-thinking');
|
||||||
const sonnetThinkingIdx = models.findIndex(
|
const sonnetThinkingIdx = models.findIndex(
|
||||||
(m) => m.id === 'gemini-claude-sonnet-4-5-thinking'
|
(m) => m.id === 'gemini-claude-sonnet-4-5-thinking'
|
||||||
);
|
);
|
||||||
|
|
||||||
// Find indices of non-deprecated models
|
// Find indices of non-thinking models
|
||||||
const sonnetIdx = models.findIndex((m) => m.id === 'gemini-claude-sonnet-4-5');
|
const sonnetIdx = models.findIndex((m) => m.id === 'gemini-claude-sonnet-4-5');
|
||||||
const geminiIdx = models.findIndex((m) => m.id === 'gemini-3-pro-preview');
|
const geminiIdx = models.findIndex((m) => m.id === 'gemini-3-pro-preview');
|
||||||
|
|
||||||
// Deprecated models should come after non-deprecated models
|
// Thinking models should come before non-thinking models
|
||||||
assert(opusIdx > sonnetIdx, 'Opus Thinking should be below non-deprecated Sonnet');
|
assert(opusIdx < sonnetIdx, 'Opus Thinking should be above non-thinking Sonnet');
|
||||||
assert(opusIdx > geminiIdx, 'Opus Thinking should be below non-deprecated Gemini');
|
assert(opusIdx < geminiIdx, 'Opus Thinking should be above non-thinking Gemini');
|
||||||
assert(
|
assert(
|
||||||
sonnetThinkingIdx > sonnetIdx,
|
sonnetThinkingIdx < sonnetIdx,
|
||||||
'Sonnet Thinking should be below non-deprecated Sonnet'
|
'Sonnet Thinking should be above non-thinking Sonnet'
|
||||||
);
|
);
|
||||||
assert(
|
assert(
|
||||||
sonnetThinkingIdx > geminiIdx,
|
sonnetThinkingIdx < geminiIdx,
|
||||||
'Sonnet Thinking should be below non-deprecated Gemini'
|
'Sonnet Thinking should be above non-thinking Gemini'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('isModelDeprecated', () => {
|
describe('isModelDeprecated', () => {
|
||||||
it('returns true for deprecated models', () => {
|
it('returns false for thinking models (no longer deprecated)', () => {
|
||||||
const { isModelDeprecated } = modelCatalog;
|
const { isModelDeprecated } = modelCatalog;
|
||||||
assert.strictEqual(isModelDeprecated('agy', 'gemini-claude-opus-4-5-thinking'), true);
|
assert.strictEqual(isModelDeprecated('agy', 'gemini-claude-opus-4-5-thinking'), false);
|
||||||
assert.strictEqual(isModelDeprecated('agy', 'gemini-claude-sonnet-4-5-thinking'), true);
|
assert.strictEqual(isModelDeprecated('agy', 'gemini-claude-sonnet-4-5-thinking'), false);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('returns false for non-deprecated models', () => {
|
it('returns false for non-deprecated models', () => {
|
||||||
@@ -284,11 +282,10 @@ describe('Model Catalog', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('getModelDeprecationReason', () => {
|
describe('getModelDeprecationReason', () => {
|
||||||
it('returns deprecation reason for deprecated models', () => {
|
it('returns undefined for thinking models (no longer deprecated)', () => {
|
||||||
const { getModelDeprecationReason } = modelCatalog;
|
const { getModelDeprecationReason } = modelCatalog;
|
||||||
const reason = getModelDeprecationReason('agy', 'gemini-claude-opus-4-5-thinking');
|
assert.strictEqual(getModelDeprecationReason('agy', 'gemini-claude-opus-4-5-thinking'), undefined);
|
||||||
assert(reason, 'Should have deprecation reason');
|
assert.strictEqual(getModelDeprecationReason('agy', 'gemini-claude-sonnet-4-5-thinking'), undefined);
|
||||||
assert(typeof reason === 'string', 'Reason should be a string');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('returns undefined for non-deprecated models', () => {
|
it('returns undefined for non-deprecated models', () => {
|
||||||
|
|||||||
Reference in new issue
Block a user