| ... | ... | @@ -1,10 +1,10 @@ |
| 1 | 1 | import { |
| 2 | | DEFAULT_REASONING, |
| 2 | DEFAULT_REASONING_EFFORT_BY_PROVIDER, |
| 3 | 3 | ProjectId, |
| 4 | | REASONING_OPTIONS, |
| 4 | REASONING_EFFORT_OPTIONS_BY_PROVIDER, |
| 5 | 5 | ThreadId, |
| 6 | 6 | normalizeModelSlug, |
| 7 | | type ReasoningEffort, |
| 7 | type CodexReasoningEffort, |
| 8 | 8 | } from "@t3tools/contracts"; |
| 9 | 9 | import type { ChatImageAttachment } from "./types"; |
| 10 | 10 | import { create } from "zustand"; |
| ... | ... | @@ -30,7 +30,7 @@ interface PersistedComposerThreadDraftState { |
| 30 | 30 | prompt: string; |
| 31 | 31 | attachments: PersistedComposerImageAttachment[]; |
| 32 | 32 | model?: string | null; |
| 33 | | effort?: ReasoningEffort | null; |
| 33 | effort?: CodexReasoningEffort | null; |
| 34 | 34 | } |
| 35 | 35 | |
| 36 | 36 | interface PersistedDraftThreadState { |
| ... | ... | @@ -53,7 +53,7 @@ interface ComposerThreadDraftState { |
| 53 | 53 | nonPersistedImageIds: string[]; |
| 54 | 54 | persistedAttachments: PersistedComposerImageAttachment[]; |
| 55 | 55 | model: string | null; |
| 56 | | effort: ReasoningEffort | null; |
| 56 | effort: CodexReasoningEffort | null; |
| 57 | 57 | } |
| 58 | 58 | |
| 59 | 59 | export interface DraftThreadState { |
| ... | ... | @@ -99,7 +99,7 @@ interface ComposerDraftStoreState { |
| 99 | 99 | clearDraftThread: (threadId: ThreadId) => void; |
| 100 | 100 | setPrompt: (threadId: ThreadId, prompt: string) => void; |
| 101 | 101 | setModel: (threadId: ThreadId, model: string | null | undefined) => void; |
| 102 | | setEffort: (threadId: ThreadId, effort: ReasoningEffort | null | undefined) => void; |
| 102 | setEffort: (threadId: ThreadId, effort: CodexReasoningEffort | null | undefined) => void; |
| 103 | 103 | addImage: (threadId: ThreadId, image: ComposerImageAttachment) => void; |
| 104 | 104 | addImages: (threadId: ThreadId, images: ComposerImageAttachment[]) => void; |
| 105 | 105 | removeImage: (threadId: ThreadId, imageId: string) => void; |
| ... | ... | @@ -133,7 +133,9 @@ const EMPTY_THREAD_DRAFT = Object.freeze({ |
| 133 | 133 | effort: null, |
| 134 | 134 | }) as ComposerThreadDraftState; |
| 135 | 135 | |
| 136 | | const REASONING_EFFORT_VALUES = new Set<ReasoningEffort>(REASONING_OPTIONS); |
| 136 | const REASONING_EFFORT_VALUES = new Set<CodexReasoningEffort>( |
| 137 | REASONING_EFFORT_OPTIONS_BY_PROVIDER.codex, |
| 138 | ); |
| 137 | 139 | |
| 138 | 140 | function createEmptyThreadDraft(): ComposerThreadDraftState { |
| 139 | 141 | return { |
| ... | ... | @@ -310,8 +312,8 @@ function normalizePersistedComposerDraftState(value: unknown): PersistedComposer |
| 310 | 312 | const effortCandidate = |
| 311 | 313 | typeof draftCandidate.effort === "string" ? draftCandidate.effort : null; |
| 312 | 314 | const effort = |
| 313 | | effortCandidate && REASONING_EFFORT_VALUES.has(effortCandidate as ReasoningEffort) |
| 314 | | ? (effortCandidate as ReasoningEffort) |
| 315 | effortCandidate && REASONING_EFFORT_VALUES.has(effortCandidate as CodexReasoningEffort) |
| 316 | ? (effortCandidate as CodexReasoningEffort) |
| 315 | 317 | : null; |
| 316 | 318 | if (prompt.length === 0 && attachments.length === 0 && !model && !effort) { |
| 317 | 319 | continue; |
| ... | ... | @@ -706,7 +708,9 @@ export const useComposerDraftStore = create<ComposerDraftStoreState>()( |
| 706 | 708 | return; |
| 707 | 709 | } |
| 708 | 710 | const nextEffort = |
| 709 | | effort && REASONING_EFFORT_VALUES.has(effort) && effort !== DEFAULT_REASONING |
| 711 | effort && |
| 712 | REASONING_EFFORT_VALUES.has(effort) && |
| 713 | effort !== DEFAULT_REASONING_EFFORT_BY_PROVIDER.codex |
| 710 | 714 | ? effort |
| 711 | 715 | : null; |
| 712 | 716 | set((state) => { |