/ utils / model / antModels.ts
antModels.ts
 1  import { getFeatureValue_CACHED_MAY_BE_STALE } from 'src/services/analytics/growthbook.js'
 2  import type { EffortLevel } from '../effort.js'
 3  
 4  export type AntModel = {
 5    alias: string
 6    model: string
 7    label: string
 8    description?: string
 9    defaultEffortValue?: number
10    defaultEffortLevel?: EffortLevel
11    contextWindow?: number
12    defaultMaxTokens?: number
13    upperMaxTokensLimit?: number
14    /** Model defaults to adaptive thinking and rejects `thinking: { type: 'disabled' }`. */
15    alwaysOnThinking?: boolean
16  }
17  
18  export type AntModelSwitchCalloutConfig = {
19    modelAlias?: string
20    description: string
21    version: string
22  }
23  
24  export type AntModelOverrideConfig = {
25    defaultModel?: string
26    defaultModelEffortLevel?: EffortLevel
27    defaultSystemPromptSuffix?: string
28    antModels?: AntModel[]
29    switchCallout?: AntModelSwitchCalloutConfig
30  }
31  
32  // @[MODEL LAUNCH]: Update tengu_ant_model_override with new ant-only models
33  // @[MODEL LAUNCH]: Add the codename to scripts/excluded-strings.txt to prevent it from leaking to external builds.
34  export function getAntModelOverrideConfig(): AntModelOverrideConfig | null {
35    if (process.env.USER_TYPE !== 'ant') {
36      return null
37    }
38    return getFeatureValue_CACHED_MAY_BE_STALE<AntModelOverrideConfig | null>(
39      'tengu_ant_model_override',
40      null,
41    )
42  }
43  
44  export function getAntModels(): AntModel[] {
45    if (process.env.USER_TYPE !== 'ant') {
46      return []
47    }
48    return getAntModelOverrideConfig()?.antModels ?? []
49  }
50  
51  export function resolveAntModel(
52    model: string | undefined,
53  ): AntModel | undefined {
54    if (process.env.USER_TYPE !== 'ant') {
55      return undefined
56    }
57    if (model === undefined) {
58      return undefined
59    }
60    const lower = model.toLowerCase()
61    return getAntModels().find(
62      m => m.alias === model || lower.includes(m.model.toLowerCase()),
63    )
64  }