feat(edutainment): refresh baby object match flow

This commit is contained in:
2026-05-16 11:29:28 +08:00
parent 49ffa6b901
commit 45daca3647
24 changed files with 6616 additions and 659 deletions

View File

@@ -69,14 +69,6 @@ describe('babyObjectMatchClient', () => {
generationProvider: 'vector-engine-gpt-image-2',
prompt: 'background prompt',
},
{
assetId: 'server-ui',
assetKind: 'ui-frame',
imageSrc: 'data:image/png;base64,ui',
assetObjectId: null,
generationProvider: 'vector-engine-gpt-image-2',
prompt: 'ui prompt',
},
{
assetId: 'server-gift',
assetKind: 'gift-box',
@@ -93,14 +85,6 @@ describe('babyObjectMatchClient', () => {
generationProvider: 'vector-engine-gpt-image-2',
prompt: 'basket prompt',
},
{
assetId: 'server-smoke',
assetKind: 'smoke-puff',
imageSrc: 'data:image/png;base64,smoke',
assetObjectId: null,
generationProvider: 'vector-engine-gpt-image-2',
prompt: 'smoke prompt',
},
],
},
}),
@@ -127,7 +111,7 @@ describe('babyObjectMatchClient', () => {
expect(response.draft.itemAssets[0]?.generationProvider).toBe(
'vector-engine-gpt-image-2',
);
expect(response.draft.visualPackage?.assets).toHaveLength(5);
expect(response.draft.visualPackage?.assets).toHaveLength(3);
expect(response.draft.visualPackage?.assets[0]?.generationProvider).toBe(
'vector-engine-gpt-image-2',
);
@@ -169,7 +153,7 @@ describe('babyObjectMatchClient', () => {
expect(response.draft.visualPackage?.themePrompt).toBe('果园主题视觉包装');
expect(
response.draft.visualPackage?.assets.map((asset) => asset.assetKind),
).toEqual(['background', 'ui-frame', 'gift-box', 'basket', 'smoke-puff']);
).toEqual(['background', 'gift-box', 'basket']);
expect(response.draft.visualPackage?.assets[0]).toMatchObject({
assetId: 'baby-object-visual-background',
generationProvider: 'vector-engine-gpt-image-2',

View File

@@ -28,7 +28,7 @@ const BABY_OBJECT_MATCH_ASSET_REQUEST_RETRY: ApiRetryOptions = {
maxRetries: 0,
};
const BABY_OBJECT_MATCH_REQUIRED_VISUAL_KINDS: BabyObjectMatchVisualAssetKind[] =
['background', 'ui-frame', 'gift-box', 'basket', 'smoke-puff'];
['background', 'gift-box', 'basket'];
const DRAFT_DB_NAME = 'genarrative-edutainment-baby-object-drafts';
const DRAFT_DB_VERSION = 1;
const DRAFT_STORE_NAME = 'drafts';

View File

@@ -90,8 +90,10 @@ describe('parseMocapPacket', () => {
limb_nodes: [
{ name: 'left_shoulder', x: 0.28, y: 0.42 },
{ name: 'left_elbow', x: 0.24, y: 0.5 },
{ name: 'left_wrist', x: 0.2, y: 0.57 },
{ name: 'right_shoulder', x: 0.72, y: 0.42 },
{ name: 'right_elbow', x: 0.76, y: 0.5 },
{ name: 'right_wrist', x: 0.8, y: 0.57 },
],
},
actions: [{ gesture: 'wave-left-hand' }],
@@ -120,8 +122,10 @@ describe('parseMocapPacket', () => {
expect(command.bodyJoints).toEqual({
leftShoulder: {x: 0.28, y: 0.42},
leftElbow: {x: 0.24, y: 0.5},
leftWrist: {x: 0.2, y: 0.57},
rightShoulder: {x: 0.72, y: 0.42},
rightElbow: {x: 0.76, y: 0.5},
rightWrist: {x: 0.8, y: 0.57},
});
expect(command.actions).toEqual(
expect.arrayContaining(['wave_left_hand', 'open_palm']),

View File

@@ -27,6 +27,8 @@ export type MocapBodyJointsInput = {
rightShoulder?: MocapPointInput | null;
leftElbow?: MocapPointInput | null;
rightElbow?: MocapPointInput | null;
leftWrist?: MocapPointInput | null;
rightWrist?: MocapPointInput | null;
};
export type MocapInputCommand = {
@@ -289,6 +291,14 @@ function normalizeBodyJointName(name: unknown) {
return 'rightElbow' as const;
}
if (normalized === 'left_wrist' || normalized === 'leftwrist') {
return 'leftWrist' as const;
}
if (normalized === 'right_wrist' || normalized === 'rightwrist') {
return 'rightWrist' as const;
}
return null;
}