Browse Source

节点尺寸处理

feature/071
yun 2 weeks ago
parent
commit
d8d64522fd
  1. 8
      src/constants/generationPreferenceDefaults.ts
  2. 21
      src/store/__tests__/generationPreferenceStore.test.ts
  3. 9
      src/store/generationPreferenceStore.ts
  4. 14
      src/store/utils/defaultImageModel.ts

8
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";

21
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 },
});
});

9
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,

14
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 !== "";

Loading…
Cancel
Save