mirror of
https://github.com/wu736139669/hapi.git
synced 2026-08-05 06:24:37 +00:00
unify model selection
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import { resolveClaudeSessionModelMode } from './modelMode'
|
||||
import { resolveClaudePersistedModel, resolveClaudeSessionModelMode } from './modelMode'
|
||||
|
||||
describe('resolveClaudeSessionModelMode', () => {
|
||||
it('returns default when model is missing', () => {
|
||||
@@ -21,3 +21,19 @@ describe('resolveClaudeSessionModelMode', () => {
|
||||
expect(resolveClaudeSessionModelMode('opus[1m]')).toBe('opus[1m]')
|
||||
})
|
||||
})
|
||||
|
||||
describe('resolveClaudePersistedModel', () => {
|
||||
it('skips missing, auto, default, and representable mode names', () => {
|
||||
expect(resolveClaudePersistedModel()).toBeUndefined()
|
||||
expect(resolveClaudePersistedModel('')).toBeUndefined()
|
||||
expect(resolveClaudePersistedModel('auto')).toBeUndefined()
|
||||
expect(resolveClaudePersistedModel('default')).toBeUndefined()
|
||||
expect(resolveClaudePersistedModel('sonnet')).toBeUndefined()
|
||||
expect(resolveClaudePersistedModel('opus[1m]')).toBeUndefined()
|
||||
})
|
||||
|
||||
it('persists unsupported custom Claude model strings', () => {
|
||||
expect(resolveClaudePersistedModel('claude-3-7-sonnet-latest')).toBe('claude-3-7-sonnet-latest')
|
||||
expect(resolveClaudePersistedModel(' claude-opus-4-1-20250805 ')).toBe('claude-opus-4-1-20250805')
|
||||
})
|
||||
})
|
||||
|
||||
@@ -8,11 +8,23 @@ const CLAUDE_SESSION_MODEL_MODES = new Set<SessionModelMode>([
|
||||
])
|
||||
|
||||
export function resolveClaudeSessionModelMode(model?: string): SessionModelMode {
|
||||
if (!model) {
|
||||
const trimmedModel = model?.trim()
|
||||
if (!trimmedModel) {
|
||||
return 'default'
|
||||
}
|
||||
|
||||
return CLAUDE_SESSION_MODEL_MODES.has(model as SessionModelMode)
|
||||
? model as SessionModelMode
|
||||
return CLAUDE_SESSION_MODEL_MODES.has(trimmedModel as SessionModelMode)
|
||||
? trimmedModel as SessionModelMode
|
||||
: 'default'
|
||||
}
|
||||
|
||||
export function resolveClaudePersistedModel(model?: string): string | undefined {
|
||||
const trimmedModel = model?.trim()
|
||||
if (!trimmedModel || trimmedModel === 'auto' || trimmedModel === 'default') {
|
||||
return undefined
|
||||
}
|
||||
|
||||
return resolveClaudeSessionModelMode(trimmedModel) === 'default'
|
||||
? trimmedModel
|
||||
: undefined
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ import { createModeChangeHandler, createRunnerLifecycle, setControlledByUser } f
|
||||
import { isModelModeAllowedForFlavor, isPermissionModeAllowedForFlavor } from '@hapi/protocol';
|
||||
import { ModelModeSchema, PermissionModeSchema } from '@hapi/protocol/schemas';
|
||||
import { formatMessageWithAttachments } from '@/utils/attachmentFormatter';
|
||||
import { resolveClaudeSessionModelMode } from './modelMode';
|
||||
import { resolveClaudePersistedModel, resolveClaudeSessionModelMode } from './modelMode';
|
||||
|
||||
export interface StartOptions {
|
||||
model?: string
|
||||
@@ -50,7 +50,8 @@ export async function runClaude(options: StartOptions = {}): Promise<void> {
|
||||
flavor: 'claude',
|
||||
startedBy,
|
||||
workingDirectory,
|
||||
agentState: initialState
|
||||
agentState: initialState,
|
||||
model: resolveClaudePersistedModel(options.model)
|
||||
});
|
||||
logger.debug(`Session created: ${sessionInfo.id}`);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user