From d8d64522fd1820a40d61946b2a21b08eac6ed137 Mon Sep 17 00:00:00 2001 From: yun Date: Thu, 2 Jul 2026 17:46:40 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8A=82=E7=82=B9=E5=B0=BA=E5=AF=B8=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/constants/generationPreferenceDefaults.ts | 8 +++++++ .../generationPreferenceStore.test.ts | 21 ++++++++++++++++--- src/store/generationPreferenceStore.ts | 9 ++++++-- src/store/utils/defaultImageModel.ts | 14 +++++++++---- 4 files changed, 43 insertions(+), 9 deletions(-) create mode 100644 src/constants/generationPreferenceDefaults.ts diff --git a/src/constants/generationPreferenceDefaults.ts b/src/constants/generationPreferenceDefaults.ts new file mode 100644 index 00000000..27bc868a --- /dev/null +++ b/src/constants/generationPreferenceDefaults.ts @@ -0,0 +1,8 @@ +export const DEFAULT_IMAGE_GENERATION_MODEL_ID = "gpt-image-2-all"; +export const DEFAULT_IMAGE_GENERATION_ASPECT_RATIO = "9:16"; + +export const DEFAULT_VIDEO_GENERATION_MODEL_ID = "viduq3-turbo"; +export const DEFAULT_VIDEO_GENERATION_ASPECT_RATIO = "16:9"; + +export const DEFAULT_AUDIO_GENERATION_MODEL_ID = "speech-2.8-hd"; +export const DEFAULT_LLM_GENERATION_MODEL_ID = "doubao-seed-2-0-lite-260428"; diff --git a/src/store/__tests__/generationPreferenceStore.test.ts b/src/store/__tests__/generationPreferenceStore.test.ts index 6a217d58..fc027957 100644 --- a/src/store/__tests__/generationPreferenceStore.test.ts +++ b/src/store/__tests__/generationPreferenceStore.test.ts @@ -1,6 +1,12 @@ import { describe, expect, it, beforeEach } from "vitest"; import { useGenerationPreferenceStore, createInitialGenerationPreferences } from "@/store/generationPreferenceStore"; import { buildDefaultGenerationNodeCreation, buildDefaultGenerationNodeData } from "@/utils/defaultGenerationNodeModel"; +import { + DEFAULT_IMAGE_GENERATION_ASPECT_RATIO, + DEFAULT_IMAGE_GENERATION_MODEL_ID, + DEFAULT_VIDEO_GENERATION_ASPECT_RATIO, + DEFAULT_VIDEO_GENERATION_MODEL_ID, +} from "@/constants/generationPreferenceDefaults"; import type { SelectedModel } from "@/types"; const selectedModel: SelectedModel = { @@ -18,6 +24,15 @@ describe("generationPreferenceStore", () => { useGenerationPreferenceStore.setState(createInitialGenerationPreferences()); }); + it("initializes image and video preferences from default generation config", async () => { + const { image, video } = useGenerationPreferenceStore.getState(); + expect(image.model.modelId).toBe(DEFAULT_IMAGE_GENERATION_MODEL_ID); + expect(image.aspectRatio).toBe(DEFAULT_IMAGE_GENERATION_ASPECT_RATIO); + expect(image.parameters).toEqual({ ratio: DEFAULT_IMAGE_GENERATION_ASPECT_RATIO }); + expect(video.model.modelId).toBe(DEFAULT_VIDEO_GENERATION_MODEL_ID); + expect(video.parameters).toEqual({ ratio: DEFAULT_VIDEO_GENERATION_ASPECT_RATIO }); + }); + it("keeps only model configuration fields when remembering image preferences", async () => { useGenerationPreferenceStore.getState().updateImagePreference({ selectedModel, @@ -83,7 +98,7 @@ describe("generationPreferenceStore", () => { }); }); - it("does not use remembered node size when creating generation nodes without ratio", async () => { + it("uses configured video ratio when creating generation nodes from default preferences", async () => { useGenerationPreferenceStore.getState().updateVideoPreference({ selectedModel: { provider: "popiserver", @@ -91,12 +106,12 @@ describe("generationPreferenceStore", () => { displayName: "Video Model", capabilities: ["text-to-video"], }, - parameters: { duration: 5 }, + parameters: { ratio: DEFAULT_VIDEO_GENERATION_ASPECT_RATIO }, }); await expect(buildDefaultGenerationNodeCreation("generateVideo")).resolves.toEqual({ data: expect.any(Object), - size: undefined, + size: { width: 360, height: 203 }, }); }); diff --git a/src/store/generationPreferenceStore.ts b/src/store/generationPreferenceStore.ts index f47829b9..f34c21cc 100644 --- a/src/store/generationPreferenceStore.ts +++ b/src/store/generationPreferenceStore.ts @@ -5,6 +5,10 @@ import { createPopiserverDefaultImageModel, createPopiserverDefaultVideoModel, } from "@/store/utils/defaultImageModel"; +import { + DEFAULT_IMAGE_GENERATION_ASPECT_RATIO, + DEFAULT_VIDEO_GENERATION_ASPECT_RATIO, +} from "@/constants/generationPreferenceDefaults"; export type GenerationPreferenceType = "image" | "video" | "audio"; @@ -117,9 +121,10 @@ function createInitialImagePreference(): ImageGenerationPreference { return { type: "image", model: createPopiserverDefaultImageModel(), - aspectRatio: "9:16", + aspectRatio: DEFAULT_IMAGE_GENERATION_ASPECT_RATIO, resolution: "1K", batchSize: 1, + parameters: { ratio: DEFAULT_IMAGE_GENERATION_ASPECT_RATIO }, }; } @@ -128,7 +133,7 @@ function createInitialVideoPreference(): VideoGenerationPreference { return { type: "video", model, - parameters: {}, + parameters: { ratio: DEFAULT_VIDEO_GENERATION_ASPECT_RATIO }, extraTaskParams: {}, subType: model.subType, batchSize: 1, diff --git a/src/store/utils/defaultImageModel.ts b/src/store/utils/defaultImageModel.ts index 325510b8..4640e67d 100644 --- a/src/store/utils/defaultImageModel.ts +++ b/src/store/utils/defaultImageModel.ts @@ -1,11 +1,17 @@ import type { SelectedModel } from "@/types"; import type { ProviderModel } from "@/lib/providers/types"; import { POPI_PROVIDER_ID } from "@/lib/providerMode"; +import { + DEFAULT_AUDIO_GENERATION_MODEL_ID, + DEFAULT_IMAGE_GENERATION_MODEL_ID, + DEFAULT_LLM_GENERATION_MODEL_ID, + DEFAULT_VIDEO_GENERATION_MODEL_ID, +} from "@/constants/generationPreferenceDefaults"; -export const POPISERVER_DEFAULT_IMAGE_MODEL_ID = "gpt-image-2-all"; -export const POPISERVER_DEFAULT_VIDEO_MODEL_ID = "viduq3-turbo"; -export const POPISERVER_DEFAULT_AUDIO_MODEL_ID = "speech-2.8-hd"; -export const POPISERVER_DEFAULT_LLM_MODEL_ID = "doubao-seed-2-0-lite-260428"; +export const POPISERVER_DEFAULT_IMAGE_MODEL_ID = DEFAULT_IMAGE_GENERATION_MODEL_ID; +export const POPISERVER_DEFAULT_VIDEO_MODEL_ID = DEFAULT_VIDEO_GENERATION_MODEL_ID; +export const POPISERVER_DEFAULT_AUDIO_MODEL_ID = DEFAULT_AUDIO_GENERATION_MODEL_ID; +export const POPISERVER_DEFAULT_LLM_MODEL_ID = DEFAULT_LLM_GENERATION_MODEL_ID; function hasValue(value: unknown): boolean { return value !== undefined && value !== null && value !== "";