81 lines
2.9 KiB
JavaScript
81 lines
2.9 KiB
JavaScript
const { describe, it } = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
const { buildAgnesVideoImagePayload, formatVideoPostBodyForLog } = require('../src/services/videoClient');
|
|
|
|
describe('formatVideoPostBodyForLog', () => {
|
|
it('keeps full http URLs and labels extra_body images with index', () => {
|
|
const formatted = formatVideoPostBodyForLog({
|
|
model: 'agnes-video-v2.0',
|
|
prompt: 'test prompt',
|
|
extra_body: {
|
|
image: ['https://cdn/a.jpg', 'https://cdn/b.png'],
|
|
},
|
|
});
|
|
assert.deepEqual(formatted.extra_body.image, [
|
|
'[0] https://cdn/a.jpg',
|
|
'[1] https://cdn/b.png',
|
|
]);
|
|
assert.equal(formatted.prompt, 'test prompt');
|
|
});
|
|
|
|
it('summarizes base64 image fields', () => {
|
|
const dataUrl = 'data:image/png;base64,' + 'A'.repeat(100);
|
|
const formatted = formatVideoPostBodyForLog({ image: dataUrl });
|
|
assert.match(formatted.image, /^\(base64, \d+ chars\)$/);
|
|
});
|
|
});
|
|
|
|
describe('buildAgnesVideoImagePayload', () => {
|
|
it('uses extra_body.image array for omni multi-reference without keyframes mode', () => {
|
|
const refs = ['https://cdn/a.jpg', 'https://cdn/b.png', 'https://cdn/c.png'];
|
|
const out = buildAgnesVideoImagePayload({
|
|
useOmniReference: true,
|
|
resolvedRefs: refs,
|
|
firstResolved: 'https://cdn/a.jpg',
|
|
lastResolved: 'https://cdn/z.jpg',
|
|
});
|
|
assert.equal(out.strategy, 'omni_reference_extra_body');
|
|
assert.deepEqual(out.extra_body, { image: refs });
|
|
assert.equal(out.image, undefined);
|
|
assert.equal(out.extra_body.mode, undefined);
|
|
});
|
|
|
|
it('uses single top-level image string for one omni reference', () => {
|
|
const out = buildAgnesVideoImagePayload({
|
|
useOmniReference: true,
|
|
resolvedRefs: ['https://cdn/scene.jpg'],
|
|
firstResolved: null,
|
|
lastResolved: null,
|
|
});
|
|
assert.equal(out.strategy, 'omni_reference_single');
|
|
assert.equal(out.image, 'https://cdn/scene.jpg');
|
|
});
|
|
|
|
it('uses extra_body keyframes only for classic first/last (not omni)', () => {
|
|
const out = buildAgnesVideoImagePayload({
|
|
useOmniReference: false,
|
|
resolvedRefs: [],
|
|
firstResolved: 'https://cdn/first.jpg',
|
|
lastResolved: 'https://cdn/last.jpg',
|
|
});
|
|
assert.equal(out.strategy, 'classic_keyframes');
|
|
assert.deepEqual(out.extra_body, {
|
|
mode: 'keyframes',
|
|
image: ['https://cdn/first.jpg', 'https://cdn/last.jpg'],
|
|
});
|
|
assert.equal(out.image, undefined);
|
|
});
|
|
|
|
it('does not use keyframes mode when omni refs exist', () => {
|
|
const refs = ['https://cdn/s.jpg', 'https://cdn/c.jpg'];
|
|
const out = buildAgnesVideoImagePayload({
|
|
useOmniReference: true,
|
|
resolvedRefs: refs,
|
|
firstResolved: 'https://cdn/s.jpg',
|
|
lastResolved: 'https://cdn/l.jpg',
|
|
});
|
|
assert.equal(out.strategy, 'omni_reference_extra_body');
|
|
assert.equal(out.extra_body.mode, undefined);
|
|
});
|
|
});
|