History

Fix redundant extractModelSelectionOptions call and prevent silent model options injection on session restart

- 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

Cursor Agent committed 7 months ago

Commit 73c8d111 parent 07e86e92 files · +10 −14Browse files

Unified · Split

2 files
  1. apps/server/src/orchestration/Layers/ProviderCommandReactor.ts +4 −1
  2. apps/web/src/components/ChatView.tsx +6 −13
apps/server/src/orchestration/Layers/ProviderCommandReactor.ts+4−1
@@ -249,7 +249,10 @@ const make = Effect.gen(function* () { · 248 unmodified lines
249 const desiredModelSelection = requestedModelSelection ?? thread.modelSelection;249 const desiredModelSelection = requestedModelSelection ?? thread.modelSelection;
250 const desiredModel = desiredModelSelection.model;250 const desiredModel = desiredModelSelection.model;
251 const desiredModelOptions =251 const desiredModelOptions =
252 options?.modelOptions ?? toProviderModelOptions(desiredModelSelection);252 options?.modelOptions ??
253 (requestedModelSelection !== undefined
254 ? toProviderModelOptions(requestedModelSelection)
255 : undefined);
253 const effectiveCwd = resolveThreadWorkspaceCwd({256 const effectiveCwd = resolveThreadWorkspaceCwd({
254 thread,257 thread,
255 projects: readModel.projects,258 projects: readModel.projects,
apps/web/src/components/ChatView.tsx+6−13
@@ -643,21 +643,14 @@ export default function ChatView({ threadId }: ChatViewProps) { · 642 unmodified lines
643 );643 );
644 const selectedPromptEffort = composerProviderState.promptEffort;644 const selectedPromptEffort = composerProviderState.promptEffort;
645 const selectedModelOptionsForDispatch = composerProviderState.modelOptionsForDispatch;645 const selectedModelOptionsForDispatch = composerProviderState.modelOptionsForDispatch;
646 const selectedModelSelection = useMemo<ModelSelection>(646 const selectedModelSelection = useMemo<ModelSelection>(() => {
647 () => ({647 const options = extractModelSelectionOptions(selectedProvider, selectedModelOptionsForDispatch);
648 return {
648 provider: selectedProvider,649 provider: selectedProvider,
649 model: selectedModel,650 model: selectedModel,
650 ...(extractModelSelectionOptions(selectedProvider, selectedModelOptionsForDispatch)651 ...(options ? { options } : {}),
651 ? {652 };
652 options: extractModelSelectionOptions(653 }, [selectedModel, selectedModelOptionsForDispatch, selectedProvider]);
653 selectedProvider,
654 selectedModelOptionsForDispatch,
655 ),
656 }
657 : {}),
658 }),
659 [selectedModel, selectedModelOptionsForDispatch, selectedProvider],
660 );
661 const providerOptionsForDispatch = useMemo(() => getProviderStartOptions(settings), [settings]);654 const providerOptionsForDispatch = useMemo(() => getProviderStartOptions(settings), [settings]);
662 const selectedModelForPicker = selectedModel;655 const selectedModelForPicker = selectedModel;
663 const modelOptionsByProvider = useMemo(656 const modelOptionsByProvider = useMemo(