mirror of
https://github.com/wu736139669/hapi.git
synced 2026-08-09 07:29:51 +00:00
feat(cursor): support model selection (#684)
This commit is contained in:
@@ -31,6 +31,7 @@ import { TeamPanel } from '@/components/TeamPanel'
|
||||
import { usePlatform } from '@/hooks/usePlatform'
|
||||
import { useSessionActions } from '@/hooks/mutations/useSessionActions'
|
||||
import { useCodexModels } from '@/hooks/queries/useCodexModels'
|
||||
import { useCursorModels } from '@/hooks/queries/useCursorModels'
|
||||
import { useOpencodeModels } from '@/hooks/queries/useOpencodeModels'
|
||||
import { useVoiceOptional } from '@/lib/voice-context'
|
||||
import { RealtimeVoiceSession, registerSessionStore, registerVoiceHooksStore, voiceHooks } from '@/realtime'
|
||||
@@ -167,6 +168,26 @@ export function SessionChat(props: {
|
||||
label: opencodeModel.name ?? opencodeModel.modelId
|
||||
}))
|
||||
}, [agentFlavor, opencodeModelsState.availableModels])
|
||||
const cursorModelsState = useCursorModels({
|
||||
api: props.api,
|
||||
sessionId: props.session.id,
|
||||
enabled: agentFlavor === 'cursor' && props.session.active
|
||||
})
|
||||
const cursorModelOptions = useMemo(() => {
|
||||
if (agentFlavor !== 'cursor') {
|
||||
return undefined
|
||||
}
|
||||
|
||||
return [
|
||||
{ value: null, label: 'Default' },
|
||||
...cursorModelsState.availableModels
|
||||
.filter((cursorModel) => cursorModel.modelId !== 'auto')
|
||||
.map((cursorModel) => ({
|
||||
value: cursorModel.modelId,
|
||||
label: cursorModel.name ?? cursorModel.modelId
|
||||
}))
|
||||
]
|
||||
}, [agentFlavor, cursorModelsState.availableModels])
|
||||
const {
|
||||
abortSession,
|
||||
switchSession,
|
||||
@@ -605,9 +626,11 @@ export function SessionChat(props: {
|
||||
availableModelOptions={
|
||||
agentFlavor === 'codex'
|
||||
? codexModelOptions
|
||||
: agentFlavor === 'opencode'
|
||||
? opencodeModelOptions
|
||||
: undefined
|
||||
: agentFlavor === 'cursor'
|
||||
? cursorModelOptions
|
||||
: agentFlavor === 'opencode'
|
||||
? opencodeModelOptions
|
||||
: undefined
|
||||
}
|
||||
active={props.session.active}
|
||||
allowSendWhenInactive
|
||||
@@ -627,7 +650,9 @@ export function SessionChat(props: {
|
||||
onModelChange={
|
||||
agentFlavor === 'codex'
|
||||
? (props.session.active && !controlledByUser && !codexModelsState.error ? handleModelChange : undefined)
|
||||
: handleModelChange
|
||||
: agentFlavor === 'cursor'
|
||||
? (props.session.active && !cursorModelsState.error ? handleModelChange : undefined)
|
||||
: handleModelChange
|
||||
}
|
||||
onModelReasoningEffortChange={
|
||||
agentFlavor === 'codex' && props.session.active && !controlledByUser
|
||||
|
||||
Reference in New Issue
Block a user