Retain isolated number retry evidence and Korean voice register
This commit is contained in:
@@ -147,17 +147,18 @@ def reusable_entries(root, catalog, profile):
|
||||
return result
|
||||
|
||||
|
||||
def generate(catalog, profile, root, ids=None, synthesize=None, environment=None):
|
||||
def generate(catalog, profile, root, ids=None, synthesize=None, environment=None, regenerate=False):
|
||||
validate_inputs(catalog, profile)
|
||||
selected = select_clips(catalog, ids)
|
||||
root = Path(root)
|
||||
previous = reusable_entries(root, catalog, profile)
|
||||
previous = {} if regenerate else reusable_entries(root, catalog, profile)
|
||||
run_id = datetime.now(timezone.utc).strftime('%Y%m%dT%H%M%S%fZ_') + uuid.uuid4().hex[:8]
|
||||
run_dir = root / 'generated' / run_id
|
||||
run_dir.mkdir(parents=True)
|
||||
manifest = {'schemaVersion': 1, 'runId': run_id, 'createdUtc': datetime.now(timezone.utc).isoformat(),
|
||||
'modelRevision': profile['modelRevision'], 'catalogHash': digest(catalog),
|
||||
'profileHash': digest(profile), 'scope': 'selected' if ids else 'all',
|
||||
'regenerateRequested': regenerate,
|
||||
'requestedIds': [c['id'] for c in selected], 'environment': environment or {}, 'clips': []}
|
||||
try:
|
||||
for clip in selected:
|
||||
@@ -236,6 +237,7 @@ def main():
|
||||
parser.add_argument('--ids', help='comma separated IDs; absent means all catalog clips')
|
||||
parser.add_argument('--validate-only', action='store_true')
|
||||
parser.add_argument('--manifest', type=Path)
|
||||
parser.add_argument('--regenerate', action='store_true', help='create a new take for selected IDs, preserving original runs')
|
||||
args = parser.parse_args()
|
||||
ids = args.ids.split(',') if args.ids else None
|
||||
try:
|
||||
@@ -250,8 +252,8 @@ def main():
|
||||
else:
|
||||
selected = select_clips(catalog, ids)
|
||||
reusable = reusable_entries(root, catalog, profile)
|
||||
synthesize, environment = (None, {'modelLoad': 'not_needed'}) if all(c['id'] in reusable for c in selected) else load_synthesizer(profile)
|
||||
manifest = generate(catalog, profile, root, ids, synthesize, environment)
|
||||
synthesize, environment = (None, {'modelLoad': 'not_needed'}) if not args.regenerate and all(c['id'] in reusable for c in selected) else load_synthesizer(profile)
|
||||
manifest = generate(catalog, profile, root, ids, synthesize, environment, args.regenerate)
|
||||
print('Manifest: ' + str(root / 'generated' / manifest['runId'] / 'manifest.json'))
|
||||
errors = validate_manifest(manifest, catalog, profile, root, ids)
|
||||
print(json.dumps({'validationScope': 'selected' if ids else 'all_required', 'ids': ids,
|
||||
|
||||
@@ -123,6 +123,17 @@ class VoiceHistoryTests(unittest.TestCase):
|
||||
prepare(manifest, self.catalog, self.profile, self.root, target)
|
||||
self.assertFalse(target.exists())
|
||||
|
||||
def test_new_take_preserves_original_and_other_clips(self):
|
||||
first = self.run_generation()
|
||||
original = (self.root / first['clips'][0]['file']).read_bytes()
|
||||
second = voice.generate(self.catalog, self.profile, self.root, ids=['count_01'],
|
||||
synthesize=self.fake, regenerate=True)
|
||||
self.assertEqual('generated', second['clips'][0]['result'])
|
||||
self.assertTrue(second['regenerateRequested'])
|
||||
self.assertEqual(1, len(second['clips']))
|
||||
self.assertEqual(original, (self.root / first['clips'][0]['file']).read_bytes())
|
||||
self.assertEqual(['count_01', 'guide_collect', 'count_01'], self.calls)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user