init claude-code
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
/**
|
||||
* 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.`
|
||||
}
|
||||
Reference in New Issue
Block a user