@sethdouglasford/claude-flow
Version:
Claude Code Flow - Advanced AI-powered development workflows with SPARC methodology
352 lines • 12.1 kB
JavaScript
/**
* Centralized Model Configuration
* Defines all Claude models and their usage patterns across the codebase
*/
// Available Claude Models (Based on official Anthropic documentation)
// Reference: https://docs.anthropic.com/en/docs/about-claude/models/overview#model-aliases
export const CLAUDE_MODELS = {
// Claude 4 Models (Latest Generation)
"claude-opus-4-20250514": {
id: "claude-opus-4-20250514",
name: "Claude Opus 4",
provider: "anthropic",
capabilities: {
reasoning: "high",
speed: "medium",
cost: "high",
contextWindow: 200000,
maxTokens: 32000,
},
useCases: [
"complex-reasoning",
"research",
"analysis",
"architecture-design",
"security-audit",
"advanced-coding",
],
},
"claude-sonnet-4-20250514": {
id: "claude-sonnet-4-20250514",
name: "Claude Sonnet 4",
provider: "anthropic",
capabilities: {
reasoning: "high",
speed: "fast",
cost: "medium",
contextWindow: 200000,
maxTokens: 64000,
},
useCases: [
"code-generation",
"complex-reasoning",
"architecture-design",
"code-review",
"testing",
"documentation",
"production-workflows",
],
},
// Claude 3.7 Models
"claude-3-7-sonnet-20250219": {
id: "claude-3-7-sonnet-20250219",
name: "Claude Sonnet 3.7",
provider: "anthropic",
capabilities: {
reasoning: "high",
speed: "fast",
cost: "medium",
contextWindow: 200000,
maxTokens: 64000,
},
useCases: [
"extended-thinking",
"complex-reasoning",
"code-generation",
"analysis",
],
},
// Claude 3.5 Models
"claude-3-5-sonnet-20241022": {
id: "claude-3-5-sonnet-20241022",
name: "Claude Sonnet 3.5 v2",
provider: "anthropic",
capabilities: {
reasoning: "high",
speed: "fast",
cost: "medium",
contextWindow: 200000,
maxTokens: 8192,
},
useCases: [
"code-generation",
"general-purpose",
"coding",
"analysis",
],
},
"claude-3-5-haiku-20241022": {
id: "claude-3-5-haiku-20241022",
name: "Claude Haiku 3.5",
provider: "anthropic",
capabilities: {
reasoning: "medium",
speed: "fast",
cost: "low",
contextWindow: 200000,
maxTokens: 8192,
},
useCases: [
"fast-responses",
"simple-tasks",
"quick-edits",
"cost-effective-processing",
],
},
// Claude 3 Models (Legacy)
"claude-3-opus-20240229": {
id: "claude-3-opus-20240229",
name: "Claude Opus 3",
provider: "anthropic",
capabilities: {
reasoning: "high",
speed: "medium",
cost: "high",
contextWindow: 200000,
maxTokens: 4096,
},
useCases: [
"complex-reasoning",
"research",
"analysis",
],
deprecated: true,
},
"claude-3-sonnet-20240229": {
id: "claude-3-sonnet-20240229",
name: "Claude Sonnet 3",
provider: "anthropic",
capabilities: {
reasoning: "high",
speed: "fast",
cost: "medium",
contextWindow: 200000,
maxTokens: 4096,
},
useCases: [
"general-purpose",
"coding",
"analysis",
],
deprecated: true,
},
"claude-3-haiku-20240307": {
id: "claude-3-haiku-20240307",
name: "Claude Haiku 3",
provider: "anthropic",
capabilities: {
reasoning: "medium",
speed: "fast",
cost: "low",
contextWindow: 200000,
maxTokens: 4096,
},
useCases: [
"fast-responses",
"simple-tasks",
"quick-edits",
],
deprecated: true,
},
};
// Model Aliases (for convenience during development)
// Reference: https://docs.anthropic.com/en/docs/about-claude/models/overview#model-aliases
export const MODEL_ALIASES = {
"claude-opus-4-0": "claude-opus-4-20250514",
"claude-sonnet-4-0": "claude-sonnet-4-20250514",
"claude-3-7-sonnet-latest": "claude-3-7-sonnet-20250219",
"claude-3-5-sonnet-latest": "claude-3-5-sonnet-20241022",
"claude-3-5-haiku-latest": "claude-3-5-haiku-20241022",
"claude-3-opus-latest": "claude-3-opus-20240229",
};
// Default Model Hierarchies for Different Use Cases
export const MODEL_HIERARCHIES = {
// Development workflow (balanced performance and cost)
development: {
primary: "claude-sonnet-4-0", // Alias for latest Claude 4 Sonnet
apply: "claude-sonnet-4-0",
review: "claude-sonnet-4-0",
fallback: "claude-3-5-sonnet-latest",
},
// Research workflow (maximum reasoning capability)
research: {
primary: "claude-opus-4-0", // Alias for latest Claude 4 Opus
apply: "claude-sonnet-4-0",
review: "claude-sonnet-4-0",
fallback: "claude-3-7-sonnet-latest",
},
// Production workflow (reliability focused - use specific versions)
production: {
primary: "claude-sonnet-4-20250514", // Specific version for stability
apply: "claude-sonnet-4-20250514",
review: "claude-sonnet-4-20250514",
fallback: "claude-3-5-sonnet-20241022",
},
// Testing workflow (cost-effective)
testing: {
primary: "claude-sonnet-4-0",
apply: "claude-3-5-haiku-latest", // Fast and cheap for simple tasks
review: "claude-sonnet-4-0",
fallback: "claude-3-5-haiku-latest",
},
};
// Global Default Configuration
export const DEFAULT_MODEL_CONFIG = MODEL_HIERARCHIES.development;
/**
* Resolve a model alias to its actual model ID
*/
export function resolveModelAlias(modelIdOrAlias) {
return MODEL_ALIASES[modelIdOrAlias] || modelIdOrAlias;
}
/**
* Get model hierarchy for a specific use case (with alias resolution)
*/
export function getModelHierarchy(useCase = "development") {
const hierarchy = MODEL_HIERARCHIES[useCase] || DEFAULT_MODEL_CONFIG;
// Resolve all aliases to actual model IDs
return {
primary: resolveModelAlias(hierarchy.primary),
apply: resolveModelAlias(hierarchy.apply),
review: resolveModelAlias(hierarchy.review),
fallback: resolveModelAlias(hierarchy.fallback),
};
}
/**
* Get model definition by ID (with alias resolution)
*/
export function getModelDefinition(modelIdOrAlias) {
const actualModelId = resolveModelAlias(modelIdOrAlias);
return CLAUDE_MODELS[actualModelId];
}
/**
* Get all available models (excluding deprecated ones by default)
*/
export function getAvailableModels(includeDeprecated = false) {
return Object.values(CLAUDE_MODELS).filter(model => includeDeprecated || !model.deprecated);
}
/**
* Get models suitable for a specific use case
*/
export function getModelsForUseCase(useCase) {
return Object.values(CLAUDE_MODELS).filter(model => model.useCases.includes(useCase) && !model.deprecated);
}
/**
* Validate if a model ID is available and not deprecated (with alias resolution)
*/
export function isValidModel(modelIdOrAlias, allowDeprecated = false) {
const actualModelId = resolveModelAlias(modelIdOrAlias);
const model = CLAUDE_MODELS[actualModelId];
return model !== undefined && (allowDeprecated || !model.deprecated);
}
/**
* Get all available model aliases
*/
export function getModelAliases() {
return { ...MODEL_ALIASES };
}
/**
* Check if a string is a model alias
*/
export function isModelAlias(modelIdOrAlias) {
return modelIdOrAlias in MODEL_ALIASES;
}
/**
* Get the best model for a specific capability
*/
export function getBestModelForCapability(capability, preferredLevel = "high") {
const availableModels = getAvailableModels();
return availableModels.find(model => model.capabilities[capability] === preferredLevel) || availableModels[0]; // fallback to first available
}
/**
* Create a custom model hierarchy
*/
export function createModelHierarchy(config) {
return {
...DEFAULT_MODEL_CONFIG,
...config,
};
}
// Bedrock Model Mappings
// Maps standard Anthropic model IDs to their Bedrock equivalents
export const BEDROCK_MODEL_MAPPINGS = {
// Common name mappings (for convenience)
"claude-4": "anthropic.claude-sonnet-4-20250514-v1:0",
"claude-3.7-sonnet": "anthropic.claude-3-7-sonnet-20250219-v1:0",
"claude-3.5-sonnet": "anthropic.claude-3-5-sonnet-20241022-v2:0",
"claude-3.5-haiku": "anthropic.claude-3-5-haiku-20241022-v1:0",
"claude-3-opus": "anthropic.claude-3-opus-20240229-v1:0",
"claude-3-sonnet": "anthropic.claude-3-sonnet-20240229-v1:0",
"claude-3-haiku": "anthropic.claude-3-haiku-20240307-v1:0",
// Claude 4 Models (Latest - require inference profiles)
"claude-opus-4-20250514": "anthropic.claude-opus-4-20250514-v1:0",
"claude-sonnet-4-20250514": "anthropic.claude-sonnet-4-20250514-v1:0",
// Claude 3.7 Models
"claude-3-7-sonnet-20250219": "anthropic.claude-3-7-sonnet-20250219-v1:0",
// Claude 3.5 Models (Active)
"claude-3-5-sonnet-20241022": "anthropic.claude-3-5-sonnet-20241022-v2:0",
"claude-3-5-sonnet-20240620": "anthropic.claude-3-5-sonnet-20240620-v1:0",
"claude-3-5-haiku-20241022": "anthropic.claude-3-5-haiku-20241022-v1:0",
// Claude 3 Models (Active)
"claude-3-opus-20240229": "anthropic.claude-3-opus-20240229-v1:0",
"claude-3-sonnet-20240229": "anthropic.claude-3-sonnet-20240229-v1:0",
"claude-3-haiku-20240307": "anthropic.claude-3-haiku-20240307-v1:0",
// Legacy models (for backward compatibility)
"claude-instant-v1": "anthropic.claude-instant-v1",
"claude-v2": "anthropic.claude-v2",
"claude-v2:1": "anthropic.claude-v2:1",
};
// Bedrock Inference Profiles (for newer models that require them)
export const BEDROCK_INFERENCE_PROFILES = {
// Common name mappings
"claude-4": "anthropic.claude-sonnet-4",
"claude-3.7-sonnet": "anthropic.claude-3-7-sonnet",
"claude-3.5-sonnet": "anthropic.claude-3-5-sonnet-v2",
"claude-3.5-haiku": "anthropic.claude-3-5-haiku",
// Claude 4 models typically require inference profiles
"claude-opus-4-20250514": "anthropic.claude-opus-4",
"claude-sonnet-4-20250514": "anthropic.claude-sonnet-4",
// Claude 3.7 models
"claude-3-7-sonnet-20250219": "anthropic.claude-3-7-sonnet",
// Claude 3.5 models
"claude-3-5-sonnet-20241022": "anthropic.claude-3-5-sonnet-v2",
"claude-3-5-haiku-20241022": "anthropic.claude-3-5-haiku",
};
/**
* Get the Bedrock model ID for a given Anthropic model
*/
export function getBedrockModelId(anthropicModelId) {
return BEDROCK_MODEL_MAPPINGS[anthropicModelId] || anthropicModelId;
}
/**
* Get the Bedrock inference profile for a model (if required)
*/
export function getBedrockInferenceProfile(anthropicModelId) {
return BEDROCK_INFERENCE_PROFILES[anthropicModelId];
}
/**
* Check if a model requires an inference profile for Bedrock
*/
export function requiresInferenceProfile(anthropicModelId) {
return anthropicModelId in BEDROCK_INFERENCE_PROFILES;
}
/**
* Get Bedrock-compatible model configuration
*/
export function getBedrockModelConfig(anthropicModelId) {
return {
modelId: getBedrockModelId(anthropicModelId),
inferenceProfile: getBedrockInferenceProfile(anthropicModelId),
requiresProfile: requiresInferenceProfile(anthropicModelId),
};
}
//# sourceMappingURL=model-config.js.map