mirror of
https://github.com/tiennm99/ccs.git
synced 2026-08-07 22:21:09 +00:00
feat(cliproxy): add ThinkingSupport to model catalog
- define ThinkingSupport interface (budget/levels/none types) - add thinking config to agy and gemini models - add getModelThinkingSupport() and supportsThinking() helpers Refs #307
This commit is contained in:
@@ -7,6 +7,25 @@
|
|||||||
|
|
||||||
import { CLIProxyProvider } from './types';
|
import { CLIProxyProvider } from './types';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Thinking support configuration for a model.
|
||||||
|
* Defines how thinking/reasoning budget can be controlled.
|
||||||
|
*/
|
||||||
|
export interface ThinkingSupport {
|
||||||
|
/** Type of thinking control: 'budget' (token count), 'levels' (named levels), 'none' */
|
||||||
|
type: 'budget' | 'levels' | 'none';
|
||||||
|
/** Minimum budget tokens (for budget type) */
|
||||||
|
min?: number;
|
||||||
|
/** Maximum budget tokens (for budget type) */
|
||||||
|
max?: number;
|
||||||
|
/** Valid level names (for levels type) */
|
||||||
|
levels?: string[];
|
||||||
|
/** Whether zero/disabled thinking is allowed */
|
||||||
|
zeroAllowed?: boolean;
|
||||||
|
/** Whether dynamic/auto thinking is allowed */
|
||||||
|
dynamicAllowed?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Model entry definition
|
* Model entry definition
|
||||||
*/
|
*/
|
||||||
@@ -27,6 +46,8 @@ export interface ModelEntry {
|
|||||||
deprecated?: boolean;
|
deprecated?: boolean;
|
||||||
/** Deprecation reason/message */
|
/** Deprecation reason/message */
|
||||||
deprecationReason?: string;
|
deprecationReason?: string;
|
||||||
|
/** Thinking/reasoning support configuration */
|
||||||
|
thinking?: ThinkingSupport;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -54,21 +75,37 @@ export const MODEL_CATALOG: Partial<Record<CLIProxyProvider, ProviderCatalog>> =
|
|||||||
id: 'gemini-claude-opus-4-5-thinking',
|
id: 'gemini-claude-opus-4-5-thinking',
|
||||||
name: 'Claude Opus 4.5 Thinking',
|
name: 'Claude Opus 4.5 Thinking',
|
||||||
description: 'Most capable, extended thinking',
|
description: 'Most capable, extended thinking',
|
||||||
|
thinking: {
|
||||||
|
type: 'budget',
|
||||||
|
min: 1024,
|
||||||
|
max: 100000,
|
||||||
|
zeroAllowed: false,
|
||||||
|
dynamicAllowed: true,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'gemini-claude-sonnet-4-5-thinking',
|
id: 'gemini-claude-sonnet-4-5-thinking',
|
||||||
name: 'Claude Sonnet 4.5 Thinking',
|
name: 'Claude Sonnet 4.5 Thinking',
|
||||||
description: 'Balanced with extended thinking',
|
description: 'Balanced with extended thinking',
|
||||||
|
thinking: {
|
||||||
|
type: 'budget',
|
||||||
|
min: 1024,
|
||||||
|
max: 100000,
|
||||||
|
zeroAllowed: false,
|
||||||
|
dynamicAllowed: true,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'gemini-claude-sonnet-4-5',
|
id: 'gemini-claude-sonnet-4-5',
|
||||||
name: 'Claude Sonnet 4.5',
|
name: 'Claude Sonnet 4.5',
|
||||||
description: 'Fast and capable',
|
description: 'Fast and capable',
|
||||||
|
thinking: { type: 'none' },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'gemini-3-pro-preview',
|
id: 'gemini-3-pro-preview',
|
||||||
name: 'Gemini 3 Pro',
|
name: 'Gemini 3 Pro',
|
||||||
description: 'Google latest model via Antigravity',
|
description: 'Google latest model via Antigravity',
|
||||||
|
thinking: { type: 'levels', levels: ['low', 'high'], dynamicAllowed: true },
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -82,11 +119,19 @@ export const MODEL_CATALOG: Partial<Record<CLIProxyProvider, ProviderCatalog>> =
|
|||||||
name: 'Gemini 3 Pro',
|
name: 'Gemini 3 Pro',
|
||||||
tier: 'paid',
|
tier: 'paid',
|
||||||
description: 'Latest model, requires paid Google account',
|
description: 'Latest model, requires paid Google account',
|
||||||
|
thinking: { type: 'levels', levels: ['low', 'high'], dynamicAllowed: true },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'gemini-2.5-pro',
|
id: 'gemini-2.5-pro',
|
||||||
name: 'Gemini 2.5 Pro',
|
name: 'Gemini 2.5 Pro',
|
||||||
description: 'Stable, works with free Google account',
|
description: 'Stable, works with free Google account',
|
||||||
|
thinking: {
|
||||||
|
type: 'budget',
|
||||||
|
min: 128,
|
||||||
|
max: 32768,
|
||||||
|
zeroAllowed: false,
|
||||||
|
dynamicAllowed: true,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -149,3 +194,22 @@ export function getModelDeprecationReason(
|
|||||||
const model = findModel(provider, modelId);
|
const model = findModel(provider, modelId);
|
||||||
return model?.deprecationReason;
|
return model?.deprecationReason;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get thinking support configuration for a model
|
||||||
|
*/
|
||||||
|
export function getModelThinkingSupport(
|
||||||
|
provider: CLIProxyProvider,
|
||||||
|
modelId: string
|
||||||
|
): ThinkingSupport | undefined {
|
||||||
|
const model = findModel(provider, modelId);
|
||||||
|
return model?.thinking;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if model supports thinking/reasoning
|
||||||
|
*/
|
||||||
|
export function supportsThinking(provider: CLIProxyProvider, modelId: string): boolean {
|
||||||
|
const thinking = getModelThinkingSupport(provider, modelId);
|
||||||
|
return thinking !== undefined && thinking.type !== 'none';
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user