commit
3d86840c4b
|
|
@ -17,10 +17,9 @@ function getModelFamily(model: string): 'haiku' | 'sonnet' | 'opus' | null {
|
||||||
*
|
*
|
||||||
* 优先级:
|
* 优先级:
|
||||||
* 1. 传入的 model 本身就是已知的 CoStrict 模型 ID(用户通过 /model 明确选择)
|
* 1. 传入的 model 本身就是已知的 CoStrict 模型 ID(用户通过 /model 明确选择)
|
||||||
* 2. COSTRICT_MODEL 环境变量(管理员全局覆盖 / 登录默认值)
|
* 2. COSTRICT_DEFAULT_{FAMILY}_MODEL 环境变量(按模型族)
|
||||||
* 3. COSTRICT_DEFAULT_{FAMILY}_MODEL 环境变量(按模型族)
|
* 3. 直接透传原始模型名(用户手动配置的模型名)
|
||||||
* 4. 已缓存的 CoStrict 模型列表中的第一个
|
* 4. COSTRICT_MODEL 环境变量(仅作为最终兜底)
|
||||||
* 5. 直接透传原始模型名(最后兜底)
|
|
||||||
*/
|
*/
|
||||||
export function resolveCoStrictModel(anthropicModel: string): string {
|
export function resolveCoStrictModel(anthropicModel: string): string {
|
||||||
const cleanModel = anthropicModel.replace(/\[1m\]$/, '')
|
const cleanModel = anthropicModel.replace(/\[1m\]$/, '')
|
||||||
|
|
@ -29,10 +28,7 @@ export function resolveCoStrictModel(anthropicModel: string): string {
|
||||||
const cached = getCachedCoStrictModels()
|
const cached = getCachedCoStrictModels()
|
||||||
if (cached.some(m => m.id === cleanModel)) return cleanModel
|
if (cached.some(m => m.id === cleanModel)) return cleanModel
|
||||||
|
|
||||||
// 优先级 2: COSTRICT_MODEL 环境变量
|
// 优先级 2: COSTRICT_DEFAULT_{FAMILY}_MODEL 环境变量
|
||||||
if (process.env.COSTRICT_MODEL) return process.env.COSTRICT_MODEL
|
|
||||||
|
|
||||||
// 优先级 3: COSTRICT_DEFAULT_{FAMILY}_MODEL 环境变量
|
|
||||||
const family = getModelFamily(cleanModel)
|
const family = getModelFamily(cleanModel)
|
||||||
if (family) {
|
if (family) {
|
||||||
const envVar = `COSTRICT_DEFAULT_${family.toUpperCase()}_MODEL`
|
const envVar = `COSTRICT_DEFAULT_${family.toUpperCase()}_MODEL`
|
||||||
|
|
@ -40,9 +36,6 @@ export function resolveCoStrictModel(anthropicModel: string): string {
|
||||||
if (override) return override
|
if (override) return override
|
||||||
}
|
}
|
||||||
|
|
||||||
// 优先级 4: 缓存中的第一个模型
|
// 优先级 3: 直接透传原始模型名(用户手动配置的模型名优先于环境变量)
|
||||||
if (cached.length > 0) return cached[0].id
|
|
||||||
|
|
||||||
// 优先级 5: 透传原始模型名
|
|
||||||
return cleanModel
|
return cleanModel
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -433,9 +433,8 @@ export async function setup(
|
||||||
// 预取模型列表,填充同步缓存
|
// 预取模型列表,填充同步缓存
|
||||||
const baseUrl = getCoStrictBaseURL(activeCreds.base_url)
|
const baseUrl = getCoStrictBaseURL(activeCreds.base_url)
|
||||||
const models = await fetchCoStrictModels(baseUrl, activeCreds.access_token)
|
const models = await fetchCoStrictModels(baseUrl, activeCreds.access_token)
|
||||||
if (models.length > 0 && !process.env.COSTRICT_MODEL) {
|
// 模型列表已预取并缓存,不再自动设置 COSTRICT_MODEL 环境变量
|
||||||
process.env.COSTRICT_MODEL = models[0].id
|
// resolveCoStrictModel() 会直接透传用户配置的模型名
|
||||||
}
|
|
||||||
process.env.CLAUDE_CODE_USE_COSTRICT = '1'
|
process.env.CLAUDE_CODE_USE_COSTRICT = '1'
|
||||||
} catch {
|
} catch {
|
||||||
// 初始化失败不阻断启动
|
// 初始化失败不阻断启动
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,8 @@ export type ModelSetting = ModelName | ModelAlias | null
|
||||||
|
|
||||||
export function getSmallFastModel(): ModelName {
|
export function getSmallFastModel(): ModelName {
|
||||||
const provider = getAPIProvider()
|
const provider = getAPIProvider()
|
||||||
|
// CoStrict has no haiku alias — use the main loop model to stay on the same provider
|
||||||
|
if (provider === 'costrict') return getMainLoopModel()
|
||||||
// Provider-specific small fast model
|
// Provider-specific small fast model
|
||||||
if (provider === 'openai' && process.env.OPENAI_SMALL_FAST_MODEL) {
|
if (provider === 'openai' && process.env.OPENAI_SMALL_FAST_MODEL) {
|
||||||
return process.env.OPENAI_SMALL_FAST_MODEL
|
return process.env.OPENAI_SMALL_FAST_MODEL
|
||||||
|
|
@ -149,6 +151,8 @@ export function getDefaultOpusModel(): ModelName {
|
||||||
// @[MODEL LAUNCH]: Update the default Sonnet model (3P providers may lag so keep defaults unchanged).
|
// @[MODEL LAUNCH]: Update the default Sonnet model (3P providers may lag so keep defaults unchanged).
|
||||||
export function getDefaultSonnetModel(): ModelName {
|
export function getDefaultSonnetModel(): ModelName {
|
||||||
const provider = getAPIProvider()
|
const provider = getAPIProvider()
|
||||||
|
// CoStrict has no sonnet alias — use the main loop model to stay on the same provider
|
||||||
|
if (provider === 'costrict') return getMainLoopModel()
|
||||||
// For OpenAI provider, check OPENAI_DEFAULT_SONNET_MODEL first
|
// For OpenAI provider, check OPENAI_DEFAULT_SONNET_MODEL first
|
||||||
if (provider === 'openai' && process.env.OPENAI_DEFAULT_SONNET_MODEL) {
|
if (provider === 'openai' && process.env.OPENAI_DEFAULT_SONNET_MODEL) {
|
||||||
return process.env.OPENAI_DEFAULT_SONNET_MODEL
|
return process.env.OPENAI_DEFAULT_SONNET_MODEL
|
||||||
|
|
@ -171,6 +175,8 @@ export function getDefaultSonnetModel(): ModelName {
|
||||||
// @[MODEL LAUNCH]: Update the default Haiku model (3P providers may lag so keep defaults unchanged).
|
// @[MODEL LAUNCH]: Update the default Haiku model (3P providers may lag so keep defaults unchanged).
|
||||||
export function getDefaultHaikuModel(): ModelName {
|
export function getDefaultHaikuModel(): ModelName {
|
||||||
const provider = getAPIProvider()
|
const provider = getAPIProvider()
|
||||||
|
// CoStrict has no haiku alias — use the main loop model to stay on the same provider
|
||||||
|
if (provider === 'costrict') return getMainLoopModel()
|
||||||
// For OpenAI provider, check OPENAI_DEFAULT_HAIKU_MODEL first
|
// For OpenAI provider, check OPENAI_DEFAULT_HAIKU_MODEL first
|
||||||
if (provider === 'openai' && process.env.OPENAI_DEFAULT_HAIKU_MODEL) {
|
if (provider === 'openai' && process.env.OPENAI_DEFAULT_HAIKU_MODEL) {
|
||||||
return process.env.OPENAI_DEFAULT_HAIKU_MODEL
|
return process.env.OPENAI_DEFAULT_HAIKU_MODEL
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user