authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-10-11 20:46:47-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-10-12 03:46:47+00:00
loge688034b5f5505f92fcf1d78ba853c9c0107f9f1
tree520f95663d5e4c1502858b1b5d36ea8a8bf9601f
parent2e24ec44dbf3047ab248487ec1d05836e94775e4
signature Signed by PGP key B5690EEEBB952194

feat(web): model options for source control writer and review guide models (#18488)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

1 files changed, 62 insertions(+), 0 deletions(-)

apps/web/src/components/settings/SourceControlWritingSettings.tsx+62
......@@ -27,9 +27,11 @@ import {
2727import {
2828 getCustomModelOptionsByInstance,
2929 resolveAppModelSelectionState,
30 selectsPlanAgent,
3031} from "../../modelSelection";
3132import { EMPTY_SERVER_PROVIDERS } from "../../state/server";
3233import { ProviderModelPicker } from "../chat/ProviderModelPicker";
34import { TraitsPicker } from "../chat/TraitsPicker";
3335import { Select, SelectItem, SelectPopup, SelectTrigger, SelectValue } from "../ui/select";
3436import { Switch } from "../ui/switch";
3537import { Textarea } from "../ui/textarea";
......@@ -149,6 +151,9 @@ export function SourceControlWritingSettingsSection() {
149151 activeSelection.model,
150152 );
151153 const writerModelDisabledReason = useScopedModelDisabledReason(settings, instanceEntries);
154 const writerInstanceEntry = instanceEntries.find(
155 (entry) => entry.instanceId === activeSelection.instanceId,
156 );
152157 const usesReviewGuideModel = settings.reviewGuideModelSelection !== null;
153158 const reviewGuideSelection = resolveAppModelSelectionState(
154159 {
......@@ -168,6 +173,9 @@ export function SourceControlWritingSettingsSection() {
168173 reviewGuideSelection.instanceId,
169174 reviewGuideSelection.model,
170175 );
176 const reviewGuideInstanceEntry = instanceEntries.find(
177 (entry) => entry.instanceId === reviewGuideSelection.instanceId,
178 );
171179
172180 return (
173181 <SettingsSection id="source-control-text-generation" title="Text generation">
......@@ -381,6 +389,33 @@ export function SourceControlWritingSettingsSection() {
381389 }}
382390 />
383391 ) : null}
392 {usesDedicatedModel &&
393 canEnableDedicatedModel &&
394 !mixedWriterModel &&
395 writerInstanceEntry ? (
396 <TraitsPicker
397 provider={writerInstanceEntry.driverKind}
398 models={writerInstanceEntry.models}
399 model={activeSelection.model}
400 prompt=""
401 onPromptChange={() => {}}
402 modelOptions={activeSelection.options ?? []}
403 allowPromptInjectedEffort={false}
404 planModeEnabled={
405 settings.planModeEnabled || selectsPlanAgent(activeSelection.options)
406 }
407 triggerClassName={SETTINGS_PICKER_TRIGGER_CLASSNAME}
408 onModelOptionsChange={(options) =>
409 updateSettings({
410 sourceControlWriterModelSelection: createModelSelection(
411 activeSelection.instanceId,
412 activeSelection.model,
413 options,
414 ),
415 })
416 }
417 />
418 ) : null}
384419 <Switch
385420 checked={usesDedicatedModel}
386421 disabled={!usesDedicatedModel && !canEnableDedicatedModel}
......@@ -461,6 +496,33 @@ export function SourceControlWritingSettingsSection() {
461496 }}
462497 />
463498 ) : null}
499 {usesReviewGuideModel &&
500 canEnableDedicatedModel &&
501 !mixedReviewGuideModel &&
502 reviewGuideInstanceEntry ? (
503 <TraitsPicker
504 provider={reviewGuideInstanceEntry.driverKind}
505 models={reviewGuideInstanceEntry.models}
506 model={reviewGuideSelection.model}
507 prompt=""
508 onPromptChange={() => {}}
509 modelOptions={reviewGuideSelection.options ?? []}
510 allowPromptInjectedEffort={false}
511 planModeEnabled={
512 settings.planModeEnabled || selectsPlanAgent(reviewGuideSelection.options)
513 }
514 triggerClassName={SETTINGS_PICKER_TRIGGER_CLASSNAME}
515 onModelOptionsChange={(options) =>
516 updateSettings({
517 reviewGuideModelSelection: createModelSelection(
518 reviewGuideSelection.instanceId,
519 reviewGuideSelection.model,
520 options,
521 ),
522 })
523 }
524 />
525 ) : null}
464526 <Switch
465527 mixed={mixedReviewGuideModel}
466528 checked={mixedReviewGuideModel ? false : usesReviewGuideModel}