- ChatView: Store extractModelSelectionOptions result in a local variable instead of calling it twice with identical arguments in selectedModelSelection useMemo - ProviderCommandReactor: Only derive model options from requestedModelSelection (explicit user request), not from thread.modelSelection fallback, to prevent silent injection of persisted options during runtime-mode-triggered session restarts
Unified · Split
| @@ -249,7 +249,10 @@ const make = Effect.gen(function* () { · 248 unmodified lines | ||
| 249 | 249 | const desiredModelSelection = requestedModelSelection ?? thread.modelSelection; |
| 250 | 250 | const desiredModel = desiredModelSelection.model; |
| 251 | 251 | const desiredModelOptions = |
| 252 | − options?.modelOptions ?? toProviderModelOptions(desiredModelSelection); | |
| 252 | + options?.modelOptions ?? | |
| 253 | + (requestedModelSelection !== undefined | |
| 254 | + ? toProviderModelOptions(requestedModelSelection) | |
| 255 | + : undefined); | |
| 253 | 256 | const effectiveCwd = resolveThreadWorkspaceCwd({ |
| 254 | 257 | thread, |
| 255 | 258 | projects: readModel.projects, |
| @@ -643,21 +643,14 @@ export default function ChatView({ threadId }: ChatViewProps) { · 642 unmodified lines | ||
| 643 | 643 | ); |
| 644 | 644 | const selectedPromptEffort = composerProviderState.promptEffort; |
| 645 | 645 | const selectedModelOptionsForDispatch = composerProviderState.modelOptionsForDispatch; |
| 646 | − const selectedModelSelection = useMemo<ModelSelection>( | |
| 647 | − () => ({ | |
| 646 | + const selectedModelSelection = useMemo<ModelSelection>(() => { | |
| 647 | + const options = extractModelSelectionOptions(selectedProvider, selectedModelOptionsForDispatch); | |
| 648 | + return { | |
| 648 | 649 | provider: selectedProvider, |
| 649 | 650 | model: selectedModel, |
| 650 | − ...(extractModelSelectionOptions(selectedProvider, selectedModelOptionsForDispatch) | |
| 651 | − ? { | |
| 652 | − options: extractModelSelectionOptions( | |
| 653 | − selectedProvider, | |
| 654 | − selectedModelOptionsForDispatch, | |
| 655 | − ), | |
| 656 | − } | |
| 657 | − : {}), | |
| 658 | − }), | |
| 659 | − [selectedModel, selectedModelOptionsForDispatch, selectedProvider], | |
| 660 | − ); | |
| 651 | + ...(options ? { options } : {}), | |
| 652 | + }; | |
| 653 | + }, [selectedModel, selectedModelOptionsForDispatch, selectedProvider]); | |
| 661 | 654 | const providerOptionsForDispatch = useMemo(() => getProviderStartOptions(settings), [settings]); |
| 662 | 655 | const selectedModelForPicker = selectedModel; |
| 663 | 656 | const modelOptionsByProvider = useMemo( |