mirror of
https://github.com/wu736139669/hapi.git
synced 2026-08-05 06:24:37 +00:00
Add support for claude 1M context. close #291
This commit is contained in:
@@ -8,6 +8,7 @@ import { claudeRemoteLauncher } from "./claudeRemoteLauncher"
|
||||
import { ApiClient } from "@/lib"
|
||||
import type { SessionModelMode } from "@/api/types"
|
||||
import type { ClaudePermissionMode } from "@hapi/protocol/types"
|
||||
import { resolveClaudeSessionModelMode } from "./modelMode"
|
||||
|
||||
export type PermissionMode = ClaudePermissionMode;
|
||||
|
||||
@@ -45,9 +46,7 @@ export async function loop(opts: LoopOptions) {
|
||||
const logPath = logger.logFilePath;
|
||||
const startedBy = opts.startedBy ?? 'terminal';
|
||||
const startingMode = opts.startingMode ?? 'local';
|
||||
const modelMode: SessionModelMode = opts.model === 'sonnet' || opts.model === 'opus'
|
||||
? opts.model
|
||||
: 'default';
|
||||
const modelMode: SessionModelMode = resolveClaudeSessionModelMode(opts.model)
|
||||
const session = new Session({
|
||||
api: opts.api,
|
||||
client: opts.session,
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import { resolveClaudeSessionModelMode } from './modelMode'
|
||||
|
||||
describe('resolveClaudeSessionModelMode', () => {
|
||||
it('returns default when model is missing', () => {
|
||||
expect(resolveClaudeSessionModelMode()).toBe('default')
|
||||
})
|
||||
|
||||
it('returns default for auto and unsupported models', () => {
|
||||
expect(resolveClaudeSessionModelMode('auto')).toBe('default')
|
||||
expect(resolveClaudeSessionModelMode('claude-sonnet-4-5')).toBe('default')
|
||||
})
|
||||
|
||||
it('returns standard Claude session model modes', () => {
|
||||
expect(resolveClaudeSessionModelMode('sonnet')).toBe('sonnet')
|
||||
expect(resolveClaudeSessionModelMode('opus')).toBe('opus')
|
||||
})
|
||||
|
||||
it('returns 1m Claude session model modes', () => {
|
||||
expect(resolveClaudeSessionModelMode('sonnet[1m]')).toBe('sonnet[1m]')
|
||||
expect(resolveClaudeSessionModelMode('opus[1m]')).toBe('opus[1m]')
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,18 @@
|
||||
import type { SessionModelMode } from '@/api/types'
|
||||
|
||||
const CLAUDE_SESSION_MODEL_MODES = new Set<SessionModelMode>([
|
||||
'sonnet',
|
||||
'sonnet[1m]',
|
||||
'opus',
|
||||
'opus[1m]'
|
||||
])
|
||||
|
||||
export function resolveClaudeSessionModelMode(model?: string): SessionModelMode {
|
||||
if (!model) {
|
||||
return 'default'
|
||||
}
|
||||
|
||||
return CLAUDE_SESSION_MODEL_MODES.has(model as SessionModelMode)
|
||||
? model as SessionModelMode
|
||||
: 'default'
|
||||
}
|
||||
@@ -17,6 +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';
|
||||
|
||||
export interface StartOptions {
|
||||
model?: string
|
||||
@@ -143,7 +144,7 @@ export async function runClaude(options: StartOptions = {}): Promise<void> {
|
||||
|
||||
// Forward messages to the queue
|
||||
let currentPermissionMode: PermissionMode = options.permissionMode ?? 'default';
|
||||
let currentModelMode: SessionModelMode = options.model === 'sonnet' || options.model === 'opus' ? options.model : 'default';
|
||||
let currentModelMode: SessionModelMode = resolveClaudeSessionModelMode(options.model);
|
||||
let currentFallbackModel: string | undefined = undefined; // Track current fallback model
|
||||
let currentCustomSystemPrompt: string | undefined = undefined; // Track current custom system prompt
|
||||
let currentAppendSystemPrompt: string | undefined = undefined; // Track current append system prompt
|
||||
|
||||
Reference in New Issue
Block a user