diff --git a/apps/web/src/components/ChatView.tsx b/apps/web/src/components/ChatView.tsx
index 3d5975578b98ef0fc50541e8f65db9ae484ffc80..e75f6f57949fce5aea4d3017af79eb9b610540d6 100644
--- a/apps/web/src/components/ChatView.tsx
+++ b/apps/web/src/components/ChatView.tsx
@@ -2153,13 +2153,7 @@ export default function ChatView({ threadId }: ChatViewProps) {
}
}
const title = truncateTitle(titleSeed);
- let threadCreateModel = selectedModel;
- if (!threadCreateModel) {
- threadCreateModel = activeProject.model;
- }
- if (!threadCreateModel) {
- threadCreateModel = DEFAULT_MODEL;
- }
+ let threadCreateModel: ModelSlug = selectedModel || (activeProject.model as ModelSlug) || DEFAULT_MODEL;
if (isLocalDraftThread) {
await api.orchestration.dispatchCommand({
@@ -2228,7 +2222,7 @@ export default function ChatView({ threadId }: ChatViewProps) {
},
model: selectedModel || undefined,
provider: selectedProvider,
- ...(supportsReasoningEffort ? { effort: selectedEffort } : {}),
+ ...(supportsReasoningEffort && selectedEffort ? { effort: selectedEffort } : {}),
assistantDeliveryMode: settings.enableAssistantStreaming ? "streaming" : "buffered",
approvalPolicy,
sandboxMode,
@@ -2387,7 +2381,7 @@ export default function ChatView({ threadId }: ChatViewProps) {
);
const onEffortSelect = useCallback(
(effort: CodexReasoningEffort) => {
- setSelectedEffort(effort);
+ setComposerDraftEffort(threadId, effort);
scheduleComposerFocus();
},
[scheduleComposerFocus, setComposerDraftEffort, threadId],
@@ -2850,11 +2844,13 @@ export default function ChatView({ threadId }: ChatViewProps) {
{/* Reasoning effort */}
-
+ {selectedEffort != null && (
+
+ )}
>
) : null}
diff --git a/packages/contracts/src/orchestration.ts b/packages/contracts/src/orchestration.ts
index 07ae9f850ba94898743b45a6a0ed04e1b9724e59..a807bac86eea5d67250153dfe09b9b284a08ebe9 100644
--- a/packages/contracts/src/orchestration.ts
+++ b/packages/contracts/src/orchestration.ts
@@ -348,6 +348,7 @@ export const ClientThreadTurnStartCommand = Schema.Struct({
text: Schema.String,
attachments: Schema.Array(UploadChatAttachment),
}),
+ provider: Schema.optional(ProviderKind),
model: Schema.optional(TrimmedNonEmptyString),
effort: Schema.optional(TrimmedNonEmptyString),
assistantDeliveryMode: Schema.optional(AssistantDeliveryMode),