mirror of
https://gitee.com/wanwujie/sub2api
synced 2026-05-05 21:50:44 +08:00
73 lines
2.5 KiB
TypeScript
73 lines
2.5 KiB
TypeScript
|
|
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 = [];
|
||
|
|
}
|