| import type { OpenAIMessagesDispatchModelConfig } from "@/types"; |
|
|
| export interface MessagesDispatchMappingRow { |
| claude_model: string; |
| target_model: string; |
| } |
|
|
| export interface MessagesDispatchFormState { |
| allow_messages_dispatch: boolean; |
| opus_mapped_model: string; |
| sonnet_mapped_model: string; |
| haiku_mapped_model: string; |
| exact_model_mappings: MessagesDispatchMappingRow[]; |
| } |
|
|
| export function createDefaultMessagesDispatchFormState(): MessagesDispatchFormState { |
| return { |
| allow_messages_dispatch: false, |
| opus_mapped_model: "gpt-5.4", |
| sonnet_mapped_model: "gpt-5.3-codex", |
| haiku_mapped_model: "gpt-5.4-mini", |
| exact_model_mappings: [], |
| }; |
| } |
|
|
| export function messagesDispatchConfigToFormState( |
| config?: OpenAIMessagesDispatchModelConfig | null, |
| ): MessagesDispatchFormState { |
| const defaults = createDefaultMessagesDispatchFormState(); |
| const exactMappings = Object.entries(config?.exact_model_mappings || {}) |
| .sort(([left], [right]) => left.localeCompare(right)) |
| .map(([claude_model, target_model]) => ({ claude_model, target_model })); |
|
|
| return { |
| allow_messages_dispatch: false, |
| opus_mapped_model: |
| config?.opus_mapped_model?.trim() || defaults.opus_mapped_model, |
| sonnet_mapped_model: |
| config?.sonnet_mapped_model?.trim() || defaults.sonnet_mapped_model, |
| haiku_mapped_model: |
| config?.haiku_mapped_model?.trim() || defaults.haiku_mapped_model, |
| exact_model_mappings: exactMappings, |
| }; |
| } |
|
|
| export function messagesDispatchFormStateToConfig( |
| state: MessagesDispatchFormState, |
| ): OpenAIMessagesDispatchModelConfig { |
| const exactModelMappings = Object.fromEntries( |
| state.exact_model_mappings |
| .map((row) => [row.claude_model.trim(), row.target_model.trim()] as const) |
| .filter(([claudeModel, targetModel]) => claudeModel && targetModel), |
| ); |
|
|
| return { |
| opus_mapped_model: state.opus_mapped_model.trim(), |
| sonnet_mapped_model: state.sonnet_mapped_model.trim(), |
| haiku_mapped_model: state.haiku_mapped_model.trim(), |
| exact_model_mappings: exactModelMappings, |
| }; |
| } |
|
|
| export function resetMessagesDispatchFormState( |
| target: MessagesDispatchFormState, |
| ): void { |
| const defaults = createDefaultMessagesDispatchFormState(); |
| target.allow_messages_dispatch = defaults.allow_messages_dispatch; |
| target.opus_mapped_model = defaults.opus_mapped_model; |
| target.sonnet_mapped_model = defaults.sonnet_mapped_model; |
| target.haiku_mapped_model = defaults.haiku_mapped_model; |
| target.exact_model_mappings = []; |
| } |
|
|