# @automaker/model-resolver

Claude model resolution and mapping utilities.

## Overview

This package handles Claude model resolution, converting user-friendly aliases to actual Claude model identifiers and providing default model configurations.

## Installation

```bash
npm install @automaker/model-resolver
```

## Exports

### Model Resolution

Convert model aliases to full model identifiers.

```typescript
import { resolveModelString, DEFAULT_MODELS } from '@automaker/model-resolver';
import { CLAUDE_MODEL_MAP } from '@automaker/types';

// Resolve model string
const model = resolveModelString('sonnet');
// Returns: 'claude-sonnet-4-20250514'

const model2 = resolveModelString('haiku');
// Returns: 'claude-haiku-4-5'

const model3 = resolveModelString('opus');
// Returns: 'claude-opus-4-5-20251101'

// Use with custom default
const model4 = resolveModelString(undefined, 'claude-sonnet-4-20250514');
// Returns: 'claude-sonnet-4-20250514' (default)

// Direct model ID passthrough
const model5 = resolveModelString('claude-opus-4-5-20251101');
// Returns: 'claude-opus-4-5-20251101' (unchanged)
```

### Get Effective Model

Get the actual model that will be used.

```typescript
import { getEffectiveModel } from '@automaker/model-resolver';

// Get effective model with fallback chain
const model = getEffectiveModel({
  requestedModel: 'sonnet',
  featureModel: undefined,
  defaultModel: 'claude-sonnet-4-20250514',
});
```

### Model Constants

Access model mappings and defaults.

```typescript
import { DEFAULT_MODELS } from '@automaker/model-resolver';
import { CLAUDE_MODEL_MAP } from '@automaker/types';

// Default models for different contexts
console.log(DEFAULT_MODELS.claude); // 'claude-sonnet-4-20250514'
console.log(DEFAULT_MODELS.autoMode); // 'claude-sonnet-4-20250514'
console.log(DEFAULT_MODELS.chat); // 'claude-sonnet-4-20250514'

// Model alias mappings
console.log(CLAUDE_MODEL_MAP.haiku); // 'claude-haiku-4-5'
console.log(CLAUDE_MODEL_MAP.sonnet); // 'claude-sonnet-4-20250514'
console.log(CLAUDE_MODEL_MAP.opus); // 'claude-opus-4-5-20251101'
```

## Usage Example

```typescript
import { resolveModelString, DEFAULT_MODELS } from '@automaker/model-resolver';
import type { Feature } from '@automaker/types';

function prepareFeatureExecution(feature: Feature) {
  // Resolve model from feature or use default
  const model = resolveModelString(feature.model, DEFAULT_MODELS.autoMode);

  console.log(`Executing feature with model: ${model}`);

  return {
    featureId: feature.id,
    model,
    // ... other options
  };
}

// Example usage
const feature: Feature = {
  id: 'auth-feature',
  category: 'backend',
  description: 'Add authentication',
  model: 'opus', // User-friendly alias
};

prepareFeatureExecution(feature);
// Output: Executing feature with model: claude-opus-4-5-20251101
```

## Supported Models

### Current Model Aliases

- `haiku` → `claude-haiku-4-5`
- `sonnet` → `claude-sonnet-4-20250514`
- `opus` → `claude-opus-4-5-20251101`

### Model Selection Guide

- **Haiku**: Fast responses, simple tasks, lower cost
- **Sonnet**: Balanced performance, most tasks (recommended default)
- **Opus**: Maximum capability, complex reasoning, highest cost

## Dependencies

- `@automaker/types` - Model type definitions and constants

## Used By

- `@automaker/server` - Feature execution, agent chat, enhancement

## Notes

- Model strings that don't match aliases are passed through unchanged
- This allows direct use of specific model versions like `claude-sonnet-4-20250514`
- Always falls back to a sensible default if no model is specified
