Files
orcs-code/src/utils/model/deprecation.ts
did:key:z6MkqDnb7Siv3Cwj7pGJq4T5EsUisECqR8KpnDLwcaZq5TPr d2542c9a62 asdf
Squash the current repository state back into one baseline commit while
preserving the README reframing and repository contents.

Constraint: User explicitly requested a single squashed commit with subject "asdf"
Confidence: high
Scope-risk: broad
Reversibility: clean
Directive: This commit intentionally rewrites published history; coordinate before future force-pushes
Tested: git status clean; local history rewritten to one commit; force-pushed main to origin and instructkr
Not-tested: Fresh clone verification after push
2026-03-31 03:34:03 -07:00

102 lines
2.5 KiB
TypeScript

/**
* Model deprecation utilities
*
* Contains information about deprecated models and their retirement dates.
*/
import { type APIProvider, getAPIProvider } from './providers.js'
type DeprecatedModelInfo = {
isDeprecated: true
modelName: string
retirementDate: string
}
type NotDeprecatedInfo = {
isDeprecated: false
}
type DeprecationInfo = DeprecatedModelInfo | NotDeprecatedInfo
type DeprecationEntry = {
/** Human-readable model name */
modelName: string
/** Retirement dates by provider (null = not deprecated for that provider) */
retirementDates: Record<APIProvider, string | null>
}
/**
* Deprecated models and their retirement dates by provider.
* Keys are substrings to match in model IDs (case-insensitive).
* To add a new deprecated model, add an entry to this object.
*/
const DEPRECATED_MODELS: Record<string, DeprecationEntry> = {
'claude-3-opus': {
modelName: 'Claude 3 Opus',
retirementDates: {
firstParty: 'January 5, 2026',
bedrock: 'January 15, 2026',
vertex: 'January 5, 2026',
foundry: 'January 5, 2026',
},
},
'claude-3-7-sonnet': {
modelName: 'Claude 3.7 Sonnet',
retirementDates: {
firstParty: 'February 19, 2026',
bedrock: 'April 28, 2026',
vertex: 'May 11, 2026',
foundry: 'February 19, 2026',
},
},
'claude-3-5-haiku': {
modelName: 'Claude 3.5 Haiku',
retirementDates: {
firstParty: 'February 19, 2026',
bedrock: null,
vertex: null,
foundry: null,
},
},
}
/**
* Check if a model is deprecated and get its deprecation info
*/
function getDeprecatedModelInfo(modelId: string): DeprecationInfo {
const lowercaseModelId = modelId.toLowerCase()
const provider = getAPIProvider()
for (const [key, value] of Object.entries(DEPRECATED_MODELS)) {
const retirementDate = value.retirementDates[provider]
if (!lowercaseModelId.includes(key) || !retirementDate) {
continue
}
return {
isDeprecated: true,
modelName: value.modelName,
retirementDate,
}
}
return { isDeprecated: false }
}
/**
* Get a deprecation warning message for a model, or null if not deprecated
*/
export function getModelDeprecationWarning(
modelId: string | null,
): string | null {
if (!modelId) {
return null
}
const info = getDeprecatedModelInfo(modelId)
if (!info.isDeprecated) {
return null
}
return `${info.modelName} will be retired on ${info.retirementDate}. Consider switching to a newer model.`
}