ChristophSchuhmann commited on
Commit
9771537
·
verified ·
1 Parent(s): 975e3a0

Release merged NotebookLM full FT + rank-64 final 652

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
.gitattributes CHANGED
@@ -33,3 +33,12 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ examples/de-S1.wav filter=lfs diff=lfs merge=lfs -text
37
+ examples/de-S2.wav filter=lfs diff=lfs merge=lfs -text
38
+ examples/en-S1.wav filter=lfs diff=lfs merge=lfs -text
39
+ examples/en-S2.wav filter=lfs diff=lfs merge=lfs -text
40
+ examples/es-S1.wav filter=lfs diff=lfs merge=lfs -text
41
+ examples/es-S2.wav filter=lfs diff=lfs merge=lfs -text
42
+ examples/fr-S1.wav filter=lfs diff=lfs merge=lfs -text
43
+ examples/fr-S2.wav filter=lfs diff=lfs merge=lfs -text
44
+ tokenizer.json filter=lfs diff=lfs merge=lfs -text
CLI_INFERENCE_VERIFIED.json ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "passed": true,
3
+ "input": "actual original-media WAV references encoded by portable CLI",
4
+ "output": "/e/scratch/laionize/schuhmann1/hv_notebooklm_edition_20261103/release/cli-canary.wav",
5
+ "duration_s": 18.0,
6
+ "sample_rate": 48000,
7
+ "job": "2658385"
8
+ }
LICENSE ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ Creative Commons Attribution 4.0 International (CC BY 4.0)
2
+ Copyright 2026 LAION and contributors.
3
+ https://creativecommons.org/licenses/by/4.0/legalcode
4
+ Fine-tuned weights are released under CC BY 4.0. Third-party components retain their own licenses.
MERGE_VERIFICATION.json ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "passed": true,
3
+ "parent_step": 5613,
4
+ "adapter_step": 652,
5
+ "rank": 64,
6
+ "alpha": 64,
7
+ "scale": 1.0,
8
+ "modules": 146,
9
+ "merged": true,
10
+ "linear_max_relative_error": 0.007352941176470588,
11
+ "export_reload_semantic_prefix_exact": true,
12
+ "weights": {
13
+ "model-00001-of-00003.safetensors": {
14
+ "bytes": 3994689160,
15
+ "sha256": "3c8b9d4e555370073a298b34d65927b7956752de969aade484f05544c9d4acaa"
16
+ },
17
+ "model-00003-of-00003.safetensors": {
18
+ "bytes": 304110936,
19
+ "sha256": "b87a011a7f1e37373e5a4489e9dbbffbb298c4760505e94474bfc63f37d1660c"
20
+ },
21
+ "model-00002-of-00003.safetensors": {
22
+ "bytes": 3961231200,
23
+ "sha256": "a9d4328d7b8a2f7e677f3e9aa35568f14de8f4e0fb7df615fc36adc5cfb8c2a0"
24
+ }
25
+ },
26
+ "adapter_sha256": "844cf1707ab8e3980e9aab09131132de955be68fc0eab62dd933d24a810744e0",
27
+ "time": 1793662358.5163062
28
+ }
NOTICE.md ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ Parent: https://huggingface.co/laion/Humaneness-Voice-Large-1.3-Alpha
2
+ Architecture lineage: https://huggingface.co/laion/moss-tts-local-transformer-4.55b-voice-acting-v2-sft3
3
+ External codec: https://huggingface.co/OpenMOSS-Team/MOSS-Audio-Tokenizer-v2
4
+ Podcast source: https://huggingface.co/datasets/TTS-AGI/NotebookLM-Podcasts
5
+ Prepared data: https://huggingface.co/datasets/laion/NotebookLM-Podcasts-Humaneness-Prepared
6
+ Original code attribution is retained in implementation files. This release does not relicense third-party software or grant identity rights.
PODCAST_PROMPTING.md ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Podcast prompting and input contract
2
+
3
+ Use podcast_infer.py with a dialogue JSON. Directions remain English; the words spoken stay in their original language. The CLI supplies the two voice recordings separately. Never insert a filename, audio placeholder or speaker identity into the literal spoken text.
4
+
5
+ ## Minimal dialogue
6
+
7
+ {
8
+ "language": "en",
9
+ "general": "Two friends chatting naturally in a quiet studio.",
10
+ "pause_s": 0.24,
11
+ "turns": [
12
+ {"speaker": "S1", "text": "Did you try the new walking route?", "seconds": 3.0, "direction": "warm, curious, conversational"},
13
+ {"speaker": "S2", "text": "I did... and I found a lovely little bookshop.", "seconds": 4.4, "direction": "friendly, amused, spontaneous"}
14
+ ]
15
+ }
16
+
17
+ ## The rendered performance prompt
18
+
19
+ GENERAL: Two friends chatting naturally in a quiet studio.
20
+ SCRIPT:
21
+ (speaker=S1, warm, curious, conversational) [3.00 seconds duration] Did you try the new walking route?
22
+ [0.24 seconds pause]
23
+ (speaker=S2, friendly, amused, spontaneous) [4.40 seconds duration] I did... and I found a lovely little bookshop.
24
+
25
+ GENERAL may be empty. SCRIPT's speaker= syntax, parentheses, square timing cues and ordering are part of the trained input. Directions are not literal words. Keep the transcript itself free of speaker labels. Ellipses can suggest a hesitation, but do not guarantee a precise pause; square pause cues are clearer. Requested turn durations include the speech in that turn; separate pause cues add to the total. Do not count the same pause twice.
26
+
27
+ ## Reference audio
28
+
29
+ Supply one clean voice per file, preferably 6–12 seconds, with no music, clipping or competing speaker. The allowed range after codec quantization is 63–187 frames (5.04–14.96 seconds). The old 2.96-second reference limit is not used. S1 maps to --reference-s1, and S2 maps to --reference-s2. The two files may be independent authorized voices. The new demo uses clean original HQ training-source crops; do not judge the older codec-reconstructed players as untouched reference recordings.
30
+
31
+ ## Optional conversation history
32
+
33
+ Use --context previous.wav --context-description "S1: 0.0–5.0 seconds; S2: 5.2–11.0 seconds" only for genuinely earlier audio. Keep chronological context and a truthful speaker timeline; maximum 60 seconds. Identity references and dialogue history are distinct inputs. Never include the desired future target in previous.wav. The new HQ demonstration deliberately tests a fresh dialogue with two identity references and no earlier conversation.
34
+
35
+ ## Longer conversations
36
+
37
+ The test matrix requests 2 turns at 18 seconds, 6 turns at 38.4 seconds and 8 turns at 59.2 seconds. These are requested durations; the measured generated durations are shown separately. The model generates a whole continuation jointly. Do not claim that requested labels prove it actually changed speakers; listen to each transition. For longer sessions, retain recent chronological output as context and request the next part, keeping identity labels consistent.
38
+
39
+ ## Reproducibility
40
+
41
+ The examples use seed 20261103 plus topic index, temperature 1, top-p .95, top-k 50 and CFG 1. Prompt files, sampling and source-reference provenance are included. A fixed seed does not promise bit-identical outputs across different GPU hardware, software versions, precision or kernel choices.
PROMPT_PREFIX_VERIFIED.json ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ {
2
+ "passed": true,
3
+ "tasks": 30,
4
+ "method": "Actual tokenizer/processor; portable helper input_ids and attention_mask match frozen podcast training packer exactly for every new dialogue. No neural inference in this CPU-only format test."
5
+ }
PUBLICATION_ID.json ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ {
2
+ "project": "notebooklm-edition-20261103",
3
+ "parent_step": 5613,
4
+ "adapter_step": 652
5
+ }
README.md ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: cc-by-4.0
3
+ language:
4
+ - en
5
+ - de
6
+ - fr
7
+ - es
8
+ pipeline_tag: text-to-speech
9
+ base_model: laion/Humaneness-Voice-Large-1.3-Alpha
10
+ tags:
11
+ - podcast
12
+ - multi-speaker
13
+ - moss-tts
14
+ - notebooklm
15
+ - merged-lora
16
+ ---
17
+
18
+ # Humaneness Voice Large — NotebookLM Edition
19
+
20
+ Generate a two-person podcast conversation from a written dialogue and two clean voice references. This is the user's listening-selected **NotebookLM + rank 64 · final 652**, with its adapter already merged at scale 1. Download the root weights and run inference directly; do not apply the included adapter a second time.
21
+
22
+ The model begins with [Humaneness Voice Large 1.3 Alpha](https://huggingface.co/laion/Humaneness-Voice-Large-1.3-Alpha), receives a three-epoch full fine-tune on filtered two-speaker podcasts, and then a small rank-64 quality-ladder fine-tune. It produces the entire requested exchange as one acoustic sequence. It is not a pipeline that separately synthesizes each turn and joins files.
23
+
24
+ **Start here:** [Podcast prompting guide](PODCAST_PROMPTING.md) · [Inference script](podcast_infer.py) · [Training and lineage](TRAINING.md) · [Existing held-out comparison](https://laion-humaneness-voice-large-podcast-listening.static.hf.space/lora-comparison.html)
25
+
26
+ ## Install and generate
27
+
28
+ Use a CUDA GPU with sufficient memory, a recent compatible PyTorch installation, and Python 3.11 or newer. The tested JUPITER environment used PyTorch 2.9.1 and Transformers 5.14.1. CPU-only inference and other precision modes are not validated here.
29
+
30
+ ```bash
31
+ hf download laion/Humaneness-Voice-Large-NotebookLM-Edition --local-dir notebooklm-edition
32
+ cd notebooklm-edition
33
+ pip install -r requirements.txt
34
+ python podcast_infer.py --model . --dialogue examples/dialogue.json \
35
+ --reference-s1 examples/en-S1.wav --reference-s2 examples/en-S2.wav \
36
+ --seed 20261103 --output conversation.wav
37
+ ```
38
+
39
+ The first invocation also downloads the separately licensed [MOSS Audio Tokenizer v2](https://huggingface.co/OpenMOSS-Team/MOSS-Audio-Tokenizer-v2). The model's custom implementation requires trust_remote_code; inspect the supplied code before running it. Supply your own authorized clean single-speaker WAV references to change the voices. The provided reference files are original-media crops with source provenance in examples/reference-provenance.json.
40
+
41
+ ## What the model receives
42
+
43
+ Two distinct S1/S2 identity-reference blocks precede the prompt. Each reference must cover 5.04–14.96 seconds; longer input files are cropped before encoding. Optional strictly earlier conversation may supply up to 60 seconds of context. The GENERAL block describes the overall performance. SCRIPT contains alternating speaker labels, English delivery directions, literal words in the requested language, and duration/pause cues. The CLI builds the exact trained ChatML serialization and preserves all audio placeholders. The generic base-model single-speaker helper does not implement this podcast contract.
44
+
45
+ S1 and S2 are local routing labels for the two recordings, not global identities, registered personal names or spoken words. English, German, French and Spanish are the focus of the HQ demonstrations. Dutch was present in the first full fine-tune but excluded from the quality adapter because publisher labels were unreliable; Dutch performance is not advertised.
46
+
47
+ ## Architecture and sampling
48
+
49
+ The architecture is the Large MOSS Local Transformer family: a 36-layer Qwen3-family semantic transformer with 2,560-dimensional states and a one-layer local acoustic transformer using the same width. Twelve codebooks are generated at each 80-ms acoustic frame, or 150 codec indices per second. MOSS-v2 decodes the result to 48-kHz mono audio. The tokenizer and network architecture were not expanded for speaker routing.
50
+
51
+ The reference command uses audio temperature 1, top-p 0.95, top-k 50, repetition penalty 1, and CFG 1. Whole-dialogue generation is stochastic. Requested durations and speaker switches are learned instructions, not hard constraints or forced waveform edits. Start with two short turns, then try longer dialogues.
52
+
53
+ ## Evidence and limits
54
+
55
+ The user selected this checkpoint after listening. The earlier frozen 50-task comparison gave this adapter CE 6.079, genuineness 3.959 and mean per-clip ASR WER 11.44%; its NotebookLM full-fine-tuned parent gave 6.084, 3.943 and 7.76%. Those metrics do not establish an overall automatic improvement. They also do not measure speaker-switch correctness. The HQ reference study uses new text and training-domain identities; it is a demonstration, not a held-out-speaker benchmark. All raw model-predicted scores and prompts are preserved.
56
+
57
+ ## License and intended use
58
+
59
+ The released fine-tuned weights are CC BY 4.0; see LICENSE and NOTICE.md. Upstream code, tokenizer assets, the external codec, and source recordings retain their own terms. Research and authorized dataset augmentation are recommended uses. Use only voices for which you have appropriate permission; do not use the model for deceptive impersonation. Test quality, language accuracy and speaker stability before any production use. LAION does not endorse generated statements or speaker identities.
60
+
61
+ The new 30-dialogue HQ-reference study is running. Its page will be linked here automatically after public HTML and audio publication.
TRAINING.md ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Training lineage and reproducibility
2
+
3
+ 1. Start from Humaneness Voice Large 1.3 Alpha, final step 9,799. This is already an extensively supervised Large model, not random initialization or the original SFT3 checkpoint.
4
+ 2. Full fine-tune all parameters on the prepared two-speaker podcast corpus for three shuffled epochs. Starting and middle 30-second windows each require predicted DNSMOS background >=4.0. Five publisher-language pools were prepared. Episode-disjoint heldouts and duplicate-audio checks precede training. Use 64 GPUs, accumulation 2, peak semantic LR 2e-5 and Talker LR 4e-5, 5% warmup and one cosine schedule to a 10% floor. Final checkpoint: step 5,613. Audio-only target labels exclude reference and conversation-prefix audio.
5
+ 3. Attach rank-64, alpha-64 adapters to 146 attention projections across semantic and local transformers. Use the same two-speaker prefix and strict-past-context contract. The clean quality ladder contains 732 unique examples in EN/DE/FR/ES; Dutch is excluded. The six nominal hourly caps are 5,4,3,2,1,1, but actual selected data are much smaller. Presented target audio is 50.56+43.23+35.87+25.46+11.66+11.66 minutes, about 2.97 hours including repetitions. This must not be described as 50–100 hours of unique training audio.
6
+ 4. Four GPUs, effective batch four, 652 total updates. Phase lengths are 183,160,132,91,43,43. Linear warmup reaches peak 3e-5 at the end of phase 1; one cosine decay spans the remaining phases to 3e-6. Optimizer is AdamW, betas .9/.95, epsilon 1e-8, no weight decay. Fresh-process optimizer/RNG/adapter replay smoke passed before production. Final update 652 is the release adapter.
7
+ 5. Merge the rank-64 residual B@A at scale 1 into its actual full-fine-tuned podcast parent. Root weights are BF16 for inference. Every adapted Linear is checked against the trained residual definition, followed by exact export/reload equality for the merged model's semantic prefix. BF16 merging is not claimed bit-identical to evaluating separate FP32 residual adapters. The unmerged original adapter is retained under adapter/ for provenance and must not be applied again to root weights.
8
+
9
+ Original training scripts and run statistics are included under training/ and stats/. They preserve exact JUPITER paths and environment entrypoints as historical evidence; relocate those paths and stage their dependencies before rerunning on another cluster. They are not falsely advertised as a standalone one-command portable training pipeline. The root inference script is portable and is tested against the merged export on allocated compute. External codec and scorer weights are separate dependencies, not silently bundled.
10
+
11
+ The held-out evaluation and the new-text HQ-reference demonstration answer different questions. The latter intentionally uses in-domain training-source voices. Full outputs are EARS-scored in <=30-second windows, weighted by duration; ASR chunks are concatenated for mean per-clip WER. Chunk boundaries may introduce errors. Speaker-switch correctness is not computed from the requested script. Inspect actual speaker changes by listening.
__init__.py ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ from .configuration_moss_tts import MossTTSLocalConfig
2
+ from .modeling_moss_tts import MossTTSLocalModel
3
+ from .processing_moss_tts import MossTTSLocalProcessor
4
+
5
+ __all__ = [
6
+ "MossTTSLocalConfig",
7
+ "MossTTSLocalModel",
8
+ "MossTTSLocalProcessor",
9
+ ]
adapter/README.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ Rank 64, alpha 64, scale 1, final update 652. Already merged in root weights. Do not apply twice. Original parent is NotebookLM full FT step 5613, not unmodified Large 1.3.
adapter/READY.json ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "step": 652,
3
+ "reason": "final",
4
+ "contract_sha256": "88d1284099df084d941f8274e953612a864c607e9ae4380af738280ef9dfc517",
5
+ "training_sha256": "86a8fa8f5ff1c3054278e0ea4f4fbb41b5060c7fe900bd5d46ab1f2dce65a99a",
6
+ "adapter_sha256": "844cf1707ab8e3980e9aab09131132de955be68fc0eab62dd933d24a810744e0",
7
+ "optimizer_rng_sampler_schedule_saved": true
8
+ }
adapter/adapter.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:844cf1707ab8e3980e9aab09131132de955be68fc0eab62dd933d24a810744e0
3
+ size 192708704
added_tokens.json ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "</think>": 151668,
3
+ "</tool_call>": 151658,
4
+ "</tool_response>": 151666,
5
+ "<think>": 151667,
6
+ "<tool_call>": 151657,
7
+ "<tool_response>": 151665,
8
+ "<|audio_end|>": 151670,
9
+ "<|audio_pad|>": 151671,
10
+ "<|audio_start|>": 151669,
11
+ "<|box_end|>": 151649,
12
+ "<|box_start|>": 151648,
13
+ "<|endoftext|>": 151643,
14
+ "<|file_sep|>": 151664,
15
+ "<|fim_middle|>": 151660,
16
+ "<|fim_pad|>": 151662,
17
+ "<|fim_prefix|>": 151659,
18
+ "<|fim_suffix|>": 151661,
19
+ "<|im_end|>": 151645,
20
+ "<|im_start|>": 151644,
21
+ "<|image_pad|>": 151655,
22
+ "<|object_ref_end|>": 151647,
23
+ "<|object_ref_start|>": 151646,
24
+ "<|quad_end|>": 151651,
25
+ "<|quad_start|>": 151650,
26
+ "<|repo_name|>": 151663,
27
+ "<|video_pad|>": 151656,
28
+ "<|vision_end|>": 151653,
29
+ "<|vision_pad|>": 151654,
30
+ "<|vision_start|>": 151652
31
+ }
base_runtime.py ADDED
@@ -0,0 +1,144 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Humaneness Voice Large 1.3 Alpha: portable full-model inference.
2
+
3
+ Use a downloaded model directory, or a Hugging Face model ID. This file has no
4
+ JUPITER-specific runtime dependency. Twelve MOSS-v2 codebooks,48kHz mono.
5
+ """
6
+ import argparse
7
+ import json
8
+ from pathlib import Path
9
+
10
+ LANGUAGES = {'en': 'English', 'de': 'German', 'nl': 'Dutch', 'fr': 'French', 'es': 'Spanish'}
11
+
12
+
13
+ def load_model(directory, device='cuda:0'):
14
+ import torch
15
+ from transformers import AutoModel, AutoTokenizer
16
+ from transformers.dynamic_module_utils import get_class_from_dynamic_module
17
+ model = AutoModel.from_pretrained(str(directory), trust_remote_code=True,
18
+ dtype=torch.bfloat16, attn_implementation='sdpa').to(device).eval()
19
+ Processor = get_class_from_dynamic_module('processing_moss_tts.MossTTSLocalProcessor', str(directory))
20
+ tokenizer = AutoTokenizer.from_pretrained(str(directory), trust_remote_code=True)
21
+ proc = Processor(tokenizer=tokenizer, audio_tokenizer=None, model_config=model.config)
22
+ return model, proc
23
+
24
+
25
+ def load_codec(proc, path, device='cuda:0'):
26
+ from transformers import AutoModel
27
+ codec = AutoModel.from_pretrained(str(path), trust_remote_code=True, codec_weight_dtype='fp32')
28
+ if hasattr(codec, 'set_compute_dtype'):
29
+ codec.set_compute_dtype('bf16')
30
+ proc.audio_tokenizer = codec.to(device).eval()
31
+ return proc
32
+
33
+
34
+ def build_user(proc, *, text, prompt, frames, language, reference=None, alias=None):
35
+ if not text.strip() or not prompt.strip() or language not in LANGUAGES:
36
+ raise ValueError('Nonempty literal text, English directions and a supported language required')
37
+ if reference is not None and (reference.ndim != 2 or reference.shape[1] != 12
38
+ or not 63 <= len(reference) <= 187):
39
+ raise ValueError('Reference codes must contain12codebooks over5.04–14.96seconds')
40
+ if alias is not None:
41
+ if reference is not None:
42
+ raise ValueError('Choose either a reference recording or a registered voice name, not both')
43
+ catalog = json.loads(Path(__file__).with_name('voices.json').read_text())
44
+ names = {v['speaker_alias'] for v in catalog['voices']}
45
+ if alias not in names:
46
+ raise ValueError('Unknown voice name; see VOICE_ALIASES.md and voices.json')
47
+ user = proc.build_user_message(text=text, instruction=prompt, tokens=int(frames),
48
+ language=LANGUAGES[language], reference=[reference] if reference is not None else None)
49
+ if alias is not None:
50
+ # Exact alias representation used by training/legacy/acting_data.py.
51
+ # It is not an invented prefix in the spoken text or a new special token.
52
+ marker = '- Reference(s):\nNone\n'
53
+ if user['content'].count(marker) != 1 or user.get('audio_codes_list'):
54
+ raise RuntimeError('Processor wrapper no longer matches the trained voice-name format')
55
+ user['content'] = user['content'].replace(marker, f'- Reference(s):\nSpeaker: {alias}\n', 1)
56
+ return user
57
+
58
+
59
+ def generate(model, proc, user, *, seed=777, max_frames=625, device='cuda:0'):
60
+ import torch
61
+ batch = proc([[user]], mode='generation')
62
+ torch.manual_seed(seed)
63
+ torch.cuda.manual_seed_all(seed)
64
+ with torch.inference_mode(), torch.autocast('cuda', dtype=torch.bfloat16):
65
+ output = model.generate(input_ids=batch['input_ids'].to(device),
66
+ attention_mask=batch['attention_mask'].to(device), max_new_frames=max_frames,
67
+ do_sample=True, audio_temperature=1., audio_top_p=.95, audio_top_k=50,
68
+ audio_repetition_penalty=1., use_kv_cache=True)
69
+ prefix, sequence = output[0]
70
+ if prefix != 0 or sequence.ndim != 2 or sequence.shape[1] != 13:
71
+ raise RuntimeError('Unexpected MOSS frame layout')
72
+ codes = sequence[1:, 1:]
73
+ codes = codes[(codes[:, 0] >= 0) & (codes[:, 0] != model.config.audio_pad_token_id)]
74
+ if len(codes) < 2 or int(codes.min()) < 0 or int(codes.max()) > 1023:
75
+ raise RuntimeError('Too few frames or corrupt codec indices')
76
+ return codes.cpu()
77
+
78
+
79
+ def decode(proc, codes, device='cuda:0'):
80
+ import numpy as np
81
+ import torch
82
+ with torch.inference_mode():
83
+ wave = proc.decode_audio_codes([codes.to(device)], return_stereo=False)[0]
84
+ wave = wave.float().cpu().numpy().reshape(-1)
85
+ rate = int(proc.model_config.sampling_rate)
86
+ if not np.isfinite(wave).all() or abs(len(wave) / len(codes) - rate / 12.5) > .01 * rate / 12.5:
87
+ raise RuntimeError('Codec frame-rate/sample-rate canary failed')
88
+ return wave, rate
89
+
90
+
91
+ def main():
92
+ p = argparse.ArgumentParser(description=__doc__)
93
+ p.add_argument('--model', default='laion/Humaneness-Voice-Large-1.3-Alpha')
94
+ p.add_argument('--codec', default='OpenMOSS-Team/MOSS-Audio-Tokenizer-v2')
95
+ p.add_argument('--text', required=True, help='Literal spoken words, without directing tags')
96
+ p.add_argument('--prompt', help='GENERAL/SCRIPT directions; literal \\n accepted')
97
+ p.add_argument('--prompt-file', type=Path)
98
+ p.add_argument('--language', choices=LANGUAGES, default='en')
99
+ voice = p.add_mutually_exclusive_group()
100
+ voice.add_argument('--reference-wav', type=Path)
101
+ voice.add_argument('--voice-name', help='Registered fictional voice alias; see VOICE_ALIASES.md')
102
+ p.add_argument('--seconds', type=float, default=8.)
103
+ p.add_argument('--seed', type=int, default=777)
104
+ p.add_argument('--output', type=Path, required=True)
105
+ args = p.parse_args()
106
+ if bool(args.prompt) == bool(args.prompt_file):
107
+ p.error('Supply exactly one of --prompt or --prompt-file')
108
+ if not 1 <= args.seconds <= 60:
109
+ p.error('Target seconds must be between1and60')
110
+ import numpy as np
111
+ import soundfile as sf
112
+ import torch
113
+ if not torch.cuda.is_available():
114
+ raise RuntimeError('The tested path requires a CUDA GPU')
115
+ device = 'cuda:0'
116
+ model, proc = load_model(args.model, device)
117
+ load_codec(proc, args.codec, device)
118
+ reference = None
119
+ if args.reference_wav:
120
+ wave, sr = sf.read(args.reference_wav, dtype='float32', always_2d=True)
121
+ if not np.isfinite(wave).all() or len(wave) / sr < 5.04:
122
+ raise ValueError('Use at least5.04seconds of clean single-speaker reference speech')
123
+ # Never reinstate37frames/2.96s. Crop waveform BEFORE encoding.
124
+ wave = wave[:int(sr * 14.96)]
125
+ with torch.inference_mode():
126
+ reference = proc.encode_audios_from_wav([torch.from_numpy(wave.T.copy())], int(sr), n_vq=12)[0][:187]
127
+ prompt = args.prompt_file.read_text() if args.prompt_file else args.prompt.replace('\\n', '\n')
128
+ frames = round(args.seconds * 12.5)
129
+ user = build_user(proc, text=args.text, prompt=prompt, frames=frames,
130
+ language=args.language, reference=reference, alias=args.voice_name)
131
+ codes = generate(model, proc, user, seed=args.seed, max_frames=min(1000, frames + 190))
132
+ wave, sr = decode(proc, codes)
133
+ args.output.parent.mkdir(parents=True, exist_ok=True)
134
+ if args.output.exists():
135
+ raise FileExistsError('Refusing to overwrite ' + str(args.output))
136
+ sf.write(args.output, wave, sr, subtype='PCM_16')
137
+ print(json.dumps({'output': str(args.output), 'duration_s': len(wave) / sr,
138
+ 'requested_s': args.seconds, 'frames': len(codes), 'language': args.language,
139
+ 'reference_frames': len(reference) if reference is not None else 0,
140
+ 'voice_name': args.voice_name, 'seed': args.seed}))
141
+
142
+
143
+ if __name__ == '__main__':
144
+ main()
config.json ADDED
@@ -0,0 +1,267 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "MossTTSLocalModel"
4
+ ],
5
+ "attn_implementation": "sdpa",
6
+ "audio_assistant_gen_slot_token_id": 151656,
7
+ "audio_assistant_slot_token_id": 151656,
8
+ "audio_codebook_sizes": [
9
+ 1024,
10
+ 1024,
11
+ 1024,
12
+ 1024,
13
+ 1024,
14
+ 1024,
15
+ 1024,
16
+ 1024,
17
+ 1024,
18
+ 1024,
19
+ 1024,
20
+ 1024
21
+ ],
22
+ "audio_end_token_id": 151670,
23
+ "audio_pad_code": 1024,
24
+ "audio_pad_token_id": 1024,
25
+ "audio_start_token_id": 151669,
26
+ "audio_tokenizer_name_or_path": "OpenMOSS-Team/MOSS-Audio-Tokenizer-v2",
27
+ "audio_user_slot_token_id": 151654,
28
+ "audio_vocab_size": 1024,
29
+ "auto_map": {
30
+ "AutoConfig": "configuration_moss_tts.MossTTSLocalConfig",
31
+ "AutoModel": "modeling_moss_tts.MossTTSLocalModel",
32
+ "AutoProcessor": "processing_moss_tts.MossTTSLocalProcessor"
33
+ },
34
+ "dtype": "bfloat16",
35
+ "gpt2_config": {
36
+ "activation_function": "silu",
37
+ "add_cross_attention": false,
38
+ "attn_pdrop": 0.0,
39
+ "bos_token_id": null,
40
+ "cross_attention_hidden_size": null,
41
+ "decoder_start_token_id": null,
42
+ "embd_pdrop": 0.0,
43
+ "eos_token_id": 151645,
44
+ "finetuning_task": null,
45
+ "initializer_range": 0.02,
46
+ "is_decoder": false,
47
+ "layer_norm_epsilon": 1e-06,
48
+ "model_type": "gpt2",
49
+ "n_ctx": 10240,
50
+ "n_embd": 2560,
51
+ "n_head": 32,
52
+ "n_inner": 9728,
53
+ "n_layer": 1,
54
+ "n_positions": 10240,
55
+ "pad_token_id": null,
56
+ "position_embedding_type": "rope",
57
+ "prefix": null,
58
+ "pruned_heads": {},
59
+ "reorder_and_upcast_attn": false,
60
+ "resid_pdrop": 0.0,
61
+ "rope_base": 1000000.0,
62
+ "scale_attn_by_inverse_layer_idx": false,
63
+ "scale_attn_weights": true,
64
+ "sep_token_id": null,
65
+ "summary_activation": null,
66
+ "summary_first_dropout": 0.1,
67
+ "summary_proj_to_labels": true,
68
+ "summary_type": "cls_index",
69
+ "summary_use_proj": true,
70
+ "task_specific_params": null,
71
+ "tf_legacy_loss": false,
72
+ "tie_encoder_decoder": false,
73
+ "tie_word_embeddings": true,
74
+ "tokenizer_class": null,
75
+ "torchscript": false,
76
+ "use_bfloat16": false,
77
+ "use_cache": true,
78
+ "vocab_size": 151936
79
+ },
80
+ "hidden_size": 2560,
81
+ "im_end_token_id": 151645,
82
+ "im_start_token_id": 151644,
83
+ "initializer_range": 0.02,
84
+ "language_config": {
85
+ "add_cross_attention": false,
86
+ "architectures": [
87
+ "Qwen3ForCausalLM"
88
+ ],
89
+ "attention_bias": false,
90
+ "attention_dropout": 0.0,
91
+ "bos_token_id": 151643,
92
+ "cross_attention_hidden_size": null,
93
+ "decoder_start_token_id": null,
94
+ "dtype": "bfloat16",
95
+ "eos_token_id": 151643,
96
+ "finetuning_task": null,
97
+ "gradient_checkpointing_use_reentrant": false,
98
+ "head_dim": 128,
99
+ "hidden_act": "silu",
100
+ "hidden_size": 2560,
101
+ "initializer_range": 0.02,
102
+ "intermediate_size": 9728,
103
+ "is_decoder": false,
104
+ "layer_types": [
105
+ "full_attention",
106
+ "full_attention",
107
+ "full_attention",
108
+ "full_attention",
109
+ "full_attention",
110
+ "full_attention",
111
+ "full_attention",
112
+ "full_attention",
113
+ "full_attention",
114
+ "full_attention",
115
+ "full_attention",
116
+ "full_attention",
117
+ "full_attention",
118
+ "full_attention",
119
+ "full_attention",
120
+ "full_attention",
121
+ "full_attention",
122
+ "full_attention",
123
+ "full_attention",
124
+ "full_attention",
125
+ "full_attention",
126
+ "full_attention",
127
+ "full_attention",
128
+ "full_attention",
129
+ "full_attention",
130
+ "full_attention",
131
+ "full_attention",
132
+ "full_attention",
133
+ "full_attention",
134
+ "full_attention",
135
+ "full_attention",
136
+ "full_attention",
137
+ "full_attention",
138
+ "full_attention",
139
+ "full_attention",
140
+ "full_attention"
141
+ ],
142
+ "max_position_embeddings": 32768,
143
+ "max_window_layers": 36,
144
+ "model_type": "qwen3",
145
+ "num_attention_heads": 32,
146
+ "num_hidden_layers": 36,
147
+ "num_key_value_heads": 8,
148
+ "pad_token_id": 151643,
149
+ "prefix": null,
150
+ "pruned_heads": {},
151
+ "rms_norm_eps": 1e-06,
152
+ "rope_parameters": {
153
+ "rope_theta": 1000000,
154
+ "rope_type": "default"
155
+ },
156
+ "sep_token_id": null,
157
+ "sliding_window": null,
158
+ "task_specific_params": null,
159
+ "tf_legacy_loss": false,
160
+ "tie_encoder_decoder": false,
161
+ "tie_word_embeddings": true,
162
+ "tokenizer_class": null,
163
+ "torchscript": false,
164
+ "use_bfloat16": false,
165
+ "use_cache": false,
166
+ "use_sliding_window": false,
167
+ "vocab_size": 151936
168
+ },
169
+ "local_hidden_size": 2560,
170
+ "local_text_head_mode": "binary",
171
+ "local_transformer_attn_implementation": "sdpa",
172
+ "local_transformer_layers": 1,
173
+ "model_type": "moss_tts_local",
174
+ "n_vq": 12,
175
+ "pad_token_id": 151643,
176
+ "processor_class": "MossTTSLocalProcessor",
177
+ "qwen3_config": {
178
+ "add_cross_attention": false,
179
+ "architectures": [
180
+ "Qwen3ForCausalLM"
181
+ ],
182
+ "attention_bias": false,
183
+ "attention_dropout": 0.0,
184
+ "bos_token_id": 151643,
185
+ "cross_attention_hidden_size": null,
186
+ "decoder_start_token_id": null,
187
+ "dtype": "bfloat16",
188
+ "eos_token_id": 151643,
189
+ "finetuning_task": null,
190
+ "gradient_checkpointing_use_reentrant": false,
191
+ "head_dim": 128,
192
+ "hidden_act": "silu",
193
+ "hidden_size": 2560,
194
+ "initializer_range": 0.02,
195
+ "intermediate_size": 9728,
196
+ "is_decoder": false,
197
+ "layer_types": [
198
+ "full_attention",
199
+ "full_attention",
200
+ "full_attention",
201
+ "full_attention",
202
+ "full_attention",
203
+ "full_attention",
204
+ "full_attention",
205
+ "full_attention",
206
+ "full_attention",
207
+ "full_attention",
208
+ "full_attention",
209
+ "full_attention",
210
+ "full_attention",
211
+ "full_attention",
212
+ "full_attention",
213
+ "full_attention",
214
+ "full_attention",
215
+ "full_attention",
216
+ "full_attention",
217
+ "full_attention",
218
+ "full_attention",
219
+ "full_attention",
220
+ "full_attention",
221
+ "full_attention",
222
+ "full_attention",
223
+ "full_attention",
224
+ "full_attention",
225
+ "full_attention",
226
+ "full_attention",
227
+ "full_attention",
228
+ "full_attention",
229
+ "full_attention",
230
+ "full_attention",
231
+ "full_attention",
232
+ "full_attention",
233
+ "full_attention"
234
+ ],
235
+ "max_position_embeddings": 32768,
236
+ "max_window_layers": 36,
237
+ "model_type": "qwen3",
238
+ "num_attention_heads": 32,
239
+ "num_hidden_layers": 36,
240
+ "num_key_value_heads": 8,
241
+ "pad_token_id": 151643,
242
+ "prefix": null,
243
+ "pruned_heads": {},
244
+ "rms_norm_eps": 1e-06,
245
+ "rope_parameters": {
246
+ "rope_theta": 1000000,
247
+ "rope_type": "default"
248
+ },
249
+ "sep_token_id": null,
250
+ "sliding_window": null,
251
+ "task_specific_params": null,
252
+ "tf_legacy_loss": false,
253
+ "tie_encoder_decoder": false,
254
+ "tie_word_embeddings": true,
255
+ "tokenizer_class": null,
256
+ "torchscript": false,
257
+ "use_bfloat16": false,
258
+ "use_cache": false,
259
+ "use_sliding_window": false,
260
+ "vocab_size": 151936
261
+ },
262
+ "sampling_rate": 48000,
263
+ "tie_word_embeddings": true,
264
+ "transformers_version": "5.14.1",
265
+ "use_static_local_kv_cache": true,
266
+ "vocab_size": 151936
267
+ }
configuration_moss_tts.py ADDED
@@ -0,0 +1,158 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # coding=utf-8
2
+ """Configuration for the MOSS-TTS-Local-Transformer-v1.5 release."""
3
+
4
+ from __future__ import annotations
5
+
6
+ from typing import Any, Dict, Optional, Union
7
+
8
+ from transformers.configuration_utils import PretrainedConfig
9
+ from transformers.models.gpt2.configuration_gpt2 import GPT2Config
10
+ from transformers.models.qwen3.configuration_qwen3 import Qwen3Config
11
+
12
+
13
+ SUPPORTED_ATTENTION_IMPLEMENTATIONS = {"flash_attention_2", "sdpa", "eager"}
14
+
15
+
16
+ def _normalize_attention_implementation(value: Optional[str], default: str = "flash_attention_2") -> str:
17
+ normalized = str(value or default).strip().lower()
18
+ if normalized in {"flash", "flash_attn", "flash-attn", "flash_attention"}:
19
+ normalized = "flash_attention_2"
20
+ if normalized not in SUPPORTED_ATTENTION_IMPLEMENTATIONS:
21
+ raise ValueError(
22
+ "attn_implementation must be one of "
23
+ f"{sorted(SUPPORTED_ATTENTION_IMPLEMENTATIONS)}, got {value!r}."
24
+ )
25
+ return normalized
26
+
27
+
28
+ class MossTTSLocalConfig(PretrainedConfig):
29
+ model_type = "moss_tts_local"
30
+ keys_to_ignore_at_inference = ["past_key_values"]
31
+
32
+ def __init__(
33
+ self,
34
+ qwen3_config: Optional[Union[Qwen3Config, Dict[str, Any]]] = None,
35
+ gpt2_config: Optional[Union[GPT2Config, Dict[str, Any]]] = None,
36
+ language_config: Optional[Union[Qwen3Config, Dict[str, Any]]] = None,
37
+ n_vq: int = 12,
38
+ audio_vocab_size: int = 1024,
39
+ audio_codebook_sizes: Optional[list[int]] = None,
40
+ audio_pad_token_id: int = 1024,
41
+ audio_pad_code: Optional[int] = None,
42
+ pad_token_id: int = 151643,
43
+ im_start_token_id: int = 151644,
44
+ im_end_token_id: int = 151645,
45
+ audio_start_token_id: int = 151669,
46
+ audio_end_token_id: int = 151670,
47
+ audio_user_slot_token_id: int = 151654,
48
+ audio_assistant_slot_token_id: int = 151656,
49
+ audio_assistant_gen_slot_token_id: Optional[int] = None,
50
+ sampling_rate: int = 48000,
51
+ audio_tokenizer_name_or_path: Optional[str] = None,
52
+ attn_implementation: str = "flash_attention_2",
53
+ local_transformer_attn_implementation: Optional[str] = None,
54
+ local_text_head_mode: str = "binary",
55
+ initializer_range: float = 0.02,
56
+ **kwargs: Any,
57
+ ) -> None:
58
+ if qwen3_config is None and language_config is not None:
59
+ qwen3_config = language_config
60
+ if isinstance(qwen3_config, dict):
61
+ self.qwen3_config = Qwen3Config(**qwen3_config)
62
+ elif qwen3_config is None:
63
+ self.qwen3_config = Qwen3Config()
64
+ else:
65
+ self.qwen3_config = qwen3_config
66
+
67
+ if isinstance(gpt2_config, dict):
68
+ self.gpt2_config = GPT2Config(**gpt2_config)
69
+ elif gpt2_config is None:
70
+ self.gpt2_config = GPT2Config(
71
+ vocab_size=int(self.qwen3_config.vocab_size),
72
+ n_embd=int(self.qwen3_config.hidden_size),
73
+ n_layer=1,
74
+ n_head=max(1, int(self.qwen3_config.hidden_size) // 80),
75
+ n_positions=int(n_vq) + 1,
76
+ n_ctx=int(n_vq) + 1,
77
+ activation_function="silu",
78
+ layer_norm_epsilon=1e-6,
79
+ resid_pdrop=0.0,
80
+ embd_pdrop=0.0,
81
+ attn_pdrop=0.0,
82
+ )
83
+ else:
84
+ self.gpt2_config = gpt2_config
85
+
86
+ self.n_vq = int(n_vq)
87
+ if self.n_vq <= 0:
88
+ raise ValueError("n_vq must be positive.")
89
+ if audio_codebook_sizes is None:
90
+ self.audio_codebook_sizes = [int(audio_vocab_size)] * self.n_vq
91
+ else:
92
+ self.audio_codebook_sizes = [int(size) for size in audio_codebook_sizes]
93
+ if len(self.audio_codebook_sizes) != self.n_vq:
94
+ raise ValueError(
95
+ f"audio_codebook_sizes must have length n_vq={self.n_vq}, "
96
+ f"got {len(self.audio_codebook_sizes)}."
97
+ )
98
+ if any(size <= 0 for size in self.audio_codebook_sizes):
99
+ raise ValueError("audio_codebook_sizes must contain positive integers.")
100
+ self.audio_vocab_size = int(max(int(audio_vocab_size), max(self.audio_codebook_sizes)))
101
+ self.audio_pad_token_id = int(audio_pad_code if audio_pad_code is not None else audio_pad_token_id)
102
+ self.audio_pad_code = self.audio_pad_token_id
103
+ if self.audio_pad_token_id < self.audio_vocab_size:
104
+ raise ValueError("audio_pad_token_id/audio_pad_code must be outside the audio vocab.")
105
+
106
+ self.pad_token_id = int(pad_token_id)
107
+ self.im_start_token_id = int(im_start_token_id)
108
+ self.im_end_token_id = int(im_end_token_id)
109
+ self.audio_start_token_id = int(audio_start_token_id)
110
+ self.audio_end_token_id = int(audio_end_token_id)
111
+ self.audio_user_slot_token_id = int(audio_user_slot_token_id)
112
+ self.audio_assistant_slot_token_id = int(
113
+ audio_assistant_slot_token_id
114
+ if audio_assistant_gen_slot_token_id is None
115
+ else audio_assistant_gen_slot_token_id
116
+ )
117
+ self.audio_assistant_gen_slot_token_id = self.audio_assistant_slot_token_id
118
+
119
+ self.sampling_rate = int(sampling_rate)
120
+ self.audio_tokenizer_name_or_path = audio_tokenizer_name_or_path
121
+ self.attn_implementation = _normalize_attention_implementation(attn_implementation)
122
+ self.local_transformer_attn_implementation = _normalize_attention_implementation(
123
+ local_transformer_attn_implementation,
124
+ default=self.attn_implementation,
125
+ )
126
+ self.initializer_range = float(initializer_range)
127
+
128
+ self.hidden_size = int(self.qwen3_config.hidden_size)
129
+ self.vocab_size = int(self.qwen3_config.vocab_size)
130
+ self.local_hidden_size = int(self.gpt2_config.hidden_size)
131
+ if self.local_hidden_size != self.hidden_size:
132
+ raise ValueError(
133
+ "This MOSS-TTS-Local-Transformer-v1.5 release expects local hidden size to "
134
+ "match Qwen3 hidden size so audio embeddings and heads are tied."
135
+ )
136
+
137
+ normalized_text_head_mode = str(local_text_head_mode or "full_vocab").strip().lower()
138
+ if normalized_text_head_mode in {"full", "full-vocab", "vocab"}:
139
+ normalized_text_head_mode = "full_vocab"
140
+ if normalized_text_head_mode not in {"full_vocab", "binary"}:
141
+ raise ValueError("local_text_head_mode must be 'full_vocab' or 'binary'.")
142
+ self.local_text_head_mode = normalized_text_head_mode
143
+
144
+ kwargs.setdefault("tie_word_embeddings", True)
145
+ super().__init__(pad_token_id=self.pad_token_id, **kwargs)
146
+
147
+ @property
148
+ def language_config(self) -> Qwen3Config:
149
+ return self.qwen3_config
150
+
151
+ def to_dict(self) -> Dict[str, Any]:
152
+ output = super().to_dict()
153
+ output["qwen3_config"] = self.qwen3_config.to_dict()
154
+ output["language_config"] = self.qwen3_config.to_dict()
155
+ output["gpt2_config"] = self.gpt2_config.to_dict()
156
+ output["audio_pad_code"] = self.audio_pad_token_id
157
+ output["audio_assistant_gen_slot_token_id"] = self.audio_assistant_slot_token_id
158
+ return output
examples/all_dialogues.json ADDED
@@ -0,0 +1,1292 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "task_id": "short-en-coffee",
4
+ "group": "short",
5
+ "language": "en",
6
+ "topic": "coffee",
7
+ "seed": 20261103,
8
+ "pause_s": 0.24,
9
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
10
+ "turns": [
11
+ {
12
+ "speaker": "S1",
13
+ "text": "I tried making coffee without looking at my phone this morning. It felt oddly peaceful, actually.",
14
+ "seconds": 8.88,
15
+ "direction": "warm, curious, relaxed conversational delivery"
16
+ },
17
+ {
18
+ "speaker": "S2",
19
+ "text": "That sounds lovely. Although I would probably spend the whole time wondering whether the kettle was taking longer.",
20
+ "seconds": 8.88,
21
+ "direction": "engaged, friendly, spontaneous conversational reply"
22
+ }
23
+ ]
24
+ },
25
+ {
26
+ "task_id": "short-en-walking",
27
+ "group": "short",
28
+ "language": "en",
29
+ "topic": "walking",
30
+ "seed": 20261104,
31
+ "pause_s": 0.24,
32
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
33
+ "turns": [
34
+ {
35
+ "speaker": "S1",
36
+ "text": "Do you ever take a different route home just because the usual one has started to feel invisible?",
37
+ "seconds": 8.88,
38
+ "direction": "warm, curious, relaxed conversational delivery"
39
+ },
40
+ {
41
+ "speaker": "S2",
42
+ "text": "Yes, and then I discover a tiny shop that has apparently been there for about twenty years.",
43
+ "seconds": 8.88,
44
+ "direction": "engaged, friendly, spontaneous conversational reply"
45
+ }
46
+ ]
47
+ },
48
+ {
49
+ "task_id": "short-en-learning",
50
+ "group": "short",
51
+ "language": "en",
52
+ "topic": "learning",
53
+ "seed": 20261105,
54
+ "pause_s": 0.24,
55
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
56
+ "turns": [
57
+ {
58
+ "speaker": "S1",
59
+ "text": "I finally played that difficult passage on the piano without stopping. Only once, but I am counting it.",
60
+ "seconds": 8.88,
61
+ "direction": "warm, curious, relaxed conversational delivery"
62
+ },
63
+ {
64
+ "speaker": "S2",
65
+ "text": "You absolutely should. One good attempt means your hands have discovered that the thing is possible.",
66
+ "seconds": 8.88,
67
+ "direction": "engaged, friendly, spontaneous conversational reply"
68
+ }
69
+ ]
70
+ },
71
+ {
72
+ "task_id": "short-de-cooking",
73
+ "group": "short",
74
+ "language": "de",
75
+ "topic": "cooking",
76
+ "seed": 20261106,
77
+ "pause_s": 0.24,
78
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
79
+ "turns": [
80
+ {
81
+ "speaker": "S1",
82
+ "text": "Ich habe gestern endlich das Brot selbst gebacken. Die Küche sah danach allerdings ziemlich abenteuerlich aus.",
83
+ "seconds": 8.88,
84
+ "direction": "warm, curious, relaxed conversational delivery"
85
+ },
86
+ {
87
+ "speaker": "S2",
88
+ "text": "Das gehört dazu. Die entscheidende Frage ist doch: Hat es gut geschmeckt, oder war es eher ein Türstopper?",
89
+ "seconds": 8.88,
90
+ "direction": "engaged, friendly, spontaneous conversational reply"
91
+ }
92
+ ]
93
+ },
94
+ {
95
+ "task_id": "short-de-train",
96
+ "group": "short",
97
+ "language": "de",
98
+ "topic": "train",
99
+ "seed": 20261107,
100
+ "pause_s": 0.24,
101
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
102
+ "turns": [
103
+ {
104
+ "speaker": "S1",
105
+ "text": "Im Zug hat mich heute ein Kind gefragt, warum die Wolken eigentlich nicht einfach vom Himmel fallen.",
106
+ "seconds": 8.88,
107
+ "direction": "warm, curious, relaxed conversational delivery"
108
+ },
109
+ {
110
+ "speaker": "S2",
111
+ "text": "Das ist eine ausgezeichnete Frage. Hast du wissenschaftlich geantwortet oder erst einmal sehr lange aus dem Fenster geschaut?",
112
+ "seconds": 8.88,
113
+ "direction": "engaged, friendly, spontaneous conversational reply"
114
+ }
115
+ ]
116
+ },
117
+ {
118
+ "task_id": "short-de-garden",
119
+ "group": "short",
120
+ "language": "de",
121
+ "topic": "garden",
122
+ "seed": 20261108,
123
+ "pause_s": 0.24,
124
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
125
+ "turns": [
126
+ {
127
+ "speaker": "S1",
128
+ "text": "Auf meinem Balkon wächst jetzt tatsächlich etwas Grünes. Ich hätte nicht gedacht, dass mich so ein kleiner Trieb so freut.",
129
+ "seconds": 8.88,
130
+ "direction": "warm, curious, relaxed conversational delivery"
131
+ },
132
+ {
133
+ "speaker": "S2",
134
+ "text": "Was hast du gepflanzt? Und bitte sag mir, dass du diesmal noch weißt, in welchen Topf die Samen gekommen sind.",
135
+ "seconds": 8.88,
136
+ "direction": "engaged, friendly, spontaneous conversational reply"
137
+ }
138
+ ]
139
+ },
140
+ {
141
+ "task_id": "short-fr-jardin",
142
+ "group": "short",
143
+ "language": "fr",
144
+ "topic": "jardin",
145
+ "seed": 20261109,
146
+ "pause_s": 0.24,
147
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
148
+ "turns": [
149
+ {
150
+ "speaker": "S1",
151
+ "text": "Ce matin, j’ai découvert une petite fleur sur mon balcon. Je pensais vraiment que cette plante avait abandonné.",
152
+ "seconds": 8.88,
153
+ "direction": "warm, curious, relaxed conversational delivery"
154
+ },
155
+ {
156
+ "speaker": "S2",
157
+ "text": "Comme quoi, elle préparait peut-être sa surprise en silence. Tu lui as donné un peu plus de lumière ?",
158
+ "seconds": 8.88,
159
+ "direction": "engaged, friendly, spontaneous conversational reply"
160
+ }
161
+ ]
162
+ },
163
+ {
164
+ "task_id": "short-fr-chance",
165
+ "group": "short",
166
+ "language": "fr",
167
+ "topic": "chance",
168
+ "seed": 20261110,
169
+ "pause_s": 0.24,
170
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
171
+ "turns": [
172
+ {
173
+ "speaker": "S1",
174
+ "text": "J’ai retrouvé un vieux carnet dans une boîte. Il était rempli de projets que j’avais complètement oubliés.",
175
+ "seconds": 8.88,
176
+ "direction": "warm, curious, relaxed conversational delivery"
177
+ },
178
+ {
179
+ "speaker": "S2",
180
+ "text": "Et alors, tu as eu envie de les reprendre, ou surtout de remercier ton ancien toi de ne pas avoir tout essayé ?",
181
+ "seconds": 8.88,
182
+ "direction": "engaged, friendly, spontaneous conversational reply"
183
+ }
184
+ ]
185
+ },
186
+ {
187
+ "task_id": "short-es-radio",
188
+ "group": "short",
189
+ "language": "es",
190
+ "topic": "radio",
191
+ "seed": 20261111,
192
+ "pause_s": 0.24,
193
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
194
+ "turns": [
195
+ {
196
+ "speaker": "S1",
197
+ "text": "Esta mañana escuché una canción que no oía desde el colegio. De repente recordé hasta el camino de vuelta a casa.",
198
+ "seconds": 8.88,
199
+ "direction": "warm, curious, relaxed conversational delivery"
200
+ },
201
+ {
202
+ "speaker": "S2",
203
+ "text": "Es increíble cómo pasa eso. A veces una melodía guarda recuerdos que ni siquiera sabíamos que seguían allí.",
204
+ "seconds": 8.88,
205
+ "direction": "engaged, friendly, spontaneous conversational reply"
206
+ }
207
+ ]
208
+ },
209
+ {
210
+ "task_id": "short-es-friends",
211
+ "group": "short",
212
+ "language": "es",
213
+ "topic": "friends",
214
+ "seed": 20261112,
215
+ "pause_s": 0.24,
216
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
217
+ "turns": [
218
+ {
219
+ "speaker": "S1",
220
+ "text": "Ayer cociné para unos amigos y olvidé poner sal. Me di cuenta cuando todos estaban intentando ser demasiado amables.",
221
+ "seconds": 8.88,
222
+ "direction": "warm, curious, relaxed conversational delivery"
223
+ },
224
+ {
225
+ "speaker": "S2",
226
+ "text": "Ese silencio tan educado lo dice todo. ¿Alguien pidió el salero o decidiste presentar el plato como una experiencia delicada?",
227
+ "seconds": 8.88,
228
+ "direction": "engaged, friendly, spontaneous conversational reply"
229
+ }
230
+ ]
231
+ },
232
+ {
233
+ "task_id": "medium-en-coffee",
234
+ "group": "medium",
235
+ "language": "en",
236
+ "topic": "coffee",
237
+ "seed": 20261103,
238
+ "pause_s": 0.24,
239
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
240
+ "turns": [
241
+ {
242
+ "speaker": "S1",
243
+ "text": "I tried making coffee without looking at my phone this morning. It felt oddly peaceful, actually.",
244
+ "seconds": 6.2,
245
+ "direction": "warm, curious, relaxed conversational delivery"
246
+ },
247
+ {
248
+ "speaker": "S2",
249
+ "text": "That sounds lovely. Although I would probably spend the whole time wondering whether the kettle was taking longer.",
250
+ "seconds": 6.2,
251
+ "direction": "engaged, friendly, spontaneous conversational reply"
252
+ },
253
+ {
254
+ "speaker": "S1",
255
+ "text": "Exactly! At first I kept reaching for a notification that was not even there. Then I noticed the rain.",
256
+ "seconds": 6.2,
257
+ "direction": "warm, curious, relaxed conversational delivery"
258
+ },
259
+ {
260
+ "speaker": "S2",
261
+ "text": "We fill every little gap, don’t we? Sometimes the nicest part of a morning is that nothing happens.",
262
+ "seconds": 6.2,
263
+ "direction": "engaged, friendly, spontaneous conversational reply"
264
+ },
265
+ {
266
+ "speaker": "S1",
267
+ "text": "And the coffee tasted better. Not because I made it differently, but because I finally paid attention.",
268
+ "seconds": 6.2,
269
+ "direction": "warm, curious, relaxed conversational delivery"
270
+ },
271
+ {
272
+ "speaker": "S2",
273
+ "text": "Well, now you have turned a cup of coffee into a small philosophy lesson. I am surprisingly convinced.",
274
+ "seconds": 6.2,
275
+ "direction": "engaged, friendly, spontaneous conversational reply"
276
+ }
277
+ ]
278
+ },
279
+ {
280
+ "task_id": "medium-en-walking",
281
+ "group": "medium",
282
+ "language": "en",
283
+ "topic": "walking",
284
+ "seed": 20261104,
285
+ "pause_s": 0.24,
286
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
287
+ "turns": [
288
+ {
289
+ "speaker": "S1",
290
+ "text": "Do you ever take a different route home just because the usual one has started to feel invisible?",
291
+ "seconds": 6.2,
292
+ "direction": "warm, curious, relaxed conversational delivery"
293
+ },
294
+ {
295
+ "speaker": "S2",
296
+ "text": "Yes, and then I discover a tiny shop that has apparently been there for about twenty years.",
297
+ "seconds": 6.2,
298
+ "direction": "engaged, friendly, spontaneous conversational reply"
299
+ },
300
+ {
301
+ "speaker": "S1",
302
+ "text": "That happened yesterday. There was a bookshop with a sleeping dog right beside the door. I almost missed it.",
303
+ "seconds": 6.2,
304
+ "direction": "warm, curious, relaxed conversational delivery"
305
+ },
306
+ {
307
+ "speaker": "S2",
308
+ "text": "A sleeping dog is an excellent recommendation. It suggests the atmosphere is relaxed and the customers are trustworthy.",
309
+ "seconds": 6.2,
310
+ "direction": "engaged, friendly, spontaneous conversational reply"
311
+ },
312
+ {
313
+ "speaker": "S1",
314
+ "text": "The owner asked what I liked reading, and I realised I had not answered that question in ages.",
315
+ "seconds": 6.2,
316
+ "direction": "warm, curious, relaxed conversational delivery"
317
+ },
318
+ {
319
+ "speaker": "S2",
320
+ "text": "What did you say? Please tell me you did not just point to the nearest shelf and panic.",
321
+ "seconds": 6.2,
322
+ "direction": "engaged, friendly, spontaneous conversational reply"
323
+ }
324
+ ]
325
+ },
326
+ {
327
+ "task_id": "medium-en-learning",
328
+ "group": "medium",
329
+ "language": "en",
330
+ "topic": "learning",
331
+ "seed": 20261105,
332
+ "pause_s": 0.24,
333
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
334
+ "turns": [
335
+ {
336
+ "speaker": "S1",
337
+ "text": "I finally played that difficult passage on the piano without stopping. Only once, but I am counting it.",
338
+ "seconds": 6.2,
339
+ "direction": "warm, curious, relaxed conversational delivery"
340
+ },
341
+ {
342
+ "speaker": "S2",
343
+ "text": "You absolutely should. One good attempt means your hands have discovered that the thing is possible.",
344
+ "seconds": 6.2,
345
+ "direction": "engaged, friendly, spontaneous conversational reply"
346
+ },
347
+ {
348
+ "speaker": "S1",
349
+ "text": "The funny part is that I had been practising it faster and faster, which mostly made it sound worse.",
350
+ "seconds": 6.2,
351
+ "direction": "warm, curious, relaxed conversational delivery"
352
+ },
353
+ {
354
+ "speaker": "S2",
355
+ "text": "Then somebody told you to slow down, and you were deeply offended by this very sensible advice?",
356
+ "seconds": 6.2,
357
+ "direction": "engaged, friendly, spontaneous conversational reply"
358
+ },
359
+ {
360
+ "speaker": "S1",
361
+ "text": "A little! But after a few quiet minutes, I could actually hear where I was rushing ahead.",
362
+ "seconds": 6.2,
363
+ "direction": "warm, curious, relaxed conversational delivery"
364
+ },
365
+ {
366
+ "speaker": "S2",
367
+ "text": "That is the awkward secret of learning. Sometimes trying harder just means repeating the mistake with more confidence.",
368
+ "seconds": 6.2,
369
+ "direction": "engaged, friendly, spontaneous conversational reply"
370
+ }
371
+ ]
372
+ },
373
+ {
374
+ "task_id": "medium-de-cooking",
375
+ "group": "medium",
376
+ "language": "de",
377
+ "topic": "cooking",
378
+ "seed": 20261106,
379
+ "pause_s": 0.24,
380
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
381
+ "turns": [
382
+ {
383
+ "speaker": "S1",
384
+ "text": "Ich habe gestern endlich das Brot selbst gebacken. Die Küche sah danach allerdings ziemlich abenteuerlich aus.",
385
+ "seconds": 6.2,
386
+ "direction": "warm, curious, relaxed conversational delivery"
387
+ },
388
+ {
389
+ "speaker": "S2",
390
+ "text": "Das gehört dazu. Die entscheidende Frage ist doch: Hat es gut geschmeckt, oder war es eher ein Türstopper?",
391
+ "seconds": 6.2,
392
+ "direction": "engaged, friendly, spontaneous conversational reply"
393
+ },
394
+ {
395
+ "speaker": "S1",
396
+ "text": "Überraschend gut! Die Kruste war ein bisschen dunkel, aber innen war es weich. Ich war richtig stolz darauf.",
397
+ "seconds": 6.2,
398
+ "direction": "warm, curious, relaxed conversational delivery"
399
+ },
400
+ {
401
+ "speaker": "S2",
402
+ "text": "Dann war das keine dunkle Kruste, sondern ein bewusst gewähltes Röstaroma. So würde ich es jedenfalls verkaufen.",
403
+ "seconds": 6.2,
404
+ "direction": "engaged, friendly, spontaneous conversational reply"
405
+ },
406
+ {
407
+ "speaker": "S1",
408
+ "text": "Genau das habe ich auch gesagt. Beim zweiten Versuch möchte ich trotzdem vorher schauen, wie heiß der Ofen wirklich ist.",
409
+ "seconds": 6.2,
410
+ "direction": "warm, curious, relaxed conversational delivery"
411
+ },
412
+ {
413
+ "speaker": "S2",
414
+ "text": "Vernünftig. Ich finde sowieso schön, wenn man etwas macht, bei dem man das Ergebnis hinterher gemeinsam essen kann.",
415
+ "seconds": 6.2,
416
+ "direction": "engaged, friendly, spontaneous conversational reply"
417
+ }
418
+ ]
419
+ },
420
+ {
421
+ "task_id": "medium-de-train",
422
+ "group": "medium",
423
+ "language": "de",
424
+ "topic": "train",
425
+ "seed": 20261107,
426
+ "pause_s": 0.24,
427
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
428
+ "turns": [
429
+ {
430
+ "speaker": "S1",
431
+ "text": "Im Zug hat mich heute ein Kind gefragt, warum die Wolken eigentlich nicht einfach vom Himmel fallen.",
432
+ "seconds": 6.2,
433
+ "direction": "warm, curious, relaxed conversational delivery"
434
+ },
435
+ {
436
+ "speaker": "S2",
437
+ "text": "Das ist eine ausgezeichnete Frage. Hast du wissenschaftlich geantwortet oder erst einmal sehr lange aus dem Fenster geschaut?",
438
+ "seconds": 6.2,
439
+ "direction": "engaged, friendly, spontaneous conversational reply"
440
+ },
441
+ {
442
+ "speaker": "S1",
443
+ "text": "Beides. Ich wollte mit winzigen Wassertröpfchen anfangen, aber dann fragte es sofort, warum die nicht alle zusammenkleben.",
444
+ "seconds": 6.2,
445
+ "direction": "warm, curious, relaxed conversational delivery"
446
+ },
447
+ {
448
+ "speaker": "S2",
449
+ "text": "Kinder haben dieses Talent, jede vermeintlich einfache Erklärung genau an der spannendsten Stelle auseinanderzunehmen.",
450
+ "seconds": 6.2,
451
+ "direction": "engaged, friendly, spontaneous conversational reply"
452
+ },
453
+ {
454
+ "speaker": "S1",
455
+ "text": "Ja, und plötzlich saßen drei Erwachsene da und überlegten gemeinsam. Das war viel netter als auf das Handy zu schauen.",
456
+ "seconds": 6.2,
457
+ "direction": "warm, curious, relaxed conversational delivery"
458
+ },
459
+ {
460
+ "speaker": "S2",
461
+ "text": "Dann war die eigentliche Entdeckung vielleicht gar nicht das Wetter, sondern dass ein fremder Mensch ein Gespräch anfangen kann.",
462
+ "seconds": 6.2,
463
+ "direction": "engaged, friendly, spontaneous conversational reply"
464
+ }
465
+ ]
466
+ },
467
+ {
468
+ "task_id": "medium-de-garden",
469
+ "group": "medium",
470
+ "language": "de",
471
+ "topic": "garden",
472
+ "seed": 20261108,
473
+ "pause_s": 0.24,
474
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
475
+ "turns": [
476
+ {
477
+ "speaker": "S1",
478
+ "text": "Auf meinem Balkon wächst jetzt tatsächlich etwas Grünes. Ich hätte nicht gedacht, dass mich so ein kleiner Trieb so freut.",
479
+ "seconds": 6.2,
480
+ "direction": "warm, curious, relaxed conversational delivery"
481
+ },
482
+ {
483
+ "speaker": "S2",
484
+ "text": "Was hast du gepflanzt? Und bitte sag mir, dass du diesmal noch weißt, in welchen Topf die Samen gekommen sind.",
485
+ "seconds": 6.2,
486
+ "direction": "engaged, friendly, spontaneous conversational reply"
487
+ },
488
+ {
489
+ "speaker": "S1",
490
+ "text": "Basilikum, glaube ich. Die Beschriftung hat der Regen mitgenommen. Es könnte also auch eine sehr überzeugende andere Pflanze sein.",
491
+ "seconds": 6.2,
492
+ "direction": "warm, curious, relaxed conversational delivery"
493
+ },
494
+ {
495
+ "speaker": "S2",
496
+ "text": "Dann betrachten wir das vorerst als botanisches Rätsel. Du musst nichts überstürzen und solltest vielleicht noch nicht daran knabbern.",
497
+ "seconds": 6.2,
498
+ "direction": "engaged, friendly, spontaneous conversational reply"
499
+ },
500
+ {
501
+ "speaker": "S1",
502
+ "text": "Keine Sorge. Ich finde es einfach angenehm, morgens kurz nachzusehen, ob wieder ein neues Blatt dazugekommen ist.",
503
+ "seconds": 6.2,
504
+ "direction": "warm, curious, relaxed conversational delivery"
505
+ },
506
+ {
507
+ "speaker": "S2",
508
+ "text": "Das verstehe ich. Es ist eine kleine Veränderung, die nicht drängelt und trotzdem zeigt, dass etwas vorangeht.",
509
+ "seconds": 6.2,
510
+ "direction": "engaged, friendly, spontaneous conversational reply"
511
+ }
512
+ ]
513
+ },
514
+ {
515
+ "task_id": "medium-fr-jardin",
516
+ "group": "medium",
517
+ "language": "fr",
518
+ "topic": "jardin",
519
+ "seed": 20261109,
520
+ "pause_s": 0.24,
521
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
522
+ "turns": [
523
+ {
524
+ "speaker": "S1",
525
+ "text": "Ce matin, j’ai découvert une petite fleur sur mon balcon. Je pensais vraiment que cette plante avait abandonné.",
526
+ "seconds": 6.2,
527
+ "direction": "warm, curious, relaxed conversational delivery"
528
+ },
529
+ {
530
+ "speaker": "S2",
531
+ "text": "Comme quoi, elle préparait peut-être sa surprise en silence. Tu lui as donné un peu plus de lumière ?",
532
+ "seconds": 6.2,
533
+ "direction": "engaged, friendly, spontaneous conversational reply"
534
+ },
535
+ {
536
+ "speaker": "S1",
537
+ "text": "Oui, et surtout un peu moins d’eau. Apparemment, mon enthousiasme dépassait largement ses besoins. Je voulais trop bien faire.",
538
+ "seconds": 6.2,
539
+ "direction": "warm, curious, relaxed conversational delivery"
540
+ },
541
+ {
542
+ "speaker": "S2",
543
+ "text": "C’est assez humain, finalement. On croit aider en faisant davantage, alors que parfois il faut simplement laisser respirer.",
544
+ "seconds": 6.2,
545
+ "direction": "engaged, friendly, spontaneous conversational reply"
546
+ },
547
+ {
548
+ "speaker": "S1",
549
+ "text": "Tu as raison. Maintenant, je regarde les nouvelles feuilles avant de prendre mon téléphone. Cela change le début de ma journée.",
550
+ "seconds": 6.2,
551
+ "direction": "warm, curious, relaxed conversational delivery"
552
+ },
553
+ {
554
+ "speaker": "S2",
555
+ "text": "Et tu ne peux pas accélérer la prochaine fleur en actualisant la page. C’est peut-être exactement ce qui fait du bien.",
556
+ "seconds": 6.2,
557
+ "direction": "engaged, friendly, spontaneous conversational reply"
558
+ }
559
+ ]
560
+ },
561
+ {
562
+ "task_id": "medium-fr-chance",
563
+ "group": "medium",
564
+ "language": "fr",
565
+ "topic": "chance",
566
+ "seed": 20261110,
567
+ "pause_s": 0.24,
568
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
569
+ "turns": [
570
+ {
571
+ "speaker": "S1",
572
+ "text": "J’ai retrouvé un vieux carnet dans une boîte. Il était rempli de projets que j’avais complètement oubliés.",
573
+ "seconds": 6.2,
574
+ "direction": "warm, curious, relaxed conversational delivery"
575
+ },
576
+ {
577
+ "speaker": "S2",
578
+ "text": "Et alors, tu as eu envie de les reprendre, ou surtout de remercier ton ancien toi de ne pas avoir tout essayé ?",
579
+ "seconds": 6.2,
580
+ "direction": "engaged, friendly, spontaneous conversational reply"
581
+ },
582
+ {
583
+ "speaker": "S1",
584
+ "text": "Un peu des deux. Il y avait une idée de voyage magnifique, puis une recette de soupe franchement inquiétante.",
585
+ "seconds": 6.2,
586
+ "direction": "warm, curious, relaxed conversational delivery"
587
+ },
588
+ {
589
+ "speaker": "S2",
590
+ "text": "C’est rassurant. Un bon carnet devrait contenir de grandes ambitions et quelques décisions culinaires discutables.",
591
+ "seconds": 6.2,
592
+ "direction": "engaged, friendly, spontaneous conversational reply"
593
+ },
594
+ {
595
+ "speaker": "S1",
596
+ "text": "Ce qui m’a touché, c’est de voir combien je pouvais être enthousiaste. Pas forcément réaliste, mais vraiment curieux.",
597
+ "seconds": 6.2,
598
+ "direction": "warm, curious, relaxed conversational delivery"
599
+ },
600
+ {
601
+ "speaker": "S2",
602
+ "text": "Peut-être que tu peux garder cette curiosité sans reprendre chaque projet. On a le droit de changer de direction.",
603
+ "seconds": 6.2,
604
+ "direction": "engaged, friendly, spontaneous conversational reply"
605
+ }
606
+ ]
607
+ },
608
+ {
609
+ "task_id": "medium-es-radio",
610
+ "group": "medium",
611
+ "language": "es",
612
+ "topic": "radio",
613
+ "seed": 20261111,
614
+ "pause_s": 0.24,
615
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
616
+ "turns": [
617
+ {
618
+ "speaker": "S1",
619
+ "text": "Esta mañana escuché una canción que no oía desde el colegio. De repente recordé hasta el camino de vuelta a casa.",
620
+ "seconds": 6.2,
621
+ "direction": "warm, curious, relaxed conversational delivery"
622
+ },
623
+ {
624
+ "speaker": "S2",
625
+ "text": "Es increíble cómo pasa eso. A veces una melodía guarda recuerdos que ni siquiera sabíamos que seguían allí.",
626
+ "seconds": 6.2,
627
+ "direction": "engaged, friendly, spontaneous conversational reply"
628
+ },
629
+ {
630
+ "speaker": "S1",
631
+ "text": "Sí, y no era una canción especialmente importante. Creo que simplemente sonaba siempre en la pequeña tienda de la esquina.",
632
+ "seconds": 6.2,
633
+ "direction": "warm, curious, relaxed conversational delivery"
634
+ },
635
+ {
636
+ "speaker": "S2",
637
+ "text": "Entonces también recuerdas la tienda, el ruido de la calle, quizá alguna conversación. Todo aparece junto, sin pedir permiso.",
638
+ "seconds": 6.2,
639
+ "direction": "engaged, friendly, spontaneous conversational reply"
640
+ },
641
+ {
642
+ "speaker": "S1",
643
+ "text": "Exactamente. Me dieron ganas de escribirle a un amigo de aquella época, aunque llevamos bastante tiempo sin hablar.",
644
+ "seconds": 6.2,
645
+ "direction": "warm, curious, relaxed conversational delivery"
646
+ },
647
+ {
648
+ "speaker": "S2",
649
+ "text": "Hazlo. No necesitas un mensaje perfecto. Puedes empezar diciendo que escuchaste algo y te acordaste de él.",
650
+ "seconds": 6.2,
651
+ "direction": "engaged, friendly, spontaneous conversational reply"
652
+ }
653
+ ]
654
+ },
655
+ {
656
+ "task_id": "medium-es-friends",
657
+ "group": "medium",
658
+ "language": "es",
659
+ "topic": "friends",
660
+ "seed": 20261112,
661
+ "pause_s": 0.24,
662
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
663
+ "turns": [
664
+ {
665
+ "speaker": "S1",
666
+ "text": "Ayer cociné para unos amigos y olvidé poner sal. Me di cuenta cuando todos estaban intentando ser demasiado amables.",
667
+ "seconds": 6.2,
668
+ "direction": "warm, curious, relaxed conversational delivery"
669
+ },
670
+ {
671
+ "speaker": "S2",
672
+ "text": "Ese silencio tan educado lo dice todo. ¿Alguien pidió el salero o decidiste presentar el plato como una experiencia delicada?",
673
+ "seconds": 6.2,
674
+ "direction": "engaged, friendly, spontaneous conversational reply"
675
+ },
676
+ {
677
+ "speaker": "S1",
678
+ "text": "Al final me reí y lo dije yo. Fue un alivio, porque en cuanto lo reconocí todos empezaron a contar sus propios desastres.",
679
+ "seconds": 6.2,
680
+ "direction": "warm, curious, relaxed conversational delivery"
681
+ },
682
+ {
683
+ "speaker": "S2",
684
+ "text": "Eso suele mejorar una cena más que una receta perfecta. De repente nadie tiene que fingir que siempre le sale todo bien.",
685
+ "seconds": 6.2,
686
+ "direction": "engaged, friendly, spontaneous conversational reply"
687
+ },
688
+ {
689
+ "speaker": "S1",
690
+ "text": "Una amiga contó que una vez horneó un pastel sin harina. Todavía no entiendo muy bien qué fue lo que terminó sirviendo.",
691
+ "seconds": 6.2,
692
+ "direction": "warm, curious, relaxed conversational delivery"
693
+ },
694
+ {
695
+ "speaker": "S2",
696
+ "text": "Quizá inventó un postre nuevo. Hay errores que suenan terribles hasta que alguien les pone un nombre elegante.",
697
+ "seconds": 6.2,
698
+ "direction": "engaged, friendly, spontaneous conversational reply"
699
+ }
700
+ ]
701
+ },
702
+ {
703
+ "task_id": "long-en-coffee",
704
+ "group": "long",
705
+ "language": "en",
706
+ "topic": "coffee",
707
+ "seed": 20261103,
708
+ "pause_s": 0.24,
709
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
710
+ "turns": [
711
+ {
712
+ "speaker": "S1",
713
+ "text": "I tried making coffee without looking at my phone this morning. It felt oddly peaceful, actually.",
714
+ "seconds": 7.19,
715
+ "direction": "warm, curious, relaxed conversational delivery"
716
+ },
717
+ {
718
+ "speaker": "S2",
719
+ "text": "That sounds lovely. Although I would probably spend the whole time wondering whether the kettle was taking longer.",
720
+ "seconds": 7.19,
721
+ "direction": "engaged, friendly, spontaneous conversational reply"
722
+ },
723
+ {
724
+ "speaker": "S1",
725
+ "text": "Exactly! At first I kept reaching for a notification that was not even there. Then I noticed the rain.",
726
+ "seconds": 7.19,
727
+ "direction": "warm, curious, relaxed conversational delivery"
728
+ },
729
+ {
730
+ "speaker": "S2",
731
+ "text": "We fill every little gap, don’t we? Sometimes the nicest part of a morning is that nothing happens.",
732
+ "seconds": 7.19,
733
+ "direction": "engaged, friendly, spontaneous conversational reply"
734
+ },
735
+ {
736
+ "speaker": "S1",
737
+ "text": "And the coffee tasted better. Not because I made it differently, but because I finally paid attention.",
738
+ "seconds": 7.19,
739
+ "direction": "warm, curious, relaxed conversational delivery"
740
+ },
741
+ {
742
+ "speaker": "S2",
743
+ "text": "Well, now you have turned a cup of coffee into a small philosophy lesson. I am surprisingly convinced.",
744
+ "seconds": 7.19,
745
+ "direction": "engaged, friendly, spontaneous conversational reply"
746
+ },
747
+ {
748
+ "speaker": "S1",
749
+ "text": "Let’s not get carried away. Tomorrow I might forget the water and just stare thoughtfully at the empty cup.",
750
+ "seconds": 7.19,
751
+ "direction": "warm, curious, relaxed conversational delivery"
752
+ },
753
+ {
754
+ "speaker": "S2",
755
+ "text": "Honestly, that would still be a very committed experiment. We should report back next week.",
756
+ "seconds": 7.19,
757
+ "direction": "engaged, friendly, spontaneous conversational reply"
758
+ }
759
+ ]
760
+ },
761
+ {
762
+ "task_id": "long-en-walking",
763
+ "group": "long",
764
+ "language": "en",
765
+ "topic": "walking",
766
+ "seed": 20261104,
767
+ "pause_s": 0.24,
768
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
769
+ "turns": [
770
+ {
771
+ "speaker": "S1",
772
+ "text": "Do you ever take a different route home just because the usual one has started to feel invisible?",
773
+ "seconds": 7.19,
774
+ "direction": "warm, curious, relaxed conversational delivery"
775
+ },
776
+ {
777
+ "speaker": "S2",
778
+ "text": "Yes, and then I discover a tiny shop that has apparently been there for about twenty years.",
779
+ "seconds": 7.19,
780
+ "direction": "engaged, friendly, spontaneous conversational reply"
781
+ },
782
+ {
783
+ "speaker": "S1",
784
+ "text": "That happened yesterday. There was a bookshop with a sleeping dog right beside the door. I almost missed it.",
785
+ "seconds": 7.19,
786
+ "direction": "warm, curious, relaxed conversational delivery"
787
+ },
788
+ {
789
+ "speaker": "S2",
790
+ "text": "A sleeping dog is an excellent recommendation. It suggests the atmosphere is relaxed and the customers are trustworthy.",
791
+ "seconds": 7.19,
792
+ "direction": "engaged, friendly, spontaneous conversational reply"
793
+ },
794
+ {
795
+ "speaker": "S1",
796
+ "text": "The owner asked what I liked reading, and I realised I had not answered that question in ages.",
797
+ "seconds": 7.19,
798
+ "direction": "warm, curious, relaxed conversational delivery"
799
+ },
800
+ {
801
+ "speaker": "S2",
802
+ "text": "What did you say? Please tell me you did not just point to the nearest shelf and panic.",
803
+ "seconds": 7.19,
804
+ "direction": "engaged, friendly, spontaneous conversational reply"
805
+ },
806
+ {
807
+ "speaker": "S1",
808
+ "text": "Almost. Then I said I wanted something that would surprise me without making the whole week feel heavier.",
809
+ "seconds": 7.19,
810
+ "direction": "warm, curious, relaxed conversational delivery"
811
+ },
812
+ {
813
+ "speaker": "S2",
814
+ "text": "That is a wonderful request. Perhaps taking the longer route is sometimes the quickest way to find something new.",
815
+ "seconds": 7.19,
816
+ "direction": "engaged, friendly, spontaneous conversational reply"
817
+ }
818
+ ]
819
+ },
820
+ {
821
+ "task_id": "long-en-learning",
822
+ "group": "long",
823
+ "language": "en",
824
+ "topic": "learning",
825
+ "seed": 20261105,
826
+ "pause_s": 0.24,
827
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
828
+ "turns": [
829
+ {
830
+ "speaker": "S1",
831
+ "text": "I finally played that difficult passage on the piano without stopping. Only once, but I am counting it.",
832
+ "seconds": 7.19,
833
+ "direction": "warm, curious, relaxed conversational delivery"
834
+ },
835
+ {
836
+ "speaker": "S2",
837
+ "text": "You absolutely should. One good attempt means your hands have discovered that the thing is possible.",
838
+ "seconds": 7.19,
839
+ "direction": "engaged, friendly, spontaneous conversational reply"
840
+ },
841
+ {
842
+ "speaker": "S1",
843
+ "text": "The funny part is that I had been practising it faster and faster, which mostly made it sound worse.",
844
+ "seconds": 7.19,
845
+ "direction": "warm, curious, relaxed conversational delivery"
846
+ },
847
+ {
848
+ "speaker": "S2",
849
+ "text": "Then somebody told you to slow down, and you were deeply offended by this very sensible advice?",
850
+ "seconds": 7.19,
851
+ "direction": "engaged, friendly, spontaneous conversational reply"
852
+ },
853
+ {
854
+ "speaker": "S1",
855
+ "text": "A little! But after a few quiet minutes, I could actually hear where I was rushing ahead.",
856
+ "seconds": 7.19,
857
+ "direction": "warm, curious, relaxed conversational delivery"
858
+ },
859
+ {
860
+ "speaker": "S2",
861
+ "text": "That is the awkward secret of learning. Sometimes trying harder just means repeating the mistake with more confidence.",
862
+ "seconds": 7.19,
863
+ "direction": "engaged, friendly, spontaneous conversational reply"
864
+ },
865
+ {
866
+ "speaker": "S1",
867
+ "text": "So tomorrow I will be patient, start slowly, and resist the urge to perform a heroic concert for the neighbours.",
868
+ "seconds": 7.19,
869
+ "direction": "warm, curious, relaxed conversational delivery"
870
+ },
871
+ {
872
+ "speaker": "S2",
873
+ "text": "A thoughtful decision. Although I think the neighbours would appreciate a short victory fanfare at the end.",
874
+ "seconds": 7.19,
875
+ "direction": "engaged, friendly, spontaneous conversational reply"
876
+ }
877
+ ]
878
+ },
879
+ {
880
+ "task_id": "long-de-cooking",
881
+ "group": "long",
882
+ "language": "de",
883
+ "topic": "cooking",
884
+ "seed": 20261106,
885
+ "pause_s": 0.24,
886
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
887
+ "turns": [
888
+ {
889
+ "speaker": "S1",
890
+ "text": "Ich habe gestern endlich das Brot selbst gebacken. Die Küche sah danach allerdings ziemlich abenteuerlich aus.",
891
+ "seconds": 7.19,
892
+ "direction": "warm, curious, relaxed conversational delivery"
893
+ },
894
+ {
895
+ "speaker": "S2",
896
+ "text": "Das gehört dazu. Die entscheidende Frage ist doch: Hat es gut geschmeckt, oder war es eher ein Türstopper?",
897
+ "seconds": 7.19,
898
+ "direction": "engaged, friendly, spontaneous conversational reply"
899
+ },
900
+ {
901
+ "speaker": "S1",
902
+ "text": "Überraschend gut! Die Kruste war ein bisschen dunkel, aber innen war es weich. Ich war richtig stolz darauf.",
903
+ "seconds": 7.19,
904
+ "direction": "warm, curious, relaxed conversational delivery"
905
+ },
906
+ {
907
+ "speaker": "S2",
908
+ "text": "Dann war das keine dunkle Kruste, sondern ein bewusst gewähltes Röstaroma. So würde ich es jedenfalls verkaufen.",
909
+ "seconds": 7.19,
910
+ "direction": "engaged, friendly, spontaneous conversational reply"
911
+ },
912
+ {
913
+ "speaker": "S1",
914
+ "text": "Genau das habe ich auch gesagt. Beim zweiten Versuch möchte ich trotzdem vorher schauen, wie heiß der Ofen wirklich ist.",
915
+ "seconds": 7.19,
916
+ "direction": "warm, curious, relaxed conversational delivery"
917
+ },
918
+ {
919
+ "speaker": "S2",
920
+ "text": "Vernünftig. Ich finde sowieso schön, wenn man etwas macht, bei dem man das Ergebnis hinterher gemeinsam essen kann.",
921
+ "seconds": 7.19,
922
+ "direction": "engaged, friendly, spontaneous conversational reply"
923
+ },
924
+ {
925
+ "speaker": "S1",
926
+ "text": "Und wenn es schiefgeht, hat man wenigstens eine Geschichte. Vielleicht brauche ich beim nächsten Mal weniger Mehl auf dem Boden.",
927
+ "seconds": 7.19,
928
+ "direction": "warm, curious, relaxed conversational delivery"
929
+ },
930
+ {
931
+ "speaker": "S2",
932
+ "text": "Oder mehr Gäste zum Aufräumen. Du lädst zum Brotessen ein und erwähnst den kleinen Arbeitseinsatz erst später.",
933
+ "seconds": 7.19,
934
+ "direction": "engaged, friendly, spontaneous conversational reply"
935
+ }
936
+ ]
937
+ },
938
+ {
939
+ "task_id": "long-de-train",
940
+ "group": "long",
941
+ "language": "de",
942
+ "topic": "train",
943
+ "seed": 20261107,
944
+ "pause_s": 0.24,
945
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
946
+ "turns": [
947
+ {
948
+ "speaker": "S1",
949
+ "text": "Im Zug hat mich heute ein Kind gefragt, warum die Wolken eigentlich nicht einfach vom Himmel fallen.",
950
+ "seconds": 7.19,
951
+ "direction": "warm, curious, relaxed conversational delivery"
952
+ },
953
+ {
954
+ "speaker": "S2",
955
+ "text": "Das ist eine ausgezeichnete Frage. Hast du wissenschaftlich geantwortet oder erst einmal sehr lange aus dem Fenster geschaut?",
956
+ "seconds": 7.19,
957
+ "direction": "engaged, friendly, spontaneous conversational reply"
958
+ },
959
+ {
960
+ "speaker": "S1",
961
+ "text": "Beides. Ich wollte mit winzigen Wassertröpfchen anfangen, aber dann fragte es sofort, warum die nicht alle zusammenkleben.",
962
+ "seconds": 7.19,
963
+ "direction": "warm, curious, relaxed conversational delivery"
964
+ },
965
+ {
966
+ "speaker": "S2",
967
+ "text": "Kinder haben dieses Talent, jede vermeintlich einfache Erklärung genau an der spannendsten Stelle auseinanderzunehmen.",
968
+ "seconds": 7.19,
969
+ "direction": "engaged, friendly, spontaneous conversational reply"
970
+ },
971
+ {
972
+ "speaker": "S1",
973
+ "text": "Ja, und plötzlich saßen drei Erwachsene da und überlegten gemeinsam. Das war viel netter als auf das Handy zu schauen.",
974
+ "seconds": 7.19,
975
+ "direction": "warm, curious, relaxed conversational delivery"
976
+ },
977
+ {
978
+ "speaker": "S2",
979
+ "text": "Dann war die eigentliche Entdeckung vielleicht gar nicht das Wetter, sondern dass ein fremder Mensch ein Gespräch anfangen kann.",
980
+ "seconds": 7.19,
981
+ "direction": "engaged, friendly, spontaneous conversational reply"
982
+ },
983
+ {
984
+ "speaker": "S1",
985
+ "text": "Am Ende hat das Kind gesagt: Vielleicht bleiben die Wolken oben, weil sie noch irgendwo hinwollen. Das fand ich wunderschön.",
986
+ "seconds": 7.19,
987
+ "direction": "warm, curious, relaxed conversational delivery"
988
+ },
989
+ {
990
+ "speaker": "S2",
991
+ "text": "Das gefällt mir auch. Die Erklärung würde ich behalten, selbst wenn du später noch die genaue Physik nachliest.",
992
+ "seconds": 7.19,
993
+ "direction": "engaged, friendly, spontaneous conversational reply"
994
+ }
995
+ ]
996
+ },
997
+ {
998
+ "task_id": "long-de-garden",
999
+ "group": "long",
1000
+ "language": "de",
1001
+ "topic": "garden",
1002
+ "seed": 20261108,
1003
+ "pause_s": 0.24,
1004
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
1005
+ "turns": [
1006
+ {
1007
+ "speaker": "S1",
1008
+ "text": "Auf meinem Balkon wächst jetzt tatsächlich etwas Grünes. Ich hätte nicht gedacht, dass mich so ein kleiner Trieb so freut.",
1009
+ "seconds": 7.19,
1010
+ "direction": "warm, curious, relaxed conversational delivery"
1011
+ },
1012
+ {
1013
+ "speaker": "S2",
1014
+ "text": "Was hast du gepflanzt? Und bitte sag mir, dass du diesmal noch weißt, in welchen Topf die Samen gekommen sind.",
1015
+ "seconds": 7.19,
1016
+ "direction": "engaged, friendly, spontaneous conversational reply"
1017
+ },
1018
+ {
1019
+ "speaker": "S1",
1020
+ "text": "Basilikum, glaube ich. Die Beschriftung hat der Regen mitgenommen. Es könnte also auch eine sehr überzeugende andere Pflanze sein.",
1021
+ "seconds": 7.19,
1022
+ "direction": "warm, curious, relaxed conversational delivery"
1023
+ },
1024
+ {
1025
+ "speaker": "S2",
1026
+ "text": "Dann betrachten wir das vorerst als botanisches Rätsel. Du musst nichts überstürzen und solltest vielleicht noch nicht daran knabbern.",
1027
+ "seconds": 7.19,
1028
+ "direction": "engaged, friendly, spontaneous conversational reply"
1029
+ },
1030
+ {
1031
+ "speaker": "S1",
1032
+ "text": "Keine Sorge. Ich finde es einfach angenehm, morgens kurz nachzusehen, ob wieder ein neues Blatt dazugekommen ist.",
1033
+ "seconds": 7.19,
1034
+ "direction": "warm, curious, relaxed conversational delivery"
1035
+ },
1036
+ {
1037
+ "speaker": "S2",
1038
+ "text": "Das verstehe ich. Es ist eine kleine Veränderung, die nicht drängelt und trotzdem zeigt, dass etwas vorangeht.",
1039
+ "seconds": 7.19,
1040
+ "direction": "engaged, friendly, spontaneous conversational reply"
1041
+ },
1042
+ {
1043
+ "speaker": "S1",
1044
+ "text": "Genau. Und ich merke, dass ich dabei geduldiger werde. Obwohl ich immer noch dreimal täglich nach dem angeblichen Basilikum schaue.",
1045
+ "seconds": 7.19,
1046
+ "direction": "warm, curious, relaxed conversational delivery"
1047
+ },
1048
+ {
1049
+ "speaker": "S2",
1050
+ "text": "Geduld mit regelmäßiger Kontrolle. Das klingt nach einem guten Anfang. Jetzt fehlt nur noch eine wetterfeste Beschriftung.",
1051
+ "seconds": 7.19,
1052
+ "direction": "engaged, friendly, spontaneous conversational reply"
1053
+ }
1054
+ ]
1055
+ },
1056
+ {
1057
+ "task_id": "long-fr-jardin",
1058
+ "group": "long",
1059
+ "language": "fr",
1060
+ "topic": "jardin",
1061
+ "seed": 20261109,
1062
+ "pause_s": 0.24,
1063
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
1064
+ "turns": [
1065
+ {
1066
+ "speaker": "S1",
1067
+ "text": "Ce matin, j’ai découvert une petite fleur sur mon balcon. Je pensais vraiment que cette plante avait abandonné.",
1068
+ "seconds": 7.19,
1069
+ "direction": "warm, curious, relaxed conversational delivery"
1070
+ },
1071
+ {
1072
+ "speaker": "S2",
1073
+ "text": "Comme quoi, elle préparait peut-être sa surprise en silence. Tu lui as donné un peu plus de lumière ?",
1074
+ "seconds": 7.19,
1075
+ "direction": "engaged, friendly, spontaneous conversational reply"
1076
+ },
1077
+ {
1078
+ "speaker": "S1",
1079
+ "text": "Oui, et surtout un peu moins d’eau. Apparemment, mon enthousiasme dépassait largement ses besoins. Je voulais trop bien faire.",
1080
+ "seconds": 7.19,
1081
+ "direction": "warm, curious, relaxed conversational delivery"
1082
+ },
1083
+ {
1084
+ "speaker": "S2",
1085
+ "text": "C’est assez humain, finalement. On croit aider en faisant davantage, alors que parfois il faut simplement laisser respirer.",
1086
+ "seconds": 7.19,
1087
+ "direction": "engaged, friendly, spontaneous conversational reply"
1088
+ },
1089
+ {
1090
+ "speaker": "S1",
1091
+ "text": "Tu as raison. Maintenant, je regarde les nouvelles feuilles avant de prendre mon téléphone. Cela change le début de ma journée.",
1092
+ "seconds": 7.19,
1093
+ "direction": "warm, curious, relaxed conversational delivery"
1094
+ },
1095
+ {
1096
+ "speaker": "S2",
1097
+ "text": "Et tu ne peux pas accélérer la prochaine fleur en actualisant la page. C’est peut-être exactement ce qui fait du bien.",
1098
+ "seconds": 7.19,
1099
+ "direction": "engaged, friendly, spontaneous conversational reply"
1100
+ },
1101
+ {
1102
+ "speaker": "S1",
1103
+ "text": "Voilà. Même si je vérifie encore beaucoup trop souvent. J’appelle cela de la patience, mais une patience très attentive.",
1104
+ "seconds": 7.19,
1105
+ "direction": "warm, curious, relaxed conversational delivery"
1106
+ },
1107
+ {
1108
+ "speaker": "S2",
1109
+ "text": "C’est une jolie manière de le dire. Garde cette attention, et pense seulement à poser l’arrosoir de temps en temps.",
1110
+ "seconds": 7.19,
1111
+ "direction": "engaged, friendly, spontaneous conversational reply"
1112
+ }
1113
+ ]
1114
+ },
1115
+ {
1116
+ "task_id": "long-fr-chance",
1117
+ "group": "long",
1118
+ "language": "fr",
1119
+ "topic": "chance",
1120
+ "seed": 20261110,
1121
+ "pause_s": 0.24,
1122
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
1123
+ "turns": [
1124
+ {
1125
+ "speaker": "S1",
1126
+ "text": "J’ai retrouvé un vieux carnet dans une boîte. Il était rempli de projets que j’avais complètement oubliés.",
1127
+ "seconds": 7.19,
1128
+ "direction": "warm, curious, relaxed conversational delivery"
1129
+ },
1130
+ {
1131
+ "speaker": "S2",
1132
+ "text": "Et alors, tu as eu envie de les reprendre, ou surtout de remercier ton ancien toi de ne pas avoir tout essayé ?",
1133
+ "seconds": 7.19,
1134
+ "direction": "engaged, friendly, spontaneous conversational reply"
1135
+ },
1136
+ {
1137
+ "speaker": "S1",
1138
+ "text": "Un peu des deux. Il y avait une idée de voyage magnifique, puis une recette de soupe franchement inquiétante.",
1139
+ "seconds": 7.19,
1140
+ "direction": "warm, curious, relaxed conversational delivery"
1141
+ },
1142
+ {
1143
+ "speaker": "S2",
1144
+ "text": "C’est rassurant. Un bon carnet devrait contenir de grandes ambitions et quelques décisions culinaires discutables.",
1145
+ "seconds": 7.19,
1146
+ "direction": "engaged, friendly, spontaneous conversational reply"
1147
+ },
1148
+ {
1149
+ "speaker": "S1",
1150
+ "text": "Ce qui m’a touché, c’est de voir combien je pouvais être enthousiaste. Pas forcément réaliste, mais vraiment curieux.",
1151
+ "seconds": 7.19,
1152
+ "direction": "warm, curious, relaxed conversational delivery"
1153
+ },
1154
+ {
1155
+ "speaker": "S2",
1156
+ "text": "Peut-être que tu peux garder cette curiosité sans reprendre chaque projet. On a le droit de changer de direction.",
1157
+ "seconds": 7.19,
1158
+ "direction": "engaged, friendly, spontaneous conversational reply"
1159
+ },
1160
+ {
1161
+ "speaker": "S1",
1162
+ "text": "Oui. Je vais choisir une seule petite chose, quelque chose que je pourrais faire ce week-end, sans organisation compliquée.",
1163
+ "seconds": 7.19,
1164
+ "direction": "warm, curious, relaxed conversational delivery"
1165
+ },
1166
+ {
1167
+ "speaker": "S2",
1168
+ "text": "Très bonne idée. Et pour la soupe, nous attendrons prudemment une deuxième opinion avant de rallumer le feu.",
1169
+ "seconds": 7.19,
1170
+ "direction": "engaged, friendly, spontaneous conversational reply"
1171
+ }
1172
+ ]
1173
+ },
1174
+ {
1175
+ "task_id": "long-es-radio",
1176
+ "group": "long",
1177
+ "language": "es",
1178
+ "topic": "radio",
1179
+ "seed": 20261111,
1180
+ "pause_s": 0.24,
1181
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
1182
+ "turns": [
1183
+ {
1184
+ "speaker": "S1",
1185
+ "text": "Esta mañana escuché una canción que no oía desde el colegio. De repente recordé hasta el camino de vuelta a casa.",
1186
+ "seconds": 7.19,
1187
+ "direction": "warm, curious, relaxed conversational delivery"
1188
+ },
1189
+ {
1190
+ "speaker": "S2",
1191
+ "text": "Es increíble cómo pasa eso. A veces una melodía guarda recuerdos que ni siquiera sabíamos que seguían allí.",
1192
+ "seconds": 7.19,
1193
+ "direction": "engaged, friendly, spontaneous conversational reply"
1194
+ },
1195
+ {
1196
+ "speaker": "S1",
1197
+ "text": "Sí, y no era una canción especialmente importante. Creo que simplemente sonaba siempre en la pequeña tienda de la esquina.",
1198
+ "seconds": 7.19,
1199
+ "direction": "warm, curious, relaxed conversational delivery"
1200
+ },
1201
+ {
1202
+ "speaker": "S2",
1203
+ "text": "Entonces también recuerdas la tienda, el ruido de la calle, quizá alguna conversación. Todo aparece junto, sin pedir permiso.",
1204
+ "seconds": 7.19,
1205
+ "direction": "engaged, friendly, spontaneous conversational reply"
1206
+ },
1207
+ {
1208
+ "speaker": "S1",
1209
+ "text": "Exactamente. Me dieron ganas de escribirle a un amigo de aquella época, aunque llevamos bastante tiempo sin hablar.",
1210
+ "seconds": 7.19,
1211
+ "direction": "warm, curious, relaxed conversational delivery"
1212
+ },
1213
+ {
1214
+ "speaker": "S2",
1215
+ "text": "Hazlo. No necesitas un mensaje perfecto. Puedes empezar diciendo que escuchaste algo y te acordaste de él.",
1216
+ "seconds": 7.19,
1217
+ "direction": "engaged, friendly, spontaneous conversational reply"
1218
+ },
1219
+ {
1220
+ "speaker": "S1",
1221
+ "text": "Eso voy a hacer. A veces complico demasiado estas cosas, como si retomar una amistad necesitara una gran explicación.",
1222
+ "seconds": 7.19,
1223
+ "direction": "warm, curious, relaxed conversational delivery"
1224
+ },
1225
+ {
1226
+ "speaker": "S2",
1227
+ "text": "Y muchas veces basta con una frase sincera. Bueno, y con no enviarle veinte canciones antes de que conteste.",
1228
+ "seconds": 7.19,
1229
+ "direction": "engaged, friendly, spontaneous conversational reply"
1230
+ }
1231
+ ]
1232
+ },
1233
+ {
1234
+ "task_id": "long-es-friends",
1235
+ "group": "long",
1236
+ "language": "es",
1237
+ "topic": "friends",
1238
+ "seed": 20261112,
1239
+ "pause_s": 0.24,
1240
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
1241
+ "turns": [
1242
+ {
1243
+ "speaker": "S1",
1244
+ "text": "Ayer cociné para unos amigos y olvidé poner sal. Me di cuenta cuando todos estaban intentando ser demasiado amables.",
1245
+ "seconds": 7.19,
1246
+ "direction": "warm, curious, relaxed conversational delivery"
1247
+ },
1248
+ {
1249
+ "speaker": "S2",
1250
+ "text": "Ese silencio tan educado lo dice todo. ¿Alguien pidió el salero o decidiste presentar el plato como una experiencia delicada?",
1251
+ "seconds": 7.19,
1252
+ "direction": "engaged, friendly, spontaneous conversational reply"
1253
+ },
1254
+ {
1255
+ "speaker": "S1",
1256
+ "text": "Al final me reí y lo dije yo. Fue un alivio, porque en cuanto lo reconocí todos empezaron a contar sus propios desastres.",
1257
+ "seconds": 7.19,
1258
+ "direction": "warm, curious, relaxed conversational delivery"
1259
+ },
1260
+ {
1261
+ "speaker": "S2",
1262
+ "text": "Eso suele mejorar una cena más que una receta perfecta. De repente nadie tiene que fingir que siempre le sale todo bien.",
1263
+ "seconds": 7.19,
1264
+ "direction": "engaged, friendly, spontaneous conversational reply"
1265
+ },
1266
+ {
1267
+ "speaker": "S1",
1268
+ "text": "Una amiga contó que una vez horneó un pastel sin harina. Todavía no entiendo muy bien qué fue lo que terminó sirviendo.",
1269
+ "seconds": 7.19,
1270
+ "direction": "warm, curious, relaxed conversational delivery"
1271
+ },
1272
+ {
1273
+ "speaker": "S2",
1274
+ "text": "Quizá inventó un postre nuevo. Hay errores que suenan terribles hasta que alguien les pone un nombre elegante.",
1275
+ "seconds": 7.19,
1276
+ "direction": "engaged, friendly, spontaneous conversational reply"
1277
+ },
1278
+ {
1279
+ "speaker": "S1",
1280
+ "text": "En cualquier caso, terminamos hablando durante horas. La próxima vez pondré sal, pero espero que la conversación sea igual de buena.",
1281
+ "seconds": 7.19,
1282
+ "direction": "warm, curious, relaxed conversational delivery"
1283
+ },
1284
+ {
1285
+ "speaker": "S2",
1286
+ "text": "Seguro que sí. Y si no, siempre puedes olvidar las cucharas. Aunque yo preferiría conservar la comida y buscar otra anécdota.",
1287
+ "seconds": 7.19,
1288
+ "direction": "engaged, friendly, spontaneous conversational reply"
1289
+ }
1290
+ ]
1291
+ }
1292
+ ]
examples/de-S1.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9966c27d168196d1d9653cd9b23f9c547ef36aa66a52cefe0685f15e0d504abc
3
+ size 576044
examples/de-S2.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4672ee492a4b4a27e524fcd8b748e804e0c3b3b94e86c8a1dba02be6204a4481
3
+ size 537644
examples/dialogue.json ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "task_id": "short-en-coffee",
3
+ "group": "short",
4
+ "language": "en",
5
+ "topic": "coffee",
6
+ "seed": 20261103,
7
+ "pause_s": 0.24,
8
+ "general": "A natural two-person podcast conversation. Two distinct stable voices take turns, listening and responding warmly. Clear studio speech, organic rhythm and small natural pauses. Read only the words in SCRIPT.",
9
+ "turns": [
10
+ {
11
+ "speaker": "S1",
12
+ "text": "I tried making coffee without looking at my phone this morning. It felt oddly peaceful, actually.",
13
+ "seconds": 8.88,
14
+ "direction": "warm, curious, relaxed conversational delivery"
15
+ },
16
+ {
17
+ "speaker": "S2",
18
+ "text": "That sounds lovely. Although I would probably spend the whole time wondering whether the kettle was taking longer.",
19
+ "seconds": 8.88,
20
+ "direction": "engaged, friendly, spontaneous conversational reply"
21
+ }
22
+ ]
23
+ }
examples/en-S1.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d85fb8b03e2c12b502917e2d2e0da72048ec335d8c59bf51dd53263870b31625
3
+ size 852524
examples/en-S2.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1cfd4e50d4f08e92d95d6e6824cc1d9d309844506ba6f4b24335e5c69ee2953b
3
+ size 721964
examples/es-S1.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5e0d9ed986b8b62d0a6b9f3c944020951747695e8a8f5966fd2ed57b4d54c6e0
3
+ size 568364
examples/es-S2.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6d320996367763baa6e99f589d8a95a5c6a8375d52e1098bf9ac5da74ac9e459
3
+ size 560684
examples/fr-S1.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1f5a721525d0a0405d153136e37f883bd9bc54699b733e70ccbc8a2e2cc55ad6
3
+ size 499244
examples/fr-S2.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c78996dd65b14b3c5e2df8c9accbd1540e092a6f28fa4ee48558403c0cf6505b
3
+ size 545324
examples/reference-provenance.json ADDED
@@ -0,0 +1,1754 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "en": {
3
+ "S1": {
4
+ "episode": "47f242531f7d85bda216c3debaec5c369935e9fd0a89ec36aba025e80057a30b",
5
+ "original_speaker": "S2",
6
+ "start_frame": 4535,
7
+ "end_frame": 4646,
8
+ "language": "en",
9
+ "window": {
10
+ "episode": "47f242531f7d85bda216c3debaec5c369935e9fd0a89ec36aba025e80057a30b",
11
+ "lang": "en",
12
+ "window": "middle",
13
+ "start": 347.540408,
14
+ "duration": 30.0,
15
+ "ce": 6.411804489791393
16
+ },
17
+ "text": "Recognizing that just installing the software achieves nothing unless the operating model, the human skills, adapt at the same time. It's as much a change management challenge as a tech",
18
+ "scores": {
19
+ "emo_Affection": 0.044916778802871704,
20
+ "emo_Amusement": 0.0896710455417633,
21
+ "emo_Anger": 0.020686715841293335,
22
+ "emo_Astonishment_Surprise": 0.021077096462249756,
23
+ "emo_Awe": 0.00831460952758789,
24
+ "emo_Bitterness": 0.01997998356819153,
25
+ "emo_Concentration": 2.3828930854797363,
26
+ "emo_Confusion": 0.019798070192337036,
27
+ "emo_Contemplation": 1.4535179138183594,
28
+ "emo_Contempt": 0.005230426788330078,
29
+ "emo_Contentment": 1.8263260126113892,
30
+ "emo_Disappointment": -0.02528536319732666,
31
+ "emo_Disgust": 0.011815264821052551,
32
+ "emo_Distress": 0.015124201774597168,
33
+ "emo_Doubt": 0.021136879920959473,
34
+ "emo_Elation": 0.00012952089309692383,
35
+ "emo_Embarrassment": -0.018539071083068848,
36
+ "emo_Emotional_Numbness": 0.29845017194747925,
37
+ "emo_Fatigue_Exhaustion": -0.015124976634979248,
38
+ "emo_Fear": 0.029022395610809326,
39
+ "emo_Helplessness": -0.05028754472732544,
40
+ "emo_Hope_Enthusiasm_Optimism": 1.1021933555603027,
41
+ "emo_Impatience_and_Irritability": 0.049224674701690674,
42
+ "emo_Infatuation": -0.0066391825675964355,
43
+ "emo_Interest": 2.3918237686157227,
44
+ "emo_Intoxication_Altered_States_of_Consciousness": -0.023080214858055115,
45
+ "emo_Jealousy_and_Envy": 0.003954067826271057,
46
+ "emo_Longing": 0.035218000411987305,
47
+ "emo_Malevolence_Malice": 0.016138404607772827,
48
+ "emo_Pain": -0.028374433517456055,
49
+ "emo_Pleasure_Ecstasy": -0.017789393663406372,
50
+ "emo_Pride": 0.8620995879173279,
51
+ "emo_Relief": -0.014433503150939941,
52
+ "emo_Sadness": -0.00990837812423706,
53
+ "emo_Sexual_Lust": 0.004031270742416382,
54
+ "emo_Shame": -0.009914115071296692,
55
+ "emo_Sourness": -0.004457250237464905,
56
+ "emo_Teasing": 0.028293877840042114,
57
+ "emo_Thankfulness_Gratitude": 0.02457219362258911,
58
+ "emo_Triumph": 0.0600743293762207,
59
+ "vn_AGEV_reg": 3.3016669750213623,
60
+ "vn_AROU_reg": 2.8899264335632324,
61
+ "vn_ARSH_reg": 3.131937026977539,
62
+ "vn_ATCK_reg": 3.188565731048584,
63
+ "vn_BKGN_reg": 3.993759870529175,
64
+ "vn_BRGT_reg": 3.312556743621826,
65
+ "vn_CHNK_reg": 3.391357421875,
66
+ "vn_CLRT_reg": 4.476703643798828,
67
+ "vn_COGL_reg": 0.7366646528244019,
68
+ "vn_DARC_reg": 3.081094741821289,
69
+ "vn_DFLU_reg": 0.2404625415802002,
70
+ "vn_EMPH_reg": 3.1535863876342773,
71
+ "vn_ESTH_reg": 4.101387977600098,
72
+ "vn_EXPL_reg": 0.04618470370769501,
73
+ "vn_FOCS_reg": 4.183499336242676,
74
+ "vn_FULL_reg": 3.8218843936920166,
75
+ "vn_GEND_reg": 4.951261043548584,
76
+ "vn_HARM_reg": 3.733027219772339,
77
+ "vn_METL_reg": 1.5914198160171509,
78
+ "vn_RANG_reg": 2.639007329940796,
79
+ "vn_RCQL_reg": 4.19329309463501,
80
+ "vn_REGS_reg": 1.3563289642333984,
81
+ "vn_RESP_reg": 1.4511476755142212,
82
+ "vn_ROUG_reg": 1.4923737049102783,
83
+ "vn_R_CHST_reg": 3.706143856048584,
84
+ "vn_R_HEAD_reg": 1.6914302110671997,
85
+ "vn_R_MASK_reg": 2.9622108936309814,
86
+ "vn_R_MIXD_reg": 3.782395601272583,
87
+ "vn_R_NASL_reg": 1.6039230823516846,
88
+ "vn_R_ORAL_reg": 3.5968661308288574,
89
+ "vn_R_THRT_reg": 2.590158224105835,
90
+ "vn_SMTH_reg": 4.129175186157227,
91
+ "vn_STNC_reg": 4.157435417175293,
92
+ "vn_STRU_reg": 4.648323059082031,
93
+ "vn_S_ASMR_reg": -0.11486732959747314,
94
+ "vn_S_AUTH_reg": 4.035935401916504,
95
+ "vn_S_CART_reg": -0.20317816734313965,
96
+ "vn_S_CASU_reg": 1.9761770963668823,
97
+ "vn_S_CONV_reg": 2.6582865715026855,
98
+ "vn_S_DRAM_reg": 1.777975082397461,
99
+ "vn_S_FORM_reg": 3.69545316696167,
100
+ "vn_S_MONO_reg": 3.1506378650665283,
101
+ "vn_S_NARR_reg": 3.8744468688964844,
102
+ "vn_S_NEWS_reg": 2.7603554725646973,
103
+ "vn_S_PLAY_reg": 1.0244368314743042,
104
+ "vn_S_RANT_reg": 0.15826869010925293,
105
+ "vn_S_STRY_reg": 2.047847270965576,
106
+ "vn_S_TECH_reg": 3.592550039291382,
107
+ "vn_S_WHIS_reg": -0.05654406547546387,
108
+ "vn_TEMP_reg": 3.615788221359253,
109
+ "vn_TENS_reg": 1.8553197383880615,
110
+ "vn_VALN_reg": 2.870231866836548,
111
+ "vn_VALS_reg": 3.128520965576172,
112
+ "vn_VFLX_reg": 2.970663547515869,
113
+ "vn_VOLT_reg": 1.2053163051605225,
114
+ "vn_VULN_reg": 0.9679520130157471,
115
+ "vn_WARM_reg": 3.524272918701172,
116
+ "genuineness_0_6": 4.036643981933594,
117
+ "blend_0_10": 6.994388103485107,
118
+ "R_quality": 0.49497437477111816,
119
+ "eiv_extra:Age": 3.3220932483673096,
120
+ "eiv_extra:Arousal": 1.2319591045379639,
121
+ "eiv_extra:Authenticity": 2.771702289581299,
122
+ "eiv_extra:Background_Noise": 0.11300861835479736,
123
+ "eiv_extra:Confident_vs._Hesitant": 0.9623448848724365,
124
+ "eiv_extra:Gender": -1.0594953298568726,
125
+ "eiv_extra:High-Pitched_vs._Low-Pitched": 2.068246603012085,
126
+ "eiv_extra:Monotone_vs._Expressive": 1.926389217376709,
127
+ "eiv_extra:Recording_Quality": 2.764446258544922,
128
+ "eiv_extra:Serious_vs._Humorous": 0.9570503830909729,
129
+ "eiv_extra:Soft_vs._Harsh": 0.08383968472480774,
130
+ "eiv_extra:Submissive_vs._Dominant": 0.5415263175964355,
131
+ "eiv_extra:Valence": -0.07493813335895538,
132
+ "eiv_extra:Vulnerable_vs._Emotionally_Detached": 2.6135826110839844,
133
+ "eiv_extra:Warm_vs._Cold": 0.03427967429161072,
134
+ "eiv_extra:score_background_quality": 3.7240524291992188,
135
+ "eiv_extra:score_content_enjoyment": 4.916215896606445,
136
+ "eiv_extra:score_overall_quality": 3.0479235649108887,
137
+ "eiv_extra:score_speech_quality": 1.9263687133789062,
138
+ "audiobox:CE": 6.475345611572266,
139
+ "audiobox:CU": 7.470410346984863,
140
+ "audiobox:PC": 1.479453682899475,
141
+ "audiobox:PQ": 8.056504249572754,
142
+ "dnsmos:SIG_raw": 4.183594226837158,
143
+ "dnsmos:BAK_raw": 4.429921627044678,
144
+ "dnsmos:OVRL_raw": 3.986091375350952,
145
+ "dnsmos:SIG": 3.635957717895508,
146
+ "dnsmos:BAK": 4.14784574508667,
147
+ "dnsmos:OVRL": 3.4156992435455322,
148
+ "dnsmos:P808_MOS": 4.070035934448242,
149
+ "burst_count_log1p": 0.1443398892879486,
150
+ "voiceclap_attribute:Affection": -0.20595383644104004,
151
+ "voiceclap_attribute:Age": 3.251166343688965,
152
+ "voiceclap_attribute:Amusement": 0.2761256992816925,
153
+ "voiceclap_attribute:Anger": -0.0215071439743042,
154
+ "voiceclap_attribute:Arousal": 1.4376707077026367,
155
+ "voiceclap_attribute:Astonishment_Surprise": 0.17212054133415222,
156
+ "voiceclap_attribute:Authenticity": 2.892148494720459,
157
+ "voiceclap_attribute:Awe": 0.13784077763557434,
158
+ "voiceclap_attribute:Background_Noise": 0.24468371272087097,
159
+ "voiceclap_attribute:Bitterness": 0.018249094486236572,
160
+ "voiceclap_attribute:Concentration": 2.494945526123047,
161
+ "voiceclap_attribute:Confident_vs._Hesitant": 0.8552287220954895,
162
+ "voiceclap_attribute:Confusion": -0.09103381633758545,
163
+ "voiceclap_attribute:Contemplation": 1.528646469116211,
164
+ "voiceclap_attribute:Contempt": 0.06687861680984497,
165
+ "voiceclap_attribute:Contentment": 1.4767652750015259,
166
+ "voiceclap_attribute:Disappointment": 0.011530518531799316,
167
+ "voiceclap_attribute:Disgust": 0.029055893421173096,
168
+ "voiceclap_attribute:Distress": -0.06888538599014282,
169
+ "voiceclap_attribute:Doubt": 0.03893560171127319,
170
+ "voiceclap_attribute:Elation": 0.09965866804122925,
171
+ "voiceclap_attribute:Embarrassment": -0.013739347457885742,
172
+ "voiceclap_attribute:Emotional_Numbness": 0.08770185708999634,
173
+ "voiceclap_attribute:Fatigue_Exhaustion": -0.19961676001548767,
174
+ "voiceclap_attribute:Fear": 0.07311379909515381,
175
+ "voiceclap_attribute:Gender": -1.0299090147018433,
176
+ "voiceclap_attribute:Helplessness": -0.0892876386642456,
177
+ "voiceclap_attribute:High-Pitched_vs._Low-Pitched": 1.9851802587509155,
178
+ "voiceclap_attribute:Hope_Enthusiasm_Optimism": 0.9585894346237183,
179
+ "voiceclap_attribute:Impatience_and_Irritability": 0.027670860290527344,
180
+ "voiceclap_attribute:Infatuation": -0.15207678079605103,
181
+ "voiceclap_attribute:Interest": 2.5115389823913574,
182
+ "voiceclap_attribute:Intoxication_Altered_States_of_Consciousness": -0.08464688062667847,
183
+ "voiceclap_attribute:Jealousy_&_Envy": -0.06632769107818604,
184
+ "voiceclap_attribute:Longing": -0.20924341678619385,
185
+ "voiceclap_attribute:Malevolence_Malice": -0.0024952292442321777,
186
+ "voiceclap_attribute:Monotone_vs._Expressive": 1.8484630584716797,
187
+ "voiceclap_attribute:Pain": -0.09224006533622742,
188
+ "voiceclap_attribute:Pleasure_Ecstasy": -0.03208339214324951,
189
+ "voiceclap_attribute:Pride": 0.7150555849075317,
190
+ "voiceclap_attribute:Recording_Quality": 2.73024845123291,
191
+ "voiceclap_attribute:Relief": -0.08085215091705322,
192
+ "voiceclap_attribute:Sadness": -0.03938835859298706,
193
+ "voiceclap_attribute:Serious_vs._Humorous": 0.8458406925201416,
194
+ "voiceclap_attribute:Sexual_Lust": -0.09768033027648926,
195
+ "voiceclap_attribute:Shame": -0.02619558572769165,
196
+ "voiceclap_attribute:Soft_vs._Harsh": 0.062218621373176575,
197
+ "voiceclap_attribute:Sourness": 0.07866406440734863,
198
+ "voiceclap_attribute:Submissive_vs._Dominant": 0.5844260454177856,
199
+ "voiceclap_attribute:Teasing": 0.027302980422973633,
200
+ "voiceclap_attribute:Thankfulness_Gratitude": -0.32050418853759766,
201
+ "voiceclap_attribute:Triumph": 0.04176449775695801,
202
+ "voiceclap_attribute:Valence": -0.10700663924217224,
203
+ "voiceclap_attribute:Vulnerable_vs._Emotionally_Detached": 2.4343531131744385,
204
+ "voiceclap_attribute:Warm_vs._Cold": 0.15293753147125244,
205
+ "voiceclap_attribute:duration": 8.938613891601562,
206
+ "voiceclap_attribute:score_background_quality": 3.575244903564453,
207
+ "voiceclap_attribute:score_content_enjoyment": 4.874354362487793,
208
+ "voiceclap_attribute:score_overall_quality": 2.993528366088867,
209
+ "voiceclap_attribute:score_speech_quality": 1.9786185026168823,
210
+ "voiceclap_attribute:talking_speed": 20.73843002319336
211
+ },
212
+ "asr": "Recognizing that just installing the software achieves nothing unless the operating model, the human skills, adapt at the same time. It's as much a change management challenge as a technological.",
213
+ "audio_sha256": "46f1c0d07283c73d4b950929a37fc1889902311e452be94d5a7675f4f209aa89",
214
+ "speaker": "S1",
215
+ "seconds": 8.88,
216
+ "media_member": "en-S1.mp3",
217
+ "wav_member": "en-S1.wav",
218
+ "source_split": "train",
219
+ "source_audio": "Original media crop, not a codec reconstruction"
220
+ },
221
+ "S2": {
222
+ "episode": "34b24e223b7c76afeb48760fbf721bed891e92ec9f3ff3cefdeb086d87d3f359",
223
+ "original_speaker": "S2",
224
+ "start_frame": 1854,
225
+ "end_frame": 1948,
226
+ "language": "en",
227
+ "window": {
228
+ "episode": "34b24e223b7c76afeb48760fbf721bed891e92ec9f3ff3cefdeb086d87d3f359",
229
+ "lang": "en",
230
+ "window": "middle",
231
+ "start": 128.430628,
232
+ "duration": 30.0,
233
+ "ce": 6.403861818835139
234
+ },
235
+ "text": "The pressure is immense down there, and that oil-filled tube helps them manage booyancy without using a lot of energy.",
236
+ "scores": {
237
+ "emo_Affection": 0.06828047335147858,
238
+ "emo_Amusement": 0.0744192898273468,
239
+ "emo_Anger": 0.0909375548362732,
240
+ "emo_Astonishment_Surprise": 0.03833329677581787,
241
+ "emo_Awe": 0.02389206737279892,
242
+ "emo_Bitterness": 0.070845827460289,
243
+ "emo_Concentration": 2.4285545349121094,
244
+ "emo_Confusion": 0.013547241687774658,
245
+ "emo_Contemplation": 1.4995293617248535,
246
+ "emo_Contempt": 0.07395827770233154,
247
+ "emo_Contentment": 1.8735581636428833,
248
+ "emo_Disappointment": 0.12265381217002869,
249
+ "emo_Disgust": 0.021390840411186218,
250
+ "emo_Distress": 0.08856144547462463,
251
+ "emo_Doubt": 0.04190543293952942,
252
+ "emo_Elation": 0.06467863917350769,
253
+ "emo_Embarrassment": -0.011710166931152344,
254
+ "emo_Emotional_Numbness": 0.20080125331878662,
255
+ "emo_Fatigue_Exhaustion": 0.016562193632125854,
256
+ "emo_Fear": 0.018269121646881104,
257
+ "emo_Helplessness": 0.01609298586845398,
258
+ "emo_Hope_Enthusiasm_Optimism": 0.6414806842803955,
259
+ "emo_Impatience_and_Irritability": 0.07327625155448914,
260
+ "emo_Infatuation": -0.00029659271240234375,
261
+ "emo_Interest": 2.1490163803100586,
262
+ "emo_Intoxication_Altered_States_of_Consciousness": -0.007871195673942566,
263
+ "emo_Jealousy_and_Envy": 0.0004715770483016968,
264
+ "emo_Longing": 0.047636568546295166,
265
+ "emo_Malevolence_Malice": 0.010001450777053833,
266
+ "emo_Pain": 0.0075737833976745605,
267
+ "emo_Pleasure_Ecstasy": 0.03467804193496704,
268
+ "emo_Pride": 0.5371546149253845,
269
+ "emo_Relief": 0.05917331576347351,
270
+ "emo_Sadness": 0.058759450912475586,
271
+ "emo_Sexual_Lust": -0.0018015503883361816,
272
+ "emo_Shame": 0.006461545825004578,
273
+ "emo_Sourness": 0.05296625196933746,
274
+ "emo_Teasing": 0.05141165852546692,
275
+ "emo_Thankfulness_Gratitude": 0.016471177339553833,
276
+ "emo_Triumph": 0.03841741383075714,
277
+ "vn_AGEV_reg": 3.3508851528167725,
278
+ "vn_AROU_reg": 2.5334854125976562,
279
+ "vn_ARSH_reg": 3.196974277496338,
280
+ "vn_ATCK_reg": 3.075408697128296,
281
+ "vn_BKGN_reg": 4.070611953735352,
282
+ "vn_BRGT_reg": 3.185899257659912,
283
+ "vn_CHNK_reg": 2.919048309326172,
284
+ "vn_CLRT_reg": 4.656875133514404,
285
+ "vn_COGL_reg": 0.5225298404693604,
286
+ "vn_DARC_reg": 3.123661756515503,
287
+ "vn_DFLU_reg": -0.03637242317199707,
288
+ "vn_EMPH_reg": 3.319296360015869,
289
+ "vn_ESTH_reg": 4.308232307434082,
290
+ "vn_EXPL_reg": -0.0590214878320694,
291
+ "vn_FOCS_reg": 4.1661577224731445,
292
+ "vn_FULL_reg": 4.291335105895996,
293
+ "vn_GEND_reg": 5.013467788696289,
294
+ "vn_HARM_reg": 3.7588999271392822,
295
+ "vn_METL_reg": 1.6802643537521362,
296
+ "vn_RANG_reg": 2.4561781883239746,
297
+ "vn_RCQL_reg": 4.467576026916504,
298
+ "vn_REGS_reg": 0.9662236571311951,
299
+ "vn_RESP_reg": 1.200474739074707,
300
+ "vn_ROUG_reg": 1.7610195875167847,
301
+ "vn_R_CHST_reg": 3.997999668121338,
302
+ "vn_R_HEAD_reg": 1.3681161403656006,
303
+ "vn_R_MASK_reg": 2.7863144874572754,
304
+ "vn_R_MIXD_reg": 3.8346996307373047,
305
+ "vn_R_NASL_reg": 1.4306567907333374,
306
+ "vn_R_ORAL_reg": 3.451535224914551,
307
+ "vn_R_THRT_reg": 2.992795944213867,
308
+ "vn_SMTH_reg": 4.198636054992676,
309
+ "vn_STNC_reg": 4.255288600921631,
310
+ "vn_STRU_reg": 5.033507823944092,
311
+ "vn_S_ASMR_reg": 0.014387369155883789,
312
+ "vn_S_AUTH_reg": 4.13332986831665,
313
+ "vn_S_CART_reg": -0.09621000289916992,
314
+ "vn_S_CASU_reg": 1.5973947048187256,
315
+ "vn_S_CONV_reg": 2.243990898132324,
316
+ "vn_S_DRAM_reg": 2.1295599937438965,
317
+ "vn_S_FORM_reg": 3.6796975135803223,
318
+ "vn_S_MONO_reg": 3.6004204750061035,
319
+ "vn_S_NARR_reg": 4.25568151473999,
320
+ "vn_S_NEWS_reg": 2.4159774780273438,
321
+ "vn_S_PLAY_reg": 0.7451401948928833,
322
+ "vn_S_RANT_reg": -0.08096981048583984,
323
+ "vn_S_STRY_reg": 2.418037176132202,
324
+ "vn_S_TECH_reg": 3.269036293029785,
325
+ "vn_S_WHIS_reg": -0.15646040439605713,
326
+ "vn_TEMP_reg": 2.780953884124756,
327
+ "vn_TENS_reg": 1.828498125076294,
328
+ "vn_VALN_reg": 2.759892225265503,
329
+ "vn_VALS_reg": 2.939750909805298,
330
+ "vn_VFLX_reg": 2.9329519271850586,
331
+ "vn_VOLT_reg": 0.9814172983169556,
332
+ "vn_VULN_reg": 1.17689049243927,
333
+ "vn_WARM_reg": 3.7787632942199707,
334
+ "genuineness_0_6": 4.124508857727051,
335
+ "blend_0_10": 6.564396381378174,
336
+ "R_quality": 0.2776834964752197,
337
+ "eiv_extra:Age": 3.3088409900665283,
338
+ "eiv_extra:Arousal": 1.030998945236206,
339
+ "eiv_extra:Authenticity": 2.780491352081299,
340
+ "eiv_extra:Background_Noise": -0.031336963176727295,
341
+ "eiv_extra:Confident_vs._Hesitant": 0.8572136163711548,
342
+ "eiv_extra:Gender": -1.0594953298568726,
343
+ "eiv_extra:High-Pitched_vs._Low-Pitched": 2.024301290512085,
344
+ "eiv_extra:Monotone_vs._Expressive": 1.506665587425232,
345
+ "eiv_extra:Recording_Quality": 2.7540531158447266,
346
+ "eiv_extra:Serious_vs._Humorous": 0.9053643941879272,
347
+ "eiv_extra:Soft_vs._Harsh": 0.24291978776454926,
348
+ "eiv_extra:Submissive_vs._Dominant": 0.4815673232078552,
349
+ "eiv_extra:Valence": -0.04363267868757248,
350
+ "eiv_extra:Vulnerable_vs._Emotionally_Detached": 2.402489185333252,
351
+ "eiv_extra:Warm_vs._Cold": 0.056246623396873474,
352
+ "eiv_extra:score_background_quality": 3.7944955825805664,
353
+ "eiv_extra:score_content_enjoyment": 4.8711256980896,
354
+ "eiv_extra:score_overall_quality": 3.034045457839966,
355
+ "eiv_extra:score_speech_quality": 1.9654312133789062,
356
+ "audiobox:CE": 6.570657730102539,
357
+ "audiobox:CU": 7.415783882141113,
358
+ "audiobox:PC": 1.5173166990280151,
359
+ "audiobox:PQ": 8.0977201461792,
360
+ "dnsmos:SIG_raw": 4.26984167098999,
361
+ "dnsmos:BAK_raw": 4.570577621459961,
362
+ "dnsmos:OVRL_raw": 4.081363677978516,
363
+ "dnsmos:SIG": 3.6966428756713867,
364
+ "dnsmos:BAK": 4.191372394561768,
365
+ "dnsmos:OVRL": 3.4678335189819336,
366
+ "dnsmos:P808_MOS": 4.209654808044434,
367
+ "burst_count_log1p": 0.09367421269416809,
368
+ "voiceclap_attribute:Affection": -0.006678104400634766,
369
+ "voiceclap_attribute:Age": 3.3191351890563965,
370
+ "voiceclap_attribute:Amusement": 0.18645429611206055,
371
+ "voiceclap_attribute:Anger": -0.05321788787841797,
372
+ "voiceclap_attribute:Arousal": 1.1774439811706543,
373
+ "voiceclap_attribute:Astonishment_Surprise": 0.05988532304763794,
374
+ "voiceclap_attribute:Authenticity": 2.904355525970459,
375
+ "voiceclap_attribute:Awe": 0.2330930233001709,
376
+ "voiceclap_attribute:Background_Noise": 0.10025382041931152,
377
+ "voiceclap_attribute:Bitterness": -0.005188405513763428,
378
+ "voiceclap_attribute:Concentration": 2.4700779914855957,
379
+ "voiceclap_attribute:Confident_vs._Hesitant": 0.7343697547912598,
380
+ "voiceclap_attribute:Confusion": -0.13817310333251953,
381
+ "voiceclap_attribute:Contemplation": 1.8421540260314941,
382
+ "voiceclap_attribute:Contempt": 0.06687861680984497,
383
+ "voiceclap_attribute:Contentment": 1.620650291442871,
384
+ "voiceclap_attribute:Disappointment": 0.025149106979370117,
385
+ "voiceclap_attribute:Disgust": -0.021725356578826904,
386
+ "voiceclap_attribute:Distress": -0.11263149976730347,
387
+ "voiceclap_attribute:Doubt": 0.0779981017112732,
388
+ "voiceclap_attribute:Elation": 0.0685073733329773,
389
+ "voiceclap_attribute:Embarrassment": -0.028491556644439697,
390
+ "voiceclap_attribute:Emotional_Numbness": 0.04195237159729004,
391
+ "voiceclap_attribute:Fatigue_Exhaustion": -0.08572903275489807,
392
+ "voiceclap_attribute:Fear": 0.006707549095153809,
393
+ "voiceclap_attribute:Gender": -1.1005455255508423,
394
+ "voiceclap_attribute:Helplessness": -0.034795284271240234,
395
+ "voiceclap_attribute:High-Pitched_vs._Low-Pitched": 1.8932565450668335,
396
+ "voiceclap_attribute:Hope_Enthusiasm_Optimism": 0.9213427901268005,
397
+ "voiceclap_attribute:Impatience_and_Irritability": -0.1671210527420044,
398
+ "voiceclap_attribute:Infatuation": -0.13648593425750732,
399
+ "voiceclap_attribute:Interest": 2.2541165351867676,
400
+ "voiceclap_attribute:Intoxication_Altered_States_of_Consciousness": -0.019401192665100098,
401
+ "voiceclap_attribute:Jealousy_&_Envy": -0.042890191078186035,
402
+ "voiceclap_attribute:Longing": -0.03346216678619385,
403
+ "voiceclap_attribute:Malevolence_Malice": -0.0024952292442321777,
404
+ "voiceclap_attribute:Monotone_vs._Expressive": 1.553143858909607,
405
+ "voiceclap_attribute:Pain": -0.09028694033622742,
406
+ "voiceclap_attribute:Pleasure_Ecstasy": 0.04086393117904663,
407
+ "voiceclap_attribute:Pride": 0.7654954195022583,
408
+ "voiceclap_attribute:Recording_Quality": 2.771263599395752,
409
+ "voiceclap_attribute:Relief": -0.08735132217407227,
410
+ "voiceclap_attribute:Sadness": 0.0046160221099853516,
411
+ "voiceclap_attribute:Serious_vs._Humorous": 0.6564277410507202,
412
+ "voiceclap_attribute:Sexual_Lust": -0.05524212121963501,
413
+ "voiceclap_attribute:Shame": -0.035001397132873535,
414
+ "voiceclap_attribute:Soft_vs._Harsh": 0.21556827425956726,
415
+ "voiceclap_attribute:Sourness": 0.06958633661270142,
416
+ "voiceclap_attribute:Submissive_vs._Dominant": 0.48485857248306274,
417
+ "voiceclap_attribute:Teasing": -0.04382467269897461,
418
+ "voiceclap_attribute:Thankfulness_Gratitude": -0.13853907585144043,
419
+ "voiceclap_attribute:Triumph": 0.06699061393737793,
420
+ "voiceclap_attribute:Valence": 0.13324740529060364,
421
+ "voiceclap_attribute:Vulnerable_vs._Emotionally_Detached": 2.2106969356536865,
422
+ "voiceclap_attribute:Warm_vs._Cold": 0.22859765589237213,
423
+ "voiceclap_attribute:duration": 8.196389198303223,
424
+ "voiceclap_attribute:score_background_quality": 3.795308828353882,
425
+ "voiceclap_attribute:score_content_enjoyment": 4.852869987487793,
426
+ "voiceclap_attribute:score_overall_quality": 3.0869405269622803,
427
+ "voiceclap_attribute:score_speech_quality": 1.9883841276168823,
428
+ "voiceclap_attribute:talking_speed": 15.080714225769043
429
+ },
430
+ "asr": "The pressure is immense down there, and that oil filled tube helps them manage buoyancy without using a lot of energy.",
431
+ "audio_sha256": "d97bf585de5e13c1fe7196bd172e31a5d50cc27356afadec04e09d783d9e6ad8",
432
+ "speaker": "S2",
433
+ "seconds": 7.52,
434
+ "media_member": "en-S2.mp3",
435
+ "wav_member": "en-S2.wav",
436
+ "source_split": "train",
437
+ "source_audio": "Original media crop, not a codec reconstruction"
438
+ }
439
+ },
440
+ "de": {
441
+ "S1": {
442
+ "episode": "506e1ff553b396e74b5e11ac851ebb2d8abbac980f1c9e9c1f5d2147ccdd361a",
443
+ "original_speaker": "S1",
444
+ "start_frame": 7511,
445
+ "end_frame": 7586,
446
+ "language": "de",
447
+ "window": {
448
+ "episode": "506e1ff553b396e74b5e11ac851ebb2d8abbac980f1c9e9c1f5d2147ccdd361a",
449
+ "lang": "de",
450
+ "window": "middle",
451
+ "start": 600.828027,
452
+ "duration": 30.0,
453
+ "ce": 6.332377780228853
454
+ },
455
+ "text": "ganz oben mit einer extrem hohen Gewichtung, wie du schon meintest, das Google Business Profil inklusive echter",
456
+ "scores": {
457
+ "emo_Affection": 0.003499329090118408,
458
+ "emo_Amusement": 0.15237268805503845,
459
+ "emo_Anger": 0.08867141604423523,
460
+ "emo_Astonishment_Surprise": 0.02754819393157959,
461
+ "emo_Awe": 0.05463704466819763,
462
+ "emo_Bitterness": 0.06925627589225769,
463
+ "emo_Concentration": 2.2230780124664307,
464
+ "emo_Confusion": 0.015630871057510376,
465
+ "emo_Contemplation": 1.1912533044815063,
466
+ "emo_Contempt": 0.05897912383079529,
467
+ "emo_Contentment": 1.519317388534546,
468
+ "emo_Disappointment": 0.09251806139945984,
469
+ "emo_Disgust": 0.046287357807159424,
470
+ "emo_Distress": 0.10292959213256836,
471
+ "emo_Doubt": 0.0494576096534729,
472
+ "emo_Elation": 0.07590454816818237,
473
+ "emo_Embarrassment": -0.004881232976913452,
474
+ "emo_Emotional_Numbness": 0.15009891986846924,
475
+ "emo_Fatigue_Exhaustion": 0.025012105703353882,
476
+ "emo_Fear": 0.02065873146057129,
477
+ "emo_Helplessness": 0.01056128740310669,
478
+ "emo_Hope_Enthusiasm_Optimism": 0.6577759981155396,
479
+ "emo_Impatience_and_Irritability": 0.11068978905677795,
480
+ "emo_Infatuation": -0.027781158685684204,
481
+ "emo_Interest": 2.1954352855682373,
482
+ "emo_Intoxication_Altered_States_of_Consciousness": -0.028512001037597656,
483
+ "emo_Jealousy_and_Envy": -0.0012696832418441772,
484
+ "emo_Longing": -0.021907448768615723,
485
+ "emo_Malevolence_Malice": 0.025343775749206543,
486
+ "emo_Pain": 0.021054372191429138,
487
+ "emo_Pleasure_Ecstasy": 0.00844430923461914,
488
+ "emo_Pride": 0.7768015265464783,
489
+ "emo_Relief": -0.01715967059135437,
490
+ "emo_Sadness": 0.04681721329689026,
491
+ "emo_Sexual_Lust": -0.0018015503883361816,
492
+ "emo_Shame": 0.016696348786354065,
493
+ "emo_Sourness": 0.06309981644153595,
494
+ "emo_Teasing": 0.06191974878311157,
495
+ "emo_Thankfulness_Gratitude": 0.021871864795684814,
496
+ "emo_Triumph": 0.07605919241905212,
497
+ "vn_AGEV_reg": 3.3902597427368164,
498
+ "vn_AROU_reg": 2.634697198867798,
499
+ "vn_ARSH_reg": 3.2585883140563965,
500
+ "vn_ATCK_reg": 3.3325839042663574,
501
+ "vn_BKGN_reg": 3.899172782897949,
502
+ "vn_BRGT_reg": 3.3822181224823,
503
+ "vn_CHNK_reg": 2.9287867546081543,
504
+ "vn_CLRT_reg": 4.611832141876221,
505
+ "vn_COGL_reg": 0.5637096166610718,
506
+ "vn_DARC_reg": 3.1023783683776855,
507
+ "vn_DFLU_reg": -0.12865090370178223,
508
+ "vn_EMPH_reg": 3.4788684844970703,
509
+ "vn_ESTH_reg": 4.33256721496582,
510
+ "vn_EXPL_reg": -0.02448570728302002,
511
+ "vn_FOCS_reg": 4.200840950012207,
512
+ "vn_FULL_reg": 4.125646591186523,
513
+ "vn_GEND_reg": 5.08811616897583,
514
+ "vn_HARM_reg": 3.96588134765625,
515
+ "vn_METL_reg": 1.7382471561431885,
516
+ "vn_RANG_reg": 2.7016913890838623,
517
+ "vn_RCQL_reg": 4.312852382659912,
518
+ "vn_REGS_reg": 0.8975258469581604,
519
+ "vn_RESP_reg": 1.0082920789718628,
520
+ "vn_ROUG_reg": 1.464820384979248,
521
+ "vn_R_CHST_reg": 3.7990071773529053,
522
+ "vn_R_HEAD_reg": 1.5772247314453125,
523
+ "vn_R_MASK_reg": 2.9542155265808105,
524
+ "vn_R_MIXD_reg": 4.08314323425293,
525
+ "vn_R_NASL_reg": 1.591546893119812,
526
+ "vn_R_ORAL_reg": 3.6143059730529785,
527
+ "vn_R_THRT_reg": 2.873262882232666,
528
+ "vn_SMTH_reg": 3.9902539253234863,
529
+ "vn_STNC_reg": 3.837189197540283,
530
+ "vn_STRU_reg": 4.632915496826172,
531
+ "vn_S_ASMR_reg": 0.2944391965866089,
532
+ "vn_S_AUTH_reg": 3.9060754776000977,
533
+ "vn_S_CART_reg": 0.09633278846740723,
534
+ "vn_S_CASU_reg": 1.5774586200714111,
535
+ "vn_S_CONV_reg": 2.479820728302002,
536
+ "vn_S_DRAM_reg": 2.218568801879883,
537
+ "vn_S_FORM_reg": 3.8530054092407227,
538
+ "vn_S_MONO_reg": 3.2624623775482178,
539
+ "vn_S_NARR_reg": 4.053851127624512,
540
+ "vn_S_NEWS_reg": 2.5881664752960205,
541
+ "vn_S_PLAY_reg": 0.623265266418457,
542
+ "vn_S_RANT_reg": 0.45731687545776367,
543
+ "vn_S_STRY_reg": 2.52691650390625,
544
+ "vn_S_TECH_reg": 2.9835829734802246,
545
+ "vn_S_WHIS_reg": -0.25637686252593994,
546
+ "vn_TEMP_reg": 3.109259605407715,
547
+ "vn_TENS_reg": 2.1080920696258545,
548
+ "vn_VALN_reg": 3.0070528984069824,
549
+ "vn_VALS_reg": 3.415966033935547,
550
+ "vn_VFLX_reg": 2.7750344276428223,
551
+ "vn_VOLT_reg": 1.0560503005981445,
552
+ "vn_VULN_reg": 1.068552017211914,
553
+ "vn_WARM_reg": 3.679795026779175,
554
+ "genuineness_0_6": 4.174716949462891,
555
+ "blend_0_10": 6.4024858474731445,
556
+ "R_quality": 0.2621626853942871,
557
+ "eiv_extra:Age": 3.2742700576782227,
558
+ "eiv_extra:Arousal": 1.241325855255127,
559
+ "eiv_extra:Authenticity": 2.724339008331299,
560
+ "eiv_extra:Background_Noise": 0.1460018754005432,
561
+ "eiv_extra:Confident_vs._Hesitant": 0.9474958181381226,
562
+ "eiv_extra:Gender": -1.082871437072754,
563
+ "eiv_extra:High-Pitched_vs._Low-Pitched": 1.923715353012085,
564
+ "eiv_extra:Monotone_vs._Expressive": 1.6315723657608032,
565
+ "eiv_extra:Recording_Quality": 2.429269313812256,
566
+ "eiv_extra:Serious_vs._Humorous": 0.9710330963134766,
567
+ "eiv_extra:Soft_vs._Harsh": 0.11378416419029236,
568
+ "eiv_extra:Submissive_vs._Dominant": 0.49103453755378723,
569
+ "eiv_extra:Valence": -0.04065120965242386,
570
+ "eiv_extra:Vulnerable_vs._Emotionally_Detached": 2.3718464374542236,
571
+ "eiv_extra:Warm_vs._Cold": -0.017269432544708252,
572
+ "eiv_extra:score_background_quality": 3.5045952796936035,
573
+ "eiv_extra:score_content_enjoyment": 4.849766731262207,
574
+ "eiv_extra:score_overall_quality": 2.8258748054504395,
575
+ "eiv_extra:score_speech_quality": 1.9371109008789062,
576
+ "audiobox:CE": 6.427689552307129,
577
+ "audiobox:CU": 7.173866271972656,
578
+ "audiobox:PC": 1.4857641458511353,
579
+ "audiobox:PQ": 8.152673721313477,
580
+ "dnsmos:SIG_raw": 4.089506149291992,
581
+ "dnsmos:BAK_raw": 4.421130657196045,
582
+ "dnsmos:OVRL_raw": 3.9098737239837646,
583
+ "dnsmos:SIG": 3.5850608348846436,
584
+ "dnsmos:BAK": 4.133337020874023,
585
+ "dnsmos:OVRL": 3.363564968109131,
586
+ "dnsmos:P808_MOS": 4.023495674133301,
587
+ "burst_count_log1p": 0.07847452163696289,
588
+ "voiceclap_attribute:Affection": 0.11895221471786499,
589
+ "voiceclap_attribute:Age": 3.3403754234313965,
590
+ "voiceclap_attribute:Amusement": 0.22232285141944885,
591
+ "voiceclap_attribute:Anger": 0.07362490892410278,
592
+ "voiceclap_attribute:Arousal": 1.3780860900878906,
593
+ "voiceclap_attribute:Astonishment_Surprise": 0.11974412202835083,
594
+ "voiceclap_attribute:Authenticity": 2.805722713470459,
595
+ "voiceclap_attribute:Awe": 0.12770754098892212,
596
+ "voiceclap_attribute:Background_Noise": 0.09406396746635437,
597
+ "voiceclap_attribute:Bitterness": 0.08856159448623657,
598
+ "voiceclap_attribute:Concentration": 2.2960050106048584,
599
+ "voiceclap_attribute:Confident_vs._Hesitant": 0.8680471181869507,
600
+ "voiceclap_attribute:Confusion": -0.09627151489257812,
601
+ "voiceclap_attribute:Contemplation": 1.5919814109802246,
602
+ "voiceclap_attribute:Contempt": 0.15180200338363647,
603
+ "voiceclap_attribute:Contentment": 1.4623768329620361,
604
+ "voiceclap_attribute:Disappointment": 0.03422820568084717,
605
+ "voiceclap_attribute:Disgust": 0.0759308934211731,
606
+ "voiceclap_attribute:Distress": -0.13450461626052856,
607
+ "voiceclap_attribute:Doubt": 0.1658887267112732,
608
+ "voiceclap_attribute:Elation": 0.0498165488243103,
609
+ "voiceclap_attribute:Embarrassment": -0.04324379563331604,
610
+ "voiceclap_attribute:Emotional_Numbness": 0.058588504791259766,
611
+ "voiceclap_attribute:Fatigue_Exhaustion": -0.2077515423297882,
612
+ "voiceclap_attribute:Fear": -0.005011200904846191,
613
+ "voiceclap_attribute:Gender": -0.7826812863349915,
614
+ "voiceclap_attribute:Helplessness": -0.11862963438034058,
615
+ "voiceclap_attribute:High-Pitched_vs._Low-Pitched": 1.7247297763824463,
616
+ "voiceclap_attribute:Hope_Enthusiasm_Optimism": 0.8216304779052734,
617
+ "voiceclap_attribute:Impatience_and_Irritability": 0.10812842845916748,
618
+ "voiceclap_attribute:Infatuation": -0.08451634645462036,
619
+ "voiceclap_attribute:Interest": 2.20949649810791,
620
+ "voiceclap_attribute:Intoxication_Altered_States_of_Consciousness": 0.002347409725189209,
621
+ "voiceclap_attribute:Jealousy_&_Envy": -0.046796441078186035,
622
+ "voiceclap_attribute:Longing": -0.04908716678619385,
623
+ "voiceclap_attribute:Malevolence_Malice": 0.035348474979400635,
624
+ "voiceclap_attribute:Monotone_vs._Expressive": 1.4692661762237549,
625
+ "voiceclap_attribute:Pain": -0.09419319033622742,
626
+ "voiceclap_attribute:Pleasure_Ecstasy": 0.04321706295013428,
627
+ "voiceclap_attribute:Pride": 0.6700686812400818,
628
+ "voiceclap_attribute:Recording_Quality": 2.5123560428619385,
629
+ "voiceclap_attribute:Relief": -0.16534173488616943,
630
+ "voiceclap_attribute:Sadness": -0.12739717960357666,
631
+ "voiceclap_attribute:Serious_vs._Humorous": 0.845283567905426,
632
+ "voiceclap_attribute:Sexual_Lust": -0.029126286506652832,
633
+ "voiceclap_attribute:Shame": -0.10104489326477051,
634
+ "voiceclap_attribute:Soft_vs._Harsh": 0.036191388964653015,
635
+ "voiceclap_attribute:Sourness": 0.14901649951934814,
636
+ "voiceclap_attribute:Submissive_vs._Dominant": 0.5605859756469727,
637
+ "voiceclap_attribute:Teasing": 0.053975820541381836,
638
+ "voiceclap_attribute:Thankfulness_Gratitude": -0.12199687957763672,
639
+ "voiceclap_attribute:Triumph": 0.050173163414001465,
640
+ "voiceclap_attribute:Valence": -0.05870813876390457,
641
+ "voiceclap_attribute:Vulnerable_vs._Emotionally_Detached": 2.0304691791534424,
642
+ "voiceclap_attribute:Warm_vs._Cold": 0.054657384753227234,
643
+ "voiceclap_attribute:duration": 6.588235378265381,
644
+ "voiceclap_attribute:score_background_quality": 3.623931407928467,
645
+ "voiceclap_attribute:score_content_enjoyment": 4.760096549987793,
646
+ "voiceclap_attribute:score_overall_quality": 2.8598520755767822,
647
+ "voiceclap_attribute:score_speech_quality": 2.005962371826172,
648
+ "voiceclap_attribute:talking_speed": 17.220680236816406
649
+ },
650
+ "asr": "Ganz oben mit einer extrem hohen Gewichtung, wie du schon meintest, das Google Business Profil inklusive Echtspiel.",
651
+ "audio_sha256": "8e532d43e660a9f87fb0727755ddafae0af691f86f1582cf3f37e052a528c641",
652
+ "speaker": "S1",
653
+ "seconds": 6.0,
654
+ "media_member": "de-S1.mp3",
655
+ "wav_member": "de-S1.wav",
656
+ "source_split": "train",
657
+ "source_audio": "Original media crop, not a codec reconstruction"
658
+ },
659
+ "S2": {
660
+ "episode": "506e1ff553b396e74b5e11ac851ebb2d8abbac980f1c9e9c1f5d2147ccdd361a",
661
+ "original_speaker": "S2",
662
+ "start_frame": 7603,
663
+ "end_frame": 7673,
664
+ "language": "de",
665
+ "window": {
666
+ "episode": "506e1ff553b396e74b5e11ac851ebb2d8abbac980f1c9e9c1f5d2147ccdd361a",
667
+ "lang": "de",
668
+ "window": "middle",
669
+ "start": 600.828027,
670
+ "duration": 30.0,
671
+ "ce": 6.332377780228853
672
+ },
673
+ "text": "es eben der stärkste Indikator für lokale Relevanz und echte physische Existenz",
674
+ "scores": {
675
+ "emo_Affection": 0.08421026170253754,
676
+ "emo_Amusement": 0.488334983587265,
677
+ "emo_Anger": 0.1056675910949707,
678
+ "emo_Astonishment_Surprise": 0.07823824882507324,
679
+ "emo_Awe": 0.13047467172145844,
680
+ "emo_Bitterness": 0.035080790519714355,
681
+ "emo_Concentration": 2.2230780124664307,
682
+ "emo_Confusion": 0.017714470624923706,
683
+ "emo_Contemplation": 1.4581191539764404,
684
+ "emo_Contempt": 0.05193011462688446,
685
+ "emo_Contentment": 1.7397338151931763,
686
+ "emo_Disappointment": 0.059642672538757324,
687
+ "emo_Disgust": 0.03096643090248108,
688
+ "emo_Distress": 0.07259681820869446,
689
+ "emo_Doubt": 0.1759568750858307,
690
+ "emo_Elation": 0.17693793773651123,
691
+ "emo_Embarrassment": 0.005362153053283691,
692
+ "emo_Emotional_Numbness": 0.09188514947891235,
693
+ "emo_Fatigue_Exhaustion": -0.015124976634979248,
694
+ "emo_Fear": 0.050528913736343384,
695
+ "emo_Helplessness": 0.005029559135437012,
696
+ "emo_Hope_Enthusiasm_Optimism": 1.0370121002197266,
697
+ "emo_Impatience_and_Irritability": 0.08129343390464783,
698
+ "emo_Infatuation": -0.03306666016578674,
699
+ "emo_Interest": 2.484661817550659,
700
+ "emo_Intoxication_Altered_States_of_Consciousness": -0.010043919086456299,
701
+ "emo_Jealousy_and_Envy": 0.008307188749313354,
702
+ "emo_Longing": -0.007005155086517334,
703
+ "emo_Malevolence_Malice": 0.039663299918174744,
704
+ "emo_Pain": -0.0025366544723510742,
705
+ "emo_Pleasure_Ecstasy": -0.001095205545425415,
706
+ "emo_Pride": 0.8417905569076538,
707
+ "emo_Relief": 0.03600078821182251,
708
+ "emo_Sadness": 0.013976067304611206,
709
+ "emo_Sexual_Lust": -0.011522918939590454,
710
+ "emo_Shame": 0.00032067298889160156,
711
+ "emo_Sourness": 0.028476819396018982,
712
+ "emo_Teasing": 0.10710452497005463,
713
+ "emo_Thankfulness_Gratitude": 0.012420654296875,
714
+ "emo_Triumph": 0.16010864078998566,
715
+ "vn_AGEV_reg": 3.7052559852600098,
716
+ "vn_AROU_reg": 2.6930038928985596,
717
+ "vn_ARSH_reg": 3.1661670207977295,
718
+ "vn_ATCK_reg": 3.2297139167785645,
719
+ "vn_BKGN_reg": 4.041053295135498,
720
+ "vn_BRGT_reg": 3.9268441200256348,
721
+ "vn_CHNK_reg": 2.5246458053588867,
722
+ "vn_CLRT_reg": 4.521746635437012,
723
+ "vn_COGL_reg": 0.6378332376480103,
724
+ "vn_DARC_reg": 2.9746766090393066,
725
+ "vn_DFLU_reg": -0.16556215286254883,
726
+ "vn_EMPH_reg": 3.2701969146728516,
727
+ "vn_ESTH_reg": 4.490742206573486,
728
+ "vn_EXPL_reg": -0.02832302451133728,
729
+ "vn_FOCS_reg": 3.854011058807373,
730
+ "vn_FULL_reg": 3.352433681488037,
731
+ "vn_GEND_reg": 0.9078109264373779,
732
+ "vn_HARM_reg": 4.289289951324463,
733
+ "vn_METL_reg": 1.6952276229858398,
734
+ "vn_RANG_reg": 3.210130453109741,
735
+ "vn_RCQL_reg": 4.678562164306641,
736
+ "vn_REGS_reg": 4.072345733642578,
737
+ "vn_RESP_reg": 1.459503412246704,
738
+ "vn_ROUG_reg": 0.844868540763855,
739
+ "vn_R_CHST_reg": 2.1125450134277344,
740
+ "vn_R_HEAD_reg": 3.25652813911438,
741
+ "vn_R_MASK_reg": 3.929640293121338,
742
+ "vn_R_MIXD_reg": 4.004687309265137,
743
+ "vn_R_NASL_reg": 1.9958350658416748,
744
+ "vn_R_ORAL_reg": 4.160750389099121,
745
+ "vn_R_THRT_reg": 1.8289213180541992,
746
+ "vn_SMTH_reg": 3.972888469696045,
747
+ "vn_STNC_reg": 3.71264910697937,
748
+ "vn_STRU_reg": 4.540471076965332,
749
+ "vn_S_ASMR_reg": 0.3644522428512573,
750
+ "vn_S_AUTH_reg": 3.532729148864746,
751
+ "vn_S_CART_reg": 0.5135087966918945,
752
+ "vn_S_CASU_reg": 1.9263372421264648,
753
+ "vn_S_CONV_reg": 2.7615418434143066,
754
+ "vn_S_DRAM_reg": 2.0850555896759033,
755
+ "vn_S_FORM_reg": 3.474879741668701,
756
+ "vn_S_MONO_reg": 2.640594482421875,
757
+ "vn_S_NARR_reg": 4.031425952911377,
758
+ "vn_S_NEWS_reg": 2.1663033962249756,
759
+ "vn_S_PLAY_reg": 1.517014503479004,
760
+ "vn_S_RANT_reg": 0.2778879404067993,
761
+ "vn_S_STRY_reg": 2.4507009983062744,
762
+ "vn_S_TECH_reg": 3.002613067626953,
763
+ "vn_S_WHIS_reg": -0.10650229454040527,
764
+ "vn_TEMP_reg": 2.8982059955596924,
765
+ "vn_TENS_reg": 1.997554898262024,
766
+ "vn_VALN_reg": 3.333658218383789,
767
+ "vn_VALS_reg": 3.16713285446167,
768
+ "vn_VFLX_reg": 2.767963409423828,
769
+ "vn_VOLT_reg": 1.32744300365448,
770
+ "vn_VULN_reg": 1.4090443849563599,
771
+ "vn_WARM_reg": 3.227367639541626,
772
+ "genuineness_0_6": 3.9801597595214844,
773
+ "blend_0_10": 6.28304386138916,
774
+ "R_quality": 0.29320424795150757,
775
+ "eiv_extra:Age": 3.321516990661621,
776
+ "eiv_extra:Arousal": 1.381827712059021,
777
+ "eiv_extra:Authenticity": 2.858616352081299,
778
+ "eiv_extra:Background_Noise": 0.0016562938690185547,
779
+ "eiv_extra:Confident_vs._Hesitant": 0.7503005266189575,
780
+ "eiv_extra:Gender": 1.2936965227127075,
781
+ "eiv_extra:High-Pitched_vs._Low-Pitched": 1.409066915512085,
782
+ "eiv_extra:Monotone_vs._Expressive": 1.4460489749908447,
783
+ "eiv_extra:Recording_Quality": 2.7514548301696777,
784
+ "eiv_extra:Serious_vs._Humorous": 0.8154757022857666,
785
+ "eiv_extra:Soft_vs._Harsh": 0.2709927558898926,
786
+ "eiv_extra:Submissive_vs._Dominant": 0.28906723856925964,
787
+ "eiv_extra:Valence": 0.11885757744312286,
788
+ "eiv_extra:Vulnerable_vs._Emotionally_Detached": 1.9334872961044312,
789
+ "eiv_extra:Warm_vs._Cold": 0.09527456760406494,
790
+ "eiv_extra:score_background_quality": 3.64819073677063,
791
+ "eiv_extra:score_content_enjoyment": 4.763145923614502,
792
+ "eiv_extra:score_overall_quality": 2.9170734882354736,
793
+ "eiv_extra:score_speech_quality": 1.9751968383789062,
794
+ "audiobox:CE": 6.205295085906982,
795
+ "audiobox:CU": 7.017790794372559,
796
+ "audiobox:PC": 1.479453682899475,
797
+ "audiobox:PQ": 7.946595668792725,
798
+ "dnsmos:SIG_raw": 4.113028049468994,
799
+ "dnsmos:BAK_raw": 4.324429988861084,
800
+ "dnsmos:OVRL_raw": 3.8781161308288574,
801
+ "dnsmos:SIG": 3.6007213592529297,
802
+ "dnsmos:BAK": 4.071674346923828,
803
+ "dnsmos:OVRL": 3.349346399307251,
804
+ "dnsmos:P808_MOS": 3.9653210639953613,
805
+ "burst_count_log1p": 0.06580808758735657,
806
+ "voiceclap_attribute:Affection": 0.14494472742080688,
807
+ "voiceclap_attribute:Age": 3.4465768337249756,
808
+ "voiceclap_attribute:Amusement": 0.4173581600189209,
809
+ "voiceclap_attribute:Anger": -0.00565183162689209,
810
+ "voiceclap_attribute:Arousal": 1.3270134925842285,
811
+ "voiceclap_attribute:Astonishment_Surprise": 0.39284974336624146,
812
+ "voiceclap_attribute:Authenticity": 3.018613338470459,
813
+ "voiceclap_attribute:Awe": 0.19864007830619812,
814
+ "voiceclap_attribute:Background_Noise": 0.03835529088973999,
815
+ "voiceclap_attribute:Bitterness": 0.03387409448623657,
816
+ "voiceclap_attribute:Concentration": 2.1219322681427,
817
+ "voiceclap_attribute:Confident_vs._Hesitant": 0.9605225324630737,
818
+ "voiceclap_attribute:Confusion": -0.007230699062347412,
819
+ "voiceclap_attribute:Contemplation": 1.357642412185669,
820
+ "voiceclap_attribute:Contempt": 0.10403263568878174,
821
+ "voiceclap_attribute:Contentment": 1.5391154289245605,
822
+ "voiceclap_attribute:Disappointment": -0.08833938837051392,
823
+ "voiceclap_attribute:Disgust": 0.048587143421173096,
824
+ "voiceclap_attribute:Distress": -0.16731411218643188,
825
+ "voiceclap_attribute:Doubt": 0.1619824767112732,
826
+ "voiceclap_attribute:Elation": 0.24295487999916077,
827
+ "voiceclap_attribute:Embarrassment": -0.013739347457885742,
828
+ "voiceclap_attribute:Emotional_Numbness": -0.06618279218673706,
829
+ "voiceclap_attribute:Fatigue_Exhaustion": -0.2524931728839874,
830
+ "voiceclap_attribute:Fear": -0.05969870090484619,
831
+ "voiceclap_attribute:Gender": 1.356034517288208,
832
+ "voiceclap_attribute:Helplessness": -0.10605448484420776,
833
+ "voiceclap_attribute:High-Pitched_vs._Low-Pitched": 1.262193202972412,
834
+ "voiceclap_attribute:Hope_Enthusiasm_Optimism": 1.1029201745986938,
835
+ "voiceclap_attribute:Impatience_and_Irritability": 0.09542453289031982,
836
+ "voiceclap_attribute:Infatuation": -0.10530418157577515,
837
+ "voiceclap_attribute:Interest": 2.3811116218566895,
838
+ "voiceclap_attribute:Intoxication_Altered_States_of_Consciousness": 0.07484263181686401,
839
+ "voiceclap_attribute:Jealousy_&_Envy": -0.06632769107818604,
840
+ "voiceclap_attribute:Longing": -0.08033716678619385,
841
+ "voiceclap_attribute:Malevolence_Malice": 0.013723492622375488,
842
+ "voiceclap_attribute:Monotone_vs._Expressive": 1.473926067352295,
843
+ "voiceclap_attribute:Pain": -0.11372444033622742,
844
+ "voiceclap_attribute:Pleasure_Ecstasy": 0.09263297915458679,
845
+ "voiceclap_attribute:Pride": 0.6468936204910278,
846
+ "voiceclap_attribute:Recording_Quality": 2.771263599395752,
847
+ "voiceclap_attribute:Relief": 0.09462636709213257,
848
+ "voiceclap_attribute:Sadness": -0.09317153692245483,
849
+ "voiceclap_attribute:Serious_vs._Humorous": 0.819100022315979,
850
+ "voiceclap_attribute:Sexual_Lust": 0.055750131607055664,
851
+ "voiceclap_attribute:Shame": -0.11425364017486572,
852
+ "voiceclap_attribute:Soft_vs._Harsh": 0.3696213662624359,
853
+ "voiceclap_attribute:Sourness": 0.046891987323760986,
854
+ "voiceclap_attribute:Submissive_vs._Dominant": 0.3453238904476166,
855
+ "voiceclap_attribute:Teasing": 0.2718041241168976,
856
+ "voiceclap_attribute:Thankfulness_Gratitude": -0.0889122486114502,
857
+ "voiceclap_attribute:Triumph": 0.11463993787765503,
858
+ "voiceclap_attribute:Valence": 0.12953214347362518,
859
+ "voiceclap_attribute:Vulnerable_vs._Emotionally_Detached": 1.7557846307754517,
860
+ "voiceclap_attribute:Warm_vs._Cold": 0.19583760201931,
861
+ "voiceclap_attribute:duration": 6.340827465057373,
862
+ "voiceclap_attribute:score_background_quality": 3.647301197052002,
863
+ "voiceclap_attribute:score_content_enjoyment": 4.833338737487793,
864
+ "voiceclap_attribute:score_overall_quality": 2.9065582752227783,
865
+ "voiceclap_attribute:score_speech_quality": 2.027935028076172,
866
+ "voiceclap_attribute:talking_speed": 15.66700553894043
867
+ },
868
+ "asr": "Der stärkste Indikator für lokale Relevanz und echte physische Existenz ist?",
869
+ "audio_sha256": "ba164cef51bc66522c22d03244943bc3e7c6cdebb3f88b753f0cba9d9963ea3d",
870
+ "speaker": "S2",
871
+ "seconds": 5.6,
872
+ "media_member": "de-S2.mp3",
873
+ "wav_member": "de-S2.wav",
874
+ "source_split": "train",
875
+ "source_audio": "Original media crop, not a codec reconstruction"
876
+ }
877
+ },
878
+ "fr": {
879
+ "S1": {
880
+ "episode": "5712265f42d9ba1a2627b39ffd2285358f5c693838a4c77eea13a50032832edf",
881
+ "original_speaker": "S2",
882
+ "start_frame": 7842,
883
+ "end_frame": 7907,
884
+ "language": "fr",
885
+ "window": {
886
+ "episode": "5712265f42d9ba1a2627b39ffd2285358f5c693838a4c77eea13a50032832edf",
887
+ "lang": "fr",
888
+ "window": "middle",
889
+ "start": 619.7232655,
890
+ "duration": 30.0,
891
+ "ce": 6.062326967716217
892
+ },
893
+ "text": "le phénomène hashtag Booktock, des jeunes qui partagent leur amour des livres et font décoller les",
894
+ "scores": {
895
+ "emo_Affection": 0.10120202600955963,
896
+ "emo_Amusement": 0.36081334948539734,
897
+ "emo_Anger": 0.07734063267707825,
898
+ "emo_Astonishment_Surprise": 0.07715973258018494,
899
+ "emo_Awe": 0.014053672552108765,
900
+ "emo_Bitterness": 0.0517711341381073,
901
+ "emo_Concentration": 2.2230780124664307,
902
+ "emo_Confusion": 0.03855052590370178,
903
+ "emo_Contemplation": 1.3430907726287842,
904
+ "emo_Contempt": 0.050167858600616455,
905
+ "emo_Contentment": 1.5586774349212646,
906
+ "emo_Disappointment": 0.15278956294059753,
907
+ "emo_Disgust": 0.04532980918884277,
908
+ "emo_Distress": 0.13006946444511414,
909
+ "emo_Doubt": 0.0796663910150528,
910
+ "emo_Elation": 0.13343745470046997,
911
+ "emo_Embarrassment": 0.020727217197418213,
912
+ "emo_Emotional_Numbness": 0.10127449035644531,
913
+ "emo_Fatigue_Exhaustion": 0.04402439296245575,
914
+ "emo_Fear": 0.0338016152381897,
915
+ "emo_Helplessness": 0.0631125271320343,
916
+ "emo_Hope_Enthusiasm_Optimism": 0.9481286406517029,
917
+ "emo_Impatience_and_Irritability": 0.09465542435646057,
918
+ "emo_Infatuation": 0.010274410247802734,
919
+ "emo_Interest": 2.6132068634033203,
920
+ "emo_Intoxication_Altered_States_of_Consciousness": -0.013302981853485107,
921
+ "emo_Jealousy_and_Envy": 0.017013445496559143,
922
+ "emo_Longing": 0.03770172595977783,
923
+ "emo_Malevolence_Malice": 0.029435068368911743,
924
+ "emo_Pain": 0.04239863157272339,
925
+ "emo_Pleasure_Ecstasy": -0.001095205545425415,
926
+ "emo_Pride": 0.4234238266944885,
927
+ "emo_Relief": 0.007375925779342651,
928
+ "emo_Sadness": 0.04383164644241333,
929
+ "emo_Sexual_Lust": 0.022501900792121887,
930
+ "emo_Shame": -0.009914115071296692,
931
+ "emo_Sourness": 0.05887749791145325,
932
+ "emo_Teasing": 0.11866341531276703,
933
+ "emo_Thankfulness_Gratitude": 0.05292579531669617,
934
+ "emo_Triumph": 0.032229721546173096,
935
+ "vn_AGEV_reg": 3.033428192138672,
936
+ "vn_AROU_reg": 2.7447097301483154,
937
+ "vn_ARSH_reg": 3.0292468070983887,
938
+ "vn_ATCK_reg": 3.0239737033843994,
939
+ "vn_BKGN_reg": 3.769115924835205,
940
+ "vn_BRGT_reg": 3.5595383644104004,
941
+ "vn_CHNK_reg": 2.6999359130859375,
942
+ "vn_CLRT_reg": 3.831089496612549,
943
+ "vn_COGL_reg": 2.0595650672912598,
944
+ "vn_DARC_reg": 2.8789005279541016,
945
+ "vn_DFLU_reg": 1.495448350906372,
946
+ "vn_EMPH_reg": 3.190410852432251,
947
+ "vn_ESTH_reg": 3.7850375175476074,
948
+ "vn_EXPL_reg": -0.04559090733528137,
949
+ "vn_FOCS_reg": 3.836669445037842,
950
+ "vn_FULL_reg": 3.062478542327881,
951
+ "vn_GEND_reg": 2.2514805793762207,
952
+ "vn_HARM_reg": 3.487236499786377,
953
+ "vn_METL_reg": 1.7569512128829956,
954
+ "vn_RANG_reg": 2.8653669357299805,
955
+ "vn_RCQL_reg": 3.8838460445404053,
956
+ "vn_REGS_reg": 3.0713205337524414,
957
+ "vn_RESP_reg": 1.8271570205688477,
958
+ "vn_ROUG_reg": 1.444155216217041,
959
+ "vn_R_CHST_reg": 2.3961093425750732,
960
+ "vn_R_HEAD_reg": 2.7257137298583984,
961
+ "vn_R_MASK_reg": 3.2660317420959473,
962
+ "vn_R_MIXD_reg": 3.442420482635498,
963
+ "vn_R_NASL_reg": 2.103095293045044,
964
+ "vn_R_ORAL_reg": 3.9165945053100586,
965
+ "vn_R_THRT_reg": 2.2284133434295654,
966
+ "vn_SMTH_reg": 3.3303771018981934,
967
+ "vn_STNC_reg": 3.3390283584594727,
968
+ "vn_STRU_reg": 3.616027355194092,
969
+ "vn_S_ASMR_reg": 0.27289676666259766,
970
+ "vn_S_AUTH_reg": 3.2161965370178223,
971
+ "vn_S_CART_reg": 0.22469472885131836,
972
+ "vn_S_CASU_reg": 2.863325357437134,
973
+ "vn_S_CONV_reg": 3.5582644939422607,
974
+ "vn_S_DRAM_reg": 1.7913264036178589,
975
+ "vn_S_FORM_reg": 2.5138094425201416,
976
+ "vn_S_MONO_reg": 2.1864633560180664,
977
+ "vn_S_NARR_reg": 3.2689566612243652,
978
+ "vn_S_NEWS_reg": 1.266615867614746,
979
+ "vn_S_PLAY_reg": 1.4408427476882935,
980
+ "vn_S_RANT_reg": 0.3327134847640991,
981
+ "vn_S_STRY_reg": 2.2792160511016846,
982
+ "vn_S_TECH_reg": 2.7742505073547363,
983
+ "vn_S_WHIS_reg": 0.16826772689819336,
984
+ "vn_TEMP_reg": 3.109259605407715,
985
+ "vn_TENS_reg": 2.1861181259155273,
986
+ "vn_VALN_reg": 3.0070528984069824,
987
+ "vn_VALS_reg": 3.0813283920288086,
988
+ "vn_VFLX_reg": 2.9235239028930664,
989
+ "vn_VOLT_reg": 1.4224305152893066,
990
+ "vn_VULN_reg": 1.48642897605896,
991
+ "vn_WARM_reg": 3.2874555587768555,
992
+ "genuineness_0_6": 4.419482707977295,
993
+ "blend_0_10": 7.849062919616699,
994
+ "R_quality": 0.7743484377861023,
995
+ "eiv_extra:Age": 3.285217523574829,
996
+ "eiv_extra:Arousal": 1.4048188924789429,
997
+ "eiv_extra:Authenticity": 2.803928852081299,
998
+ "eiv_extra:Background_Noise": 0.4016996920108795,
999
+ "eiv_extra:Confident_vs._Hesitant": 0.9445260167121887,
1000
+ "eiv_extra:Gender": 0.9742235541343689,
1001
+ "eiv_extra:High-Pitched_vs._Low-Pitched": 1.577035665512085,
1002
+ "eiv_extra:Monotone_vs._Expressive": 1.8363828659057617,
1003
+ "eiv_extra:Recording_Quality": 2.4942259788513184,
1004
+ "eiv_extra:Serious_vs._Humorous": 1.032540202140808,
1005
+ "eiv_extra:Soft_vs._Harsh": 0.32526713609695435,
1006
+ "eiv_extra:Submissive_vs._Dominant": 0.1489524394273758,
1007
+ "eiv_extra:Valence": 0.07376280426979065,
1008
+ "eiv_extra:Vulnerable_vs._Emotionally_Detached": 1.954766869544983,
1009
+ "eiv_extra:Warm_vs._Cold": 0.1129213497042656,
1010
+ "eiv_extra:score_background_quality": 3.6752843856811523,
1011
+ "eiv_extra:score_content_enjoyment": 4.70025634765625,
1012
+ "eiv_extra:score_overall_quality": 2.9131083488464355,
1013
+ "eiv_extra:score_speech_quality": 1.9312515258789062,
1014
+ "audiobox:CE": 5.919358730316162,
1015
+ "audiobox:CU": 6.506642818450928,
1016
+ "audiobox:PC": 1.6182845830917358,
1017
+ "audiobox:PQ": 7.788601875305176,
1018
+ "dnsmos:SIG_raw": 3.8372974395751953,
1019
+ "dnsmos:BAK_raw": 4.210146903991699,
1020
+ "dnsmos:OVRL_raw": 3.595475196838379,
1021
+ "dnsmos:SIG": 3.440199851989746,
1022
+ "dnsmos:BAK": 4.031774997711182,
1023
+ "dnsmos:OVRL": 3.1716156005859375,
1024
+ "dnsmos:P808_MOS": 3.792736291885376,
1025
+ "burst_count_log1p": 0.13674002885818481,
1026
+ "voiceclap_attribute:Affection": 0.0886276364326477,
1027
+ "voiceclap_attribute:Age": 3.245856285095215,
1028
+ "voiceclap_attribute:Amusement": 0.3837313652038574,
1029
+ "voiceclap_attribute:Anger": -0.05321788787841797,
1030
+ "voiceclap_attribute:Arousal": 1.4887431859970093,
1031
+ "voiceclap_attribute:Astonishment_Surprise": 0.23759105801582336,
1032
+ "voiceclap_attribute:Authenticity": 2.817929744720459,
1033
+ "voiceclap_attribute:Awe": 0.07096153497695923,
1034
+ "voiceclap_attribute:Background_Noise": 0.3189619481563568,
1035
+ "voiceclap_attribute:Bitterness": -0.03643840551376343,
1036
+ "voiceclap_attribute:Concentration": 2.159233570098877,
1037
+ "voiceclap_attribute:Confident_vs._Hesitant": 1.426561951637268,
1038
+ "voiceclap_attribute:Confusion": 0.17346984148025513,
1039
+ "voiceclap_attribute:Contemplation": 1.5476469993591309,
1040
+ "voiceclap_attribute:Contempt": 0.04034006595611572,
1041
+ "voiceclap_attribute:Contentment": 1.4288036823272705,
1042
+ "voiceclap_attribute:Disappointment": -0.006627678871154785,
1043
+ "voiceclap_attribute:Disgust": 0.032962143421173096,
1044
+ "voiceclap_attribute:Distress": 0.002201974391937256,
1045
+ "voiceclap_attribute:Doubt": 0.4246777892112732,
1046
+ "voiceclap_attribute:Elation": 0.1432705819606781,
1047
+ "voiceclap_attribute:Embarrassment": -0.023574143648147583,
1048
+ "voiceclap_attribute:Emotional_Numbness": 0.025316178798675537,
1049
+ "voiceclap_attribute:Fatigue_Exhaustion": -0.11420097947120667,
1050
+ "voiceclap_attribute:Fear": 0.006707549095153809,
1051
+ "voiceclap_attribute:Gender": 0.8380336165428162,
1052
+ "voiceclap_attribute:Helplessness": -0.001261591911315918,
1053
+ "voiceclap_attribute:High-Pitched_vs._Low-Pitched": 1.3789217472076416,
1054
+ "voiceclap_attribute:Hope_Enthusiasm_Optimism": 0.9834205508232117,
1055
+ "voiceclap_attribute:Impatience_and_Irritability": 0.027670860290527344,
1056
+ "voiceclap_attribute:Infatuation": -0.06892544031143188,
1057
+ "voiceclap_attribute:Interest": 2.401705265045166,
1058
+ "voiceclap_attribute:Intoxication_Altered_States_of_Consciousness": -0.08102214336395264,
1059
+ "voiceclap_attribute:Jealousy_&_Envy": -0.015546441078186035,
1060
+ "voiceclap_attribute:Longing": -0.08033716678619385,
1061
+ "voiceclap_attribute:Malevolence_Malice": 0.06237971782684326,
1062
+ "voiceclap_attribute:Monotone_vs._Expressive": 1.6579909324645996,
1063
+ "voiceclap_attribute:Pain": -0.05513069033622742,
1064
+ "voiceclap_attribute:Pleasure_Ecstasy": 0.0032137036323547363,
1065
+ "voiceclap_attribute:Pride": 0.35379719734191895,
1066
+ "voiceclap_attribute:Recording_Quality": 2.3655989170074463,
1067
+ "voiceclap_attribute:Relief": -0.0548553466796875,
1068
+ "voiceclap_attribute:Sadness": -0.005162715911865234,
1069
+ "voiceclap_attribute:Serious_vs._Humorous": 0.7778748869895935,
1070
+ "voiceclap_attribute:Sexual_Lust": -0.022597312927246094,
1071
+ "voiceclap_attribute:Shame": -0.061418771743774414,
1072
+ "voiceclap_attribute:Soft_vs._Harsh": 0.31193938851356506,
1073
+ "voiceclap_attribute:Sourness": -0.03480762243270874,
1074
+ "voiceclap_attribute:Submissive_vs._Dominant": 0.37056636810302734,
1075
+ "voiceclap_attribute:Teasing": 0.1517762839794159,
1076
+ "voiceclap_attribute:Thankfulness_Gratitude": -0.05582773685455322,
1077
+ "voiceclap_attribute:Triumph": 0.050173163414001465,
1078
+ "voiceclap_attribute:Valence": -0.12186771631240845,
1079
+ "voiceclap_attribute:Vulnerable_vs._Emotionally_Detached": 1.7291847467422485,
1080
+ "voiceclap_attribute:Warm_vs._Cold": 0.01624232903122902,
1081
+ "voiceclap_attribute:duration": 6.835643768310547,
1082
+ "voiceclap_attribute:score_background_quality": 3.5401902198791504,
1083
+ "voiceclap_attribute:score_content_enjoyment": 4.682459831237793,
1084
+ "voiceclap_attribute:score_overall_quality": 2.8195881843566895,
1085
+ "voiceclap_attribute:score_speech_quality": 1.9922903776168823,
1086
+ "voiceclap_attribute:talking_speed": 15.168658256530762
1087
+ },
1088
+ "asr": "phénomène hashtag book talk des jeunes qui partagent leur amour des livres et font décoller les ventes",
1089
+ "audio_sha256": "f20e89d2454ceec9389056dfdfa255fa66c449d4817aec5d5ee287eb4bddd52e",
1090
+ "speaker": "S1",
1091
+ "seconds": 5.2,
1092
+ "media_member": "fr-S1.mp3",
1093
+ "wav_member": "fr-S1.wav",
1094
+ "source_split": "train",
1095
+ "source_audio": "Original media crop, not a codec reconstruction"
1096
+ },
1097
+ "S2": {
1098
+ "episode": "2d26cd6d5595ee967e580f0838c8e6407f10dde0be2a589db4b0c8c65f6e27fb",
1099
+ "original_speaker": "S2",
1100
+ "start_frame": 6544,
1101
+ "end_frame": 6615,
1102
+ "language": "fr",
1103
+ "window": {
1104
+ "episode": "2d26cd6d5595ee967e580f0838c8e6407f10dde0be2a589db4b0c8c65f6e27fb",
1105
+ "lang": "fr",
1106
+ "window": "middle",
1107
+ "start": 522.939592,
1108
+ "duration": 30.0,
1109
+ "ce": 5.824046839028597
1110
+ },
1111
+ "text": "analysant le contenu exact de ces charterabs sur l'IA, on découvre une cartographie fascinante de ce qui est",
1112
+ "scores": {
1113
+ "emo_Affection": 0.08421026170253754,
1114
+ "emo_Amusement": 0.3438669443130493,
1115
+ "emo_Anger": 0.0002913177013397217,
1116
+ "emo_Astonishment_Surprise": 0.15427334606647491,
1117
+ "emo_Awe": 0.4297258257865906,
1118
+ "emo_Bitterness": -0.030091077089309692,
1119
+ "emo_Concentration": 2.348647117614746,
1120
+ "emo_Confusion": 0.003129243850708008,
1121
+ "emo_Contemplation": 1.241865873336792,
1122
+ "emo_Contempt": 0.0008248090744018555,
1123
+ "emo_Contentment": 2.0231266021728516,
1124
+ "emo_Disappointment": -0.04446268081665039,
1125
+ "emo_Disgust": -0.02457195520401001,
1126
+ "emo_Distress": -0.026383817195892334,
1127
+ "emo_Doubt": 0.023024946451187134,
1128
+ "emo_Elation": 0.24710001051425934,
1129
+ "emo_Embarrassment": -0.04414752125740051,
1130
+ "emo_Emotional_Numbness": 0.10503020882606506,
1131
+ "emo_Fatigue_Exhaustion": -0.04047468304634094,
1132
+ "emo_Fear": -0.010406255722045898,
1133
+ "emo_Helplessness": -0.10283881425857544,
1134
+ "emo_Hope_Enthusiasm_Optimism": 1.2207045555114746,
1135
+ "emo_Impatience_and_Irritability": 0.011811137199401855,
1136
+ "emo_Infatuation": -0.05737994611263275,
1137
+ "emo_Interest": 2.963135242462158,
1138
+ "emo_Intoxication_Altered_States_of_Consciousness": -0.045893728733062744,
1139
+ "emo_Jealousy_and_Envy": 0.00308343768119812,
1140
+ "emo_Longing": 0.03273427486419678,
1141
+ "emo_Malevolence_Malice": -0.01454627513885498,
1142
+ "emo_Pain": -0.06207588315010071,
1143
+ "emo_Pleasure_Ecstasy": 0.06568154692649841,
1144
+ "emo_Pride": 0.8052342534065247,
1145
+ "emo_Relief": 0.06462568044662476,
1146
+ "emo_Sadness": -0.09350407123565674,
1147
+ "emo_Sexual_Lust": -0.030965656042099,
1148
+ "emo_Shame": -0.044712409377098083,
1149
+ "emo_Sourness": -0.014590814709663391,
1150
+ "emo_Teasing": 0.030395478010177612,
1151
+ "emo_Thankfulness_Gratitude": 0.04347461462020874,
1152
+ "emo_Triumph": 0.0997786670923233,
1153
+ "vn_AGEV_reg": 3.0162017345428467,
1154
+ "vn_AROU_reg": 2.6875033378601074,
1155
+ "vn_ARSH_reg": 3.323625326156616,
1156
+ "vn_ATCK_reg": 3.0136866569519043,
1157
+ "vn_BKGN_reg": 3.875526189804077,
1158
+ "vn_BRGT_reg": 3.2365622520446777,
1159
+ "vn_CHNK_reg": 2.899571657180786,
1160
+ "vn_CLRT_reg": 4.4466753005981445,
1161
+ "vn_COGL_reg": 0.7201927900314331,
1162
+ "vn_DARC_reg": 3.1555871963500977,
1163
+ "vn_DFLU_reg": 0.2681460380554199,
1164
+ "vn_EMPH_reg": 3.2701969146728516,
1165
+ "vn_ESTH_reg": 4.235228538513184,
1166
+ "vn_EXPL_reg": 0.02923659235239029,
1167
+ "vn_FOCS_reg": 4.1488165855407715,
1168
+ "vn_FULL_reg": 4.111839294433594,
1169
+ "vn_GEND_reg": 5.573329925537109,
1170
+ "vn_HARM_reg": 3.771836280822754,
1171
+ "vn_METL_reg": 1.526890754699707,
1172
+ "vn_RANG_reg": 2.776564359664917,
1173
+ "vn_RCQL_reg": 4.284720420837402,
1174
+ "vn_REGS_reg": 0.804293155670166,
1175
+ "vn_RESP_reg": 1.5179938077926636,
1176
+ "vn_ROUG_reg": 1.347718358039856,
1177
+ "vn_R_CHST_reg": 3.9051365852355957,
1178
+ "vn_R_HEAD_reg": 1.783116340637207,
1179
+ "vn_R_MASK_reg": 3.0101826190948486,
1180
+ "vn_R_MIXD_reg": 4.226978778839111,
1181
+ "vn_R_NASL_reg": 1.6658039093017578,
1182
+ "vn_R_ORAL_reg": 3.6143059730529785,
1183
+ "vn_R_THRT_reg": 2.6813807487487793,
1184
+ "vn_SMTH_reg": 4.094444751739502,
1185
+ "vn_STNC_reg": 3.5792131423950195,
1186
+ "vn_STRU_reg": 4.478841304779053,
1187
+ "vn_S_ASMR_reg": 0.48832130432128906,
1188
+ "vn_S_AUTH_reg": 3.5164966583251953,
1189
+ "vn_S_CART_reg": -0.11760354042053223,
1190
+ "vn_S_CASU_reg": 2.035984754562378,
1191
+ "vn_S_CONV_reg": 3.2013328075408936,
1192
+ "vn_S_DRAM_reg": 1.631110429763794,
1193
+ "vn_S_FORM_reg": 3.411858558654785,
1194
+ "vn_S_MONO_reg": 2.9655065536499023,
1195
+ "vn_S_NARR_reg": 4.132340908050537,
1196
+ "vn_S_NEWS_reg": 2.4504151344299316,
1197
+ "vn_S_PLAY_reg": 1.3900614976882935,
1198
+ "vn_S_RANT_reg": 0.0585860013961792,
1199
+ "vn_S_STRY_reg": 2.4500203132629395,
1200
+ "vn_S_TECH_reg": 2.7171597480773926,
1201
+ "vn_S_WHIS_reg": 0.11830949783325195,
1202
+ "vn_TEMP_reg": 3.006077766418457,
1203
+ "vn_TENS_reg": 1.7976127862930298,
1204
+ "vn_VALN_reg": 3.96921443939209,
1205
+ "vn_VALS_reg": 3.613316535949707,
1206
+ "vn_VFLX_reg": 2.82924485206604,
1207
+ "vn_VOLT_reg": 1.1646074056625366,
1208
+ "vn_VULN_reg": 1.269752025604248,
1209
+ "vn_WARM_reg": 3.799971103668213,
1210
+ "genuineness_0_6": 4.111956596374512,
1211
+ "blend_0_10": 6.766120910644531,
1212
+ "R_quality": 0.38632893562316895,
1213
+ "eiv_extra:Age": 3.274846315383911,
1214
+ "eiv_extra:Arousal": 1.180016040802002,
1215
+ "eiv_extra:Authenticity": 2.870335102081299,
1216
+ "eiv_extra:Background_Noise": 0.1460018754005432,
1217
+ "eiv_extra:Confident_vs._Hesitant": 0.7645555734634399,
1218
+ "eiv_extra:Gender": -1.0517033338546753,
1219
+ "eiv_extra:High-Pitched_vs._Low-Pitched": 1.845224142074585,
1220
+ "eiv_extra:Monotone_vs._Expressive": 1.3946168422698975,
1221
+ "eiv_extra:Recording_Quality": 2.868377208709717,
1222
+ "eiv_extra:Serious_vs._Humorous": 1.0205551385879517,
1223
+ "eiv_extra:Soft_vs._Harsh": 0.2398005723953247,
1224
+ "eiv_extra:Submissive_vs._Dominant": 0.1262311339378357,
1225
+ "eiv_extra:Valence": 0.33501434326171875,
1226
+ "eiv_extra:Vulnerable_vs._Emotionally_Detached": 2.589749336242676,
1227
+ "eiv_extra:Warm_vs._Cold": 0.21645890176296234,
1228
+ "eiv_extra:score_background_quality": 3.531688928604126,
1229
+ "eiv_extra:score_content_enjoyment": 4.7951836585998535,
1230
+ "eiv_extra:score_overall_quality": 2.7941536903381348,
1231
+ "eiv_extra:score_speech_quality": 1.9283218383789062,
1232
+ "audiobox:CE": 6.149696350097656,
1233
+ "audiobox:CU": 6.619797706604004,
1234
+ "audiobox:PC": 1.6245951652526855,
1235
+ "audiobox:PQ": 7.822948455810547,
1236
+ "dnsmos:SIG_raw": 4.052916049957275,
1237
+ "dnsmos:BAK_raw": 4.315639019012451,
1238
+ "dnsmos:OVRL_raw": 3.814601421356201,
1239
+ "dnsmos:SIG": 3.5654850006103516,
1240
+ "dnsmos:BAK": 4.097064971923828,
1241
+ "dnsmos:OVRL": 3.3114304542541504,
1242
+ "dnsmos:P808_MOS": 3.9187815189361572,
1243
+ "burst_count_log1p": 0.05060839653015137,
1244
+ "voiceclap_attribute:Affection": 0.17960137128829956,
1245
+ "voiceclap_attribute:Age": 3.3828558921813965,
1246
+ "voiceclap_attribute:Amusement": 0.37364333868026733,
1247
+ "voiceclap_attribute:Anger": -0.16420531272888184,
1248
+ "voiceclap_attribute:Arousal": 1.3707900047302246,
1249
+ "voiceclap_attribute:Astonishment_Surprise": 0.2581675052642822,
1250
+ "voiceclap_attribute:Authenticity": 2.777158260345459,
1251
+ "voiceclap_attribute:Awe": 0.31922537088394165,
1252
+ "voiceclap_attribute:Background_Noise": 0.25293686985969543,
1253
+ "voiceclap_attribute:Bitterness": -0.18878215551376343,
1254
+ "voiceclap_attribute:Concentration": 2.1219322681427,
1255
+ "voiceclap_attribute:Confident_vs._Hesitant": 0.9028398394584656,
1256
+ "voiceclap_attribute:Confusion": -0.017706096172332764,
1257
+ "voiceclap_attribute:Contemplation": 1.3703093528747559,
1258
+ "voiceclap_attribute:Contempt": -0.03927558660507202,
1259
+ "voiceclap_attribute:Contentment": 1.778923749923706,
1260
+ "voiceclap_attribute:Disappointment": -0.13827431201934814,
1261
+ "voiceclap_attribute:Disgust": -0.037350356578826904,
1262
+ "voiceclap_attribute:Distress": -0.161845862865448,
1263
+ "voiceclap_attribute:Doubt": 0.1053418517112732,
1264
+ "voiceclap_attribute:Elation": 0.2927970588207245,
1265
+ "voiceclap_attribute:Embarrassment": -0.07274824380874634,
1266
+ "voiceclap_attribute:Emotional_Numbness": 0.03779333829879761,
1267
+ "voiceclap_attribute:Fatigue_Exhaustion": -0.28909990191459656,
1268
+ "voiceclap_attribute:Fear": 0.0028012990951538086,
1269
+ "voiceclap_attribute:Gender": -0.7434388399124146,
1270
+ "voiceclap_attribute:Helplessness": -0.1312047839164734,
1271
+ "voiceclap_attribute:High-Pitched_vs._Low-Pitched": 1.7819997072219849,
1272
+ "voiceclap_attribute:Hope_Enthusiasm_Optimism": 1.1261993646621704,
1273
+ "voiceclap_attribute:Impatience_and_Irritability": -0.0824289321899414,
1274
+ "voiceclap_attribute:Infatuation": -0.04294067621231079,
1275
+ "voiceclap_attribute:Interest": 2.3879761695861816,
1276
+ "voiceclap_attribute:Intoxication_Altered_States_of_Consciousness": -0.12814408540725708,
1277
+ "voiceclap_attribute:Jealousy_&_Envy": -0.015546441078186035,
1278
+ "voiceclap_attribute:Longing": -0.05689966678619385,
1279
+ "voiceclap_attribute:Malevolence_Malice": -0.13224518299102783,
1280
+ "voiceclap_attribute:Monotone_vs._Expressive": 1.4436368942260742,
1281
+ "voiceclap_attribute:Pain": -0.018021315336227417,
1282
+ "voiceclap_attribute:Pleasure_Ecstasy": 0.17499282956123352,
1283
+ "voiceclap_attribute:Pride": 0.779127836227417,
1284
+ "voiceclap_attribute:Recording_Quality": 2.443143129348755,
1285
+ "voiceclap_attribute:Relief": 0.11412400007247925,
1286
+ "voiceclap_attribute:Sadness": -0.1958484649658203,
1287
+ "voiceclap_attribute:Serious_vs._Humorous": 0.9115780591964722,
1288
+ "voiceclap_attribute:Sexual_Lust": -0.035655200481414795,
1289
+ "voiceclap_attribute:Shame": -0.07903039455413818,
1290
+ "voiceclap_attribute:Soft_vs._Harsh": 0.129045307636261,
1291
+ "voiceclap_attribute:Sourness": -0.09835177659988403,
1292
+ "voiceclap_attribute:Submissive_vs._Dominant": 0.559884786605835,
1293
+ "voiceclap_attribute:Teasing": 0.11028516292572021,
1294
+ "voiceclap_attribute:Thankfulness_Gratitude": 0.010341405868530273,
1295
+ "voiceclap_attribute:Triumph": 0.19312119483947754,
1296
+ "voiceclap_attribute:Valence": -0.05127760022878647,
1297
+ "voiceclap_attribute:Vulnerable_vs._Emotionally_Detached": 2.1629257202148438,
1298
+ "voiceclap_attribute:Warm_vs._Cold": 0.06791740655899048,
1299
+ "voiceclap_attribute:duration": 7.726313591003418,
1300
+ "voiceclap_attribute:score_background_quality": 3.5207157135009766,
1301
+ "voiceclap_attribute:score_content_enjoyment": 4.806971549987793,
1302
+ "voiceclap_attribute:score_overall_quality": 2.8228092193603516,
1303
+ "voiceclap_attribute:score_speech_quality": 2.007915496826172,
1304
+ "voiceclap_attribute:talking_speed": 16.986162185668945
1305
+ },
1306
+ "asr": "En analysant le contenu exact de ces chartes arabes sur l'IA, on découvre une cartographie fascinante de ce qui est dit.",
1307
+ "audio_sha256": "95179851c938d48465784c2ae6f38fee680d53399256345ead837fa0f2378ff8",
1308
+ "speaker": "S2",
1309
+ "seconds": 5.68,
1310
+ "media_member": "fr-S2.mp3",
1311
+ "wav_member": "fr-S2.wav",
1312
+ "source_split": "train",
1313
+ "source_audio": "Original media crop, not a codec reconstruction"
1314
+ }
1315
+ },
1316
+ "es": {
1317
+ "S1": {
1318
+ "episode": "cfe4a35611ec05423d3beeea57019184380e593676edee760567e1ce49c6e8f4",
1319
+ "original_speaker": "S2",
1320
+ "start_frame": 8604,
1321
+ "end_frame": 8678,
1322
+ "language": "es",
1323
+ "window": {
1324
+ "episode": "cfe4a35611ec05423d3beeea57019184380e593676edee760567e1ce49c6e8f4",
1325
+ "lang": "es",
1326
+ "window": "middle",
1327
+ "start": 686.76,
1328
+ "duration": 30.0,
1329
+ "ce": 6.316492438316345
1330
+ },
1331
+ "text": "be absolutely certain, maybe it needs to convert the solar system into computronium perfect computing matter",
1332
+ "scores": {
1333
+ "emo_Affection": 0.09695407748222351,
1334
+ "emo_Amusement": 0.22863148152828217,
1335
+ "emo_Anger": 0.02521902322769165,
1336
+ "emo_Astonishment_Surprise": 0.04588288068771362,
1337
+ "emo_Awe": 0.009954340755939484,
1338
+ "emo_Bitterness": 0.003289639949798584,
1339
+ "emo_Concentration": 2.6226155757904053,
1340
+ "emo_Confusion": 0.032299697399139404,
1341
+ "emo_Contemplation": 1.4167089462280273,
1342
+ "emo_Contempt": -0.023846730589866638,
1343
+ "emo_Contentment": 1.991638422012329,
1344
+ "emo_Disappointment": 0.056903064250946045,
1345
+ "emo_Disgust": 0.005112349987030029,
1346
+ "emo_Distress": 0.04386052489280701,
1347
+ "emo_Doubt": 0.04379346966743469,
1348
+ "emo_Elation": 0.07871103286743164,
1349
+ "emo_Embarrassment": -0.0014667809009552002,
1350
+ "emo_Emotional_Numbness": 0.09751874208450317,
1351
+ "emo_Fatigue_Exhaustion": -0.059486985206604004,
1352
+ "emo_Fear": 0.025437980890274048,
1353
+ "emo_Helplessness": -0.022628992795944214,
1354
+ "emo_Hope_Enthusiasm_Optimism": 1.5999407768249512,
1355
+ "emo_Impatience_and_Irritability": 0.027845531702041626,
1356
+ "emo_Infatuation": -0.04152345657348633,
1357
+ "emo_Interest": 2.713186502456665,
1358
+ "emo_Intoxication_Altered_States_of_Consciousness": -0.020907491445541382,
1359
+ "emo_Jealousy_and_Envy": 0.007436573505401611,
1360
+ "emo_Longing": 0.022799432277679443,
1361
+ "emo_Malevolence_Malice": -0.035002708435058594,
1362
+ "emo_Pain": -0.017140626907348633,
1363
+ "emo_Pleasure_Ecstasy": -0.03209871053695679,
1364
+ "emo_Pride": 0.4985673427581787,
1365
+ "emo_Relief": 0.004649758338928223,
1366
+ "emo_Sadness": -0.00990837812423706,
1367
+ "emo_Sexual_Lust": -0.021244287490844727,
1368
+ "emo_Shame": -0.003773242235183716,
1369
+ "emo_Sourness": -0.014590814709663391,
1370
+ "emo_Teasing": 0.03670033812522888,
1371
+ "emo_Thankfulness_Gratitude": 0.05562615394592285,
1372
+ "emo_Triumph": 0.02604202926158905,
1373
+ "vn_AGEV_reg": 3.217996120452881,
1374
+ "vn_AROU_reg": 2.6115944385528564,
1375
+ "vn_ARSH_reg": 3.2106661796569824,
1376
+ "vn_ATCK_reg": 2.972538709640503,
1377
+ "vn_BKGN_reg": 4.182933807373047,
1378
+ "vn_BRGT_reg": 3.863515615463257,
1379
+ "vn_CHNK_reg": 3.2160675525665283,
1380
+ "vn_CLRT_reg": 4.116360664367676,
1381
+ "vn_COGL_reg": 0.6460691690444946,
1382
+ "vn_DARC_reg": 3.027885675430298,
1383
+ "vn_DFLU_reg": 0.25891828536987305,
1384
+ "vn_EMPH_reg": 3.245647430419922,
1385
+ "vn_ESTH_reg": 4.308232307434082,
1386
+ "vn_EXPL_reg": -0.016171544790267944,
1387
+ "vn_FOCS_reg": 3.680595874786377,
1388
+ "vn_FULL_reg": 3.3248186111450195,
1389
+ "vn_GEND_reg": 1.529880166053772,
1390
+ "vn_HARM_reg": 4.27635383605957,
1391
+ "vn_METL_reg": 1.7242189645767212,
1392
+ "vn_RANG_reg": 2.764375686645508,
1393
+ "vn_RCQL_reg": 4.48164176940918,
1394
+ "vn_REGS_reg": 3.562018871307373,
1395
+ "vn_RESP_reg": 1.3174554109573364,
1396
+ "vn_ROUG_reg": 1.085960865020752,
1397
+ "vn_R_CHST_reg": 2.4889726638793945,
1398
+ "vn_R_HEAD_reg": 2.9283883571624756,
1399
+ "vn_R_MASK_reg": 3.3219985961914062,
1400
+ "vn_R_MIXD_reg": 4.070067405700684,
1401
+ "vn_R_NASL_reg": 1.78544020652771,
1402
+ "vn_R_ORAL_reg": 4.00960636138916,
1403
+ "vn_R_THRT_reg": 2.159209966659546,
1404
+ "vn_SMTH_reg": 4.146540641784668,
1405
+ "vn_STNC_reg": 3.8994593620300293,
1406
+ "vn_STRU_reg": 4.602100849151611,
1407
+ "vn_S_ASMR_reg": 0.4183082580566406,
1408
+ "vn_S_AUTH_reg": 3.2405447959899902,
1409
+ "vn_S_CART_reg": 0.053545594215393066,
1410
+ "vn_S_CASU_reg": 2.035984754562378,
1411
+ "vn_S_CONV_reg": 2.775564193725586,
1412
+ "vn_S_DRAM_reg": 1.3017776012420654,
1413
+ "vn_S_FORM_reg": 3.0337324142456055,
1414
+ "vn_S_MONO_reg": 3.033843517303467,
1415
+ "vn_S_NARR_reg": 3.8295958042144775,
1416
+ "vn_S_NEWS_reg": 2.5881664752960205,
1417
+ "vn_S_PLAY_reg": 1.059983730316162,
1418
+ "vn_S_RANT_reg": -0.18065261840820312,
1419
+ "vn_S_STRY_reg": 1.832810640335083,
1420
+ "vn_S_TECH_reg": 3.1167943477630615,
1421
+ "vn_S_WHIS_reg": -0.13148140907287598,
1422
+ "vn_TEMP_reg": 2.968557119369507,
1423
+ "vn_TENS_reg": 1.9650440216064453,
1424
+ "vn_VALN_reg": 3.3160037994384766,
1425
+ "vn_VALS_reg": 3.2529375553131104,
1426
+ "vn_VFLX_reg": 2.8481006622314453,
1427
+ "vn_VOLT_reg": 0.9882020950317383,
1428
+ "vn_VULN_reg": 1.385828971862793,
1429
+ "vn_WARM_reg": 3.305128574371338,
1430
+ "genuineness_0_6": 4.074300289154053,
1431
+ "blend_0_10": 6.4104485511779785,
1432
+ "R_quality": 0.344940185546875,
1433
+ "eiv_extra:Age": 3.2195329666137695,
1434
+ "eiv_extra:Arousal": 1.4652773141860962,
1435
+ "eiv_extra:Authenticity": 2.959202289581299,
1436
+ "eiv_extra:Background_Noise": -0.179806649684906,
1437
+ "eiv_extra:Confident_vs._Hesitant": 0.9332407712936401,
1438
+ "eiv_extra:Gender": 0.8807191848754883,
1439
+ "eiv_extra:High-Pitched_vs._Low-Pitched": 1.623910665512085,
1440
+ "eiv_extra:Monotone_vs._Expressive": 1.7812769412994385,
1441
+ "eiv_extra:Recording_Quality": 2.9775044918060303,
1442
+ "eiv_extra:Serious_vs._Humorous": 0.9033668637275696,
1443
+ "eiv_extra:Soft_vs._Harsh": 0.46313655376434326,
1444
+ "eiv_extra:Submissive_vs._Dominant": 0.3300918638706207,
1445
+ "eiv_extra:Valence": 0.215755432844162,
1446
+ "eiv_extra:Vulnerable_vs._Emotionally_Detached": 2.259490489959717,
1447
+ "eiv_extra:Warm_vs._Cold": 0.2791379392147064,
1448
+ "eiv_extra:score_background_quality": 3.645481586456299,
1449
+ "eiv_extra:score_content_enjoyment": 4.828408241271973,
1450
+ "eiv_extra:score_overall_quality": 2.8694915771484375,
1451
+ "eiv_extra:score_speech_quality": 1.9673843383789062,
1452
+ "audiobox:CE": 6.41180419921875,
1453
+ "audiobox:CU": 7.486018180847168,
1454
+ "audiobox:PC": 1.460522174835205,
1455
+ "audiobox:PQ": 8.00154972076416,
1456
+ "dnsmos:SIG_raw": 4.141777038574219,
1457
+ "dnsmos:BAK_raw": 4.254101753234863,
1458
+ "dnsmos:OVRL_raw": 3.8781161308288574,
1459
+ "dnsmos:SIG": 3.612466812133789,
1460
+ "dnsmos:BAK": 4.024520397186279,
1461
+ "dnsmos:OVRL": 3.335127830505371,
1462
+ "dnsmos:P808_MOS": 4.101062297821045,
1463
+ "burst_count_log1p": 0.055674970149993896,
1464
+ "voiceclap_attribute:Affection": 0.06263518333435059,
1465
+ "voiceclap_attribute:Age": 3.293646812438965,
1466
+ "voiceclap_attribute:Amusement": 0.2895764112472534,
1467
+ "voiceclap_attribute:Anger": -0.045290231704711914,
1468
+ "voiceclap_attribute:Arousal": 1.2297325134277344,
1469
+ "voiceclap_attribute:Astonishment_Surprise": 0.2750028073787689,
1470
+ "voiceclap_attribute:Authenticity": 3.106503963470459,
1471
+ "voiceclap_attribute:Awe": 0.1925601363182068,
1472
+ "voiceclap_attribute:Background_Noise": -0.027669787406921387,
1473
+ "voiceclap_attribute:Bitterness": 0.018249094486236572,
1474
+ "voiceclap_attribute:Concentration": 2.2338361740112305,
1475
+ "voiceclap_attribute:Confident_vs._Hesitant": 0.884527862071991,
1476
+ "voiceclap_attribute:Confusion": -0.0019930005073547363,
1477
+ "voiceclap_attribute:Contemplation": 1.3893098831176758,
1478
+ "voiceclap_attribute:Contempt": 0.04564779996871948,
1479
+ "voiceclap_attribute:Contentment": 1.5583001375198364,
1480
+ "voiceclap_attribute:Disappointment": -0.03386491537094116,
1481
+ "voiceclap_attribute:Disgust": 0.048587143421173096,
1482
+ "voiceclap_attribute:Distress": -0.08529025316238403,
1483
+ "voiceclap_attribute:Doubt": 0.1033887267112732,
1484
+ "voiceclap_attribute:Elation": 0.2367246150970459,
1485
+ "voiceclap_attribute:Embarrassment": 0.05756309628486633,
1486
+ "voiceclap_attribute:Emotional_Numbness": 0.0669066309928894,
1487
+ "voiceclap_attribute:Fatigue_Exhaustion": -0.08572903275489807,
1488
+ "voiceclap_attribute:Fear": 0.006707549095153809,
1489
+ "voiceclap_attribute:Gender": 0.9793065786361694,
1490
+ "voiceclap_attribute:Helplessness": -0.05156219005584717,
1491
+ "voiceclap_attribute:High-Pitched_vs._Low-Pitched": 1.43144953250885,
1492
+ "voiceclap_attribute:Hope_Enthusiasm_Optimism": 1.1618940830230713,
1493
+ "voiceclap_attribute:Impatience_and_Irritability": -0.006205916404724121,
1494
+ "voiceclap_attribute:Infatuation": -0.1780616044998169,
1495
+ "voiceclap_attribute:Interest": 2.2884392738342285,
1496
+ "voiceclap_attribute:Intoxication_Altered_States_of_Consciousness": 0.08571690320968628,
1497
+ "voiceclap_attribute:Jealousy_&_Envy": -0.054608941078186035,
1498
+ "voiceclap_attribute:Longing": -0.12330591678619385,
1499
+ "voiceclap_attribute:Malevolence_Malice": -0.013307750225067139,
1500
+ "voiceclap_attribute:Monotone_vs._Expressive": 1.4972254037857056,
1501
+ "voiceclap_attribute:Pain": -0.05317756533622742,
1502
+ "voiceclap_attribute:Pleasure_Ecstasy": 0.05968901515007019,
1503
+ "voiceclap_attribute:Pride": 0.6455303430557251,
1504
+ "voiceclap_attribute:Recording_Quality": 2.914816379547119,
1505
+ "voiceclap_attribute:Relief": 0.11412400007247925,
1506
+ "voiceclap_attribute:Sadness": -0.05894589424133301,
1507
+ "voiceclap_attribute:Serious_vs._Humorous": 0.585119366645813,
1508
+ "voiceclap_attribute:Sexual_Lust": -0.035655200481414795,
1509
+ "voiceclap_attribute:Shame": -0.05261296033859253,
1510
+ "voiceclap_attribute:Soft_vs._Harsh": 0.5117160081863403,
1511
+ "voiceclap_attribute:Sourness": 0.006042182445526123,
1512
+ "voiceclap_attribute:Submissive_vs._Dominant": 0.36074984073638916,
1513
+ "voiceclap_attribute:Teasing": -0.02604275941848755,
1514
+ "voiceclap_attribute:Thankfulness_Gratitude": -0.006200909614562988,
1515
+ "voiceclap_attribute:Triumph": 0.05297607183456421,
1516
+ "voiceclap_attribute:Valence": 0.244705468416214,
1517
+ "voiceclap_attribute:Vulnerable_vs._Emotionally_Detached": 1.7818416357040405,
1518
+ "voiceclap_attribute:Warm_vs._Cold": 0.42359793186187744,
1519
+ "voiceclap_attribute:duration": 6.835643768310547,
1520
+ "voiceclap_attribute:score_background_quality": 3.6317214965820312,
1521
+ "voiceclap_attribute:score_content_enjoyment": 4.847010612487793,
1522
+ "voiceclap_attribute:score_overall_quality": 2.9790332317352295,
1523
+ "voiceclap_attribute:score_speech_quality": 2.006450653076172,
1524
+ "voiceclap_attribute:talking_speed": 17.04479217529297
1525
+ },
1526
+ "asr": "Absolutely certain maybe it needs to convert the solar system into computronium perfect computing matter.",
1527
+ "audio_sha256": "0f122cd76b54b921af91818f0e99e99455e78863d137b9e64fc7fb048fac60bf",
1528
+ "speaker": "S1",
1529
+ "seconds": 5.92,
1530
+ "media_member": "es-S1.mp3",
1531
+ "wav_member": "es-S1.wav",
1532
+ "source_split": "train",
1533
+ "source_audio": "Original media crop, not a codec reconstruction"
1534
+ },
1535
+ "S2": {
1536
+ "episode": "41aba91cc5ca6308be7ec4f3e27dcba37cfb310eaf14c938aa66359c048499a6",
1537
+ "original_speaker": "S2",
1538
+ "start_frame": 5486,
1539
+ "end_frame": 5559,
1540
+ "language": "es",
1541
+ "window": {
1542
+ "episode": "41aba91cc5ca6308be7ec4f3e27dcba37cfb310eaf14c938aa66359c048499a6",
1543
+ "lang": "es",
1544
+ "window": "middle",
1545
+ "start": 414.97551,
1546
+ "duration": 30.0,
1547
+ "ce": 6.284721754491329
1548
+ },
1549
+ "text": "lo largo de 150 mil kilómetros, la reducción total de emisiones es de hasta un 73%.",
1550
+ "scores": {
1551
+ "emo_Affection": -0.07296362519264221,
1552
+ "emo_Amusement": -0.04420545697212219,
1553
+ "emo_Anger": -0.00197485089302063,
1554
+ "emo_Astonishment_Surprise": 0.013527512550354004,
1555
+ "emo_Awe": -0.030219100415706635,
1556
+ "emo_Bitterness": 0.016800880432128906,
1557
+ "emo_Concentration": 2.4742159843444824,
1558
+ "emo_Confusion": -0.034375667572021484,
1559
+ "emo_Contemplation": 0.69548100233078,
1560
+ "emo_Contempt": 0.004349306225776672,
1561
+ "emo_Contentment": 0.8344520330429077,
1562
+ "emo_Disappointment": 0.059642672538757324,
1563
+ "emo_Disgust": -0.00733591616153717,
1564
+ "emo_Distress": 0.031088829040527344,
1565
+ "emo_Doubt": 0.0192488431930542,
1566
+ "emo_Elation": 0.047839730978012085,
1567
+ "emo_Embarrassment": -0.04414752125740051,
1568
+ "emo_Emotional_Numbness": 0.5744961500167847,
1569
+ "emo_Fatigue_Exhaustion": -0.05103707313537598,
1570
+ "emo_Fear": -0.0247439444065094,
1571
+ "emo_Helplessness": -0.03369241952896118,
1572
+ "emo_Hope_Enthusiasm_Optimism": 0.3185374140739441,
1573
+ "emo_Impatience_and_Irritability": 0.011811137199401855,
1574
+ "emo_Infatuation": -0.03623795509338379,
1575
+ "emo_Interest": 1.813370704650879,
1576
+ "emo_Intoxication_Altered_States_of_Consciousness": -0.03937558829784393,
1577
+ "emo_Jealousy_and_Envy": -0.004752174019813538,
1578
+ "emo_Longing": -0.08151662349700928,
1579
+ "emo_Malevolence_Malice": -0.04727655649185181,
1580
+ "emo_Pain": -0.0373615026473999,
1581
+ "emo_Pleasure_Ecstasy": -0.0654870867729187,
1582
+ "emo_Pride": 0.31781667470932007,
1583
+ "emo_Relief": -0.12075445055961609,
1584
+ "emo_Sadness": 0.04084610939025879,
1585
+ "emo_Sexual_Lust": -0.011522918939590454,
1586
+ "emo_Shame": -0.030383706092834473,
1587
+ "emo_Sourness": 0.007365241646766663,
1588
+ "emo_Teasing": -0.04316112399101257,
1589
+ "emo_Thankfulness_Gratitude": -0.0915425717830658,
1590
+ "emo_Triumph": -0.0059276968240737915,
1591
+ "vn_AGEV_reg": 3.6166632175445557,
1592
+ "vn_AROU_reg": 2.3294119834899902,
1593
+ "vn_ARSH_reg": 3.111398935317993,
1594
+ "vn_ATCK_reg": 2.972538709640503,
1595
+ "vn_BKGN_reg": 3.999671459197998,
1596
+ "vn_BRGT_reg": 2.9515833854675293,
1597
+ "vn_CHNK_reg": 3.1138148307800293,
1598
+ "vn_CLRT_reg": 4.5367608070373535,
1599
+ "vn_COGL_reg": 0.34133875370025635,
1600
+ "vn_DARC_reg": 2.8256916999816895,
1601
+ "vn_DFLU_reg": -0.20247364044189453,
1602
+ "vn_EMPH_reg": 3.0124263763427734,
1603
+ "vn_ESTH_reg": 4.259562969207764,
1604
+ "vn_EXPL_reg": -0.028962567448616028,
1605
+ "vn_FOCS_reg": 4.070779800415039,
1606
+ "vn_FULL_reg": 4.028995037078857,
1607
+ "vn_GEND_reg": 4.920157432556152,
1608
+ "vn_HARM_reg": 3.9141359329223633,
1609
+ "vn_METL_reg": 1.5418540239334106,
1610
+ "vn_RANG_reg": 2.0278356075286865,
1611
+ "vn_RCQL_reg": 4.340983867645264,
1612
+ "vn_REGS_reg": 0.9269677996635437,
1613
+ "vn_RESP_reg": 0.9665132761001587,
1614
+ "vn_ROUG_reg": 1.5543689727783203,
1615
+ "vn_R_CHST_reg": 3.7326765060424805,
1616
+ "vn_R_HEAD_reg": 1.5257518291473389,
1617
+ "vn_R_MASK_reg": 2.8902533054351807,
1618
+ "vn_R_MIXD_reg": 3.9654593467712402,
1619
+ "vn_R_NASL_reg": 1.7606878280639648,
1620
+ "vn_R_ORAL_reg": 3.4108426570892334,
1621
+ "vn_R_THRT_reg": 2.9298839569091797,
1622
+ "vn_SMTH_reg": 4.407018184661865,
1623
+ "vn_STNC_reg": 3.7393362522125244,
1624
+ "vn_STRU_reg": 4.8640265464782715,
1625
+ "vn_S_ASMR_reg": 0.014387369155883789,
1626
+ "vn_S_AUTH_reg": 4.1170973777771,
1627
+ "vn_S_CART_reg": -0.4385082721710205,
1628
+ "vn_S_CASU_reg": 0.9195735454559326,
1629
+ "vn_S_CONV_reg": 1.895982265472412,
1630
+ "vn_S_DRAM_reg": 1.702317476272583,
1631
+ "vn_S_FORM_reg": 4.514725685119629,
1632
+ "vn_S_MONO_reg": 3.77933931350708,
1633
+ "vn_S_NARR_reg": 4.502363204956055,
1634
+ "vn_S_NEWS_reg": 3.4835493564605713,
1635
+ "vn_S_PLAY_reg": -0.1282966136932373,
1636
+ "vn_S_RANT_reg": 0.08849072456359863,
1637
+ "vn_S_STRY_reg": 2.1363117694854736,
1638
+ "vn_S_TECH_reg": 3.6496405601501465,
1639
+ "vn_S_WHIS_reg": -0.30633509159088135,
1640
+ "vn_TEMP_reg": 3.2218213081359863,
1641
+ "vn_TENS_reg": 1.9000221490859985,
1642
+ "vn_VALN_reg": 2.6230711936950684,
1643
+ "vn_VALS_reg": 2.948331356048584,
1644
+ "vn_VFLX_reg": 2.8669564723968506,
1645
+ "vn_VOLT_reg": 0.9067842960357666,
1646
+ "vn_VULN_reg": 0.9292596578598022,
1647
+ "vn_WARM_reg": 3.5525498390197754,
1648
+ "genuineness_0_6": 3.9927117824554443,
1649
+ "blend_0_10": 6.5511250495910645,
1650
+ "R_quality": 0.3087250590324402,
1651
+ "eiv_extra:Age": 3.3105695247650146,
1652
+ "eiv_extra:Arousal": 0.9049730896949768,
1653
+ "eiv_extra:Authenticity": 2.779514789581299,
1654
+ "eiv_extra:Background_Noise": -0.0024678707122802734,
1655
+ "eiv_extra:Confident_vs._Hesitant": 0.7455488443374634,
1656
+ "eiv_extra:Gender": -0.8569026589393616,
1657
+ "eiv_extra:High-Pitched_vs._Low-Pitched": 1.942270040512085,
1658
+ "eiv_extra:Monotone_vs._Expressive": 0.7241610288619995,
1659
+ "eiv_extra:Recording_Quality": 2.644925832748413,
1660
+ "eiv_extra:Serious_vs._Humorous": 0.5850942730903625,
1661
+ "eiv_extra:Soft_vs._Harsh": 0.09257349371910095,
1662
+ "eiv_extra:Submissive_vs._Dominant": 0.0757392942905426,
1663
+ "eiv_extra:Valence": 0.07790891081094742,
1664
+ "eiv_extra:Vulnerable_vs._Emotionally_Detached": 2.74296236038208,
1665
+ "eiv_extra:Warm_vs._Cold": 0.031936533749103546,
1666
+ "eiv_extra:score_background_quality": 3.7538554668426514,
1667
+ "eiv_extra:score_content_enjoyment": 4.738227367401123,
1668
+ "eiv_extra:score_overall_quality": 2.980515956878662,
1669
+ "eiv_extra:score_speech_quality": 2.0064468383789062,
1670
+ "audiobox:CE": 6.332377910614014,
1671
+ "audiobox:CU": 7.166062831878662,
1672
+ "audiobox:PC": 1.473143219947815,
1673
+ "audiobox:PQ": 8.235105514526367,
1674
+ "dnsmos:SIG_raw": 4.102573871612549,
1675
+ "dnsmos:BAK_raw": 4.359593868255615,
1676
+ "dnsmos:OVRL_raw": 3.884467601776123,
1677
+ "dnsmos:SIG": 3.5948486328125,
1678
+ "dnsmos:BAK": 4.1043195724487305,
1679
+ "dnsmos:OVRL": 3.344606876373291,
1680
+ "dnsmos:P808_MOS": 4.108819007873535,
1681
+ "burst_count_log1p": 0.04047524929046631,
1682
+ "voiceclap_attribute:Affection": -0.18862557411193848,
1683
+ "voiceclap_attribute:Age": 3.4040963649749756,
1684
+ "voiceclap_attribute:Amusement": -0.19016557931900024,
1685
+ "voiceclap_attribute:Anger": -0.16420531272888184,
1686
+ "voiceclap_attribute:Arousal": 0.9585616588592529,
1687
+ "voiceclap_attribute:Astonishment_Surprise": -0.10098510980606079,
1688
+ "voiceclap_attribute:Authenticity": 2.788632869720459,
1689
+ "voiceclap_attribute:Awe": -0.03645056486129761,
1690
+ "voiceclap_attribute:Background_Noise": 0.07136785984039307,
1691
+ "voiceclap_attribute:Bitterness": 0.018249094486236572,
1692
+ "voiceclap_attribute:Concentration": 2.511523723602295,
1693
+ "voiceclap_attribute:Confident_vs._Hesitant": 0.846072793006897,
1694
+ "voiceclap_attribute:Confusion": -0.07008308172225952,
1695
+ "voiceclap_attribute:Contemplation": 1.5571472644805908,
1696
+ "voiceclap_attribute:Contempt": -0.06581413745880127,
1697
+ "voiceclap_attribute:Contentment": 1.2753262519836426,
1698
+ "voiceclap_attribute:Disappointment": 0.15679579973220825,
1699
+ "voiceclap_attribute:Disgust": -0.049069106578826904,
1700
+ "voiceclap_attribute:Distress": 0.024075031280517578,
1701
+ "voiceclap_attribute:Doubt": 0.1326856017112732,
1702
+ "voiceclap_attribute:Elation": -0.16824287176132202,
1703
+ "voiceclap_attribute:Embarrassment": 0.018223822116851807,
1704
+ "voiceclap_attribute:Emotional_Numbness": 0.13345128297805786,
1705
+ "voiceclap_attribute:Fatigue_Exhaustion": -0.0531897246837616,
1706
+ "voiceclap_attribute:Fear": 0.08092629909515381,
1707
+ "voiceclap_attribute:Gender": -0.9553482532501221,
1708
+ "voiceclap_attribute:Helplessness": 0.08257275819778442,
1709
+ "voiceclap_attribute:High-Pitched_vs._Low-Pitched": 1.8002386093139648,
1710
+ "voiceclap_attribute:Hope_Enthusiasm_Optimism": 0.5178375244140625,
1711
+ "voiceclap_attribute:Impatience_and_Irritability": -0.14171338081359863,
1712
+ "voiceclap_attribute:Infatuation": -0.14687985181808472,
1713
+ "voiceclap_attribute:Interest": 2.068772315979004,
1714
+ "voiceclap_attribute:Intoxication_Altered_States_of_Consciousness": -0.0049021244049072266,
1715
+ "voiceclap_attribute:Jealousy_&_Envy": -0.031171441078186035,
1716
+ "voiceclap_attribute:Longing": -0.09596216678619385,
1717
+ "voiceclap_attribute:Malevolence_Malice": -0.09980767965316772,
1718
+ "voiceclap_attribute:Monotone_vs._Expressive": 1.0708472728729248,
1719
+ "voiceclap_attribute:Pain": -0.04731819033622742,
1720
+ "voiceclap_attribute:Pleasure_Ecstasy": -0.029730260372161865,
1721
+ "voiceclap_attribute:Pride": 0.6441671252250671,
1722
+ "voiceclap_attribute:Recording_Quality": 2.5456807613372803,
1723
+ "voiceclap_attribute:Relief": -0.1848393678665161,
1724
+ "voiceclap_attribute:Sadness": 0.09262484312057495,
1725
+ "voiceclap_attribute:Serious_vs._Humorous": 0.5472368001937866,
1726
+ "voiceclap_attribute:Sexual_Lust": -0.12053167819976807,
1727
+ "voiceclap_attribute:Shame": -0.04380720853805542,
1728
+ "voiceclap_attribute:Soft_vs._Harsh": 0.1730102300643921,
1729
+ "voiceclap_attribute:Sourness": 0.046891987323760986,
1730
+ "voiceclap_attribute:Submissive_vs._Dominant": 0.37337106466293335,
1731
+ "voiceclap_attribute:Teasing": -0.26313477754592896,
1732
+ "voiceclap_attribute:Thankfulness_Gratitude": -0.32050418853759766,
1733
+ "voiceclap_attribute:Triumph": 0.0025238394737243652,
1734
+ "voiceclap_attribute:Valence": -0.1255829781293869,
1735
+ "voiceclap_attribute:Vulnerable_vs._Emotionally_Detached": 2.356182098388672,
1736
+ "voiceclap_attribute:Warm_vs._Cold": 0.03749736398458481,
1737
+ "voiceclap_attribute:duration": 5.944973945617676,
1738
+ "voiceclap_attribute:score_background_quality": 3.6200366020202637,
1739
+ "voiceclap_attribute:score_content_enjoyment": 4.772791862487793,
1740
+ "voiceclap_attribute:score_overall_quality": 2.8904526233673096,
1741
+ "voiceclap_attribute:score_speech_quality": 2.051372528076172,
1742
+ "voiceclap_attribute:talking_speed": 18.39326286315918
1743
+ },
1744
+ "asr": "A lo largo de ciento cincuenta mil kilómetros, la reducción total de emisiones es de hasta un setenta y tres por ciento.",
1745
+ "audio_sha256": "f2485b9712ff457f59f374b95ce1e98c9bcb5b21acbc8c8c38a637d3781ef4e6",
1746
+ "speaker": "S2",
1747
+ "seconds": 5.84,
1748
+ "media_member": "es-S2.mp3",
1749
+ "wav_member": "es-S2.wav",
1750
+ "source_split": "train",
1751
+ "source_audio": "Original media crop, not a codec reconstruction"
1752
+ }
1753
+ }
1754
+ }
generation_config.json ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ {
2
+ "_from_model_config": true,
3
+ "output_attentions": false,
4
+ "output_hidden_states": false,
5
+ "pad_token_id": 151643,
6
+ "transformers_version": "5.14.1"
7
+ }
gpt2_decoder.py ADDED
@@ -0,0 +1,721 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # coding=utf-8
2
+ from __future__ import annotations
3
+
4
+ from dataclasses import dataclass
5
+ from typing import Optional
6
+
7
+ import torch
8
+ import torch.nn as nn
9
+ import torch.utils.checkpoint
10
+ from transformers.activations import ACT2FN
11
+ from transformers.modeling_outputs import BaseModelOutputWithPast
12
+ from transformers.models.gpt2.configuration_gpt2 import GPT2Config
13
+
14
+ try:
15
+ from flash_attn import flash_attn_func, flash_attn_varlen_func
16
+ from flash_attn.bert_padding import pad_input, unpad_input
17
+
18
+ _FLASH_ATTN_AVAILABLE = True
19
+ except Exception:
20
+ flash_attn_func = None
21
+ flash_attn_varlen_func = None
22
+ pad_input = None
23
+ unpad_input = None
24
+ _FLASH_ATTN_AVAILABLE = False
25
+
26
+
27
+ @dataclass
28
+ class PackedSequenceMetadata:
29
+ cu_seqlens: torch.Tensor
30
+ max_seqlen: int
31
+ indices: Optional[torch.Tensor] = None
32
+ batch_size: Optional[int] = None
33
+ seq_len: Optional[int] = None
34
+
35
+
36
+ def _is_static_kv_cache_layer(layer_past: object) -> bool:
37
+ return isinstance(layer_past, dict) and bool(layer_past.get("static_kv_cache", False))
38
+
39
+
40
+ class MossTTSNanoGPT2RotaryEmbedding(nn.Module):
41
+ def __init__(self, dim: int, base: float = 10000.0) -> None:
42
+ super().__init__()
43
+ if dim % 2 != 0:
44
+ raise ValueError(f"RoPE head_dim must be even, got {dim}")
45
+ self.dim = int(dim)
46
+ self.base = float(base)
47
+ self.register_buffer("inv_freq", self._compute_inv_freq(), persistent=False)
48
+
49
+ def _compute_inv_freq(self, device: Optional[torch.device] = None) -> torch.Tensor:
50
+ return 1.0 / (
51
+ self.base ** (torch.arange(0, self.dim, 2, device=device, dtype=torch.float32) / self.dim)
52
+ )
53
+
54
+ def forward(
55
+ self,
56
+ position_ids: torch.LongTensor,
57
+ *,
58
+ device: torch.device,
59
+ dtype: torch.dtype,
60
+ ) -> tuple[torch.Tensor, torch.Tensor]:
61
+ if position_ids.ndim == 1:
62
+ position_ids = position_ids.unsqueeze(0)
63
+ inv_freq = self._compute_inv_freq(device=device)
64
+ freqs = torch.einsum("bs,d->bsd", position_ids.to(device=device, dtype=inv_freq.dtype), inv_freq)
65
+ cos = freqs.cos().repeat_interleave(2, dim=-1).unsqueeze(2).to(dtype=dtype)
66
+ sin = freqs.sin().repeat_interleave(2, dim=-1).unsqueeze(2).to(dtype=dtype)
67
+ return cos, sin
68
+
69
+
70
+ def rotate_half(hidden_states: torch.Tensor) -> torch.Tensor:
71
+ even = hidden_states[..., ::2]
72
+ odd = hidden_states[..., 1::2]
73
+ return torch.stack((-odd, even), dim=-1).reshape_as(hidden_states)
74
+
75
+
76
+ def apply_rotary_pos_emb(
77
+ hidden_states: torch.Tensor,
78
+ cos: torch.Tensor,
79
+ sin: torch.Tensor,
80
+ ) -> torch.Tensor:
81
+ return (hidden_states * cos) + (rotate_half(hidden_states) * sin)
82
+
83
+
84
+ class MossTTSNanoGPT2MLP(nn.Module):
85
+ def __init__(self, config: GPT2Config) -> None:
86
+ super().__init__()
87
+ hidden_size = int(config.hidden_size)
88
+ inner_size = int(config.n_inner or 4 * hidden_size)
89
+ self.fc_in = nn.Linear(hidden_size, inner_size)
90
+ self.fc_out = nn.Linear(inner_size, hidden_size)
91
+ self.act = ACT2FN[config.activation_function]
92
+ self.dropout = nn.Dropout(config.resid_pdrop)
93
+
94
+ def forward(self, hidden_states: torch.Tensor) -> torch.Tensor:
95
+ hidden_states = self.fc_in(hidden_states)
96
+ hidden_states = self.act(hidden_states)
97
+ hidden_states = self.fc_out(hidden_states)
98
+ return self.dropout(hidden_states)
99
+
100
+
101
+ class MossTTSNanoGPT2Attention(nn.Module):
102
+ def __init__(self, config: GPT2Config, layer_idx: int, attn_implementation: str) -> None:
103
+ super().__init__()
104
+ hidden_size = int(config.hidden_size)
105
+ num_heads = int(config.num_attention_heads)
106
+ if hidden_size % num_heads != 0:
107
+ raise ValueError(f"hidden_size={hidden_size} must be divisible by num_attention_heads={num_heads}")
108
+
109
+ self.num_heads = num_heads
110
+ self.head_dim = hidden_size // num_heads
111
+ self.embed_dim = hidden_size
112
+ self.layer_idx = layer_idx
113
+ self.attn_implementation = attn_implementation
114
+ self.attn_dropout = float(config.attn_pdrop)
115
+ self.resid_dropout = nn.Dropout(config.resid_pdrop)
116
+ self.scale_attn_weights = bool(getattr(config, "scale_attn_weights", True))
117
+ self.scale_attn_by_inverse_layer_idx = bool(getattr(config, "scale_attn_by_inverse_layer_idx", False))
118
+ self.position_embedding_type = str(getattr(config, "position_embedding_type", "absolute")).lower()
119
+ if self.position_embedding_type not in {"absolute", "rope"}:
120
+ raise ValueError(f"Unsupported position_embedding_type={self.position_embedding_type!r}")
121
+
122
+ self.c_attn = nn.Linear(hidden_size, 3 * hidden_size)
123
+ self.c_proj = nn.Linear(hidden_size, hidden_size)
124
+ self.rotary_emb = None
125
+ if self.position_embedding_type == "rope":
126
+ self.rotary_emb = MossTTSNanoGPT2RotaryEmbedding(
127
+ self.head_dim,
128
+ base=float(getattr(config, "rope_base", 10000.0)),
129
+ )
130
+
131
+ def _split_heads(self, tensor: torch.Tensor) -> torch.Tensor:
132
+ if tensor.ndim == 3:
133
+ batch_size, seq_len, _ = tensor.shape
134
+ return tensor.view(batch_size, seq_len, self.num_heads, self.head_dim)
135
+ if tensor.ndim == 2:
136
+ total_tokens, _ = tensor.shape
137
+ return tensor.view(total_tokens, self.num_heads, self.head_dim)
138
+ raise ValueError(f"Unsupported tensor rank for attention split: {tensor.ndim}")
139
+
140
+ def _merge_heads(self, tensor: torch.Tensor) -> torch.Tensor:
141
+ if tensor.ndim == 4:
142
+ batch_size, seq_len, _, _ = tensor.shape
143
+ return tensor.reshape(batch_size, seq_len, self.embed_dim)
144
+ if tensor.ndim == 3:
145
+ total_tokens, _, _ = tensor.shape
146
+ return tensor.reshape(total_tokens, self.embed_dim)
147
+ raise ValueError(f"Unsupported tensor rank for attention merge: {tensor.ndim}")
148
+
149
+ def _causal_attention_mask(
150
+ self,
151
+ attention_mask: Optional[torch.Tensor],
152
+ query_length: int,
153
+ key_length: int,
154
+ device: torch.device,
155
+ ) -> torch.Tensor:
156
+ query_positions = torch.arange(query_length, device=device, dtype=torch.long)
157
+ query_positions = query_positions + max(key_length - query_length, 0)
158
+ key_positions = torch.arange(key_length, device=device, dtype=torch.long)
159
+ causal = key_positions.unsqueeze(0) <= query_positions.unsqueeze(1)
160
+ causal = causal.unsqueeze(0).unsqueeze(0)
161
+ if attention_mask is None:
162
+ return causal
163
+ key_mask = attention_mask[:, None, None, :].to(dtype=torch.bool)
164
+ return causal & key_mask
165
+
166
+ def _eager_attention(
167
+ self,
168
+ query: torch.Tensor,
169
+ key: torch.Tensor,
170
+ value: torch.Tensor,
171
+ attention_mask: Optional[torch.Tensor],
172
+ ) -> torch.Tensor:
173
+ query = query.transpose(1, 2)
174
+ key = key.transpose(1, 2)
175
+ value = value.transpose(1, 2)
176
+
177
+ scale = 1.0
178
+ if self.scale_attn_weights:
179
+ scale /= self.head_dim ** 0.5
180
+ if self.scale_attn_by_inverse_layer_idx:
181
+ scale /= float(self.layer_idx + 1)
182
+
183
+ scores = torch.matmul(query, key.transpose(-1, -2)) * scale
184
+ causal_mask = self._causal_attention_mask(
185
+ attention_mask=attention_mask,
186
+ query_length=query.shape[-2],
187
+ key_length=key.shape[-2],
188
+ device=query.device,
189
+ )
190
+ scores = scores.masked_fill(~causal_mask, torch.finfo(scores.dtype).min)
191
+ probs = torch.softmax(scores, dim=-1)
192
+ if self.training and self.attn_dropout > 0:
193
+ probs = torch.dropout(probs, self.attn_dropout, train=True)
194
+ output = torch.matmul(probs, value)
195
+ return output.transpose(1, 2).contiguous()
196
+
197
+ def _sdpa_attention(
198
+ self,
199
+ query: torch.Tensor,
200
+ key: torch.Tensor,
201
+ value: torch.Tensor,
202
+ attention_mask: Optional[torch.Tensor],
203
+ ) -> torch.Tensor:
204
+ query = query.transpose(1, 2)
205
+ key = key.transpose(1, 2)
206
+ value = value.transpose(1, 2)
207
+ mask = None
208
+ if attention_mask is not None or query.shape[-2] != key.shape[-2]:
209
+ mask = self._causal_attention_mask(
210
+ attention_mask=attention_mask,
211
+ query_length=query.shape[-2],
212
+ key_length=key.shape[-2],
213
+ device=query.device,
214
+ )
215
+ output = torch.nn.functional.scaled_dot_product_attention(
216
+ query,
217
+ key,
218
+ value,
219
+ attn_mask=mask,
220
+ dropout_p=self.attn_dropout if self.training else 0.0,
221
+ is_causal=mask is None,
222
+ )
223
+ return output.transpose(1, 2).contiguous()
224
+
225
+ def _flash_attention(
226
+ self,
227
+ query: torch.Tensor,
228
+ key: torch.Tensor,
229
+ value: torch.Tensor,
230
+ attention_mask: Optional[torch.Tensor],
231
+ packed_metadata: Optional[PackedSequenceMetadata],
232
+ ) -> torch.Tensor:
233
+ if not _FLASH_ATTN_AVAILABLE:
234
+ raise ImportError("flash_attn is not installed, but attn_implementation='flash_attention_2' was requested.")
235
+ if query.device.type != "cuda":
236
+ raise ValueError("flash_attention_2 requires CUDA tensors.")
237
+ if query.dtype not in (torch.float16, torch.bfloat16):
238
+ raise ValueError(
239
+ f"flash_attention_2 requires fp16/bf16 tensors, but received dtype={query.dtype}."
240
+ )
241
+
242
+ dropout_p = self.attn_dropout if self.training else 0.0
243
+ if packed_metadata is not None:
244
+ if packed_metadata.indices is not None:
245
+ query = query.reshape(-1, self.num_heads, self.head_dim).index_select(0, packed_metadata.indices)
246
+ key = key.reshape(-1, self.num_heads, self.head_dim).index_select(0, packed_metadata.indices)
247
+ value = value.reshape(-1, self.num_heads, self.head_dim).index_select(0, packed_metadata.indices)
248
+ output = flash_attn_varlen_func(
249
+ query,
250
+ key,
251
+ value,
252
+ packed_metadata.cu_seqlens,
253
+ packed_metadata.cu_seqlens,
254
+ packed_metadata.max_seqlen,
255
+ packed_metadata.max_seqlen,
256
+ dropout_p=dropout_p,
257
+ causal=True,
258
+ )
259
+ if packed_metadata.indices is None:
260
+ return output
261
+ return pad_input(
262
+ output,
263
+ packed_metadata.indices,
264
+ packed_metadata.batch_size,
265
+ packed_metadata.seq_len,
266
+ )
267
+
268
+ if attention_mask is None or bool(attention_mask.all()):
269
+ return flash_attn_func(
270
+ query,
271
+ key,
272
+ value,
273
+ dropout_p=dropout_p,
274
+ causal=True,
275
+ )
276
+
277
+ if query.shape[1] != key.shape[1]:
278
+ query_attention_mask = attention_mask[:, -query.shape[1] :]
279
+ unpadded_query, query_indices, cu_seqlens_q, max_seqlen_q, _ = unpad_input(
280
+ query,
281
+ query_attention_mask,
282
+ )
283
+ unpadded_key, _, cu_seqlens_k, max_seqlen_k, _ = unpad_input(key, attention_mask)
284
+ unpadded_value, _, _, _, _ = unpad_input(value, attention_mask)
285
+ output = flash_attn_varlen_func(
286
+ unpadded_query,
287
+ unpadded_key,
288
+ unpadded_value,
289
+ cu_seqlens_q,
290
+ cu_seqlens_k,
291
+ max_seqlen_q,
292
+ max_seqlen_k,
293
+ dropout_p=dropout_p,
294
+ causal=True,
295
+ )
296
+ return pad_input(output, query_indices, query.shape[0], query.shape[1])
297
+
298
+ unpadded_query, indices, cu_seqlens, max_seqlen, _ = unpad_input(query, attention_mask)
299
+ unpadded_key, _, _, _, _ = unpad_input(key, attention_mask)
300
+ unpadded_value, _, _, _, _ = unpad_input(value, attention_mask)
301
+ output = flash_attn_varlen_func(
302
+ unpadded_query,
303
+ unpadded_key,
304
+ unpadded_value,
305
+ cu_seqlens,
306
+ cu_seqlens,
307
+ max_seqlen,
308
+ max_seqlen,
309
+ dropout_p=dropout_p,
310
+ causal=True,
311
+ )
312
+ return pad_input(output, indices, query.shape[0], query.shape[1])
313
+
314
+ def forward(
315
+ self,
316
+ hidden_states: torch.Tensor,
317
+ attention_mask: Optional[torch.Tensor] = None,
318
+ position_ids: Optional[torch.LongTensor] = None,
319
+ packed_metadata: Optional[PackedSequenceMetadata] = None,
320
+ layer_past: Optional[tuple[torch.Tensor, torch.Tensor]] = None,
321
+ use_cache: bool = False,
322
+ ) -> tuple[torch.Tensor, Optional[tuple[torch.Tensor, torch.Tensor]]]:
323
+ qkv = self.c_attn(hidden_states)
324
+ query, key, value = qkv.split(self.embed_dim, dim=-1)
325
+ query = self._split_heads(query)
326
+ key = self._split_heads(key)
327
+ value = self._split_heads(value)
328
+
329
+ if self.rotary_emb is not None:
330
+ if position_ids is None:
331
+ raise ValueError("position_ids must be provided when position_embedding_type='rope'.")
332
+ cos, sin = self.rotary_emb(
333
+ position_ids.to(device=query.device),
334
+ device=query.device,
335
+ dtype=query.dtype,
336
+ )
337
+ query = apply_rotary_pos_emb(query, cos, sin)
338
+ key = apply_rotary_pos_emb(key, cos, sin)
339
+
340
+ static_layer_past = layer_past is not None and _is_static_kv_cache_layer(layer_past)
341
+ if static_layer_past:
342
+ past_length = int(layer_past.get("length", 0))
343
+ new_length = past_length + int(key.shape[1])
344
+ key_cache = layer_past["key"]
345
+ value_cache = layer_past["value"]
346
+ if new_length > int(key_cache.shape[1]):
347
+ raise ValueError(
348
+ f"Static KV cache is too short: need {new_length}, capacity={int(key_cache.shape[1])}."
349
+ )
350
+ key_cache[:, past_length:new_length].copy_(key)
351
+ value_cache[:, past_length:new_length].copy_(value)
352
+ key = key_cache[:, :new_length]
353
+ value = value_cache[:, :new_length]
354
+ layer_past["length"] = new_length
355
+ elif layer_past is not None:
356
+ past_key, past_value = layer_past
357
+ key = torch.cat([past_key.to(device=key.device, dtype=key.dtype), key], dim=1)
358
+ value = torch.cat([past_value.to(device=value.device, dtype=value.dtype), value], dim=1)
359
+
360
+ present = layer_past if (use_cache and static_layer_past) else ((key, value) if use_cache else None)
361
+
362
+ if self.attn_implementation == "flash_attention_2":
363
+ attn_output = self._flash_attention(
364
+ query=query,
365
+ key=key,
366
+ value=value,
367
+ attention_mask=attention_mask,
368
+ packed_metadata=packed_metadata,
369
+ )
370
+ elif self.attn_implementation == "sdpa":
371
+ attn_output = self._sdpa_attention(
372
+ query=query,
373
+ key=key,
374
+ value=value,
375
+ attention_mask=attention_mask,
376
+ )
377
+ else:
378
+ attn_output = self._eager_attention(
379
+ query=query,
380
+ key=key,
381
+ value=value,
382
+ attention_mask=attention_mask,
383
+ )
384
+
385
+ attn_output = self._merge_heads(attn_output)
386
+ attn_output = self.c_proj(attn_output)
387
+ return self.resid_dropout(attn_output), present
388
+
389
+
390
+ class MossTTSNanoGPT2Block(nn.Module):
391
+ def __init__(self, config: GPT2Config, layer_idx: int, attn_implementation: str) -> None:
392
+ super().__init__()
393
+ hidden_size = int(config.hidden_size)
394
+ self.ln_1 = nn.LayerNorm(hidden_size, eps=config.layer_norm_epsilon)
395
+ self.attn = MossTTSNanoGPT2Attention(config, layer_idx=layer_idx, attn_implementation=attn_implementation)
396
+ self.ln_2 = nn.LayerNorm(hidden_size, eps=config.layer_norm_epsilon)
397
+ self.mlp = MossTTSNanoGPT2MLP(config)
398
+
399
+ def forward(
400
+ self,
401
+ hidden_states: torch.Tensor,
402
+ attention_mask: Optional[torch.Tensor] = None,
403
+ position_ids: Optional[torch.LongTensor] = None,
404
+ packed_metadata: Optional[PackedSequenceMetadata] = None,
405
+ layer_past: Optional[tuple[torch.Tensor, torch.Tensor]] = None,
406
+ use_cache: bool = False,
407
+ ) -> tuple[torch.Tensor, Optional[tuple[torch.Tensor, torch.Tensor]]]:
408
+ attn_output, present = self.attn(
409
+ self.ln_1(hidden_states),
410
+ attention_mask=attention_mask,
411
+ position_ids=position_ids,
412
+ packed_metadata=packed_metadata,
413
+ layer_past=layer_past,
414
+ use_cache=use_cache,
415
+ )
416
+ hidden_states = hidden_states + attn_output
417
+ hidden_states = hidden_states + self.mlp(self.ln_2(hidden_states))
418
+ return hidden_states, present
419
+
420
+
421
+ class MossTTSNanoGPT2Model(nn.Module):
422
+ def __init__(self, config: GPT2Config, attn_implementation: str = "eager") -> None:
423
+ super().__init__()
424
+ self.config = config
425
+ self.attn_implementation = attn_implementation
426
+ self.position_embedding_type = str(getattr(config, "position_embedding_type", "absolute")).lower()
427
+ if self.position_embedding_type not in {"absolute", "rope"}:
428
+ raise ValueError(f"Unsupported position_embedding_type={self.position_embedding_type!r}")
429
+ hidden_size = int(config.hidden_size)
430
+ self.wte = nn.Embedding(config.vocab_size, hidden_size)
431
+ self.wpe = nn.Embedding(config.n_positions, hidden_size) if self.position_embedding_type == "absolute" else nn.Identity()
432
+ self.drop = nn.Dropout(config.embd_pdrop)
433
+ self.h = nn.ModuleList(
434
+ [MossTTSNanoGPT2Block(config, layer_idx=index, attn_implementation=attn_implementation) for index in range(config.n_layer)]
435
+ )
436
+ self.ln_f = nn.LayerNorm(hidden_size, eps=config.layer_norm_epsilon)
437
+ self.gradient_checkpointing = False
438
+ self._reset_parameters()
439
+
440
+ def _reset_parameters(self) -> None:
441
+ init_std = float(self.config.initializer_range)
442
+ for module in self.modules():
443
+ if isinstance(module, nn.Linear):
444
+ nn.init.normal_(module.weight, mean=0.0, std=init_std)
445
+ if module.bias is not None:
446
+ nn.init.zeros_(module.bias)
447
+ elif isinstance(module, nn.Embedding):
448
+ nn.init.normal_(module.weight, mean=0.0, std=init_std)
449
+ elif isinstance(module, nn.LayerNorm):
450
+ nn.init.ones_(module.weight)
451
+ nn.init.zeros_(module.bias)
452
+
453
+ @staticmethod
454
+ def _normalize_num_sequences(
455
+ cu_seqlens: torch.Tensor,
456
+ num_sequences: Optional[torch.Tensor],
457
+ device: torch.device,
458
+ ) -> torch.Tensor:
459
+ if cu_seqlens.ndim == 1:
460
+ cu_seqlens = cu_seqlens.unsqueeze(0)
461
+ if num_sequences is None:
462
+ diffs = cu_seqlens[:, 1:] - cu_seqlens[:, :-1]
463
+ return diffs.gt(0).sum(dim=-1).to(device=device, dtype=torch.long)
464
+ if num_sequences.ndim == 0:
465
+ num_sequences = num_sequences.unsqueeze(0)
466
+ return num_sequences.to(device=device, dtype=torch.long)
467
+
468
+ @staticmethod
469
+ def _packed_segments_from_cu_seqlens(
470
+ cu_seqlens: torch.Tensor,
471
+ num_sequences: Optional[torch.Tensor],
472
+ device: torch.device,
473
+ ) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor]:
474
+ if cu_seqlens.ndim == 1:
475
+ cu_seqlens = cu_seqlens.unsqueeze(0)
476
+ cu_seqlens = cu_seqlens.to(device=device)
477
+ batch_size, boundary_count = cu_seqlens.shape
478
+ segment_slots = boundary_count - 1
479
+ if segment_slots <= 0:
480
+ empty = torch.empty(0, dtype=torch.long, device=device)
481
+ return empty, empty, empty
482
+
483
+ counts = MossTTSNanoGPT2Model._normalize_num_sequences(cu_seqlens, num_sequences, device=device)
484
+ counts = counts.clamp(min=0, max=segment_slots)
485
+ segment_slots = int(counts.max().item()) if counts.numel() > 0 else 0
486
+ if segment_slots <= 0:
487
+ empty = torch.empty(0, dtype=torch.long, device=device)
488
+ return empty, empty, empty
489
+ cu_seqlens = cu_seqlens[:, : segment_slots + 1]
490
+ slot_ids = torch.arange(segment_slots, device=device).unsqueeze(0)
491
+ valid_slots = slot_ids < counts.unsqueeze(1)
492
+
493
+ starts = cu_seqlens[:, :-1].to(dtype=torch.long)
494
+ ends = cu_seqlens[:, 1:].to(dtype=torch.long)
495
+ lengths = (ends - starts).clamp_min(0)
496
+ lengths = torch.where(valid_slots, lengths, torch.zeros((), dtype=torch.long, device=device))
497
+
498
+ batch_ids = torch.arange(batch_size, device=device, dtype=torch.long).unsqueeze(1).expand(batch_size, segment_slots)
499
+ batch_ids = batch_ids.reshape(-1)
500
+ starts = starts.reshape(-1)
501
+ lengths = lengths.reshape(-1)
502
+
503
+ valid_segments = lengths.gt(0)
504
+ valid_count = int(valid_segments.to(dtype=torch.long).sum().item())
505
+ if valid_count <= 0:
506
+ empty = torch.empty(0, dtype=torch.long, device=device)
507
+ return empty, empty, empty
508
+ if valid_count == lengths.numel():
509
+ return batch_ids, starts, lengths
510
+
511
+ valid_order = torch.argsort(valid_segments.to(dtype=torch.long), descending=True, stable=True)[:valid_count]
512
+ return (
513
+ batch_ids.index_select(0, valid_order),
514
+ starts.index_select(0, valid_order),
515
+ lengths.index_select(0, valid_order),
516
+ )
517
+
518
+ @staticmethod
519
+ def _packed_token_indices(
520
+ batch_ids: torch.Tensor,
521
+ starts: torch.Tensor,
522
+ lengths: torch.Tensor,
523
+ seq_len: int,
524
+ ) -> tuple[torch.Tensor, torch.Tensor]:
525
+ total_tokens = int(lengths.sum().item())
526
+ if total_tokens <= 0:
527
+ empty = torch.empty(0, dtype=torch.long, device=lengths.device)
528
+ return empty, empty
529
+
530
+ segment_ids = torch.repeat_interleave(
531
+ torch.arange(lengths.numel(), device=lengths.device, dtype=torch.long),
532
+ lengths,
533
+ output_size=total_tokens,
534
+ )
535
+ segment_starts = torch.cumsum(lengths, dim=0) - lengths
536
+ positions = torch.arange(total_tokens, device=lengths.device, dtype=torch.long) - segment_starts[segment_ids]
537
+ indices = batch_ids[segment_ids] * seq_len + starts[segment_ids] + positions
538
+ return indices, positions
539
+
540
+ @staticmethod
541
+ def build_packed_position_ids(
542
+ attention_mask: Optional[torch.Tensor],
543
+ cu_seqlens: torch.Tensor,
544
+ num_sequences: Optional[torch.Tensor],
545
+ sequence_length: Optional[int] = None,
546
+ ) -> torch.Tensor:
547
+ if cu_seqlens.ndim == 1:
548
+ cu_seqlens = cu_seqlens.unsqueeze(0)
549
+ batch_size = cu_seqlens.shape[0]
550
+ seq_len = int(sequence_length or (cu_seqlens.shape[1] - 1))
551
+ device = cu_seqlens.device
552
+ position_ids = torch.zeros((batch_size, seq_len), dtype=torch.long, device=device)
553
+ batch_ids, starts, lengths = MossTTSNanoGPT2Model._packed_segments_from_cu_seqlens(
554
+ cu_seqlens,
555
+ num_sequences,
556
+ device,
557
+ )
558
+ if lengths.numel() > 0:
559
+ indices, positions = MossTTSNanoGPT2Model._packed_token_indices(batch_ids, starts, lengths, seq_len)
560
+ position_ids.view(-1).scatter_(0, indices, positions)
561
+ if attention_mask is not None:
562
+ position_ids = position_ids * attention_mask.to(dtype=position_ids.dtype)
563
+ return position_ids
564
+
565
+ @staticmethod
566
+ def build_packed_metadata(
567
+ hidden_states: torch.Tensor,
568
+ cu_seqlens: torch.Tensor,
569
+ num_sequences: Optional[torch.Tensor],
570
+ ) -> PackedSequenceMetadata:
571
+ if cu_seqlens.ndim == 1:
572
+ cu_seqlens = cu_seqlens.unsqueeze(0)
573
+ device = hidden_states.device
574
+ seq_len = hidden_states.shape[1]
575
+ batch_ids, starts, lengths = MossTTSNanoGPT2Model._packed_segments_from_cu_seqlens(
576
+ cu_seqlens,
577
+ num_sequences,
578
+ device,
579
+ )
580
+ if lengths.numel() == 0:
581
+ raise ValueError("cu_seqlens did not describe any non-empty packed sequences.")
582
+
583
+ indices, _ = MossTTSNanoGPT2Model._packed_token_indices(batch_ids, starts, lengths, seq_len)
584
+ cumulative = torch.empty(lengths.numel() + 1, dtype=torch.int32, device=device)
585
+ cumulative[0] = 0
586
+ cumulative[1:] = lengths.to(dtype=torch.int32).cumsum(dim=0)
587
+ return PackedSequenceMetadata(
588
+ cu_seqlens=cumulative,
589
+ max_seqlen=int(lengths.max().item()),
590
+ indices=indices,
591
+ batch_size=hidden_states.shape[0],
592
+ seq_len=hidden_states.shape[1],
593
+ )
594
+
595
+ def forward(
596
+ self,
597
+ input_ids: Optional[torch.LongTensor] = None,
598
+ past_key_values: Optional[tuple[tuple[torch.Tensor, torch.Tensor], ...]] = None,
599
+ attention_mask: Optional[torch.Tensor] = None,
600
+ position_ids: Optional[torch.LongTensor] = None,
601
+ inputs_embeds: Optional[torch.FloatTensor] = None,
602
+ use_cache: Optional[bool] = None,
603
+ output_attentions: Optional[bool] = None,
604
+ output_hidden_states: Optional[bool] = None,
605
+ return_dict: bool = True,
606
+ cu_seqlens: Optional[torch.Tensor] = None,
607
+ num_sequences: Optional[torch.Tensor] = None,
608
+ ) -> BaseModelOutputWithPast:
609
+ del input_ids, output_attentions
610
+
611
+ if inputs_embeds is None:
612
+ raise ValueError("inputs_embeds must be provided.")
613
+
614
+ use_cache = bool(use_cache)
615
+ if use_cache and cu_seqlens is not None:
616
+ raise ValueError("use_cache=True is not supported together with cu_seqlens packing.")
617
+
618
+ hidden_states = inputs_embeds
619
+ query_attention_mask = None
620
+ if attention_mask is not None:
621
+ attention_mask = attention_mask.to(dtype=torch.bool, device=hidden_states.device)
622
+ query_attention_mask = attention_mask[:, -hidden_states.shape[1] :]
623
+
624
+ packed_metadata = None
625
+ if position_ids is None:
626
+ if cu_seqlens is not None:
627
+ if attention_mask is None:
628
+ raise ValueError("attention_mask must be provided with cu_seqlens packing.")
629
+ position_ids = self.build_packed_position_ids(
630
+ attention_mask=attention_mask,
631
+ cu_seqlens=cu_seqlens.to(device=hidden_states.device),
632
+ num_sequences=num_sequences.to(device=hidden_states.device) if num_sequences is not None else None,
633
+ sequence_length=hidden_states.shape[1],
634
+ )
635
+ elif attention_mask is not None:
636
+ position_ids = attention_mask.long().cumsum(dim=-1) - 1
637
+ position_ids = position_ids.masked_fill(~attention_mask, 0)
638
+ position_ids = position_ids[:, -hidden_states.shape[1] :]
639
+ else:
640
+ past_length = 0
641
+ if past_key_values is not None and len(past_key_values) > 0:
642
+ first_layer_past = past_key_values[0]
643
+ if _is_static_kv_cache_layer(first_layer_past):
644
+ past_length = int(first_layer_past.get("length", 0))
645
+ else:
646
+ past_length = first_layer_past[0].shape[1]
647
+ position_ids = torch.arange(hidden_states.shape[1], device=hidden_states.device, dtype=torch.long)
648
+ position_ids = position_ids + past_length
649
+ position_ids = position_ids.unsqueeze(0).expand(hidden_states.shape[0], -1)
650
+
651
+ if cu_seqlens is not None and self.attn_implementation == "flash_attention_2":
652
+ packed_metadata = self.build_packed_metadata(
653
+ hidden_states=hidden_states,
654
+ cu_seqlens=cu_seqlens.to(device=hidden_states.device),
655
+ num_sequences=num_sequences.to(device=hidden_states.device) if num_sequences is not None else None,
656
+ )
657
+
658
+ if self.position_embedding_type == "absolute":
659
+ hidden_states = hidden_states + self.wpe(position_ids)
660
+ hidden_states = self.drop(hidden_states)
661
+ if query_attention_mask is not None:
662
+ hidden_states = hidden_states * query_attention_mask.unsqueeze(-1).to(dtype=hidden_states.dtype)
663
+
664
+ all_hidden_states = () if output_hidden_states else None
665
+ presents = [] if use_cache else None
666
+ for layer_index, block in enumerate(self.h):
667
+ if output_hidden_states:
668
+ all_hidden_states = all_hidden_states + (hidden_states,)
669
+
670
+ if self.gradient_checkpointing and self.training:
671
+ if use_cache:
672
+ raise ValueError("use_cache=True is not supported when gradient checkpointing is enabled during training.")
673
+
674
+ def custom_forward(*inputs):
675
+ output, _ = block(
676
+ inputs[0],
677
+ attention_mask=inputs[1],
678
+ position_ids=inputs[2],
679
+ packed_metadata=packed_metadata,
680
+ layer_past=None,
681
+ use_cache=False,
682
+ )
683
+ return output
684
+
685
+ hidden_states = torch.utils.checkpoint.checkpoint(
686
+ custom_forward,
687
+ hidden_states,
688
+ attention_mask,
689
+ position_ids,
690
+ use_reentrant=False,
691
+ )
692
+ present = None
693
+ else:
694
+ hidden_states, present = block(
695
+ hidden_states,
696
+ attention_mask=attention_mask,
697
+ position_ids=position_ids,
698
+ packed_metadata=packed_metadata,
699
+ layer_past=None if past_key_values is None else past_key_values[layer_index],
700
+ use_cache=use_cache,
701
+ )
702
+ if query_attention_mask is not None:
703
+ hidden_states = hidden_states * query_attention_mask.unsqueeze(-1).to(dtype=hidden_states.dtype)
704
+ if presents is not None:
705
+ presents.append(present)
706
+
707
+ hidden_states = self.ln_f(hidden_states)
708
+ if query_attention_mask is not None:
709
+ hidden_states = hidden_states * query_attention_mask.unsqueeze(-1).to(dtype=hidden_states.dtype)
710
+ if output_hidden_states:
711
+ all_hidden_states = all_hidden_states + (hidden_states,)
712
+
713
+ if not return_dict:
714
+ return (hidden_states, tuple(presents) if presents is not None else None, all_hidden_states, None)
715
+
716
+ return BaseModelOutputWithPast(
717
+ last_hidden_state=hidden_states,
718
+ past_key_values=tuple(presents) if presents is not None else None,
719
+ hidden_states=all_hidden_states,
720
+ attentions=None,
721
+ )
model-00001-of-00003.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3c8b9d4e555370073a298b34d65927b7956752de969aade484f05544c9d4acaa
3
+ size 3994689160
model-00002-of-00003.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a9d4328d7b8a2f7e677f3e9aa35568f14de8f4e0fb7df615fc36adc5cfb8c2a0
3
+ size 3961231200
model-00003-of-00003.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b87a011a7f1e37373e5a4489e9dbbffbb298c4760505e94474bfc63f37d1660c
3
+ size 304110936
model.safetensors.index.json ADDED
@@ -0,0 +1,433 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "metadata": {
3
+ "total_parameters": 4129990144,
4
+ "total_size": 8259980288
5
+ },
6
+ "weight_map": {
7
+ "audio_embeddings.0.weight": "model-00001-of-00003.safetensors",
8
+ "audio_embeddings.1.weight": "model-00001-of-00003.safetensors",
9
+ "audio_embeddings.10.weight": "model-00001-of-00003.safetensors",
10
+ "audio_embeddings.11.weight": "model-00001-of-00003.safetensors",
11
+ "audio_embeddings.2.weight": "model-00001-of-00003.safetensors",
12
+ "audio_embeddings.3.weight": "model-00001-of-00003.safetensors",
13
+ "audio_embeddings.4.weight": "model-00001-of-00003.safetensors",
14
+ "audio_embeddings.5.weight": "model-00001-of-00003.safetensors",
15
+ "audio_embeddings.6.weight": "model-00001-of-00003.safetensors",
16
+ "audio_embeddings.7.weight": "model-00001-of-00003.safetensors",
17
+ "audio_embeddings.8.weight": "model-00001-of-00003.safetensors",
18
+ "audio_embeddings.9.weight": "model-00001-of-00003.safetensors",
19
+ "local_text_lm_head.weight": "model-00001-of-00003.safetensors",
20
+ "local_transformer.h.0.attn.c_attn.bias": "model-00001-of-00003.safetensors",
21
+ "local_transformer.h.0.attn.c_attn.weight": "model-00001-of-00003.safetensors",
22
+ "local_transformer.h.0.attn.c_proj.bias": "model-00001-of-00003.safetensors",
23
+ "local_transformer.h.0.attn.c_proj.weight": "model-00001-of-00003.safetensors",
24
+ "local_transformer.h.0.ln_1.bias": "model-00001-of-00003.safetensors",
25
+ "local_transformer.h.0.ln_1.weight": "model-00001-of-00003.safetensors",
26
+ "local_transformer.h.0.ln_2.bias": "model-00001-of-00003.safetensors",
27
+ "local_transformer.h.0.ln_2.weight": "model-00001-of-00003.safetensors",
28
+ "local_transformer.h.0.mlp.fc_in.bias": "model-00001-of-00003.safetensors",
29
+ "local_transformer.h.0.mlp.fc_in.weight": "model-00001-of-00003.safetensors",
30
+ "local_transformer.h.0.mlp.fc_out.bias": "model-00001-of-00003.safetensors",
31
+ "local_transformer.h.0.mlp.fc_out.weight": "model-00001-of-00003.safetensors",
32
+ "local_transformer.ln_f.bias": "model-00001-of-00003.safetensors",
33
+ "local_transformer.ln_f.weight": "model-00001-of-00003.safetensors",
34
+ "transformer.embed_tokens.weight": "model-00001-of-00003.safetensors",
35
+ "transformer.layers.0.input_layernorm.weight": "model-00001-of-00003.safetensors",
36
+ "transformer.layers.0.mlp.down_proj.weight": "model-00001-of-00003.safetensors",
37
+ "transformer.layers.0.mlp.gate_proj.weight": "model-00001-of-00003.safetensors",
38
+ "transformer.layers.0.mlp.up_proj.weight": "model-00001-of-00003.safetensors",
39
+ "transformer.layers.0.post_attention_layernorm.weight": "model-00001-of-00003.safetensors",
40
+ "transformer.layers.0.self_attn.k_norm.weight": "model-00001-of-00003.safetensors",
41
+ "transformer.layers.0.self_attn.k_proj.weight": "model-00001-of-00003.safetensors",
42
+ "transformer.layers.0.self_attn.o_proj.weight": "model-00001-of-00003.safetensors",
43
+ "transformer.layers.0.self_attn.q_norm.weight": "model-00001-of-00003.safetensors",
44
+ "transformer.layers.0.self_attn.q_proj.weight": "model-00001-of-00003.safetensors",
45
+ "transformer.layers.0.self_attn.v_proj.weight": "model-00001-of-00003.safetensors",
46
+ "transformer.layers.1.input_layernorm.weight": "model-00001-of-00003.safetensors",
47
+ "transformer.layers.1.mlp.down_proj.weight": "model-00001-of-00003.safetensors",
48
+ "transformer.layers.1.mlp.gate_proj.weight": "model-00001-of-00003.safetensors",
49
+ "transformer.layers.1.mlp.up_proj.weight": "model-00001-of-00003.safetensors",
50
+ "transformer.layers.1.post_attention_layernorm.weight": "model-00001-of-00003.safetensors",
51
+ "transformer.layers.1.self_attn.k_norm.weight": "model-00001-of-00003.safetensors",
52
+ "transformer.layers.1.self_attn.k_proj.weight": "model-00001-of-00003.safetensors",
53
+ "transformer.layers.1.self_attn.o_proj.weight": "model-00001-of-00003.safetensors",
54
+ "transformer.layers.1.self_attn.q_norm.weight": "model-00001-of-00003.safetensors",
55
+ "transformer.layers.1.self_attn.q_proj.weight": "model-00001-of-00003.safetensors",
56
+ "transformer.layers.1.self_attn.v_proj.weight": "model-00001-of-00003.safetensors",
57
+ "transformer.layers.10.input_layernorm.weight": "model-00001-of-00003.safetensors",
58
+ "transformer.layers.10.mlp.down_proj.weight": "model-00001-of-00003.safetensors",
59
+ "transformer.layers.10.mlp.gate_proj.weight": "model-00001-of-00003.safetensors",
60
+ "transformer.layers.10.mlp.up_proj.weight": "model-00001-of-00003.safetensors",
61
+ "transformer.layers.10.post_attention_layernorm.weight": "model-00001-of-00003.safetensors",
62
+ "transformer.layers.10.self_attn.k_norm.weight": "model-00001-of-00003.safetensors",
63
+ "transformer.layers.10.self_attn.k_proj.weight": "model-00001-of-00003.safetensors",
64
+ "transformer.layers.10.self_attn.o_proj.weight": "model-00001-of-00003.safetensors",
65
+ "transformer.layers.10.self_attn.q_norm.weight": "model-00001-of-00003.safetensors",
66
+ "transformer.layers.10.self_attn.q_proj.weight": "model-00001-of-00003.safetensors",
67
+ "transformer.layers.10.self_attn.v_proj.weight": "model-00001-of-00003.safetensors",
68
+ "transformer.layers.11.input_layernorm.weight": "model-00001-of-00003.safetensors",
69
+ "transformer.layers.11.mlp.down_proj.weight": "model-00001-of-00003.safetensors",
70
+ "transformer.layers.11.mlp.gate_proj.weight": "model-00001-of-00003.safetensors",
71
+ "transformer.layers.11.mlp.up_proj.weight": "model-00001-of-00003.safetensors",
72
+ "transformer.layers.11.post_attention_layernorm.weight": "model-00001-of-00003.safetensors",
73
+ "transformer.layers.11.self_attn.k_norm.weight": "model-00001-of-00003.safetensors",
74
+ "transformer.layers.11.self_attn.k_proj.weight": "model-00001-of-00003.safetensors",
75
+ "transformer.layers.11.self_attn.o_proj.weight": "model-00001-of-00003.safetensors",
76
+ "transformer.layers.11.self_attn.q_norm.weight": "model-00001-of-00003.safetensors",
77
+ "transformer.layers.11.self_attn.q_proj.weight": "model-00001-of-00003.safetensors",
78
+ "transformer.layers.11.self_attn.v_proj.weight": "model-00001-of-00003.safetensors",
79
+ "transformer.layers.12.input_layernorm.weight": "model-00001-of-00003.safetensors",
80
+ "transformer.layers.12.mlp.down_proj.weight": "model-00001-of-00003.safetensors",
81
+ "transformer.layers.12.mlp.gate_proj.weight": "model-00001-of-00003.safetensors",
82
+ "transformer.layers.12.mlp.up_proj.weight": "model-00001-of-00003.safetensors",
83
+ "transformer.layers.12.post_attention_layernorm.weight": "model-00001-of-00003.safetensors",
84
+ "transformer.layers.12.self_attn.k_norm.weight": "model-00001-of-00003.safetensors",
85
+ "transformer.layers.12.self_attn.k_proj.weight": "model-00001-of-00003.safetensors",
86
+ "transformer.layers.12.self_attn.o_proj.weight": "model-00001-of-00003.safetensors",
87
+ "transformer.layers.12.self_attn.q_norm.weight": "model-00001-of-00003.safetensors",
88
+ "transformer.layers.12.self_attn.q_proj.weight": "model-00001-of-00003.safetensors",
89
+ "transformer.layers.12.self_attn.v_proj.weight": "model-00001-of-00003.safetensors",
90
+ "transformer.layers.13.input_layernorm.weight": "model-00001-of-00003.safetensors",
91
+ "transformer.layers.13.mlp.down_proj.weight": "model-00001-of-00003.safetensors",
92
+ "transformer.layers.13.mlp.gate_proj.weight": "model-00001-of-00003.safetensors",
93
+ "transformer.layers.13.mlp.up_proj.weight": "model-00001-of-00003.safetensors",
94
+ "transformer.layers.13.post_attention_layernorm.weight": "model-00001-of-00003.safetensors",
95
+ "transformer.layers.13.self_attn.k_norm.weight": "model-00001-of-00003.safetensors",
96
+ "transformer.layers.13.self_attn.k_proj.weight": "model-00001-of-00003.safetensors",
97
+ "transformer.layers.13.self_attn.o_proj.weight": "model-00001-of-00003.safetensors",
98
+ "transformer.layers.13.self_attn.q_norm.weight": "model-00001-of-00003.safetensors",
99
+ "transformer.layers.13.self_attn.q_proj.weight": "model-00001-of-00003.safetensors",
100
+ "transformer.layers.13.self_attn.v_proj.weight": "model-00001-of-00003.safetensors",
101
+ "transformer.layers.14.input_layernorm.weight": "model-00001-of-00003.safetensors",
102
+ "transformer.layers.14.mlp.down_proj.weight": "model-00001-of-00003.safetensors",
103
+ "transformer.layers.14.mlp.gate_proj.weight": "model-00001-of-00003.safetensors",
104
+ "transformer.layers.14.mlp.up_proj.weight": "model-00001-of-00003.safetensors",
105
+ "transformer.layers.14.post_attention_layernorm.weight": "model-00001-of-00003.safetensors",
106
+ "transformer.layers.14.self_attn.k_norm.weight": "model-00001-of-00003.safetensors",
107
+ "transformer.layers.14.self_attn.k_proj.weight": "model-00001-of-00003.safetensors",
108
+ "transformer.layers.14.self_attn.o_proj.weight": "model-00001-of-00003.safetensors",
109
+ "transformer.layers.14.self_attn.q_norm.weight": "model-00001-of-00003.safetensors",
110
+ "transformer.layers.14.self_attn.q_proj.weight": "model-00002-of-00003.safetensors",
111
+ "transformer.layers.14.self_attn.v_proj.weight": "model-00002-of-00003.safetensors",
112
+ "transformer.layers.15.input_layernorm.weight": "model-00002-of-00003.safetensors",
113
+ "transformer.layers.15.mlp.down_proj.weight": "model-00002-of-00003.safetensors",
114
+ "transformer.layers.15.mlp.gate_proj.weight": "model-00002-of-00003.safetensors",
115
+ "transformer.layers.15.mlp.up_proj.weight": "model-00002-of-00003.safetensors",
116
+ "transformer.layers.15.post_attention_layernorm.weight": "model-00002-of-00003.safetensors",
117
+ "transformer.layers.15.self_attn.k_norm.weight": "model-00002-of-00003.safetensors",
118
+ "transformer.layers.15.self_attn.k_proj.weight": "model-00002-of-00003.safetensors",
119
+ "transformer.layers.15.self_attn.o_proj.weight": "model-00002-of-00003.safetensors",
120
+ "transformer.layers.15.self_attn.q_norm.weight": "model-00002-of-00003.safetensors",
121
+ "transformer.layers.15.self_attn.q_proj.weight": "model-00002-of-00003.safetensors",
122
+ "transformer.layers.15.self_attn.v_proj.weight": "model-00002-of-00003.safetensors",
123
+ "transformer.layers.16.input_layernorm.weight": "model-00002-of-00003.safetensors",
124
+ "transformer.layers.16.mlp.down_proj.weight": "model-00002-of-00003.safetensors",
125
+ "transformer.layers.16.mlp.gate_proj.weight": "model-00002-of-00003.safetensors",
126
+ "transformer.layers.16.mlp.up_proj.weight": "model-00002-of-00003.safetensors",
127
+ "transformer.layers.16.post_attention_layernorm.weight": "model-00002-of-00003.safetensors",
128
+ "transformer.layers.16.self_attn.k_norm.weight": "model-00002-of-00003.safetensors",
129
+ "transformer.layers.16.self_attn.k_proj.weight": "model-00002-of-00003.safetensors",
130
+ "transformer.layers.16.self_attn.o_proj.weight": "model-00002-of-00003.safetensors",
131
+ "transformer.layers.16.self_attn.q_norm.weight": "model-00002-of-00003.safetensors",
132
+ "transformer.layers.16.self_attn.q_proj.weight": "model-00002-of-00003.safetensors",
133
+ "transformer.layers.16.self_attn.v_proj.weight": "model-00002-of-00003.safetensors",
134
+ "transformer.layers.17.input_layernorm.weight": "model-00002-of-00003.safetensors",
135
+ "transformer.layers.17.mlp.down_proj.weight": "model-00002-of-00003.safetensors",
136
+ "transformer.layers.17.mlp.gate_proj.weight": "model-00002-of-00003.safetensors",
137
+ "transformer.layers.17.mlp.up_proj.weight": "model-00002-of-00003.safetensors",
138
+ "transformer.layers.17.post_attention_layernorm.weight": "model-00002-of-00003.safetensors",
139
+ "transformer.layers.17.self_attn.k_norm.weight": "model-00002-of-00003.safetensors",
140
+ "transformer.layers.17.self_attn.k_proj.weight": "model-00002-of-00003.safetensors",
141
+ "transformer.layers.17.self_attn.o_proj.weight": "model-00002-of-00003.safetensors",
142
+ "transformer.layers.17.self_attn.q_norm.weight": "model-00002-of-00003.safetensors",
143
+ "transformer.layers.17.self_attn.q_proj.weight": "model-00002-of-00003.safetensors",
144
+ "transformer.layers.17.self_attn.v_proj.weight": "model-00002-of-00003.safetensors",
145
+ "transformer.layers.18.input_layernorm.weight": "model-00002-of-00003.safetensors",
146
+ "transformer.layers.18.mlp.down_proj.weight": "model-00002-of-00003.safetensors",
147
+ "transformer.layers.18.mlp.gate_proj.weight": "model-00002-of-00003.safetensors",
148
+ "transformer.layers.18.mlp.up_proj.weight": "model-00002-of-00003.safetensors",
149
+ "transformer.layers.18.post_attention_layernorm.weight": "model-00002-of-00003.safetensors",
150
+ "transformer.layers.18.self_attn.k_norm.weight": "model-00002-of-00003.safetensors",
151
+ "transformer.layers.18.self_attn.k_proj.weight": "model-00002-of-00003.safetensors",
152
+ "transformer.layers.18.self_attn.o_proj.weight": "model-00002-of-00003.safetensors",
153
+ "transformer.layers.18.self_attn.q_norm.weight": "model-00002-of-00003.safetensors",
154
+ "transformer.layers.18.self_attn.q_proj.weight": "model-00002-of-00003.safetensors",
155
+ "transformer.layers.18.self_attn.v_proj.weight": "model-00002-of-00003.safetensors",
156
+ "transformer.layers.19.input_layernorm.weight": "model-00002-of-00003.safetensors",
157
+ "transformer.layers.19.mlp.down_proj.weight": "model-00002-of-00003.safetensors",
158
+ "transformer.layers.19.mlp.gate_proj.weight": "model-00002-of-00003.safetensors",
159
+ "transformer.layers.19.mlp.up_proj.weight": "model-00002-of-00003.safetensors",
160
+ "transformer.layers.19.post_attention_layernorm.weight": "model-00002-of-00003.safetensors",
161
+ "transformer.layers.19.self_attn.k_norm.weight": "model-00002-of-00003.safetensors",
162
+ "transformer.layers.19.self_attn.k_proj.weight": "model-00002-of-00003.safetensors",
163
+ "transformer.layers.19.self_attn.o_proj.weight": "model-00002-of-00003.safetensors",
164
+ "transformer.layers.19.self_attn.q_norm.weight": "model-00002-of-00003.safetensors",
165
+ "transformer.layers.19.self_attn.q_proj.weight": "model-00002-of-00003.safetensors",
166
+ "transformer.layers.19.self_attn.v_proj.weight": "model-00002-of-00003.safetensors",
167
+ "transformer.layers.2.input_layernorm.weight": "model-00001-of-00003.safetensors",
168
+ "transformer.layers.2.mlp.down_proj.weight": "model-00001-of-00003.safetensors",
169
+ "transformer.layers.2.mlp.gate_proj.weight": "model-00001-of-00003.safetensors",
170
+ "transformer.layers.2.mlp.up_proj.weight": "model-00001-of-00003.safetensors",
171
+ "transformer.layers.2.post_attention_layernorm.weight": "model-00001-of-00003.safetensors",
172
+ "transformer.layers.2.self_attn.k_norm.weight": "model-00001-of-00003.safetensors",
173
+ "transformer.layers.2.self_attn.k_proj.weight": "model-00001-of-00003.safetensors",
174
+ "transformer.layers.2.self_attn.o_proj.weight": "model-00001-of-00003.safetensors",
175
+ "transformer.layers.2.self_attn.q_norm.weight": "model-00001-of-00003.safetensors",
176
+ "transformer.layers.2.self_attn.q_proj.weight": "model-00001-of-00003.safetensors",
177
+ "transformer.layers.2.self_attn.v_proj.weight": "model-00001-of-00003.safetensors",
178
+ "transformer.layers.20.input_layernorm.weight": "model-00002-of-00003.safetensors",
179
+ "transformer.layers.20.mlp.down_proj.weight": "model-00002-of-00003.safetensors",
180
+ "transformer.layers.20.mlp.gate_proj.weight": "model-00002-of-00003.safetensors",
181
+ "transformer.layers.20.mlp.up_proj.weight": "model-00002-of-00003.safetensors",
182
+ "transformer.layers.20.post_attention_layernorm.weight": "model-00002-of-00003.safetensors",
183
+ "transformer.layers.20.self_attn.k_norm.weight": "model-00002-of-00003.safetensors",
184
+ "transformer.layers.20.self_attn.k_proj.weight": "model-00002-of-00003.safetensors",
185
+ "transformer.layers.20.self_attn.o_proj.weight": "model-00002-of-00003.safetensors",
186
+ "transformer.layers.20.self_attn.q_norm.weight": "model-00002-of-00003.safetensors",
187
+ "transformer.layers.20.self_attn.q_proj.weight": "model-00002-of-00003.safetensors",
188
+ "transformer.layers.20.self_attn.v_proj.weight": "model-00002-of-00003.safetensors",
189
+ "transformer.layers.21.input_layernorm.weight": "model-00002-of-00003.safetensors",
190
+ "transformer.layers.21.mlp.down_proj.weight": "model-00002-of-00003.safetensors",
191
+ "transformer.layers.21.mlp.gate_proj.weight": "model-00002-of-00003.safetensors",
192
+ "transformer.layers.21.mlp.up_proj.weight": "model-00002-of-00003.safetensors",
193
+ "transformer.layers.21.post_attention_layernorm.weight": "model-00002-of-00003.safetensors",
194
+ "transformer.layers.21.self_attn.k_norm.weight": "model-00002-of-00003.safetensors",
195
+ "transformer.layers.21.self_attn.k_proj.weight": "model-00002-of-00003.safetensors",
196
+ "transformer.layers.21.self_attn.o_proj.weight": "model-00002-of-00003.safetensors",
197
+ "transformer.layers.21.self_attn.q_norm.weight": "model-00002-of-00003.safetensors",
198
+ "transformer.layers.21.self_attn.q_proj.weight": "model-00002-of-00003.safetensors",
199
+ "transformer.layers.21.self_attn.v_proj.weight": "model-00002-of-00003.safetensors",
200
+ "transformer.layers.22.input_layernorm.weight": "model-00002-of-00003.safetensors",
201
+ "transformer.layers.22.mlp.down_proj.weight": "model-00002-of-00003.safetensors",
202
+ "transformer.layers.22.mlp.gate_proj.weight": "model-00002-of-00003.safetensors",
203
+ "transformer.layers.22.mlp.up_proj.weight": "model-00002-of-00003.safetensors",
204
+ "transformer.layers.22.post_attention_layernorm.weight": "model-00002-of-00003.safetensors",
205
+ "transformer.layers.22.self_attn.k_norm.weight": "model-00002-of-00003.safetensors",
206
+ "transformer.layers.22.self_attn.k_proj.weight": "model-00002-of-00003.safetensors",
207
+ "transformer.layers.22.self_attn.o_proj.weight": "model-00002-of-00003.safetensors",
208
+ "transformer.layers.22.self_attn.q_norm.weight": "model-00002-of-00003.safetensors",
209
+ "transformer.layers.22.self_attn.q_proj.weight": "model-00002-of-00003.safetensors",
210
+ "transformer.layers.22.self_attn.v_proj.weight": "model-00002-of-00003.safetensors",
211
+ "transformer.layers.23.input_layernorm.weight": "model-00002-of-00003.safetensors",
212
+ "transformer.layers.23.mlp.down_proj.weight": "model-00002-of-00003.safetensors",
213
+ "transformer.layers.23.mlp.gate_proj.weight": "model-00002-of-00003.safetensors",
214
+ "transformer.layers.23.mlp.up_proj.weight": "model-00002-of-00003.safetensors",
215
+ "transformer.layers.23.post_attention_layernorm.weight": "model-00002-of-00003.safetensors",
216
+ "transformer.layers.23.self_attn.k_norm.weight": "model-00002-of-00003.safetensors",
217
+ "transformer.layers.23.self_attn.k_proj.weight": "model-00002-of-00003.safetensors",
218
+ "transformer.layers.23.self_attn.o_proj.weight": "model-00002-of-00003.safetensors",
219
+ "transformer.layers.23.self_attn.q_norm.weight": "model-00002-of-00003.safetensors",
220
+ "transformer.layers.23.self_attn.q_proj.weight": "model-00002-of-00003.safetensors",
221
+ "transformer.layers.23.self_attn.v_proj.weight": "model-00002-of-00003.safetensors",
222
+ "transformer.layers.24.input_layernorm.weight": "model-00002-of-00003.safetensors",
223
+ "transformer.layers.24.mlp.down_proj.weight": "model-00002-of-00003.safetensors",
224
+ "transformer.layers.24.mlp.gate_proj.weight": "model-00002-of-00003.safetensors",
225
+ "transformer.layers.24.mlp.up_proj.weight": "model-00002-of-00003.safetensors",
226
+ "transformer.layers.24.post_attention_layernorm.weight": "model-00002-of-00003.safetensors",
227
+ "transformer.layers.24.self_attn.k_norm.weight": "model-00002-of-00003.safetensors",
228
+ "transformer.layers.24.self_attn.k_proj.weight": "model-00002-of-00003.safetensors",
229
+ "transformer.layers.24.self_attn.o_proj.weight": "model-00002-of-00003.safetensors",
230
+ "transformer.layers.24.self_attn.q_norm.weight": "model-00002-of-00003.safetensors",
231
+ "transformer.layers.24.self_attn.q_proj.weight": "model-00002-of-00003.safetensors",
232
+ "transformer.layers.24.self_attn.v_proj.weight": "model-00002-of-00003.safetensors",
233
+ "transformer.layers.25.input_layernorm.weight": "model-00002-of-00003.safetensors",
234
+ "transformer.layers.25.mlp.down_proj.weight": "model-00002-of-00003.safetensors",
235
+ "transformer.layers.25.mlp.gate_proj.weight": "model-00002-of-00003.safetensors",
236
+ "transformer.layers.25.mlp.up_proj.weight": "model-00002-of-00003.safetensors",
237
+ "transformer.layers.25.post_attention_layernorm.weight": "model-00002-of-00003.safetensors",
238
+ "transformer.layers.25.self_attn.k_norm.weight": "model-00002-of-00003.safetensors",
239
+ "transformer.layers.25.self_attn.k_proj.weight": "model-00002-of-00003.safetensors",
240
+ "transformer.layers.25.self_attn.o_proj.weight": "model-00002-of-00003.safetensors",
241
+ "transformer.layers.25.self_attn.q_norm.weight": "model-00002-of-00003.safetensors",
242
+ "transformer.layers.25.self_attn.q_proj.weight": "model-00002-of-00003.safetensors",
243
+ "transformer.layers.25.self_attn.v_proj.weight": "model-00002-of-00003.safetensors",
244
+ "transformer.layers.26.input_layernorm.weight": "model-00002-of-00003.safetensors",
245
+ "transformer.layers.26.mlp.down_proj.weight": "model-00002-of-00003.safetensors",
246
+ "transformer.layers.26.mlp.gate_proj.weight": "model-00002-of-00003.safetensors",
247
+ "transformer.layers.26.mlp.up_proj.weight": "model-00002-of-00003.safetensors",
248
+ "transformer.layers.26.post_attention_layernorm.weight": "model-00002-of-00003.safetensors",
249
+ "transformer.layers.26.self_attn.k_norm.weight": "model-00002-of-00003.safetensors",
250
+ "transformer.layers.26.self_attn.k_proj.weight": "model-00002-of-00003.safetensors",
251
+ "transformer.layers.26.self_attn.o_proj.weight": "model-00002-of-00003.safetensors",
252
+ "transformer.layers.26.self_attn.q_norm.weight": "model-00002-of-00003.safetensors",
253
+ "transformer.layers.26.self_attn.q_proj.weight": "model-00002-of-00003.safetensors",
254
+ "transformer.layers.26.self_attn.v_proj.weight": "model-00002-of-00003.safetensors",
255
+ "transformer.layers.27.input_layernorm.weight": "model-00002-of-00003.safetensors",
256
+ "transformer.layers.27.mlp.down_proj.weight": "model-00002-of-00003.safetensors",
257
+ "transformer.layers.27.mlp.gate_proj.weight": "model-00002-of-00003.safetensors",
258
+ "transformer.layers.27.mlp.up_proj.weight": "model-00002-of-00003.safetensors",
259
+ "transformer.layers.27.post_attention_layernorm.weight": "model-00002-of-00003.safetensors",
260
+ "transformer.layers.27.self_attn.k_norm.weight": "model-00002-of-00003.safetensors",
261
+ "transformer.layers.27.self_attn.k_proj.weight": "model-00002-of-00003.safetensors",
262
+ "transformer.layers.27.self_attn.o_proj.weight": "model-00002-of-00003.safetensors",
263
+ "transformer.layers.27.self_attn.q_norm.weight": "model-00002-of-00003.safetensors",
264
+ "transformer.layers.27.self_attn.q_proj.weight": "model-00002-of-00003.safetensors",
265
+ "transformer.layers.27.self_attn.v_proj.weight": "model-00002-of-00003.safetensors",
266
+ "transformer.layers.28.input_layernorm.weight": "model-00002-of-00003.safetensors",
267
+ "transformer.layers.28.mlp.down_proj.weight": "model-00002-of-00003.safetensors",
268
+ "transformer.layers.28.mlp.gate_proj.weight": "model-00002-of-00003.safetensors",
269
+ "transformer.layers.28.mlp.up_proj.weight": "model-00002-of-00003.safetensors",
270
+ "transformer.layers.28.post_attention_layernorm.weight": "model-00002-of-00003.safetensors",
271
+ "transformer.layers.28.self_attn.k_norm.weight": "model-00002-of-00003.safetensors",
272
+ "transformer.layers.28.self_attn.k_proj.weight": "model-00002-of-00003.safetensors",
273
+ "transformer.layers.28.self_attn.o_proj.weight": "model-00002-of-00003.safetensors",
274
+ "transformer.layers.28.self_attn.q_norm.weight": "model-00002-of-00003.safetensors",
275
+ "transformer.layers.28.self_attn.q_proj.weight": "model-00002-of-00003.safetensors",
276
+ "transformer.layers.28.self_attn.v_proj.weight": "model-00002-of-00003.safetensors",
277
+ "transformer.layers.29.input_layernorm.weight": "model-00002-of-00003.safetensors",
278
+ "transformer.layers.29.mlp.down_proj.weight": "model-00002-of-00003.safetensors",
279
+ "transformer.layers.29.mlp.gate_proj.weight": "model-00002-of-00003.safetensors",
280
+ "transformer.layers.29.mlp.up_proj.weight": "model-00002-of-00003.safetensors",
281
+ "transformer.layers.29.post_attention_layernorm.weight": "model-00002-of-00003.safetensors",
282
+ "transformer.layers.29.self_attn.k_norm.weight": "model-00002-of-00003.safetensors",
283
+ "transformer.layers.29.self_attn.k_proj.weight": "model-00002-of-00003.safetensors",
284
+ "transformer.layers.29.self_attn.o_proj.weight": "model-00002-of-00003.safetensors",
285
+ "transformer.layers.29.self_attn.q_norm.weight": "model-00002-of-00003.safetensors",
286
+ "transformer.layers.29.self_attn.q_proj.weight": "model-00002-of-00003.safetensors",
287
+ "transformer.layers.29.self_attn.v_proj.weight": "model-00002-of-00003.safetensors",
288
+ "transformer.layers.3.input_layernorm.weight": "model-00001-of-00003.safetensors",
289
+ "transformer.layers.3.mlp.down_proj.weight": "model-00001-of-00003.safetensors",
290
+ "transformer.layers.3.mlp.gate_proj.weight": "model-00001-of-00003.safetensors",
291
+ "transformer.layers.3.mlp.up_proj.weight": "model-00001-of-00003.safetensors",
292
+ "transformer.layers.3.post_attention_layernorm.weight": "model-00001-of-00003.safetensors",
293
+ "transformer.layers.3.self_attn.k_norm.weight": "model-00001-of-00003.safetensors",
294
+ "transformer.layers.3.self_attn.k_proj.weight": "model-00001-of-00003.safetensors",
295
+ "transformer.layers.3.self_attn.o_proj.weight": "model-00001-of-00003.safetensors",
296
+ "transformer.layers.3.self_attn.q_norm.weight": "model-00001-of-00003.safetensors",
297
+ "transformer.layers.3.self_attn.q_proj.weight": "model-00001-of-00003.safetensors",
298
+ "transformer.layers.3.self_attn.v_proj.weight": "model-00001-of-00003.safetensors",
299
+ "transformer.layers.30.input_layernorm.weight": "model-00002-of-00003.safetensors",
300
+ "transformer.layers.30.mlp.down_proj.weight": "model-00002-of-00003.safetensors",
301
+ "transformer.layers.30.mlp.gate_proj.weight": "model-00002-of-00003.safetensors",
302
+ "transformer.layers.30.mlp.up_proj.weight": "model-00002-of-00003.safetensors",
303
+ "transformer.layers.30.post_attention_layernorm.weight": "model-00002-of-00003.safetensors",
304
+ "transformer.layers.30.self_attn.k_norm.weight": "model-00002-of-00003.safetensors",
305
+ "transformer.layers.30.self_attn.k_proj.weight": "model-00002-of-00003.safetensors",
306
+ "transformer.layers.30.self_attn.o_proj.weight": "model-00002-of-00003.safetensors",
307
+ "transformer.layers.30.self_attn.q_norm.weight": "model-00002-of-00003.safetensors",
308
+ "transformer.layers.30.self_attn.q_proj.weight": "model-00002-of-00003.safetensors",
309
+ "transformer.layers.30.self_attn.v_proj.weight": "model-00002-of-00003.safetensors",
310
+ "transformer.layers.31.input_layernorm.weight": "model-00002-of-00003.safetensors",
311
+ "transformer.layers.31.mlp.down_proj.weight": "model-00002-of-00003.safetensors",
312
+ "transformer.layers.31.mlp.gate_proj.weight": "model-00002-of-00003.safetensors",
313
+ "transformer.layers.31.mlp.up_proj.weight": "model-00002-of-00003.safetensors",
314
+ "transformer.layers.31.post_attention_layernorm.weight": "model-00002-of-00003.safetensors",
315
+ "transformer.layers.31.self_attn.k_norm.weight": "model-00002-of-00003.safetensors",
316
+ "transformer.layers.31.self_attn.k_proj.weight": "model-00002-of-00003.safetensors",
317
+ "transformer.layers.31.self_attn.o_proj.weight": "model-00002-of-00003.safetensors",
318
+ "transformer.layers.31.self_attn.q_norm.weight": "model-00002-of-00003.safetensors",
319
+ "transformer.layers.31.self_attn.q_proj.weight": "model-00002-of-00003.safetensors",
320
+ "transformer.layers.31.self_attn.v_proj.weight": "model-00002-of-00003.safetensors",
321
+ "transformer.layers.32.input_layernorm.weight": "model-00002-of-00003.safetensors",
322
+ "transformer.layers.32.mlp.down_proj.weight": "model-00002-of-00003.safetensors",
323
+ "transformer.layers.32.mlp.gate_proj.weight": "model-00002-of-00003.safetensors",
324
+ "transformer.layers.32.mlp.up_proj.weight": "model-00002-of-00003.safetensors",
325
+ "transformer.layers.32.post_attention_layernorm.weight": "model-00002-of-00003.safetensors",
326
+ "transformer.layers.32.self_attn.k_norm.weight": "model-00002-of-00003.safetensors",
327
+ "transformer.layers.32.self_attn.k_proj.weight": "model-00002-of-00003.safetensors",
328
+ "transformer.layers.32.self_attn.o_proj.weight": "model-00002-of-00003.safetensors",
329
+ "transformer.layers.32.self_attn.q_norm.weight": "model-00002-of-00003.safetensors",
330
+ "transformer.layers.32.self_attn.q_proj.weight": "model-00002-of-00003.safetensors",
331
+ "transformer.layers.32.self_attn.v_proj.weight": "model-00002-of-00003.safetensors",
332
+ "transformer.layers.33.input_layernorm.weight": "model-00002-of-00003.safetensors",
333
+ "transformer.layers.33.mlp.down_proj.weight": "model-00002-of-00003.safetensors",
334
+ "transformer.layers.33.mlp.gate_proj.weight": "model-00002-of-00003.safetensors",
335
+ "transformer.layers.33.mlp.up_proj.weight": "model-00002-of-00003.safetensors",
336
+ "transformer.layers.33.post_attention_layernorm.weight": "model-00002-of-00003.safetensors",
337
+ "transformer.layers.33.self_attn.k_norm.weight": "model-00002-of-00003.safetensors",
338
+ "transformer.layers.33.self_attn.k_proj.weight": "model-00002-of-00003.safetensors",
339
+ "transformer.layers.33.self_attn.o_proj.weight": "model-00002-of-00003.safetensors",
340
+ "transformer.layers.33.self_attn.q_norm.weight": "model-00002-of-00003.safetensors",
341
+ "transformer.layers.33.self_attn.q_proj.weight": "model-00002-of-00003.safetensors",
342
+ "transformer.layers.33.self_attn.v_proj.weight": "model-00002-of-00003.safetensors",
343
+ "transformer.layers.34.input_layernorm.weight": "model-00002-of-00003.safetensors",
344
+ "transformer.layers.34.mlp.down_proj.weight": "model-00002-of-00003.safetensors",
345
+ "transformer.layers.34.mlp.gate_proj.weight": "model-00002-of-00003.safetensors",
346
+ "transformer.layers.34.mlp.up_proj.weight": "model-00003-of-00003.safetensors",
347
+ "transformer.layers.34.post_attention_layernorm.weight": "model-00003-of-00003.safetensors",
348
+ "transformer.layers.34.self_attn.k_norm.weight": "model-00003-of-00003.safetensors",
349
+ "transformer.layers.34.self_attn.k_proj.weight": "model-00003-of-00003.safetensors",
350
+ "transformer.layers.34.self_attn.o_proj.weight": "model-00003-of-00003.safetensors",
351
+ "transformer.layers.34.self_attn.q_norm.weight": "model-00003-of-00003.safetensors",
352
+ "transformer.layers.34.self_attn.q_proj.weight": "model-00003-of-00003.safetensors",
353
+ "transformer.layers.34.self_attn.v_proj.weight": "model-00003-of-00003.safetensors",
354
+ "transformer.layers.35.input_layernorm.weight": "model-00003-of-00003.safetensors",
355
+ "transformer.layers.35.mlp.down_proj.weight": "model-00003-of-00003.safetensors",
356
+ "transformer.layers.35.mlp.gate_proj.weight": "model-00003-of-00003.safetensors",
357
+ "transformer.layers.35.mlp.up_proj.weight": "model-00003-of-00003.safetensors",
358
+ "transformer.layers.35.post_attention_layernorm.weight": "model-00003-of-00003.safetensors",
359
+ "transformer.layers.35.self_attn.k_norm.weight": "model-00003-of-00003.safetensors",
360
+ "transformer.layers.35.self_attn.k_proj.weight": "model-00003-of-00003.safetensors",
361
+ "transformer.layers.35.self_attn.o_proj.weight": "model-00003-of-00003.safetensors",
362
+ "transformer.layers.35.self_attn.q_norm.weight": "model-00003-of-00003.safetensors",
363
+ "transformer.layers.35.self_attn.q_proj.weight": "model-00003-of-00003.safetensors",
364
+ "transformer.layers.35.self_attn.v_proj.weight": "model-00003-of-00003.safetensors",
365
+ "transformer.layers.4.input_layernorm.weight": "model-00001-of-00003.safetensors",
366
+ "transformer.layers.4.mlp.down_proj.weight": "model-00001-of-00003.safetensors",
367
+ "transformer.layers.4.mlp.gate_proj.weight": "model-00001-of-00003.safetensors",
368
+ "transformer.layers.4.mlp.up_proj.weight": "model-00001-of-00003.safetensors",
369
+ "transformer.layers.4.post_attention_layernorm.weight": "model-00001-of-00003.safetensors",
370
+ "transformer.layers.4.self_attn.k_norm.weight": "model-00001-of-00003.safetensors",
371
+ "transformer.layers.4.self_attn.k_proj.weight": "model-00001-of-00003.safetensors",
372
+ "transformer.layers.4.self_attn.o_proj.weight": "model-00001-of-00003.safetensors",
373
+ "transformer.layers.4.self_attn.q_norm.weight": "model-00001-of-00003.safetensors",
374
+ "transformer.layers.4.self_attn.q_proj.weight": "model-00001-of-00003.safetensors",
375
+ "transformer.layers.4.self_attn.v_proj.weight": "model-00001-of-00003.safetensors",
376
+ "transformer.layers.5.input_layernorm.weight": "model-00001-of-00003.safetensors",
377
+ "transformer.layers.5.mlp.down_proj.weight": "model-00001-of-00003.safetensors",
378
+ "transformer.layers.5.mlp.gate_proj.weight": "model-00001-of-00003.safetensors",
379
+ "transformer.layers.5.mlp.up_proj.weight": "model-00001-of-00003.safetensors",
380
+ "transformer.layers.5.post_attention_layernorm.weight": "model-00001-of-00003.safetensors",
381
+ "transformer.layers.5.self_attn.k_norm.weight": "model-00001-of-00003.safetensors",
382
+ "transformer.layers.5.self_attn.k_proj.weight": "model-00001-of-00003.safetensors",
383
+ "transformer.layers.5.self_attn.o_proj.weight": "model-00001-of-00003.safetensors",
384
+ "transformer.layers.5.self_attn.q_norm.weight": "model-00001-of-00003.safetensors",
385
+ "transformer.layers.5.self_attn.q_proj.weight": "model-00001-of-00003.safetensors",
386
+ "transformer.layers.5.self_attn.v_proj.weight": "model-00001-of-00003.safetensors",
387
+ "transformer.layers.6.input_layernorm.weight": "model-00001-of-00003.safetensors",
388
+ "transformer.layers.6.mlp.down_proj.weight": "model-00001-of-00003.safetensors",
389
+ "transformer.layers.6.mlp.gate_proj.weight": "model-00001-of-00003.safetensors",
390
+ "transformer.layers.6.mlp.up_proj.weight": "model-00001-of-00003.safetensors",
391
+ "transformer.layers.6.post_attention_layernorm.weight": "model-00001-of-00003.safetensors",
392
+ "transformer.layers.6.self_attn.k_norm.weight": "model-00001-of-00003.safetensors",
393
+ "transformer.layers.6.self_attn.k_proj.weight": "model-00001-of-00003.safetensors",
394
+ "transformer.layers.6.self_attn.o_proj.weight": "model-00001-of-00003.safetensors",
395
+ "transformer.layers.6.self_attn.q_norm.weight": "model-00001-of-00003.safetensors",
396
+ "transformer.layers.6.self_attn.q_proj.weight": "model-00001-of-00003.safetensors",
397
+ "transformer.layers.6.self_attn.v_proj.weight": "model-00001-of-00003.safetensors",
398
+ "transformer.layers.7.input_layernorm.weight": "model-00001-of-00003.safetensors",
399
+ "transformer.layers.7.mlp.down_proj.weight": "model-00001-of-00003.safetensors",
400
+ "transformer.layers.7.mlp.gate_proj.weight": "model-00001-of-00003.safetensors",
401
+ "transformer.layers.7.mlp.up_proj.weight": "model-00001-of-00003.safetensors",
402
+ "transformer.layers.7.post_attention_layernorm.weight": "model-00001-of-00003.safetensors",
403
+ "transformer.layers.7.self_attn.k_norm.weight": "model-00001-of-00003.safetensors",
404
+ "transformer.layers.7.self_attn.k_proj.weight": "model-00001-of-00003.safetensors",
405
+ "transformer.layers.7.self_attn.o_proj.weight": "model-00001-of-00003.safetensors",
406
+ "transformer.layers.7.self_attn.q_norm.weight": "model-00001-of-00003.safetensors",
407
+ "transformer.layers.7.self_attn.q_proj.weight": "model-00001-of-00003.safetensors",
408
+ "transformer.layers.7.self_attn.v_proj.weight": "model-00001-of-00003.safetensors",
409
+ "transformer.layers.8.input_layernorm.weight": "model-00001-of-00003.safetensors",
410
+ "transformer.layers.8.mlp.down_proj.weight": "model-00001-of-00003.safetensors",
411
+ "transformer.layers.8.mlp.gate_proj.weight": "model-00001-of-00003.safetensors",
412
+ "transformer.layers.8.mlp.up_proj.weight": "model-00001-of-00003.safetensors",
413
+ "transformer.layers.8.post_attention_layernorm.weight": "model-00001-of-00003.safetensors",
414
+ "transformer.layers.8.self_attn.k_norm.weight": "model-00001-of-00003.safetensors",
415
+ "transformer.layers.8.self_attn.k_proj.weight": "model-00001-of-00003.safetensors",
416
+ "transformer.layers.8.self_attn.o_proj.weight": "model-00001-of-00003.safetensors",
417
+ "transformer.layers.8.self_attn.q_norm.weight": "model-00001-of-00003.safetensors",
418
+ "transformer.layers.8.self_attn.q_proj.weight": "model-00001-of-00003.safetensors",
419
+ "transformer.layers.8.self_attn.v_proj.weight": "model-00001-of-00003.safetensors",
420
+ "transformer.layers.9.input_layernorm.weight": "model-00001-of-00003.safetensors",
421
+ "transformer.layers.9.mlp.down_proj.weight": "model-00001-of-00003.safetensors",
422
+ "transformer.layers.9.mlp.gate_proj.weight": "model-00001-of-00003.safetensors",
423
+ "transformer.layers.9.mlp.up_proj.weight": "model-00001-of-00003.safetensors",
424
+ "transformer.layers.9.post_attention_layernorm.weight": "model-00001-of-00003.safetensors",
425
+ "transformer.layers.9.self_attn.k_norm.weight": "model-00001-of-00003.safetensors",
426
+ "transformer.layers.9.self_attn.k_proj.weight": "model-00001-of-00003.safetensors",
427
+ "transformer.layers.9.self_attn.o_proj.weight": "model-00001-of-00003.safetensors",
428
+ "transformer.layers.9.self_attn.q_norm.weight": "model-00001-of-00003.safetensors",
429
+ "transformer.layers.9.self_attn.q_proj.weight": "model-00001-of-00003.safetensors",
430
+ "transformer.layers.9.self_attn.v_proj.weight": "model-00001-of-00003.safetensors",
431
+ "transformer.norm.weight": "model-00003-of-00003.safetensors"
432
+ }
433
+ }
modeling_moss_tts.py ADDED
@@ -0,0 +1,623 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # coding=utf-8
2
+ """Modeling code for the MOSS-TTS-Local-Transformer-v1.5 HuggingFace release."""
3
+
4
+ from __future__ import annotations
5
+
6
+ from dataclasses import dataclass
7
+ from typing import Any, Optional, Union
8
+
9
+ import torch
10
+ import torch.nn as nn
11
+ from transformers.modeling_outputs import BaseModelOutputWithPast
12
+ from transformers.modeling_utils import PreTrainedModel
13
+ from transformers.models.gpt2.configuration_gpt2 import GPT2Config
14
+ from transformers.utils import ModelOutput
15
+
16
+ from .configuration_moss_tts import MossTTSLocalConfig
17
+ from .gpt2_decoder import MossTTSNanoGPT2Model
18
+ from .qwen3_decoder import MossQwen3Model
19
+
20
+
21
+ @dataclass
22
+ class MossTTSLocalOutput(ModelOutput):
23
+ last_hidden_state: Optional[torch.FloatTensor] = None
24
+ past_key_values: Optional[tuple[tuple[torch.Tensor, torch.Tensor], ...]] = None
25
+ hidden_states: Optional[tuple[torch.FloatTensor, ...]] = None
26
+ attentions: Optional[tuple[torch.FloatTensor, ...]] = None
27
+
28
+
29
+ def _find_last_equal(input_ids: torch.LongTensor, value: int) -> torch.LongTensor:
30
+ matches = input_ids.eq(int(value))
31
+ if not bool(matches.any(dim=1).all().item()):
32
+ raise ValueError(f"Every sample must contain token id {int(value)}.")
33
+ positions = torch.arange(input_ids.shape[1], device=input_ids.device, dtype=torch.long)
34
+ masked_positions = positions.unsqueeze(0).masked_fill(~matches, -1)
35
+ return masked_positions.max(dim=1).values
36
+
37
+
38
+ class MossTTSLocalPreTrainedModel(PreTrainedModel):
39
+ config_class = MossTTSLocalConfig
40
+ base_model_prefix = "transformer"
41
+ supports_gradient_checkpointing = True
42
+ _no_split_modules = ["MossTTSNanoGPT2Block", "MossQwen3DecoderLayer"]
43
+ _supports_flash_attn_2 = True
44
+ _supports_sdpa = True
45
+ _supports_cache_class = True
46
+
47
+ def _set_gradient_checkpointing(self, module: nn.Module, value: bool = False) -> None:
48
+ if isinstance(module, MossTTSNanoGPT2Model) or isinstance(module, MossQwen3Model):
49
+ module.gradient_checkpointing = value
50
+
51
+
52
+ class MossTTSLocalModel(MossTTSLocalPreTrainedModel):
53
+ _tied_weights_keys = None
54
+
55
+ def __init__(self, config: MossTTSLocalConfig) -> None:
56
+ super().__init__(config)
57
+ self._tied_weights_keys = self._build_tied_weights_keys(config)
58
+
59
+ config.qwen3_config.pad_token_id = config.pad_token_id
60
+ config.qwen3_config._attn_implementation = config.attn_implementation
61
+ local_gpt2_config = config.gpt2_config.to_dict()
62
+ local_gpt2_config["n_layer"] = int(getattr(config, "local_transformer_layers", config.gpt2_config.n_layer))
63
+ local_gpt2_config["n_positions"] = int(config.n_vq) + 1
64
+ local_gpt2_config["n_ctx"] = int(config.n_vq) + 1
65
+ local_gpt2_config = GPT2Config(**local_gpt2_config)
66
+ local_gpt2_config.pad_token_id = config.pad_token_id
67
+ local_gpt2_config._attn_implementation = config.local_transformer_attn_implementation
68
+
69
+ self.transformer = MossQwen3Model(config.qwen3_config)
70
+ self.local_transformer = MossTTSNanoGPT2Model(
71
+ local_gpt2_config,
72
+ attn_implementation=config.local_transformer_attn_implementation,
73
+ )
74
+ self.local_transformer.wte = nn.Identity()
75
+
76
+ hidden_size = int(config.hidden_size)
77
+ self.audio_embeddings = nn.ModuleList(
78
+ [
79
+ nn.Embedding(int(config.audio_codebook_sizes[index]), hidden_size)
80
+ for index in range(config.n_vq)
81
+ ]
82
+ )
83
+ self.text_lm_head = nn.Linear(hidden_size, int(config.vocab_size), bias=False)
84
+ self.audio_lm_heads = nn.ModuleList(
85
+ [
86
+ nn.Linear(hidden_size, int(config.audio_codebook_sizes[index]), bias=False)
87
+ for index in range(config.n_vq)
88
+ ]
89
+ )
90
+ self.local_text_lm_head = (
91
+ nn.Linear(hidden_size, 2, bias=False)
92
+ if self._use_binary_local_text_head()
93
+ else None
94
+ )
95
+
96
+ self.post_init()
97
+ self.tie_weights()
98
+ self.initialize_local_text_lm_head_from_text_lm_head()
99
+
100
+ def can_generate(self) -> bool:
101
+ return True
102
+
103
+ @staticmethod
104
+ def _build_tied_weights_keys(config: MossTTSLocalConfig) -> dict[str, str]:
105
+ tied_weights = {"text_lm_head.weight": "transformer.embed_tokens.weight"}
106
+ tied_weights.update(
107
+ {
108
+ f"audio_lm_heads.{index}.weight": f"audio_embeddings.{index}.weight"
109
+ for index in range(config.n_vq)
110
+ }
111
+ )
112
+ return tied_weights
113
+
114
+ def tie_weights(self, *args, **kwargs) -> None:
115
+ del args, kwargs
116
+ self.text_lm_head.weight = self.transformer.embed_tokens.weight
117
+ for embedding, head in zip(self.audio_embeddings, self.audio_lm_heads):
118
+ head.weight = embedding.weight
119
+
120
+ def get_input_embeddings(self) -> nn.Embedding:
121
+ return self.transformer.embed_tokens
122
+
123
+ def set_input_embeddings(self, value: nn.Embedding) -> None:
124
+ self.transformer.embed_tokens = value
125
+ self.tie_weights()
126
+ self.initialize_local_text_lm_head_from_text_lm_head()
127
+
128
+ def get_output_embeddings(self) -> nn.Linear:
129
+ return self.text_lm_head
130
+
131
+ def set_output_embeddings(self, new_embeddings: nn.Linear) -> None:
132
+ self.text_lm_head = new_embeddings
133
+ self.tie_weights()
134
+ self.initialize_local_text_lm_head_from_text_lm_head()
135
+
136
+ def _use_binary_local_text_head(self) -> bool:
137
+ return str(getattr(self.config, "local_text_head_mode", "full_vocab")).strip().lower() == "binary"
138
+
139
+ def _local_text_candidate_ids(self, device: torch.device) -> torch.LongTensor:
140
+ return torch.tensor(
141
+ [
142
+ int(self.config.audio_assistant_slot_token_id),
143
+ int(self.config.audio_end_token_id),
144
+ ],
145
+ dtype=torch.long,
146
+ device=device,
147
+ )
148
+
149
+ def initialize_local_text_lm_head_from_text_lm_head(self) -> None:
150
+ if not self._use_binary_local_text_head() or self.local_text_lm_head is None:
151
+ return
152
+ candidate_ids = self._local_text_candidate_ids(self.text_lm_head.weight.device)
153
+ with torch.no_grad():
154
+ source_weight = self.text_lm_head.weight.index_select(0, candidate_ids)
155
+ if tuple(source_weight.shape) == tuple(self.local_text_lm_head.weight.shape):
156
+ self.local_text_lm_head.weight.copy_(
157
+ source_weight.to(
158
+ device=self.local_text_lm_head.weight.device,
159
+ dtype=self.local_text_lm_head.weight.dtype,
160
+ )
161
+ )
162
+
163
+ def _resolve_fixed_nq(
164
+ self,
165
+ n_vq_for_inference: Optional[int] = None,
166
+ nq: Optional[int] = None,
167
+ ) -> int:
168
+ requested = n_vq_for_inference if n_vq_for_inference is not None else nq
169
+ config_nq = int(self.config.n_vq)
170
+ if requested is not None and int(requested) != config_nq:
171
+ raise ValueError(
172
+ "This MOSS-TTS-Local-Transformer-v1.5 release is trained with a fixed RVQ depth. "
173
+ f"Expected n_vq={config_nq}, got {int(requested)}."
174
+ )
175
+ return config_nq
176
+
177
+ def _build_inputs_embeds(self, input_ids: torch.LongTensor) -> torch.FloatTensor:
178
+ if input_ids.ndim != 3 or input_ids.shape[-1] != self.config.n_vq + 1:
179
+ raise ValueError(
180
+ f"Expected input_ids shape [batch, seq, {self.config.n_vq + 1}], "
181
+ f"got {tuple(input_ids.shape)}."
182
+ )
183
+ text_ids = input_ids[..., 0]
184
+ inputs_embeds = self.transformer.embed_tokens(text_ids)
185
+ for channel_index, embedding in enumerate(self.audio_embeddings):
186
+ channel_ids = input_ids[..., channel_index + 1]
187
+ valid_mask = channel_ids.ne(self.config.audio_pad_token_id)
188
+ safe_ids = channel_ids.masked_fill(~valid_mask, 0)
189
+ audio_embeds = embedding(safe_ids) * valid_mask.unsqueeze(-1)
190
+ inputs_embeds = inputs_embeds + audio_embeds
191
+ return inputs_embeds
192
+
193
+ def _global_hidden_to_local(self, hidden_states: torch.FloatTensor) -> torch.FloatTensor:
194
+ return hidden_states
195
+
196
+ @staticmethod
197
+ def _local_past_length(past_key_values: Optional[tuple[Any, ...]]) -> int:
198
+ if past_key_values is None or len(past_key_values) == 0:
199
+ return 0
200
+ first_layer_past = past_key_values[0]
201
+ if isinstance(first_layer_past, dict) and bool(first_layer_past.get("static_kv_cache", False)):
202
+ return int(first_layer_past.get("length", 0))
203
+ return int(first_layer_past[0].shape[1])
204
+
205
+ def _new_static_local_past_key_values(
206
+ self,
207
+ batch_size: int,
208
+ max_length: int,
209
+ device: torch.device,
210
+ dtype: torch.dtype,
211
+ ) -> tuple[dict[str, Any], ...]:
212
+ layers = []
213
+ for block in self.local_transformer.h:
214
+ attn = block.attn
215
+ cache_shape = (
216
+ int(batch_size),
217
+ int(max_length),
218
+ int(attn.num_heads),
219
+ int(attn.head_dim),
220
+ )
221
+ layers.append(
222
+ {
223
+ "static_kv_cache": True,
224
+ "key": torch.empty(cache_shape, device=device, dtype=dtype),
225
+ "value": torch.empty(cache_shape, device=device, dtype=dtype),
226
+ "length": 0,
227
+ }
228
+ )
229
+ return tuple(layers)
230
+
231
+ def _decode_local_hidden_states_with_cache(
232
+ self,
233
+ local_inputs_embeds: torch.FloatTensor,
234
+ past_key_values: Optional[tuple[Any, ...]] = None,
235
+ ) -> tuple[torch.FloatTensor, Optional[tuple[Any, ...]]]:
236
+ if (
237
+ past_key_values is None
238
+ and not self.training
239
+ and bool(getattr(self.config, "use_static_local_kv_cache", True))
240
+ ):
241
+ max_length = max(int(getattr(self.config, "n_vq", 0)) + 1, int(local_inputs_embeds.shape[1]))
242
+ past_key_values = self._new_static_local_past_key_values(
243
+ batch_size=int(local_inputs_embeds.shape[0]),
244
+ max_length=max_length,
245
+ device=local_inputs_embeds.device,
246
+ dtype=local_inputs_embeds.dtype,
247
+ )
248
+ past_length = self._local_past_length(past_key_values)
249
+ local_seq_len = int(local_inputs_embeds.shape[1])
250
+ local_position_ids = torch.arange(
251
+ past_length,
252
+ past_length + local_seq_len,
253
+ device=local_inputs_embeds.device,
254
+ dtype=torch.long,
255
+ ).unsqueeze(0)
256
+ if int(local_inputs_embeds.shape[0]) != 1:
257
+ local_position_ids = local_position_ids.expand(int(local_inputs_embeds.shape[0]), -1)
258
+ local_outputs = self.local_transformer(
259
+ input_ids=None,
260
+ past_key_values=past_key_values,
261
+ attention_mask=None,
262
+ position_ids=local_position_ids,
263
+ inputs_embeds=local_inputs_embeds,
264
+ use_cache=True,
265
+ output_attentions=False,
266
+ output_hidden_states=False,
267
+ return_dict=True,
268
+ cu_seqlens=None,
269
+ num_sequences=None,
270
+ )
271
+ return local_outputs.last_hidden_state, local_outputs.past_key_values
272
+
273
+ def forward(
274
+ self,
275
+ input_ids: Optional[torch.LongTensor] = None,
276
+ attention_mask: Optional[torch.Tensor] = None,
277
+ position_ids: Optional[torch.LongTensor] = None,
278
+ past_key_values: Optional[tuple[tuple[torch.Tensor, torch.Tensor], ...]] = None,
279
+ inputs_embeds: Optional[torch.FloatTensor] = None,
280
+ use_cache: Optional[bool] = None,
281
+ output_attentions: Optional[bool] = None,
282
+ output_hidden_states: Optional[bool] = None,
283
+ return_dict: Optional[bool] = True,
284
+ **kwargs,
285
+ ) -> Union[tuple, MossTTSLocalOutput]:
286
+ del kwargs
287
+ if inputs_embeds is None:
288
+ if input_ids is None:
289
+ raise ValueError("Either input_ids or inputs_embeds must be provided.")
290
+ inputs_embeds = self._build_inputs_embeds(input_ids)
291
+ outputs = self.transformer(
292
+ input_ids=None,
293
+ attention_mask=attention_mask,
294
+ position_ids=position_ids,
295
+ past_key_values=past_key_values,
296
+ inputs_embeds=inputs_embeds,
297
+ use_cache=use_cache,
298
+ output_attentions=output_attentions,
299
+ output_hidden_states=output_hidden_states,
300
+ return_dict=True,
301
+ cu_seqlens=None,
302
+ num_sequences=None,
303
+ )
304
+ if not return_dict:
305
+ return (
306
+ outputs.last_hidden_state,
307
+ outputs.past_key_values,
308
+ outputs.hidden_states,
309
+ outputs.attentions,
310
+ )
311
+ return MossTTSLocalOutput(
312
+ last_hidden_state=outputs.last_hidden_state,
313
+ past_key_values=outputs.past_key_values,
314
+ hidden_states=outputs.hidden_states,
315
+ attentions=outputs.attentions,
316
+ )
317
+
318
+ def _decode_local_last_hidden_state(
319
+ self,
320
+ local_inputs_embeds: torch.FloatTensor,
321
+ ) -> torch.FloatTensor:
322
+ local_seq_len = int(local_inputs_embeds.shape[1])
323
+ local_position_ids = torch.arange(
324
+ 0,
325
+ local_seq_len,
326
+ device=local_inputs_embeds.device,
327
+ dtype=torch.long,
328
+ ).unsqueeze(0)
329
+ if int(local_inputs_embeds.shape[0]) != 1:
330
+ local_position_ids = local_position_ids.expand(int(local_inputs_embeds.shape[0]), -1)
331
+ local_outputs = self.local_transformer(
332
+ input_ids=None,
333
+ attention_mask=None,
334
+ position_ids=local_position_ids,
335
+ inputs_embeds=local_inputs_embeds,
336
+ use_cache=False,
337
+ output_attentions=False,
338
+ output_hidden_states=False,
339
+ return_dict=True,
340
+ cu_seqlens=None,
341
+ num_sequences=None,
342
+ )
343
+ return local_outputs.last_hidden_state[:, -1, :]
344
+
345
+ def _filter_logits(
346
+ self,
347
+ logits: torch.FloatTensor,
348
+ top_k: Optional[int],
349
+ top_p: Optional[float],
350
+ ) -> torch.FloatTensor:
351
+ scores = logits
352
+ if top_k is not None and int(top_k) > 0 and int(top_k) < scores.shape[-1]:
353
+ kth = torch.topk(scores, int(top_k), dim=-1).values[..., -1, None]
354
+ scores = scores.masked_fill(scores < kth, -torch.inf)
355
+ if top_p is not None and 0.0 < float(top_p) < 1.0:
356
+ sorted_scores, sorted_indices = torch.sort(scores, descending=True, dim=-1)
357
+ sorted_probs = torch.softmax(sorted_scores, dim=-1)
358
+ cumulative_probs = sorted_probs.cumsum(dim=-1)
359
+ sorted_mask = cumulative_probs > float(top_p)
360
+ sorted_mask[..., 1:] = sorted_mask[..., :-1].clone()
361
+ sorted_mask[..., 0] = False
362
+ remove_mask = torch.zeros_like(scores, dtype=torch.bool)
363
+ remove_mask.scatter_(dim=-1, index=sorted_indices, src=sorted_mask)
364
+ scores = scores.masked_fill(remove_mask, -torch.inf)
365
+ return scores
366
+
367
+ def _apply_repetition_penalty(
368
+ self,
369
+ scores: torch.FloatTensor,
370
+ previous_token_ids: Optional[torch.LongTensor],
371
+ penalty: float,
372
+ ) -> torch.FloatTensor:
373
+ if previous_token_ids is None or float(penalty) == 1.0:
374
+ return scores
375
+ if previous_token_ids.ndim == 1:
376
+ previous_token_ids = previous_token_ids.unsqueeze(0)
377
+ updated = scores.clone()
378
+ for batch_index in range(updated.shape[0]):
379
+ unique_token_ids = torch.unique(previous_token_ids[batch_index])
380
+ unique_token_ids = unique_token_ids[
381
+ (unique_token_ids >= 0) & (unique_token_ids < updated.shape[-1])
382
+ ]
383
+ if unique_token_ids.numel() == 0:
384
+ continue
385
+ token_scores = updated[batch_index].index_select(0, unique_token_ids)
386
+ token_scores = torch.where(
387
+ token_scores < 0,
388
+ token_scores * float(penalty),
389
+ token_scores / float(penalty),
390
+ )
391
+ updated[batch_index].scatter_(0, unique_token_ids, token_scores)
392
+ return updated
393
+
394
+ def _sample_next_token(
395
+ self,
396
+ logits: torch.FloatTensor,
397
+ do_sample: bool,
398
+ temperature: float,
399
+ top_k: Optional[int],
400
+ top_p: Optional[float],
401
+ previous_token_ids: Optional[torch.LongTensor] = None,
402
+ repetition_penalty: float = 1.0,
403
+ ) -> torch.LongTensor:
404
+ scores = logits.float()
405
+ scores = self._apply_repetition_penalty(scores, previous_token_ids, repetition_penalty)
406
+ if not do_sample:
407
+ return torch.argmax(scores, dim=-1)
408
+ if float(temperature) <= 0:
409
+ raise ValueError("temperature must be positive when do_sample=True.")
410
+ scores = scores / float(temperature)
411
+ scores = self._filter_logits(scores, top_k=top_k, top_p=top_p)
412
+ probs = torch.softmax(scores, dim=-1)
413
+ return torch.multinomial(probs, num_samples=1).squeeze(-1)
414
+
415
+ def _sample_next_assistant_text_token(
416
+ self,
417
+ local_hidden_states: torch.FloatTensor,
418
+ do_sample: bool,
419
+ temperature: float,
420
+ top_k: Optional[int],
421
+ top_p: Optional[float],
422
+ ) -> torch.LongTensor:
423
+ if self._use_binary_local_text_head() and self.local_text_lm_head is not None:
424
+ logits = self.local_text_lm_head(local_hidden_states)
425
+ sampled_indices = self._sample_next_token(
426
+ logits=logits,
427
+ do_sample=do_sample,
428
+ temperature=temperature,
429
+ top_k=top_k,
430
+ top_p=top_p,
431
+ )
432
+ candidate_ids = self._local_text_candidate_ids(logits.device)
433
+ return candidate_ids[sampled_indices]
434
+
435
+ candidate_ids = self._local_text_candidate_ids(local_hidden_states.device)
436
+ logits = self.text_lm_head(local_hidden_states).index_select(dim=-1, index=candidate_ids)
437
+ sampled_indices = self._sample_next_token(
438
+ logits=logits,
439
+ do_sample=do_sample,
440
+ temperature=temperature,
441
+ top_k=top_k,
442
+ top_p=top_p,
443
+ )
444
+ return candidate_ids[sampled_indices]
445
+
446
+ def _build_generation_row(
447
+ self,
448
+ batch_size: int,
449
+ device: torch.device,
450
+ audio_token_ids: torch.LongTensor,
451
+ ) -> torch.LongTensor:
452
+ row = torch.full(
453
+ (batch_size, 1, self.config.n_vq + 1),
454
+ int(self.config.audio_pad_token_id),
455
+ dtype=torch.long,
456
+ device=device,
457
+ )
458
+ row[:, :, 0] = int(self.config.audio_assistant_slot_token_id)
459
+ row[:, :, 1:] = audio_token_ids.unsqueeze(1)
460
+ return row
461
+
462
+ @torch.inference_mode()
463
+ def generate(
464
+ self,
465
+ input_ids: torch.LongTensor,
466
+ attention_mask: Optional[torch.Tensor] = None,
467
+ max_new_tokens: Optional[int] = None,
468
+ max_new_frames: Optional[int] = None,
469
+ do_sample: bool = True,
470
+ text_temperature: float = 1.0,
471
+ text_top_p: float = 1.0,
472
+ text_top_k: int = 50,
473
+ audio_temperature: Optional[float] = None,
474
+ audio_top_p: Optional[float] = None,
475
+ audio_top_k: Optional[int] = None,
476
+ audio_repetition_penalty: Optional[float] = None,
477
+ temperature: float = 1.0,
478
+ top_p: float = 0.95,
479
+ top_k: int = 50,
480
+ repetition_penalty: float = 1.0,
481
+ use_kv_cache: bool = True,
482
+ n_vq_for_inference: Optional[int] = None,
483
+ nq: Optional[int] = None,
484
+ **kwargs,
485
+ ) -> list[tuple[int, torch.LongTensor]]:
486
+ del kwargs
487
+ self._resolve_fixed_nq(n_vq_for_inference=n_vq_for_inference, nq=nq)
488
+
489
+ if input_ids.ndim == 2:
490
+ input_ids = input_ids.unsqueeze(0)
491
+ if input_ids.ndim != 3:
492
+ raise ValueError(f"Expected input_ids with 3 dims, got {tuple(input_ids.shape)}.")
493
+ if input_ids.shape[-1] != self.config.n_vq + 1:
494
+ raise ValueError(
495
+ f"Expected {self.config.n_vq + 1} channels from config.n_vq, got {input_ids.shape[-1]}."
496
+ )
497
+ if attention_mask is None:
498
+ attention_mask = torch.ones(input_ids.shape[:2], dtype=torch.bool, device=input_ids.device)
499
+ elif attention_mask.ndim == 1:
500
+ attention_mask = attention_mask.unsqueeze(0)
501
+ attention_mask = attention_mask.to(device=input_ids.device, dtype=torch.bool)
502
+
503
+ frame_budget = max_new_frames if max_new_frames is not None else max_new_tokens
504
+ if frame_budget is None:
505
+ frame_budget = 4096
506
+ frame_budget = int(frame_budget)
507
+
508
+ audio_temperature = float(temperature if audio_temperature is None else audio_temperature)
509
+ audio_top_p = float(top_p if audio_top_p is None else audio_top_p)
510
+ audio_top_k = int(top_k if audio_top_k is None else audio_top_k)
511
+ audio_repetition_penalty = float(
512
+ repetition_penalty if audio_repetition_penalty is None else audio_repetition_penalty
513
+ )
514
+
515
+ batch_size = input_ids.shape[0]
516
+ input_ids_length = input_ids.shape[1]
517
+ current_input_ids = input_ids
518
+ current_attention_mask = attention_mask
519
+ current_model_input_ids = current_input_ids
520
+ generated_frames: list[torch.LongTensor] = []
521
+ finished = torch.zeros(batch_size, dtype=torch.bool, device=input_ids.device)
522
+ past_key_values = None
523
+ local_dtype = self.local_transformer.ln_f.weight.dtype
524
+
525
+ for _ in range(frame_budget):
526
+ generated_audio_history = torch.stack(generated_frames, dim=1) if generated_frames else None
527
+ global_inputs_embeds = self._build_inputs_embeds(current_model_input_ids)
528
+ global_outputs = self.transformer(
529
+ input_ids=None,
530
+ past_key_values=past_key_values,
531
+ attention_mask=current_attention_mask,
532
+ position_ids=None,
533
+ inputs_embeds=global_inputs_embeds,
534
+ use_cache=use_kv_cache,
535
+ output_attentions=False,
536
+ output_hidden_states=False,
537
+ return_dict=True,
538
+ cu_seqlens=None,
539
+ num_sequences=None,
540
+ )
541
+ global_hidden_states = global_outputs.last_hidden_state[:, -1, :]
542
+ local_global_hidden_states = self._global_hidden_to_local(global_hidden_states).to(dtype=local_dtype)
543
+
544
+ local_prefix_hidden_states, local_prefix_past_key_values = self._decode_local_hidden_states_with_cache(
545
+ local_global_hidden_states.unsqueeze(1)
546
+ )
547
+ local_hidden_states = local_prefix_hidden_states[:, -1, :]
548
+ next_text_tokens = self._sample_next_assistant_text_token(
549
+ local_hidden_states=local_hidden_states,
550
+ do_sample=do_sample,
551
+ temperature=text_temperature,
552
+ top_k=text_top_k,
553
+ top_p=text_top_p,
554
+ )
555
+ should_continue = next_text_tokens.eq(int(self.config.audio_assistant_slot_token_id)) & ~finished
556
+ finished = finished | next_text_tokens.eq(int(self.config.audio_end_token_id))
557
+ if not bool(should_continue.any().item()):
558
+ break
559
+
560
+ next_frame_tokens = []
561
+ for channel_index in range(int(self.config.n_vq)):
562
+ channel_logits = self.audio_lm_heads[channel_index](local_hidden_states)
563
+ channel_token = self._sample_next_token(
564
+ logits=channel_logits,
565
+ do_sample=do_sample,
566
+ temperature=audio_temperature,
567
+ top_k=audio_top_k,
568
+ top_p=audio_top_p,
569
+ previous_token_ids=(
570
+ None
571
+ if generated_audio_history is None
572
+ else generated_audio_history[:, :, channel_index]
573
+ ),
574
+ repetition_penalty=audio_repetition_penalty,
575
+ )
576
+ next_frame_tokens.append(channel_token)
577
+ if channel_index + 1 < int(self.config.n_vq):
578
+ current_local_input = self.audio_embeddings[channel_index](channel_token).to(dtype=local_dtype)
579
+ local_token_hidden_states, local_prefix_past_key_values = (
580
+ self._decode_local_hidden_states_with_cache(
581
+ current_local_input.unsqueeze(1),
582
+ past_key_values=local_prefix_past_key_values,
583
+ )
584
+ )
585
+ local_hidden_states = local_token_hidden_states[:, -1, :]
586
+
587
+ next_frame = torch.stack(next_frame_tokens, dim=-1)
588
+ next_frame = next_frame.masked_fill(
589
+ ~should_continue.unsqueeze(-1),
590
+ int(self.config.audio_pad_token_id),
591
+ )
592
+ generated_frames.append(next_frame)
593
+
594
+ next_row = self._build_generation_row(
595
+ batch_size=batch_size,
596
+ device=input_ids.device,
597
+ audio_token_ids=next_frame,
598
+ )
599
+ if bool((~should_continue).any().item()):
600
+ next_row[~should_continue, 0, 0] = int(self.config.pad_token_id)
601
+ next_row[~should_continue, 0, 1:] = int(self.config.audio_pad_token_id)
602
+
603
+ current_input_ids = torch.cat([current_input_ids, next_row], dim=1)
604
+ current_attention_mask = torch.cat(
605
+ [current_attention_mask, should_continue.unsqueeze(1)],
606
+ dim=1,
607
+ )
608
+ if use_kv_cache:
609
+ current_model_input_ids = next_row
610
+ past_key_values = global_outputs.past_key_values
611
+ else:
612
+ current_model_input_ids = current_input_ids
613
+
614
+ start_indices = _find_last_equal(input_ids[..., 0], int(self.config.audio_start_token_id))
615
+ start_lengths = input_ids_length - start_indices - 1
616
+ outputs: list[tuple[int, torch.LongTensor]] = []
617
+ for start_index, start_length, generation_ids in zip(
618
+ start_indices.tolist(),
619
+ start_lengths.tolist(),
620
+ current_input_ids,
621
+ ):
622
+ outputs.append((int(start_length), generation_ids[int(start_index):].detach().cpu()))
623
+ return outputs
podcast_infer.py ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Portable two-speaker podcast inference for the merged NotebookLM Edition."""
2
+ import argparse,json,math
3
+ from pathlib import Path
4
+ import numpy as np
5
+ import torch
6
+ import base_runtime
7
+
8
+ LANGUAGES={'en':'English','de':'German','fr':'French','es':'Spanish','nl':'Dutch'}
9
+
10
+ def row_from_dialogue(dialogue,references,context_codes=None,context_description=''):
11
+ language=dialogue['language']; turns=dialogue['turns']
12
+ if language not in LANGUAGES or not turns:raise ValueError('Supported language and nonempty turns required')
13
+ if set(references)!={'S1','S2'}:raise ValueError('Supply separate S1 and S2 identity references')
14
+ for codes in references.values():
15
+ if codes.ndim!=2 or codes.shape[1]!=12 or not 63<=len(codes)<=187:raise ValueError('Each reference must have 12 codebooks and 5.04–14.96 seconds')
16
+ script=[];words=[];seconds=0.;pause=float(dialogue.get('pause_s',.24))
17
+ if not 0<=pause<=3:raise ValueError('Pause out of range')
18
+ for i,t in enumerate(turns):
19
+ if t['speaker'] not in references or not t['text'].strip() or not .4<=t['seconds']<=60:raise ValueError('Invalid turn')
20
+ if '\n' in t['direction'] or '\n' in t['text']:raise ValueError('Use separate turns for separate lines')
21
+ script.append('(speaker='+t['speaker']+', '+t['direction']+') ['+format(t['seconds'],'.2f')+' seconds duration] '+t['text'])
22
+ words.append(t['text']);seconds+=t['seconds']
23
+ if i<len(turns)-1 and pause:script.append('['+format(pause,'.2f')+' seconds pause]');seconds+=pause
24
+ if not 1<=seconds<=65:raise ValueError('This tested release limits one joint continuation to 65 seconds')
25
+ if context_codes is not None and (context_codes.ndim!=2 or context_codes.shape[1]!=12 or len(context_codes)>750):raise ValueError('Conversation context must be <=60 seconds')
26
+ return dict(language=language,plain=' '.join(words),instruction='GENERAL: '+dialogue.get('general','')+'\nSCRIPT:\n'+'\n'.join(script),
27
+ frames=round(seconds*12.5),speaker_references=references,context_codes=context_codes,context_description=context_description)
28
+
29
+ def generation_inputs(proc,row):
30
+ user=proc.build_user_message(text=row['plain'],instruction=row['instruction'],tokens=row['frames'],language=LANGUAGES[row['language']],reference=None)
31
+ blocks=[];audio=[]
32
+ for speaker in ['S1','S2']:
33
+ blocks.append('Speaker '+speaker+' identity reference:\n<|audio|>');audio.append(torch.as_tensor(row['speaker_references'][speaker],dtype=torch.long))
34
+ context=row.get('context_codes')
35
+ if context is not None and len(context):
36
+ blocks.append('Previous conversation, chronological and strictly before target:\n'+row['context_description']+'\n<|audio|>');audio.append(torch.as_tensor(context,dtype=torch.long))
37
+ marker='- Reference(s):\nNone\n'
38
+ if user['content'].count(marker)!=1:raise RuntimeError('Native processor reference wrapper changed')
39
+ user['content']=user['content'].replace(marker,'- Reference(s):\n'+'\n'.join(blocks)+'\n',1)
40
+ user['audio_codes_list']=audio;user.pop('text',None)
41
+ user['content']='<|im_start|>user\n'+user['content']+'<|im_end|>\n<|im_start|>assistant\n'
42
+ if user['content'].count('<|audio|>')!=len(audio):raise RuntimeError('Audio placeholders lost')
43
+ return proc([[user]],mode='generation',apply_chat_template=False)
44
+
45
+ def encode_reference(proc,path,device='cuda:0',context=False):
46
+ import soundfile as sf
47
+ wave,sr=sf.read(path,dtype='float32',always_2d=True)
48
+ minimum=.08 if context else 5.04;maximum=60 if context else 14.96
49
+ if len(wave)/sr<minimum or not np.isfinite(wave).all():raise ValueError('Reference is too short or nonfinite')
50
+ wave=wave[:round(maximum*sr)]
51
+ with torch.inference_mode():codes=proc.encode_audios_from_wav([torch.from_numpy(wave.T.copy())],sr,n_vq=12)[0]
52
+ return codes[:750 if context else 187].cpu().numpy()
53
+
54
+ def generate(model,proc,row,seed=20261103):
55
+ batch=generation_inputs(proc,row);device=next(model.parameters()).device
56
+ if len(batch['input_ids'][0])>30000:raise ValueError('Packed prefix too long; never silently truncate references')
57
+ torch.manual_seed(seed);torch.cuda.manual_seed_all(seed)
58
+ cap=min(1000,row['frames']+125)
59
+ with torch.inference_mode(),torch.autocast('cuda',dtype=torch.bfloat16):
60
+ result=model.generate(input_ids=batch['input_ids'].to(device),attention_mask=batch['attention_mask'].to(device),
61
+ max_new_frames=cap,do_sample=True,audio_temperature=1.,audio_top_p=.95,audio_top_k=50,audio_repetition_penalty=1.,use_kv_cache=True)
62
+ prefix,sequence=result[0]
63
+ if prefix!=0 or sequence.ndim!=2 or sequence.shape[1]!=13:raise ValueError('Invalid MOSS output')
64
+ codes=sequence[1:,1:];codes=codes[(codes[:,0]>=0)&(codes[:,0]!=model.config.audio_pad_token_id)].cpu()
65
+ if len(codes)<2 or codes.min()<0 or codes.max()>1023:raise ValueError('Invalid generated codec indices')
66
+ return codes,{'frames':len(codes),'frame_cap':len(codes)>=cap,'requested_seconds':row['frames']/12.5,'sampling':{'temperature':1.,'top_p':.95,'top_k':50,'cfg':1.}}
67
+
68
+ def main():
69
+ p=argparse.ArgumentParser(description=__doc__)
70
+ p.add_argument('--model',default='laion/Humaneness-Voice-Large-NotebookLM-Edition')
71
+ p.add_argument('--codec',default='OpenMOSS-Team/MOSS-Audio-Tokenizer-v2')
72
+ p.add_argument('--dialogue',type=Path,required=True);p.add_argument('--reference-s1',required=True);p.add_argument('--reference-s2',required=True)
73
+ p.add_argument('--context');p.add_argument('--context-description',default='');p.add_argument('--seed',type=int,default=20261103);p.add_argument('--output',type=Path,required=True)
74
+ a=p.parse_args()
75
+ if a.output.exists():raise FileExistsError(a.output)
76
+ model,proc=base_runtime.load_model(a.model);base_runtime.load_codec(proc,a.codec)
77
+ refs={s:encode_reference(proc,f) for s,f in [('S1',a.reference_s1),('S2',a.reference_s2)]}
78
+ context=encode_reference(proc,a.context,context=True) if a.context else None
79
+ row=row_from_dialogue(json.loads(a.dialogue.read_text()),refs,context,a.context_description)
80
+ codes,meta=generate(model,proc,row,a.seed);wave,sr=base_runtime.decode(proc,codes)
81
+ import soundfile as sf
82
+ a.output.parent.mkdir(parents=True,exist_ok=True);sf.write(a.output,wave,sr,subtype='PCM_16');print(json.dumps(meta))
83
+
84
+ if __name__=='__main__':main()
processing_moss_tts.py ADDED
@@ -0,0 +1,914 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # coding=utf-8
2
+ """Processor for the MOSS-TTS-Local-Transformer-v1.5 HuggingFace release."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import os
7
+ import re
8
+ from dataclasses import dataclass
9
+ from pathlib import Path
10
+ from typing import Any, Dict, List, Optional, Sequence, Tuple, Union, cast
11
+
12
+ import torch
13
+ import torchaudio
14
+ from transformers import (
15
+ AutoConfig,
16
+ AutoModel,
17
+ AutoTokenizer,
18
+ BatchFeature,
19
+ PreTrainedTokenizerBase,
20
+ ProcessorMixin,
21
+ logging,
22
+ processing_utils,
23
+ )
24
+
25
+ from .configuration_moss_tts import MossTTSLocalConfig
26
+
27
+
28
+ if hasattr(processing_utils, "MODALITY_TO_BASE_CLASS_MAPPING"):
29
+ processing_utils.MODALITY_TO_BASE_CLASS_MAPPING["audio_tokenizer"] = "PreTrainedModel"
30
+ else:
31
+ processing_utils.AUTO_TO_BASE_CLASS_MAPPING["AutoModel"] = "PreTrainedModel"
32
+ logger = logging.get_logger(__name__)
33
+
34
+ AUDIO_PLACEHOLDER = "<|audio|>"
35
+ USER_ROLE_PREFIX = "user\n"
36
+ USER_TEMPLATE_REFERENCE_PREFIX = (
37
+ "<user_inst>\n"
38
+ "- Reference(s):\n"
39
+ )
40
+ USER_TEMPLATE_AFTER_REFERENCE_SUFFIX = (
41
+ "\n"
42
+ "- Text:\n"
43
+ )
44
+ USER_TEMPLATE_SUFFIX = "\n</user_inst>"
45
+ ASSISTANT_TURN_PREFIX = "\n"
46
+ ASSISTANT_ROLE_PREFIX = "assistant\n"
47
+ USER_MESSAGE_FIELDS = (
48
+ "text",
49
+ "reference",
50
+ "instruction",
51
+ "tokens",
52
+ "quality",
53
+ "sound_event",
54
+ "ambient_sound",
55
+ "language",
56
+ )
57
+
58
+
59
+ def _normalize_template_value(value: Any) -> str:
60
+ if value is None:
61
+ return "None"
62
+ resolved = str(value).strip()
63
+ return resolved or "None"
64
+
65
+
66
+ def _render_user_prompt_after_reference(
67
+ language_code: object | None = None,
68
+ prompt_fields: Optional[Dict[str, Any]] = None,
69
+ ) -> str:
70
+ fields = dict(prompt_fields or {})
71
+ return (
72
+ "\n- Instruction:\n"
73
+ + _normalize_template_value(fields.get("instruction"))
74
+ + "\n- Tokens:\n"
75
+ + _normalize_template_value(fields.get("tokens"))
76
+ + "\n- Quality:\n"
77
+ + _normalize_template_value(fields.get("quality"))
78
+ + "\n- Sound Event:\n"
79
+ + _normalize_template_value(fields.get("sound_event"))
80
+ + "\n- Ambient Sound:\n"
81
+ + _normalize_template_value(fields.get("ambient_sound"))
82
+ + "\n- Language:\n"
83
+ + _normalize_template_value(fields.get("language", language_code))
84
+ + USER_TEMPLATE_AFTER_REFERENCE_SUFFIX
85
+ )
86
+
87
+
88
+ @dataclass
89
+ class Message:
90
+ def to_dict(self) -> Dict[str, Any]:
91
+ raise NotImplementedError
92
+
93
+
94
+ @dataclass
95
+ class UserMessage(Message):
96
+ text: Optional[str] = None
97
+ reference: Optional[List[Optional[Union[str, os.PathLike, torch.Tensor]]]] = None
98
+ instruction: Optional[str] = None
99
+ tokens: Optional[int] = None
100
+ quality: Optional[str] = None
101
+ sound_event: Optional[str] = None
102
+ ambient_sound: Optional[str] = None
103
+ language: Optional[str] = None
104
+
105
+ def __post_init__(self) -> None:
106
+ template = """<user_inst>
107
+ - Reference(s):
108
+ {reference}
109
+ - Instruction:
110
+ {instruction}
111
+ - Tokens:
112
+ {tokens}
113
+ - Quality:
114
+ {quality}
115
+ - Sound Event:
116
+ {sound_event}
117
+ - Ambient Sound:
118
+ {ambient_sound}
119
+ - Language:
120
+ {language}
121
+ - Text:
122
+ {text}
123
+ </user_inst>"""
124
+
125
+ audio_codes_list: list[Union[str, os.PathLike, torch.Tensor]] = []
126
+ if self.reference is None:
127
+ reference = "None"
128
+ else:
129
+ reference_items: list[str] = []
130
+ for speaker_idx, speaker_reference in enumerate(self.reference):
131
+ if speaker_reference is None:
132
+ continue
133
+ # Keep raw audio placeholders directly under "- Reference(s):".
134
+ # Speaker labels such as "[S1]:" change the token sequence and
135
+ # can affect voice-clone conditioning.
136
+ reference_items.append(AUDIO_PLACEHOLDER)
137
+ audio_codes_list.append(speaker_reference)
138
+ reference = "\n".join(reference_items) if reference_items else "None"
139
+
140
+ self._content = (
141
+ template.replace("{reference}", str(reference))
142
+ .replace("{instruction}", str(self.instruction))
143
+ .replace("{tokens}", str(self.tokens))
144
+ .replace("{quality}", str(self.quality))
145
+ .replace("{sound_event}", str(self.sound_event))
146
+ .replace("{ambient_sound}", str(self.ambient_sound))
147
+ .replace("{language}", str(self.language))
148
+ .replace("{text}", str(self.text))
149
+ )
150
+ self._audio_codes_list = audio_codes_list
151
+
152
+ def to_dict(self) -> Dict[str, Any]:
153
+ return {
154
+ "role": "user",
155
+ "content": self._content,
156
+ "audio_codes_list": self._audio_codes_list,
157
+ "text": self.text,
158
+ "instruction": self.instruction,
159
+ "tokens": self.tokens,
160
+ "quality": self.quality,
161
+ "sound_event": self.sound_event,
162
+ "ambient_sound": self.ambient_sound,
163
+ "language": self.language,
164
+ }
165
+
166
+
167
+ @dataclass
168
+ class AssistantMessage(Message):
169
+ audio_codes_list: List[Union[str, os.PathLike, torch.Tensor]]
170
+ content: str = AUDIO_PLACEHOLDER
171
+
172
+ def to_dict(self) -> Dict[str, Any]:
173
+ return {
174
+ "role": "assistant",
175
+ "content": self.content,
176
+ "audio_codes_list": self.audio_codes_list,
177
+ }
178
+
179
+
180
+ class MossTTSLocalProcessor(ProcessorMixin):
181
+ attributes = ["tokenizer"]
182
+ tokenizer_class = "AutoTokenizer"
183
+ audio_tokenizer_class = "AutoModel"
184
+
185
+ tokenizer: PreTrainedTokenizerBase
186
+ audio_tokenizer: Any
187
+
188
+ def __init__(
189
+ self,
190
+ tokenizer: PreTrainedTokenizerBase,
191
+ audio_tokenizer: Any = None,
192
+ model_config: Optional[MossTTSLocalConfig] = None,
193
+ **kwargs,
194
+ ) -> None:
195
+ super().__init__(tokenizer=tokenizer, audio_tokenizer=audio_tokenizer, **kwargs)
196
+ self.tokenizer = tokenizer
197
+ self.audio_tokenizer = audio_tokenizer
198
+ self.model_config = model_config or MossTTSLocalConfig()
199
+
200
+ def _id_to_token(token_id: int) -> str:
201
+ token = tokenizer.convert_ids_to_tokens(int(token_id))
202
+ if isinstance(token, list):
203
+ return token[0] if token else ""
204
+ return cast(str, token)
205
+
206
+ self.audio_user_slot_token = _id_to_token(self.model_config.audio_user_slot_token_id)
207
+ self.audio_assistant_slot_token = _id_to_token(self.model_config.audio_assistant_slot_token_id)
208
+ self.audio_start_token = _id_to_token(self.model_config.audio_start_token_id)
209
+ self.audio_end_token = _id_to_token(self.model_config.audio_end_token_id)
210
+
211
+ @classmethod
212
+ def from_pretrained(cls, pretrained_model_name_or_path, *args, **kwargs):
213
+ trust_remote_code = kwargs.pop("trust_remote_code", True)
214
+ kwargs.pop("_from_auto", None)
215
+ codec_path = kwargs.pop("codec_path", None)
216
+ codec_weight_dtype = kwargs.pop("codec_weight_dtype", "fp32")
217
+ codec_compute_dtype = kwargs.pop("codec_compute_dtype", None)
218
+ codec_attention_implementation = kwargs.pop("codec_attention_implementation", None)
219
+
220
+ codec_kwargs: Dict[str, Any] = {}
221
+ if codec_weight_dtype is not None:
222
+ # Default to fp32 codec weights; callers can pass codec_weight_dtype="bf16" to reduce memory.
223
+ codec_kwargs["codec_weight_dtype"] = codec_weight_dtype
224
+
225
+ model_ref = Path(str(pretrained_model_name_or_path))
226
+ model_ref_or_name = model_ref if model_ref.exists() else pretrained_model_name_or_path
227
+ model_config = cast(
228
+ MossTTSLocalConfig,
229
+ AutoConfig.from_pretrained(
230
+ model_ref_or_name,
231
+ *args,
232
+ trust_remote_code=trust_remote_code,
233
+ **kwargs,
234
+ ),
235
+ )
236
+
237
+ if codec_path is None:
238
+ try:
239
+ processor_dict, _ = cls.get_processor_dict(
240
+ pretrained_model_name_or_path,
241
+ **dict(kwargs),
242
+ )
243
+ codec_path = processor_dict.get("audio_tokenizer_name_or_path")
244
+ audio_tokenizer_dict = processor_dict.get("audio_tokenizer", {})
245
+ if isinstance(audio_tokenizer_dict, dict):
246
+ codec_path = audio_tokenizer_dict.get("audio_tokenizer_name_or_path") or codec_path
247
+ except Exception:
248
+ codec_path = None
249
+ if codec_path is None:
250
+ codec_path = getattr(model_config, "audio_tokenizer_name_or_path", None)
251
+ if codec_path is None:
252
+ codec_path = "OpenMOSS-Team/MOSS-Audio-Tokenizer-v2"
253
+
254
+ tokenizer = AutoTokenizer.from_pretrained(
255
+ model_ref_or_name,
256
+ *args,
257
+ trust_remote_code=trust_remote_code,
258
+ **kwargs,
259
+ )
260
+ audio_tokenizer = AutoModel.from_pretrained(
261
+ codec_path,
262
+ trust_remote_code=trust_remote_code,
263
+ **kwargs,
264
+ **codec_kwargs,
265
+ )
266
+ if codec_compute_dtype is not None and hasattr(audio_tokenizer, "set_compute_dtype"):
267
+ audio_tokenizer.set_compute_dtype(codec_compute_dtype)
268
+ if codec_attention_implementation is not None and hasattr(
269
+ audio_tokenizer, "set_attention_implementation"
270
+ ):
271
+ audio_tokenizer.set_attention_implementation(codec_attention_implementation)
272
+ return cls(
273
+ tokenizer=tokenizer,
274
+ audio_tokenizer=audio_tokenizer,
275
+ model_config=model_config,
276
+ **kwargs,
277
+ )
278
+
279
+ @staticmethod
280
+ def build_user_message(
281
+ text: Optional[str] = None,
282
+ reference: Optional[List[Optional[Union[str, os.PathLike, torch.Tensor]]]] = None,
283
+ instruction: Optional[str] = None,
284
+ tokens: Optional[int] = None,
285
+ quality: Optional[str] = None,
286
+ sound_event: Optional[str] = None,
287
+ ambient_sound: Optional[str] = None,
288
+ language: Optional[str] = None,
289
+ ) -> Dict[str, Any]:
290
+ if reference is not None and not isinstance(reference, list):
291
+ reference = [reference]
292
+ return UserMessage(
293
+ text=text,
294
+ reference=reference,
295
+ instruction=instruction,
296
+ tokens=tokens,
297
+ quality=quality,
298
+ sound_event=sound_event,
299
+ ambient_sound=ambient_sound,
300
+ language=language,
301
+ ).to_dict()
302
+
303
+ @staticmethod
304
+ def build_assistant_message(
305
+ audio_codes_list: List[Union[str, os.PathLike, torch.Tensor]],
306
+ content: str = AUDIO_PLACEHOLDER,
307
+ ) -> Dict[str, Any]:
308
+ return AssistantMessage(audio_codes_list=audio_codes_list, content=content).to_dict()
309
+
310
+ def _assert_fixed_nq(self, n_vq: Optional[int]) -> int:
311
+ config_nq = int(self.model_config.n_vq)
312
+ if n_vq is not None and int(n_vq) != config_nq:
313
+ raise ValueError(
314
+ "This MOSS-TTS-Local-Transformer-v1.5 release uses the RVQ depth stored in the model config. "
315
+ f"Expected n_vq={config_nq}, got {int(n_vq)}."
316
+ )
317
+ return config_nq
318
+
319
+ def _encode_text(self, text: str) -> list[int]:
320
+ try:
321
+ return list(self.tokenizer.encode(text, add_special_tokens=False))
322
+ except TypeError:
323
+ return list(self.tokenizer.encode(text))
324
+
325
+ def _build_text_rows(self, token_ids: Sequence[int], *, device: Optional[torch.device] = None) -> torch.Tensor:
326
+ rows = torch.full(
327
+ (len(token_ids), int(self.model_config.n_vq) + 1),
328
+ int(self.model_config.audio_pad_token_id),
329
+ dtype=torch.long,
330
+ device=device,
331
+ )
332
+ if token_ids:
333
+ rows[:, 0] = torch.tensor([int(token_id) for token_id in token_ids], dtype=torch.long, device=rows.device)
334
+ return rows
335
+
336
+ def _build_audio_rows(self, audio_tokens: torch.Tensor, slot_token_id: int) -> torch.Tensor:
337
+ rows = torch.full(
338
+ (int(audio_tokens.shape[0]), int(self.model_config.n_vq) + 1),
339
+ int(self.model_config.audio_pad_token_id),
340
+ dtype=torch.long,
341
+ device=audio_tokens.device,
342
+ )
343
+ if rows.shape[0] > 0:
344
+ rows[:, 0] = int(slot_token_id)
345
+ rows[:, 1:] = audio_tokens.to(dtype=torch.long)
346
+ return rows
347
+
348
+ def _user_prompt_prefix_ids(self) -> list[int]:
349
+ return (
350
+ [int(self.model_config.im_start_token_id)]
351
+ + self._encode_text(USER_ROLE_PREFIX)
352
+ + self._encode_text(USER_TEMPLATE_REFERENCE_PREFIX)
353
+ )
354
+
355
+ def _user_prompt_after_reference_ids(
356
+ self,
357
+ language_code: object | None,
358
+ prompt_fields: Optional[Dict[str, Any]],
359
+ ) -> list[int]:
360
+ return self._encode_text(
361
+ _render_user_prompt_after_reference(
362
+ language_code=language_code,
363
+ prompt_fields=prompt_fields,
364
+ )
365
+ )
366
+
367
+ def _assistant_prompt_prefix_ids(self) -> list[int]:
368
+ return (
369
+ self._encode_text(USER_TEMPLATE_SUFFIX)
370
+ + [int(self.model_config.im_end_token_id)]
371
+ + self._encode_text(ASSISTANT_TURN_PREFIX)
372
+ + [int(self.model_config.im_start_token_id)]
373
+ + self._encode_text(ASSISTANT_ROLE_PREFIX)
374
+ )
375
+
376
+ def _prompt_fields_from_user_message(self, message: Dict[str, Any]) -> dict[str, Any]:
377
+ fields = {}
378
+ for key in ("instruction", "tokens", "quality", "sound_event", "ambient_sound"):
379
+ if key in message and message.get(key) is not None:
380
+ fields[key] = message.get(key)
381
+ if "language" in message and message.get("language") is not None:
382
+ fields["language"] = message.get("language")
383
+ return fields
384
+
385
+ def _build_generation_or_voice_clone_codes(
386
+ self,
387
+ message: Dict[str, Any],
388
+ n_vq: int,
389
+ ) -> torch.Tensor:
390
+ if "text" not in message:
391
+ raise ValueError("Direct MOSS-TTS-Local-Transformer-v1.5 generation requires messages built by build_user_message(...).")
392
+ text = "" if message.get("text") is None else str(message.get("text"))
393
+ prompt_fields = self._prompt_fields_from_user_message(message)
394
+ language_code = message.get("language")
395
+ audio_codes_list = self._resolve_audio_items(message.get("audio_codes_list", []), n_vq)
396
+ text_token_ids = self._encode_text(text)
397
+
398
+ if audio_codes_list:
399
+ parts: list[torch.Tensor] = [self._build_text_rows(
400
+ self._user_prompt_prefix_ids(),
401
+ device=audio_codes_list[0].device,
402
+ )]
403
+ for reference_codes in audio_codes_list:
404
+ parts.append(self._build_text_rows([int(self.model_config.audio_start_token_id)], device=reference_codes.device))
405
+ parts.append(self._build_audio_rows(reference_codes, int(self.model_config.audio_user_slot_token_id)))
406
+ parts.append(self._build_text_rows([int(self.model_config.audio_end_token_id)], device=reference_codes.device))
407
+ parts.append(
408
+ self._build_text_rows(
409
+ self._user_prompt_after_reference_ids(language_code, prompt_fields)
410
+ + text_token_ids
411
+ + self._assistant_prompt_prefix_ids()
412
+ + [int(self.model_config.audio_start_token_id)],
413
+ device=audio_codes_list[0].device,
414
+ )
415
+ )
416
+ return torch.cat(parts, dim=0)
417
+
418
+ prompt_token_ids = (
419
+ self._user_prompt_prefix_ids()
420
+ + self._encode_text("None")
421
+ + self._user_prompt_after_reference_ids(language_code, prompt_fields)
422
+ + text_token_ids
423
+ + self._assistant_prompt_prefix_ids()
424
+ + [int(self.model_config.audio_start_token_id)]
425
+ )
426
+ return self._build_text_rows(prompt_token_ids)
427
+
428
+ def _build_continuation_codes(
429
+ self,
430
+ conversation: list[Dict[str, Any]],
431
+ n_vq: int,
432
+ ) -> torch.Tensor:
433
+ if len(conversation) < 2:
434
+ raise ValueError("continuation mode requires a user message followed by an assistant audio message.")
435
+ user_message = conversation[-2]
436
+ assistant_message = conversation[-1]
437
+ if user_message.get("role") != "user" or assistant_message.get("role") != "assistant":
438
+ raise ValueError("continuation mode requires the last two messages to be user, assistant.")
439
+ if "text" not in user_message:
440
+ raise ValueError("Direct MOSS-TTS-Local-Transformer-v1.5 continuation requires user messages built by build_user_message(...).")
441
+
442
+ text = "" if user_message.get("text") is None else str(user_message.get("text"))
443
+ prompt_fields = self._prompt_fields_from_user_message(user_message)
444
+ language_code = user_message.get("language")
445
+ prompt_token_ids = (
446
+ self._user_prompt_prefix_ids()
447
+ + self._encode_text("None")
448
+ + self._user_prompt_after_reference_ids(language_code, prompt_fields)
449
+ + self._encode_text(text)
450
+ + self._assistant_prompt_prefix_ids()
451
+ + [int(self.model_config.audio_start_token_id)]
452
+ )
453
+ audio_codes_list = self._resolve_audio_items(assistant_message.get("audio_codes_list", []), n_vq)
454
+ if not audio_codes_list:
455
+ return self._build_text_rows(prompt_token_ids)
456
+ if len(audio_codes_list) != 1:
457
+ raise ValueError("The MOSS-TTS-Local-Transformer-v1.5 continuation path expects exactly one prompt audio item.")
458
+ prompt_audio_codes = audio_codes_list[0]
459
+ return torch.cat(
460
+ [
461
+ self._build_text_rows(prompt_token_ids, device=prompt_audio_codes.device),
462
+ self._build_audio_rows(prompt_audio_codes, int(self.model_config.audio_assistant_slot_token_id)),
463
+ ],
464
+ dim=0,
465
+ )
466
+
467
+ def _try_build_direct_codes(
468
+ self,
469
+ conversation: list[Dict[str, Any]],
470
+ mode: str,
471
+ n_vq: int,
472
+ ) -> Optional[torch.Tensor]:
473
+ if mode == "generation" and len(conversation) == 1 and conversation[-1].get("role") == "user":
474
+ if "text" in conversation[-1]:
475
+ return self._build_generation_or_voice_clone_codes(conversation[-1], n_vq)
476
+ return None
477
+ if mode == "continuation" and len(conversation) >= 2:
478
+ if "text" in conversation[-2]:
479
+ return self._build_continuation_codes(conversation, n_vq)
480
+ return None
481
+ return None
482
+
483
+ def __call__(self, *args, **kwargs) -> BatchFeature:
484
+ conversations = args[0] if args else kwargs.pop("conversations")
485
+ mode: str = kwargs.pop("mode", "generation")
486
+ apply_chat_template: bool = kwargs.pop("apply_chat_template", True)
487
+ n_vq = self._assert_fixed_nq(kwargs.pop("n_vq", None))
488
+
489
+ kwargs.pop("return_tensors", None)
490
+ kwargs.pop("padding", None)
491
+ kwargs.pop("truncation", None)
492
+
493
+ if mode not in {"generation", "continuation", "computing_loss"}:
494
+ raise ValueError(f"Unsupported mode: {mode}")
495
+ if isinstance(conversations, (Message, dict)):
496
+ conversations = [conversations]
497
+ elif isinstance(conversations, list) and conversations and all(
498
+ isinstance(item, (Message, dict)) for item in conversations
499
+ ):
500
+ conversations = [conversations]
501
+
502
+ input_ids_list: list[torch.Tensor] = []
503
+ for conversation in conversations:
504
+ if isinstance(conversation, (Message, dict)):
505
+ conversation = [conversation]
506
+ conversation = [self._normalize_message(message) for message in conversation]
507
+
508
+ if (mode == "generation") ^ (conversation[-1]["role"] == "user"):
509
+ raise ValueError("generation mode must end with a user message.")
510
+ if mode == "continuation" and conversation[-1]["role"] != "assistant":
511
+ raise ValueError("continuation mode must end with an assistant message.")
512
+
513
+ direct_codes = self._try_build_direct_codes(conversation, mode, n_vq)
514
+ if direct_codes is not None:
515
+ input_ids_list.append(direct_codes)
516
+ continue
517
+
518
+ unified_parts = []
519
+ for message_idx, message in enumerate(conversation):
520
+ content = str(message["content"])
521
+ if apply_chat_template:
522
+ add_generation_prompt = mode == "generation" and message_idx == len(conversation) - 1
523
+ try:
524
+ content = self.tokenizer.apply_chat_template(
525
+ [{"role": message["role"], "content": content}],
526
+ add_generation_prompt=add_generation_prompt,
527
+ tokenize=False,
528
+ )
529
+ except Exception:
530
+ logger.warning("apply_chat_template failed; falling back to raw message content.")
531
+
532
+ raw_audio_items = message.get("audio_codes_list", [])
533
+ audio_codes_list = self._resolve_audio_items(raw_audio_items, n_vq)
534
+ unified_parts.append(
535
+ self._get_unified_codes(
536
+ role=message["role"],
537
+ content=content,
538
+ audio_codes_list=audio_codes_list,
539
+ truncation=(mode == "continuation"),
540
+ )
541
+ )
542
+
543
+ unified_codes = torch.cat(unified_parts, dim=0)
544
+ if mode == "generation":
545
+ audio_start_row = torch.full(
546
+ (1, n_vq + 1),
547
+ int(self.model_config.audio_pad_token_id),
548
+ dtype=unified_codes.dtype,
549
+ device=unified_codes.device,
550
+ )
551
+ audio_start_row[:, 0] = int(self.model_config.audio_start_token_id)
552
+ unified_codes = torch.cat([unified_codes, audio_start_row], dim=0)
553
+ input_ids_list.append(unified_codes)
554
+
555
+ return BatchFeature(data=self._pad(input_ids_list))
556
+
557
+ def _normalize_message(self, message: Union[Message, Dict[str, Any]]) -> Dict[str, Any]:
558
+ if isinstance(message, Message):
559
+ return message.to_dict()
560
+ if not isinstance(message, dict):
561
+ raise TypeError("Each message must be a Message or dict.")
562
+ if "content" in message and "audio_codes_list" in message:
563
+ return message
564
+ role = message.get("role")
565
+ if role == "user":
566
+ return self.build_user_message(**{key: message.get(key) for key in USER_MESSAGE_FIELDS})
567
+ if role == "assistant":
568
+ return self.build_assistant_message(
569
+ audio_codes_list=message.get("audio_codes_list", []),
570
+ content=message.get("content", AUDIO_PLACEHOLDER),
571
+ )
572
+ raise ValueError(f"Unsupported role: {role}")
573
+
574
+ def _resolve_audio_items(
575
+ self,
576
+ raw_audio_items: list[Any],
577
+ n_vq: int,
578
+ ) -> list[torch.Tensor]:
579
+ if not raw_audio_items:
580
+ return []
581
+ resolved: list[Optional[torch.Tensor]] = [None] * len(raw_audio_items)
582
+ paths: list[str] = []
583
+ path_positions: list[int] = []
584
+ for index, item in enumerate(raw_audio_items):
585
+ if isinstance(item, torch.Tensor):
586
+ if item.ndim != 2 or int(item.shape[1]) != n_vq:
587
+ raise ValueError(f"audio code tensor must have shape [T, {n_vq}], got {tuple(item.shape)}.")
588
+ resolved[index] = item.to(dtype=torch.long).cpu()
589
+ elif isinstance(item, (str, os.PathLike)):
590
+ paths.append(str(item))
591
+ path_positions.append(index)
592
+ else:
593
+ raise TypeError("Audio items must be tensors or path-like values.")
594
+ if paths:
595
+ encoded = self.encode_audios_from_path(paths, n_vq=n_vq)
596
+ for position, codes in zip(path_positions, encoded):
597
+ resolved[position] = codes
598
+ return [cast(torch.Tensor, item) for item in resolved]
599
+
600
+ def _pad(self, input_ids_list: list[torch.Tensor]) -> Dict[str, torch.Tensor]:
601
+ device = input_ids_list[0].device
602
+ lengths = torch.tensor([item.shape[0] for item in input_ids_list], device=device)
603
+ padded = torch.nn.utils.rnn.pad_sequence(
604
+ input_ids_list,
605
+ batch_first=True,
606
+ padding_value=int(self.model_config.audio_pad_token_id),
607
+ padding_side="left",
608
+ )
609
+ left_pad_mask = (padded.shape[1] - lengths).unsqueeze(1) > torch.arange(
610
+ padded.shape[1],
611
+ device=device,
612
+ ).unsqueeze(0)
613
+ padded[..., 0][left_pad_mask] = int(self.model_config.pad_token_id)
614
+ attention_mask = torch.zeros(padded.shape[:2], dtype=torch.bool, device=device)
615
+ attention_mask[~left_pad_mask] = True
616
+ return {"input_ids": padded, "attention_mask": attention_mask}
617
+
618
+ @staticmethod
619
+ def _replace_audio_placeholders(
620
+ content: str,
621
+ lengths: list[int],
622
+ slot_token: str,
623
+ audio_start_token: str,
624
+ audio_end_token: str,
625
+ ) -> str:
626
+ placeholder_count = content.count(AUDIO_PLACEHOLDER)
627
+ if placeholder_count != len(lengths):
628
+ raise ValueError(
629
+ f"Number of {AUDIO_PLACEHOLDER} ({placeholder_count}) does not match "
630
+ f"audio item count ({len(lengths)})."
631
+ )
632
+ lengths_iter = iter(lengths)
633
+
634
+ def replacer(_: re.Match) -> str:
635
+ length = int(next(lengths_iter))
636
+ if length <= 0:
637
+ return f"{audio_start_token}{audio_end_token}"
638
+ return f"{audio_start_token}{slot_token * length}{audio_end_token}"
639
+
640
+ return re.sub(re.escape(AUDIO_PLACEHOLDER), replacer, content)
641
+
642
+ def _get_unified_codes(
643
+ self,
644
+ role: str,
645
+ content: str,
646
+ audio_codes_list: list[torch.Tensor],
647
+ truncation: bool,
648
+ ) -> torch.Tensor:
649
+ n_vq = int(self.model_config.n_vq)
650
+ slot_token = self.audio_user_slot_token if role == "user" else self.audio_assistant_slot_token
651
+ content = self._replace_audio_placeholders(
652
+ content=content,
653
+ lengths=[int(codes.shape[0]) for codes in audio_codes_list],
654
+ slot_token=slot_token,
655
+ audio_start_token=self.audio_start_token,
656
+ audio_end_token=self.audio_end_token,
657
+ )
658
+ text_codes = torch.tensor(
659
+ self.tokenizer.encode(content),
660
+ dtype=torch.long,
661
+ device=audio_codes_list[0].device if audio_codes_list else None,
662
+ )
663
+
664
+ audio_start_indices = torch.where(text_codes == int(self.model_config.audio_start_token_id))[0]
665
+ audio_end_indices = torch.where(text_codes == int(self.model_config.audio_end_token_id))[0]
666
+ if len(audio_start_indices) != len(audio_codes_list) or len(audio_end_indices) != len(audio_codes_list):
667
+ raise ValueError("Audio placeholders do not match the encoded audio spans.")
668
+
669
+ if not audio_codes_list:
670
+ audio_codes = torch.full(
671
+ (len(text_codes), n_vq),
672
+ int(self.model_config.audio_pad_token_id),
673
+ dtype=torch.long,
674
+ device=text_codes.device,
675
+ )
676
+ else:
677
+ pieces: list[torch.Tensor] = []
678
+ prefix_idx = 0
679
+ for start_t, end_t, codes in zip(audio_start_indices, audio_end_indices, audio_codes_list):
680
+ start_idx = int(start_t.item())
681
+ end_idx = int(end_t.item())
682
+ pad_before = torch.full(
683
+ (start_idx - prefix_idx + 1, n_vq),
684
+ int(self.model_config.audio_pad_token_id),
685
+ dtype=torch.long,
686
+ device=codes.device,
687
+ )
688
+ pieces.extend([pad_before, codes.to(dtype=torch.long)])
689
+ prefix_idx = end_idx
690
+ if truncation:
691
+ trailing = torch.zeros(
692
+ (0, n_vq),
693
+ dtype=torch.long,
694
+ device=audio_codes_list[0].device,
695
+ )
696
+ else:
697
+ last_end = int(audio_end_indices[-1].item())
698
+ trailing = torch.full(
699
+ (len(text_codes) - last_end, n_vq),
700
+ int(self.model_config.audio_pad_token_id),
701
+ dtype=torch.long,
702
+ device=audio_codes_list[0].device,
703
+ )
704
+ pieces.append(trailing)
705
+ audio_codes = torch.cat(pieces, dim=0)
706
+
707
+ if text_codes.shape[0] != audio_codes.shape[0]:
708
+ min_len = min(text_codes.shape[0], audio_codes.shape[0])
709
+ text_codes = text_codes[:min_len]
710
+ audio_codes = audio_codes[:min_len]
711
+ return torch.cat([text_codes.unsqueeze(1), audio_codes], dim=1)
712
+
713
+ def _parse_text_codes(self, start_length: int, text_codes: torch.LongTensor) -> str:
714
+ text = cast(str, self.tokenizer.decode(text_codes))
715
+ prefix = cast(str, self.tokenizer.decode(text_codes[:start_length]))
716
+ text = text[len(prefix):]
717
+ audio_pattern = re.compile(
718
+ rf"(?:{re.escape(self.audio_start_token)})?"
719
+ rf"(?:{re.escape(self.audio_assistant_slot_token)})*"
720
+ rf"{re.escape(self.audio_end_token)}"
721
+ )
722
+ return audio_pattern.sub(
723
+ lambda match: AUDIO_PLACEHOLDER if self.audio_assistant_slot_token in match.group(0) else "",
724
+ text,
725
+ )
726
+
727
+ def _parse_audio_codes(
728
+ self,
729
+ start_length: int,
730
+ audio_codes: torch.LongTensor,
731
+ *,
732
+ return_stereo: bool = True,
733
+ ) -> list[torch.Tensor]:
734
+ is_pad = audio_codes.eq(int(self.model_config.audio_pad_token_id)).all(dim=1)
735
+ non_pad = ~is_pad
736
+ if not bool(non_pad.any().item()):
737
+ return []
738
+ idx = torch.nonzero(non_pad).squeeze(1)
739
+ breaks = torch.where(idx[1:] != idx[:-1] + 1)[0] + 1
740
+ segment_indices = [idx] if breaks.numel() == 0 else list(torch.tensor_split(idx, breaks.cpu().tolist()))
741
+ code_segments = [audio_codes[segment] for segment in segment_indices]
742
+ decoded = self.decode_audio_codes(code_segments, return_stereo=return_stereo)
743
+
744
+ if start_length > 0 and code_segments and decoded:
745
+ first_code_length = int(code_segments[0].shape[0])
746
+ if first_code_length > 0:
747
+ trim_ratio = max(0.0, min(float(start_length) / float(first_code_length), 1.0))
748
+ if trim_ratio >= 1.0:
749
+ decoded = decoded[1:]
750
+ elif trim_ratio > 0.0:
751
+ trim_samples = int(decoded[0].shape[-1] * trim_ratio)
752
+ decoded[0] = decoded[0][..., trim_samples:]
753
+ return decoded
754
+
755
+ def decode(self, output: Any, *, return_stereo: bool = True) -> list[Optional[AssistantMessage]]:
756
+ generated_messages: list[Optional[AssistantMessage]] = []
757
+ for start_length, generation_ids in output:
758
+ content = self._parse_text_codes(int(start_length), generation_ids[:, 0])
759
+ audio_codes_list = self._parse_audio_codes(
760
+ int(start_length),
761
+ generation_ids[:, 1:],
762
+ return_stereo=return_stereo,
763
+ )
764
+ if content == "":
765
+ generated_messages.append(None)
766
+ else:
767
+ generated_messages.append(
768
+ AssistantMessage(
769
+ content=content,
770
+ audio_codes_list=cast(list[Union[str, torch.Tensor]], audio_codes_list),
771
+ )
772
+ )
773
+ return generated_messages
774
+
775
+ @staticmethod
776
+ def loudness_normalize(
777
+ wav: torch.Tensor,
778
+ target_dbfs: float = -20.0,
779
+ gain_range: tuple[float, float] = (-3.0, 3.0),
780
+ ) -> torch.Tensor:
781
+ wav = wav.to(torch.float32)
782
+ if wav.numel() == 0:
783
+ return wav
784
+ current_dbfs = 10.0 * torch.log10(torch.mean(wav**2) + 1e-9)
785
+ gain = max(gain_range[0], min(float(target_dbfs - current_dbfs), gain_range[1]))
786
+ return wav * (10.0 ** (gain / 20.0))
787
+
788
+ def _get_audio_tokenizer_device(self) -> torch.device:
789
+ audio_tokenizer = getattr(self, "audio_tokenizer", None)
790
+ if audio_tokenizer is None:
791
+ raise RuntimeError("audio_tokenizer is not set.")
792
+ try:
793
+ return next(audio_tokenizer.parameters()).device
794
+ except StopIteration:
795
+ return torch.device("cpu")
796
+
797
+ def encode_audios_from_wav(
798
+ self,
799
+ wav_list: Union[torch.Tensor, list[torch.Tensor]],
800
+ sampling_rate: int,
801
+ n_vq: Optional[int] = None,
802
+ ) -> list[torch.Tensor]:
803
+ n_vq = self._assert_fixed_nq(n_vq)
804
+ if self.audio_tokenizer is None:
805
+ raise RuntimeError("audio_tokenizer is not set.")
806
+ if isinstance(wav_list, torch.Tensor):
807
+ wav_list = [wav_list]
808
+ target_sr = int(self.model_config.sampling_rate)
809
+ device = self._get_audio_tokenizer_device()
810
+ prepared = []
811
+ for wav in wav_list:
812
+ if wav.ndim == 1:
813
+ wav = wav.unsqueeze(0)
814
+ if wav.shape[0] == 1:
815
+ wav = wav.repeat(2, 1)
816
+ elif wav.shape[0] > 2:
817
+ wav = wav[:2]
818
+ if int(sampling_rate) != target_sr:
819
+ wav = torchaudio.functional.resample(wav, int(sampling_rate), target_sr)
820
+ prepared.append(self.loudness_normalize(wav).to(device))
821
+
822
+ if hasattr(self.audio_tokenizer, "batch_encode"):
823
+ encoded = self.audio_tokenizer.batch_encode(prepared, num_quantizers=n_vq)
824
+ audio_codes = encoded.audio_codes
825
+ audio_lengths = encoded.audio_codes_lengths
826
+ else:
827
+ max_len = max(int(wav.shape[-1]) for wav in prepared)
828
+ input_values = torch.zeros(len(prepared), 1, max_len, dtype=torch.float32, device=device)
829
+ padding_mask = torch.zeros(len(prepared), max_len, dtype=torch.bool, device=device)
830
+ for index, wav in enumerate(prepared):
831
+ input_values[index, 0, : wav.shape[-1]] = wav
832
+ padding_mask[index, : wav.shape[-1]] = True
833
+ encoded = self.audio_tokenizer.encode(
834
+ input_values,
835
+ padding_mask=padding_mask,
836
+ num_quantizers=n_vq,
837
+ return_dict=True,
838
+ )
839
+ audio_codes = encoded.audio_codes
840
+ audio_lengths = encoded.audio_codes_lengths
841
+
842
+ if audio_codes is None or audio_lengths is None:
843
+ raise RuntimeError("audio_tokenizer did not return audio_codes/audio_codes_lengths.")
844
+ result = []
845
+ for index in range(int(audio_codes.shape[1])):
846
+ length = int(audio_lengths[index].item())
847
+ result.append(audio_codes[:, index, :length].transpose(0, 1).contiguous().cpu().long())
848
+ return result
849
+
850
+ def encode_audios_from_path(
851
+ self,
852
+ wav_path_list: Union[str, os.PathLike, list[Union[str, os.PathLike]]],
853
+ n_vq: Optional[int] = None,
854
+ ) -> list[torch.Tensor]:
855
+ if isinstance(wav_path_list, (str, os.PathLike)):
856
+ wav_path_list = [wav_path_list]
857
+ wavs = []
858
+ target_sr = int(self.model_config.sampling_rate)
859
+ for wav_path in wav_path_list:
860
+ wav, sr = torchaudio.load(str(wav_path))
861
+ if int(sr) != target_sr:
862
+ wav = torchaudio.functional.resample(wav, int(sr), target_sr)
863
+ wavs.append(wav)
864
+ return self.encode_audios_from_wav(wavs, target_sr, n_vq=n_vq)
865
+
866
+ def decode_audio_codes(
867
+ self,
868
+ audio_tokens_list: Union[torch.Tensor, list[torch.Tensor]],
869
+ *,
870
+ return_stereo: bool = True,
871
+ ) -> list[torch.Tensor]:
872
+ if self.audio_tokenizer is None:
873
+ raise RuntimeError("audio_tokenizer is not set.")
874
+ if isinstance(audio_tokens_list, torch.Tensor):
875
+ audio_tokens_list = [audio_tokens_list]
876
+ if not audio_tokens_list:
877
+ return []
878
+
879
+ n_vq = int(self.model_config.n_vq)
880
+ device = self._get_audio_tokenizer_device()
881
+ codes_list = [
882
+ codes[:, :n_vq].transpose(0, 1).contiguous().to(device=device, dtype=torch.long)
883
+ for codes in audio_tokens_list
884
+ ]
885
+ max_len = max(int(codes.shape[1]) for codes in codes_list)
886
+ audio_codes = torch.zeros(n_vq, len(codes_list), max_len, device=device, dtype=torch.long)
887
+ padding_mask = torch.zeros(len(codes_list), max_len, device=device, dtype=torch.bool)
888
+ for index, codes in enumerate(codes_list):
889
+ length = int(codes.shape[1])
890
+ audio_codes[:, index, :length] = codes
891
+ padding_mask[index, :length] = True
892
+
893
+ decoded = self.audio_tokenizer.decode(
894
+ audio_codes,
895
+ padding_mask=padding_mask,
896
+ num_quantizers=n_vq,
897
+ return_dict=True,
898
+ chunk_duration=8,
899
+ )
900
+ audio = decoded.audio
901
+ audio_lengths = decoded.audio_lengths
902
+ if audio is None or audio_lengths is None:
903
+ raise RuntimeError("audio_tokenizer.decode did not return audio/audio_lengths.")
904
+ wavs = []
905
+ for index in range(int(audio.shape[0])):
906
+ length = int(audio_lengths[index].item())
907
+ wav = audio[index, :, :length].contiguous().cpu().to(torch.float32)
908
+ if not return_stereo:
909
+ if wav.shape[0] == 1:
910
+ wav = wav.squeeze(0)
911
+ else:
912
+ wav = wav.mean(dim=0)
913
+ wavs.append(wav)
914
+ return wavs
processor_config.json ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ {
2
+ "processor_class": "MossTTSLocalProcessor",
3
+ "auto_map": {
4
+ "AutoProcessor": "processing_moss_tts.MossTTSLocalProcessor"
5
+ },
6
+ "audio_tokenizer_name_or_path": "OpenMOSS-Team/MOSS-Audio-Tokenizer-v2"
7
+ }
qwen3_decoder.py ADDED
@@ -0,0 +1,582 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # coding=utf-8
2
+ from __future__ import annotations
3
+
4
+ import json
5
+ from pathlib import Path
6
+ from typing import Optional
7
+
8
+ import torch
9
+ import torch.nn as nn
10
+ import torch.utils.checkpoint
11
+ from safetensors.torch import load_file
12
+ from transformers.activations import ACT2FN
13
+ from transformers.modeling_outputs import BaseModelOutputWithPast
14
+
15
+ from .gpt2_decoder import PackedSequenceMetadata, MossTTSNanoGPT2Model
16
+
17
+ try:
18
+ from flash_attn import flash_attn_func, flash_attn_varlen_func
19
+ from flash_attn.bert_padding import pad_input, unpad_input
20
+
21
+ _FLASH_ATTN_AVAILABLE = True
22
+ except Exception:
23
+ flash_attn_func = None
24
+ flash_attn_varlen_func = None
25
+ pad_input = None
26
+ unpad_input = None
27
+ _FLASH_ATTN_AVAILABLE = False
28
+
29
+
30
+ class MossQwen3RMSNorm(nn.Module):
31
+ def __init__(self, hidden_size: int, eps: float = 1e-6) -> None:
32
+ super().__init__()
33
+ self.weight = nn.Parameter(torch.ones(hidden_size))
34
+ self.variance_epsilon = eps
35
+
36
+ def forward(self, hidden_states: torch.Tensor) -> torch.Tensor:
37
+ input_dtype = hidden_states.dtype
38
+ hidden_states = hidden_states.to(torch.float32)
39
+ variance = hidden_states.pow(2).mean(-1, keepdim=True)
40
+ hidden_states = hidden_states * torch.rsqrt(variance + self.variance_epsilon)
41
+ return self.weight * hidden_states.to(input_dtype)
42
+
43
+
44
+ class MossQwen3RotaryEmbedding(nn.Module):
45
+ def __init__(self, config) -> None:
46
+ super().__init__()
47
+ head_dim = int(getattr(config, "head_dim", config.hidden_size // config.num_attention_heads))
48
+ rope_theta = getattr(config, "rope_theta", None)
49
+ if rope_theta is None:
50
+ rope_scaling = getattr(config, "rope_scaling", None)
51
+ if isinstance(rope_scaling, dict):
52
+ rope_theta = rope_scaling.get("rope_theta")
53
+ if rope_theta is None:
54
+ rope_theta = 1000000.0
55
+ rope_theta = float(rope_theta)
56
+ self.head_dim = head_dim
57
+ self.rope_theta = rope_theta
58
+ self.register_buffer("inv_freq", self._compute_inv_freq(), persistent=False)
59
+
60
+ def _compute_inv_freq(self, device: Optional[torch.device] = None) -> torch.Tensor:
61
+ return 1.0 / (
62
+ self.rope_theta ** (torch.arange(0, self.head_dim, 2, device=device, dtype=torch.float32) / self.head_dim)
63
+ )
64
+
65
+ def forward(
66
+ self,
67
+ hidden_states: torch.Tensor,
68
+ position_ids: torch.LongTensor,
69
+ ) -> tuple[torch.Tensor, torch.Tensor]:
70
+ inv_freq = self._compute_inv_freq(device=hidden_states.device)
71
+ freqs = torch.einsum(
72
+ "bs,d->bsd",
73
+ position_ids.to(device=hidden_states.device, dtype=inv_freq.dtype),
74
+ inv_freq,
75
+ )
76
+ emb = torch.cat((freqs, freqs), dim=-1)
77
+ return emb.cos().to(dtype=hidden_states.dtype), emb.sin().to(dtype=hidden_states.dtype)
78
+
79
+
80
+ def rotate_half(hidden_states: torch.Tensor) -> torch.Tensor:
81
+ first_half = hidden_states[..., : hidden_states.shape[-1] // 2]
82
+ second_half = hidden_states[..., hidden_states.shape[-1] // 2 :]
83
+ return torch.cat((-second_half, first_half), dim=-1)
84
+
85
+
86
+ def apply_rotary_pos_emb(
87
+ query: torch.Tensor,
88
+ key: torch.Tensor,
89
+ cos: torch.Tensor,
90
+ sin: torch.Tensor,
91
+ ) -> tuple[torch.Tensor, torch.Tensor]:
92
+ cos = cos.unsqueeze(-2)
93
+ sin = sin.unsqueeze(-2)
94
+ query = (query * cos) + (rotate_half(query) * sin)
95
+ key = (key * cos) + (rotate_half(key) * sin)
96
+ return query, key
97
+
98
+
99
+ def repeat_kv(hidden_states: torch.Tensor, n_rep: int) -> torch.Tensor:
100
+ if n_rep == 1:
101
+ return hidden_states
102
+ batch, seq_len, num_key_value_heads, head_dim = hidden_states.shape
103
+ hidden_states = hidden_states[:, :, :, None, :].expand(batch, seq_len, num_key_value_heads, n_rep, head_dim)
104
+ return hidden_states.reshape(batch, seq_len, num_key_value_heads * n_rep, head_dim)
105
+
106
+
107
+ class MossQwen3MLP(nn.Module):
108
+ def __init__(self, config) -> None:
109
+ super().__init__()
110
+ self.gate_proj = nn.Linear(config.hidden_size, config.intermediate_size, bias=False)
111
+ self.up_proj = nn.Linear(config.hidden_size, config.intermediate_size, bias=False)
112
+ self.down_proj = nn.Linear(config.intermediate_size, config.hidden_size, bias=False)
113
+ self.act_fn = ACT2FN[getattr(config, "hidden_act", "silu")]
114
+
115
+ def forward(self, hidden_states: torch.Tensor) -> torch.Tensor:
116
+ return self.down_proj(self.act_fn(self.gate_proj(hidden_states)) * self.up_proj(hidden_states))
117
+
118
+
119
+ class MossQwen3Attention(nn.Module):
120
+ def __init__(self, config, layer_idx: int) -> None:
121
+ super().__init__()
122
+ self.config = config
123
+ self.layer_idx = int(layer_idx)
124
+ self.hidden_size = int(config.hidden_size)
125
+ self.num_heads = int(config.num_attention_heads)
126
+ self.num_key_value_heads = int(config.num_key_value_heads)
127
+ self.head_dim = int(getattr(config, "head_dim", self.hidden_size // self.num_heads))
128
+ self.num_key_value_groups = self.num_heads // self.num_key_value_heads
129
+ self.scaling = self.head_dim ** -0.5
130
+ self.attention_dropout = float(getattr(config, "attention_dropout", 0.0))
131
+ self.attn_implementation = str(getattr(config, "_attn_implementation", "eager"))
132
+
133
+ self.q_proj = nn.Linear(self.hidden_size, self.num_heads * self.head_dim, bias=bool(config.attention_bias))
134
+ self.k_proj = nn.Linear(
135
+ self.hidden_size,
136
+ self.num_key_value_heads * self.head_dim,
137
+ bias=bool(config.attention_bias),
138
+ )
139
+ self.v_proj = nn.Linear(
140
+ self.hidden_size,
141
+ self.num_key_value_heads * self.head_dim,
142
+ bias=bool(config.attention_bias),
143
+ )
144
+ self.o_proj = nn.Linear(self.num_heads * self.head_dim, self.hidden_size, bias=bool(config.attention_bias))
145
+ self.q_norm = MossQwen3RMSNorm(self.head_dim, eps=float(config.rms_norm_eps))
146
+ self.k_norm = MossQwen3RMSNorm(self.head_dim, eps=float(config.rms_norm_eps))
147
+
148
+ def _causal_attention_mask(
149
+ self,
150
+ attention_mask: Optional[torch.Tensor],
151
+ query_length: int,
152
+ key_length: int,
153
+ device: torch.device,
154
+ ) -> torch.Tensor:
155
+ query_positions = torch.arange(query_length, device=device, dtype=torch.long)
156
+ query_positions = query_positions + max(key_length - query_length, 0)
157
+ key_positions = torch.arange(key_length, device=device, dtype=torch.long)
158
+ causal = key_positions.unsqueeze(0) <= query_positions.unsqueeze(1)
159
+ causal = causal.unsqueeze(0).unsqueeze(0)
160
+ if attention_mask is None:
161
+ return causal
162
+ key_mask = attention_mask[:, None, None, :].to(dtype=torch.bool)
163
+ return causal & key_mask
164
+
165
+ def _eager_attention(
166
+ self,
167
+ query: torch.Tensor,
168
+ key: torch.Tensor,
169
+ value: torch.Tensor,
170
+ attention_mask: Optional[torch.Tensor],
171
+ ) -> torch.Tensor:
172
+ key = repeat_kv(key, self.num_key_value_groups)
173
+ value = repeat_kv(value, self.num_key_value_groups)
174
+ query = query.transpose(1, 2)
175
+ key = key.transpose(1, 2)
176
+ value = value.transpose(1, 2)
177
+ scores = torch.matmul(query, key.transpose(-1, -2)) * self.scaling
178
+ mask = self._causal_attention_mask(
179
+ attention_mask=attention_mask,
180
+ query_length=query.shape[-2],
181
+ key_length=key.shape[-2],
182
+ device=query.device,
183
+ )
184
+ scores = scores.masked_fill(~mask, torch.finfo(scores.dtype).min)
185
+ probs = torch.softmax(scores, dim=-1)
186
+ if self.training and self.attention_dropout > 0:
187
+ probs = torch.dropout(probs, self.attention_dropout, train=True)
188
+ output = torch.matmul(probs, value)
189
+ return output.transpose(1, 2).contiguous()
190
+
191
+ def _sdpa_attention(
192
+ self,
193
+ query: torch.Tensor,
194
+ key: torch.Tensor,
195
+ value: torch.Tensor,
196
+ attention_mask: Optional[torch.Tensor],
197
+ ) -> torch.Tensor:
198
+ key = repeat_kv(key, self.num_key_value_groups)
199
+ value = repeat_kv(value, self.num_key_value_groups)
200
+ query = query.transpose(1, 2)
201
+ key = key.transpose(1, 2)
202
+ value = value.transpose(1, 2)
203
+ mask = None
204
+ if attention_mask is not None or query.shape[-2] != key.shape[-2]:
205
+ mask = self._causal_attention_mask(
206
+ attention_mask=attention_mask,
207
+ query_length=query.shape[-2],
208
+ key_length=key.shape[-2],
209
+ device=query.device,
210
+ )
211
+ output = torch.nn.functional.scaled_dot_product_attention(
212
+ query,
213
+ key,
214
+ value,
215
+ attn_mask=mask,
216
+ dropout_p=self.attention_dropout if self.training else 0.0,
217
+ is_causal=mask is None,
218
+ scale=self.scaling,
219
+ )
220
+ return output.transpose(1, 2).contiguous()
221
+
222
+ def _flash_attention(
223
+ self,
224
+ query: torch.Tensor,
225
+ key: torch.Tensor,
226
+ value: torch.Tensor,
227
+ attention_mask: Optional[torch.Tensor],
228
+ packed_metadata: Optional[PackedSequenceMetadata],
229
+ ) -> torch.Tensor:
230
+ if not _FLASH_ATTN_AVAILABLE:
231
+ raise ImportError("flash_attn is not installed, but attn_implementation='flash_attention_2' was requested.")
232
+ if query.device.type != "cuda":
233
+ raise ValueError("flash_attention_2 requires CUDA tensors.")
234
+ if query.dtype not in (torch.float16, torch.bfloat16):
235
+ raise ValueError(f"flash_attention_2 requires fp16/bf16 tensors, got dtype={query.dtype}.")
236
+
237
+ dropout_p = self.attention_dropout if self.training else 0.0
238
+ if packed_metadata is not None:
239
+ if packed_metadata.indices is not None:
240
+ query = query.reshape(-1, self.num_heads, self.head_dim).index_select(0, packed_metadata.indices)
241
+ key = key.reshape(-1, self.num_key_value_heads, self.head_dim).index_select(0, packed_metadata.indices)
242
+ value = value.reshape(-1, self.num_key_value_heads, self.head_dim).index_select(0, packed_metadata.indices)
243
+ output = flash_attn_varlen_func(
244
+ query,
245
+ key,
246
+ value,
247
+ packed_metadata.cu_seqlens,
248
+ packed_metadata.cu_seqlens,
249
+ packed_metadata.max_seqlen,
250
+ packed_metadata.max_seqlen,
251
+ dropout_p=dropout_p,
252
+ causal=True,
253
+ )
254
+ if packed_metadata.indices is None:
255
+ return output
256
+ return pad_input(
257
+ output,
258
+ packed_metadata.indices,
259
+ packed_metadata.batch_size,
260
+ packed_metadata.seq_len,
261
+ )
262
+
263
+ if attention_mask is None or bool(attention_mask.all()):
264
+ return flash_attn_func(query, key, value, dropout_p=dropout_p, causal=True)
265
+
266
+ if query.shape[1] != key.shape[1]:
267
+ query_attention_mask = attention_mask[:, -query.shape[1] :]
268
+ unpadded_query, query_indices, cu_seqlens_q, max_seqlen_q, _ = unpad_input(
269
+ query,
270
+ query_attention_mask,
271
+ )
272
+ unpadded_key, _, cu_seqlens_k, max_seqlen_k, _ = unpad_input(key, attention_mask)
273
+ unpadded_value, _, _, _, _ = unpad_input(value, attention_mask)
274
+ output = flash_attn_varlen_func(
275
+ unpadded_query,
276
+ unpadded_key,
277
+ unpadded_value,
278
+ cu_seqlens_q,
279
+ cu_seqlens_k,
280
+ max_seqlen_q,
281
+ max_seqlen_k,
282
+ dropout_p=dropout_p,
283
+ causal=True,
284
+ )
285
+ return pad_input(output, query_indices, query.shape[0], query.shape[1])
286
+
287
+ unpadded_query, indices, cu_seqlens, max_seqlen, _ = unpad_input(query, attention_mask)
288
+ unpadded_key, _, _, _, _ = unpad_input(key, attention_mask)
289
+ unpadded_value, _, _, _, _ = unpad_input(value, attention_mask)
290
+ output = flash_attn_varlen_func(
291
+ unpadded_query,
292
+ unpadded_key,
293
+ unpadded_value,
294
+ cu_seqlens,
295
+ cu_seqlens,
296
+ max_seqlen,
297
+ max_seqlen,
298
+ dropout_p=dropout_p,
299
+ causal=True,
300
+ )
301
+ return pad_input(output, indices, query.shape[0], query.shape[1])
302
+
303
+ def forward(
304
+ self,
305
+ hidden_states: torch.Tensor,
306
+ position_embeddings: tuple[torch.Tensor, torch.Tensor],
307
+ attention_mask: Optional[torch.Tensor] = None,
308
+ packed_metadata: Optional[PackedSequenceMetadata] = None,
309
+ layer_past: Optional[tuple[torch.Tensor, torch.Tensor]] = None,
310
+ use_cache: bool = False,
311
+ ) -> tuple[torch.Tensor, Optional[tuple[torch.Tensor, torch.Tensor]]]:
312
+ input_shape = hidden_states.shape[:-1]
313
+ query_states = self.q_norm(
314
+ self.q_proj(hidden_states).view(*input_shape, self.num_heads, self.head_dim)
315
+ )
316
+ key_states = self.k_norm(
317
+ self.k_proj(hidden_states).view(*input_shape, self.num_key_value_heads, self.head_dim)
318
+ )
319
+ value_states = self.v_proj(hidden_states).view(*input_shape, self.num_key_value_heads, self.head_dim)
320
+
321
+ cos, sin = position_embeddings
322
+ query_states, key_states = apply_rotary_pos_emb(query_states, key_states, cos, sin)
323
+
324
+ if layer_past is not None:
325
+ past_key, past_value = layer_past
326
+ key_states = torch.cat([past_key.to(device=key_states.device, dtype=key_states.dtype), key_states], dim=1)
327
+ value_states = torch.cat(
328
+ [past_value.to(device=value_states.device, dtype=value_states.dtype), value_states],
329
+ dim=1,
330
+ )
331
+
332
+ present = (key_states, value_states) if use_cache else None
333
+ if self.attn_implementation == "flash_attention_2":
334
+ attn_output = self._flash_attention(
335
+ query=query_states,
336
+ key=key_states,
337
+ value=value_states,
338
+ attention_mask=attention_mask,
339
+ packed_metadata=packed_metadata,
340
+ )
341
+ elif self.attn_implementation == "sdpa":
342
+ attn_output = self._sdpa_attention(
343
+ query=query_states,
344
+ key=key_states,
345
+ value=value_states,
346
+ attention_mask=attention_mask,
347
+ )
348
+ else:
349
+ attn_output = self._eager_attention(
350
+ query=query_states,
351
+ key=key_states,
352
+ value=value_states,
353
+ attention_mask=attention_mask,
354
+ )
355
+ attn_output = attn_output.reshape(*input_shape, -1).contiguous()
356
+ return self.o_proj(attn_output), present
357
+
358
+
359
+ class MossQwen3DecoderLayer(nn.Module):
360
+ def __init__(self, config, layer_idx: int) -> None:
361
+ super().__init__()
362
+ self.self_attn = MossQwen3Attention(config=config, layer_idx=layer_idx)
363
+ self.mlp = MossQwen3MLP(config)
364
+ self.input_layernorm = MossQwen3RMSNorm(config.hidden_size, eps=float(config.rms_norm_eps))
365
+ self.post_attention_layernorm = MossQwen3RMSNorm(config.hidden_size, eps=float(config.rms_norm_eps))
366
+
367
+ def forward(
368
+ self,
369
+ hidden_states: torch.Tensor,
370
+ attention_mask: Optional[torch.Tensor] = None,
371
+ packed_metadata: Optional[PackedSequenceMetadata] = None,
372
+ layer_past: Optional[tuple[torch.Tensor, torch.Tensor]] = None,
373
+ use_cache: bool = False,
374
+ position_embeddings: Optional[tuple[torch.Tensor, torch.Tensor]] = None,
375
+ ) -> tuple[torch.Tensor, Optional[tuple[torch.Tensor, torch.Tensor]]]:
376
+ residual = hidden_states
377
+ hidden_states = self.input_layernorm(hidden_states)
378
+ attn_output, present = self.self_attn(
379
+ hidden_states=hidden_states,
380
+ position_embeddings=position_embeddings,
381
+ attention_mask=attention_mask,
382
+ packed_metadata=packed_metadata,
383
+ layer_past=layer_past,
384
+ use_cache=use_cache,
385
+ )
386
+ hidden_states = residual + attn_output
387
+
388
+ residual = hidden_states
389
+ hidden_states = self.post_attention_layernorm(hidden_states)
390
+ hidden_states = residual + self.mlp(hidden_states)
391
+ return hidden_states, present
392
+
393
+
394
+ class MossQwen3Model(nn.Module):
395
+ def __init__(self, config) -> None:
396
+ super().__init__()
397
+ self.config = config
398
+ self.attn_implementation = str(getattr(config, "_attn_implementation", "eager"))
399
+ self.padding_idx = getattr(config, "pad_token_id", None)
400
+ self.vocab_size = int(config.vocab_size)
401
+ self.embed_tokens = nn.Embedding(config.vocab_size, config.hidden_size, self.padding_idx)
402
+ self.layers = nn.ModuleList(
403
+ [MossQwen3DecoderLayer(config, layer_idx=index) for index in range(config.num_hidden_layers)]
404
+ )
405
+ self.norm = MossQwen3RMSNorm(config.hidden_size, eps=float(config.rms_norm_eps))
406
+ self.rotary_emb = MossQwen3RotaryEmbedding(config)
407
+ self.gradient_checkpointing = False
408
+ self.gradient_checkpointing_use_reentrant = bool(
409
+ getattr(config, "gradient_checkpointing_use_reentrant", False)
410
+ )
411
+ self._reset_parameters()
412
+
413
+ def _reset_parameters(self) -> None:
414
+ init_std = float(getattr(self.config, "initializer_range", 0.02))
415
+ for module in self.modules():
416
+ if isinstance(module, nn.Linear):
417
+ nn.init.normal_(module.weight, mean=0.0, std=init_std)
418
+ if module.bias is not None:
419
+ nn.init.zeros_(module.bias)
420
+ elif isinstance(module, nn.Embedding):
421
+ nn.init.normal_(module.weight, mean=0.0, std=init_std)
422
+
423
+ def get_input_embeddings(self):
424
+ return self.embed_tokens
425
+
426
+ def set_input_embeddings(self, value):
427
+ self.embed_tokens = value
428
+
429
+ def load_qwen3_pretrained_weights(self, pretrained_path: str) -> None:
430
+ model_dir = Path(pretrained_path)
431
+ index_path = model_dir / "model.safetensors.index.json"
432
+ if not index_path.exists():
433
+ raise FileNotFoundError(f"Missing Qwen3 safetensors index: {index_path}")
434
+ with index_path.open("r", encoding="utf-8") as handle:
435
+ index = json.load(handle)
436
+ weight_map = index.get("weight_map", {})
437
+ shard_to_keys: dict[str, list[str]] = {}
438
+ for key, shard in weight_map.items():
439
+ if not key.startswith("model."):
440
+ continue
441
+ shard_to_keys.setdefault(str(shard), []).append(key)
442
+
443
+ state_dict = self.state_dict()
444
+ loaded_state = {}
445
+ for shard, keys in sorted(shard_to_keys.items()):
446
+ shard_tensors = load_file(str(model_dir / shard), device="cpu")
447
+ for key in keys:
448
+ target_key = key[len("model.") :]
449
+ if target_key not in state_dict:
450
+ continue
451
+ tensor = shard_tensors[key]
452
+ if tuple(tensor.shape) != tuple(state_dict[target_key].shape):
453
+ raise ValueError(
454
+ f"Shape mismatch while loading Qwen3 weight {key}: "
455
+ f"checkpoint={tuple(tensor.shape)} model={tuple(state_dict[target_key].shape)}"
456
+ )
457
+ loaded_state[target_key] = tensor
458
+
459
+ missing, unexpected = self.load_state_dict(loaded_state, strict=False)
460
+ unexpected = [key for key in unexpected if key]
461
+ if unexpected:
462
+ raise RuntimeError(f"Unexpected Qwen3 pretrained keys after load: {unexpected[:10]}")
463
+ missing = [key for key in missing if key not in loaded_state]
464
+ if missing:
465
+ raise RuntimeError(f"Missing Qwen3 pretrained keys after load: {missing[:10]}")
466
+
467
+ def forward(
468
+ self,
469
+ input_ids: Optional[torch.LongTensor] = None,
470
+ past_key_values: Optional[tuple[tuple[torch.Tensor, torch.Tensor], ...]] = None,
471
+ attention_mask: Optional[torch.Tensor] = None,
472
+ position_ids: Optional[torch.LongTensor] = None,
473
+ inputs_embeds: Optional[torch.FloatTensor] = None,
474
+ use_cache: Optional[bool] = None,
475
+ output_attentions: Optional[bool] = None,
476
+ output_hidden_states: Optional[bool] = None,
477
+ return_dict: bool = True,
478
+ cu_seqlens: Optional[torch.Tensor] = None,
479
+ num_sequences: Optional[torch.Tensor] = None,
480
+ ) -> BaseModelOutputWithPast:
481
+ del input_ids, output_attentions
482
+ if inputs_embeds is None:
483
+ raise ValueError("inputs_embeds must be provided.")
484
+
485
+ use_cache = bool(use_cache)
486
+ if use_cache and cu_seqlens is not None:
487
+ raise ValueError("use_cache=True is not supported together with cu_seqlens packing.")
488
+
489
+ hidden_states = inputs_embeds
490
+ if attention_mask is None:
491
+ attention_mask = torch.ones(hidden_states.shape[:2], dtype=torch.bool, device=hidden_states.device)
492
+ else:
493
+ attention_mask = attention_mask.to(dtype=torch.bool, device=hidden_states.device)
494
+ query_attention_mask = attention_mask[:, -hidden_states.shape[1] :]
495
+
496
+ packed_metadata = None
497
+ if position_ids is None:
498
+ if cu_seqlens is not None:
499
+ position_ids = MossTTSNanoGPT2Model.build_packed_position_ids(
500
+ attention_mask=attention_mask,
501
+ cu_seqlens=cu_seqlens.to(device=hidden_states.device),
502
+ num_sequences=num_sequences.to(device=hidden_states.device) if num_sequences is not None else None,
503
+ sequence_length=hidden_states.shape[1],
504
+ )
505
+ elif attention_mask is not None:
506
+ position_ids = attention_mask.long().cumsum(dim=-1) - 1
507
+ position_ids = position_ids.masked_fill(~attention_mask, 0)
508
+ position_ids = position_ids[:, -hidden_states.shape[1] :]
509
+ else:
510
+ past_length = 0
511
+ if past_key_values is not None and len(past_key_values) > 0:
512
+ past_length = past_key_values[0][0].shape[1]
513
+ position_ids = torch.arange(hidden_states.shape[1], device=hidden_states.device, dtype=torch.long)
514
+ position_ids = position_ids + past_length
515
+ position_ids = position_ids.unsqueeze(0).expand(hidden_states.shape[0], -1)
516
+
517
+ if cu_seqlens is not None and self.attn_implementation == "flash_attention_2":
518
+ packed_metadata = MossTTSNanoGPT2Model.build_packed_metadata(
519
+ hidden_states=hidden_states,
520
+ cu_seqlens=cu_seqlens.to(device=hidden_states.device),
521
+ num_sequences=num_sequences.to(device=hidden_states.device) if num_sequences is not None else None,
522
+ )
523
+
524
+ hidden_states = hidden_states * query_attention_mask.unsqueeze(-1).to(dtype=hidden_states.dtype)
525
+ position_embeddings = self.rotary_emb(hidden_states, position_ids)
526
+
527
+ all_hidden_states = () if output_hidden_states else None
528
+ presents = [] if use_cache else None
529
+ for layer_index, decoder_layer in enumerate(self.layers):
530
+ if output_hidden_states:
531
+ all_hidden_states = all_hidden_states + (hidden_states,)
532
+
533
+ if self.gradient_checkpointing and self.training:
534
+ if use_cache:
535
+ raise ValueError("use_cache=True is not supported when gradient checkpointing is enabled during training.")
536
+
537
+ def custom_forward(*inputs):
538
+ output, _ = decoder_layer(
539
+ hidden_states=inputs[0],
540
+ attention_mask=inputs[1],
541
+ packed_metadata=packed_metadata,
542
+ layer_past=None,
543
+ use_cache=False,
544
+ position_embeddings=position_embeddings,
545
+ )
546
+ return output
547
+
548
+ hidden_states = torch.utils.checkpoint.checkpoint(
549
+ custom_forward,
550
+ hidden_states,
551
+ attention_mask,
552
+ use_reentrant=self.gradient_checkpointing_use_reentrant,
553
+ )
554
+ present = None
555
+ else:
556
+ hidden_states, present = decoder_layer(
557
+ hidden_states=hidden_states,
558
+ attention_mask=attention_mask,
559
+ packed_metadata=packed_metadata,
560
+ layer_past=None if past_key_values is None else past_key_values[layer_index],
561
+ use_cache=use_cache,
562
+ position_embeddings=position_embeddings,
563
+ )
564
+
565
+ hidden_states = hidden_states * query_attention_mask.unsqueeze(-1).to(dtype=hidden_states.dtype)
566
+ if presents is not None:
567
+ presents.append(present)
568
+
569
+ hidden_states = self.norm(hidden_states)
570
+ hidden_states = hidden_states * query_attention_mask.unsqueeze(-1).to(dtype=hidden_states.dtype)
571
+ if output_hidden_states:
572
+ all_hidden_states = all_hidden_states + (hidden_states,)
573
+
574
+ if not return_dict:
575
+ return (hidden_states, tuple(presents) if presents is not None else None, all_hidden_states, None)
576
+
577
+ return BaseModelOutputWithPast(
578
+ last_hidden_state=hidden_states,
579
+ past_key_values=tuple(presents) if presents is not None else None,
580
+ hidden_states=all_hidden_states,
581
+ attentions=None,
582
+ )
requirements.txt ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ torch>=2.9,<3
2
+ torchaudio>=2.9,<3
3
+ transformers==5.14.1
4
+ safetensors>=0.8,<1
5
+ numpy>=2,<3
6
+ soundfile>=0.14,<1
7
+ accelerate==1.14.0
8
+ huggingface_hub>=1.29,<2
9
+ einops>=0.8
10
+ scipy
11
+ lameenc>=1.8
special_tokens_map.json ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "additional_special_tokens": [
3
+ "<|audio_start|>",
4
+ "<|audio_end|>",
5
+ "<|audio_pad|>"
6
+ ],
7
+ "eos_token": {
8
+ "content": "<|im_end|>",
9
+ "lstrip": false,
10
+ "normalized": false,
11
+ "rstrip": false,
12
+ "single_word": false
13
+ },
14
+ "pad_token": {
15
+ "content": "<|endoftext|>",
16
+ "lstrip": false,
17
+ "normalized": false,
18
+ "rstrip": false,
19
+ "single_word": false
20
+ }
21
+ }
stats/DATA_READY.json ADDED
@@ -0,0 +1,218 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "status": "READY",
3
+ "pilot_only": false,
4
+ "selection_contract": {
5
+ "kind": "large13-notebooklm-multispeaker-v1",
6
+ "parent": "laion/Humaneness-Voice-Large-1.3-Alpha",
7
+ "base_step": 9799,
8
+ "base_weight_files": {
9
+ "model-00001-of-00003.safetensors": "3a9831cfd1944316e8b7d5fcaea845bf8b49b832824950709ce0eabf56b4702a",
10
+ "model-00002-of-00003.safetensors": "1fdaae7bd4f09b867152ef91761106e7bfef986b5f9979f69463466e864018a5",
11
+ "model-00003-of-00003.safetensors": "c149c250be927df24cdaa59c5b8ff50c3f0471f664f6483bb58236f07afa31df"
12
+ },
13
+ "languages": [
14
+ "en",
15
+ "de",
16
+ "fr",
17
+ "es",
18
+ "nl"
19
+ ],
20
+ "epochs": 3,
21
+ "world": 64,
22
+ "accumulation": 2,
23
+ "peaks": [
24
+ 2e-05,
25
+ 4e-05
26
+ ],
27
+ "warmup": 0.05,
28
+ "cosine_floor": 0.1,
29
+ "prefix": "plain-text speaker-labeled references plus strictly past audio context; native audio placeholders; no new special tokens",
30
+ "context_max_frames": 750,
31
+ "reference_min_frames": 63,
32
+ "reference_max_frames": 187,
33
+ "target_max_frames": 2250,
34
+ "max_context_rows": 32768,
35
+ "loss": "only final assistant audio, all 12 trained codebooks",
36
+ "split": "episode-disjoint, stratified by publisher language; duplicate audio audited",
37
+ "source_filter": "original beginning and middle DNSMOS BAK each >=4.0",
38
+ "eval": {
39
+ "per_language": {
40
+ "two_turn": 5,
41
+ "four_turn": 5
42
+ },
43
+ "seeds": "fixed before training",
44
+ "heldout_episodes": true
45
+ },
46
+ "checkpoints_active_seconds": 900,
47
+ "maximum_training_allocations": 3,
48
+ "no_lora": true,
49
+ "distribution": "FSDP1 root FULL_SHARD; FP32 optimizer parameters/reduction; BF16 compute; full CPU state checkpoints",
50
+ "serialization": "Explicit ChatML with byte-identical train/inference prefix; no template fallback or direct-generation shortcut",
51
+ "published_scope": "Only the user-requested en/de/fr/es/nl source episodes; other languages remain in original journals and archives"
52
+ },
53
+ "base_weights_sha256": "b66725ff44243b7b59c84fba9c201d8f993551e2b3c79211f390042a41f07c06",
54
+ "database_sha256": "0e36a157e1810673d15a50fe1d1fb31cf36bafdb45fe09d5ba859dc3abeb6c14",
55
+ "presentations": 718464,
56
+ "nonpadding_presentations": 718281,
57
+ "unique_train_targets": 239427,
58
+ "phases": [
59
+ {
60
+ "name": "Globally shuffled epoch 1",
61
+ "end_position": 239488
62
+ },
63
+ {
64
+ "name": "Globally shuffled epoch 2",
65
+ "end_position": 478976
66
+ },
67
+ {
68
+ "name": "Globally shuffled epoch 3",
69
+ "end_position": 718464
70
+ }
71
+ ],
72
+ "canary_keys": [
73
+ 1,
74
+ 372,
75
+ 4176,
76
+ 16,
77
+ 23624,
78
+ 222170,
79
+ 66970
80
+ ],
81
+ "validation_keys": [
82
+ 4470,
83
+ 4472,
84
+ 4473,
85
+ 4474,
86
+ 194214,
87
+ 194215,
88
+ 194217,
89
+ 194219,
90
+ 294871,
91
+ 294872,
92
+ 294873,
93
+ 294874,
94
+ 19459,
95
+ 19460,
96
+ 19461,
97
+ 19464,
98
+ 75081,
99
+ 75084,
100
+ 75089,
101
+ 75090
102
+ ],
103
+ "evaluation_tasks": 50,
104
+ "evaluation_sha256": "1fd7b56db53a096031dedd274aa60ea7c6546181a66d6f0ab5037d1a40a58a0a",
105
+ "episode_split_verified": true,
106
+ "statistics": [
107
+ {
108
+ "language": "de",
109
+ "split": "test",
110
+ "windows": 93,
111
+ "codec_hours": 0.1506222222222222
112
+ },
113
+ {
114
+ "language": "de",
115
+ "split": "train",
116
+ "windows": 4997,
117
+ "codec_hours": 9.151177777777777
118
+ },
119
+ {
120
+ "language": "de",
121
+ "split": "validation",
122
+ "windows": 46,
123
+ "codec_hours": 0.0971777777777778
124
+ },
125
+ {
126
+ "language": "en",
127
+ "split": "test",
128
+ "windows": 161,
129
+ "codec_hours": 0.2633111111111111
130
+ },
131
+ {
132
+ "language": "en",
133
+ "split": "train",
134
+ "windows": 207561,
135
+ "codec_hours": 310.92517777777783
136
+ },
137
+ {
138
+ "language": "en",
139
+ "split": "validation",
140
+ "windows": 3902,
141
+ "codec_hours": 5.888955555555556
142
+ },
143
+ {
144
+ "language": "es",
145
+ "split": "test",
146
+ "windows": 70,
147
+ "codec_hours": 0.10746666666666667
148
+ },
149
+ {
150
+ "language": "es",
151
+ "split": "train",
152
+ "windows": 25380,
153
+ "codec_hours": 33.64906666666667
154
+ },
155
+ {
156
+ "language": "es",
157
+ "split": "validation",
158
+ "windows": 368,
159
+ "codec_hours": 0.48633333333333334
160
+ },
161
+ {
162
+ "language": "fr",
163
+ "split": "test",
164
+ "windows": 144,
165
+ "codec_hours": 0.1645777777777778
166
+ },
167
+ {
168
+ "language": "fr",
169
+ "split": "train",
170
+ "windows": 820,
171
+ "codec_hours": 0.6252222222222222
172
+ },
173
+ {
174
+ "language": "fr",
175
+ "split": "validation",
176
+ "windows": 149,
177
+ "codec_hours": 0.1634888888888889
178
+ },
179
+ {
180
+ "language": "nl",
181
+ "split": "test",
182
+ "windows": 105,
183
+ "codec_hours": 0.22775555555555557
184
+ },
185
+ {
186
+ "language": "nl",
187
+ "split": "train",
188
+ "windows": 669,
189
+ "codec_hours": 1.0362
190
+ },
191
+ {
192
+ "language": "nl",
193
+ "split": "validation",
194
+ "windows": 74,
195
+ "codec_hours": 0.14373333333333335
196
+ }
197
+ ],
198
+ "rejections": [
199
+ {
200
+ "reason": "boundary_contains_other_words",
201
+ "candidates": 677661
202
+ },
203
+ {
204
+ "reason": "not_exactly_two_diarized_speakers",
205
+ "candidates": 985
206
+ },
207
+ {
208
+ "reason": "target_length",
209
+ "candidates": 27339
210
+ },
211
+ {
212
+ "reason": "two_clean_past_references_unavailable",
213
+ "candidates": 95293
214
+ }
215
+ ],
216
+ "annotation_sha256": "ffe152f39d0d651625fa7747b8d132b587642773b48196e44d5923cfd432e1fd",
217
+ "time": 1793631377.1572342
218
+ }
stats/fullft-DONE.json ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ {
2
+ "status": "COMPLETE",
3
+ "step": 5613,
4
+ "contract_sha256": "795b57ea6cfca9f0b264e20f2bd5da797d0e9a00e998fb2fc3c5c25a681e818d",
5
+ "time": 1793645723.802151
6
+ }
stats/fullft-RUN_CONTRACT.json ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "kind": "large13-notebooklm-multispeaker-v1",
3
+ "model": "large",
4
+ "base": "/e/scratch/laionize/schuhmann1/hvs_large_1_3_20261022/release_1_3/model",
5
+ "base_weights_sha256": "b66725ff44243b7b59c84fba9c201d8f993551e2b3c79211f390042a41f07c06",
6
+ "database_sha256": "0e36a157e1810673d15a50fe1d1fb31cf36bafdb45fe09d5ba859dc3abeb6c14",
7
+ "presentations": 718464,
8
+ "actual_presentations": 718281,
9
+ "phases": [
10
+ {
11
+ "name": "Globally shuffled epoch 1",
12
+ "end_position": 239488
13
+ },
14
+ {
15
+ "name": "Globally shuffled epoch 2",
16
+ "end_position": 478976
17
+ },
18
+ {
19
+ "name": "Globally shuffled epoch 3",
20
+ "end_position": 718464
21
+ }
22
+ ],
23
+ "selection_contract": {
24
+ "kind": "large13-notebooklm-multispeaker-v1",
25
+ "parent": "laion/Humaneness-Voice-Large-1.3-Alpha",
26
+ "base_step": 9799,
27
+ "base_weight_files": {
28
+ "model-00001-of-00003.safetensors": "3a9831cfd1944316e8b7d5fcaea845bf8b49b832824950709ce0eabf56b4702a",
29
+ "model-00002-of-00003.safetensors": "1fdaae7bd4f09b867152ef91761106e7bfef986b5f9979f69463466e864018a5",
30
+ "model-00003-of-00003.safetensors": "c149c250be927df24cdaa59c5b8ff50c3f0471f664f6483bb58236f07afa31df"
31
+ },
32
+ "languages": [
33
+ "en",
34
+ "de",
35
+ "fr",
36
+ "es",
37
+ "nl"
38
+ ],
39
+ "epochs": 3,
40
+ "world": 64,
41
+ "accumulation": 2,
42
+ "peaks": [
43
+ 2e-05,
44
+ 4e-05
45
+ ],
46
+ "warmup": 0.05,
47
+ "cosine_floor": 0.1,
48
+ "prefix": "plain-text speaker-labeled references plus strictly past audio context; native audio placeholders; no new special tokens",
49
+ "context_max_frames": 750,
50
+ "reference_min_frames": 63,
51
+ "reference_max_frames": 187,
52
+ "target_max_frames": 2250,
53
+ "max_context_rows": 32768,
54
+ "loss": "only final assistant audio, all 12 trained codebooks",
55
+ "split": "episode-disjoint, stratified by publisher language; duplicate audio audited",
56
+ "source_filter": "original beginning and middle DNSMOS BAK each >=4.0",
57
+ "eval": {
58
+ "per_language": {
59
+ "two_turn": 5,
60
+ "four_turn": 5
61
+ },
62
+ "seeds": "fixed before training",
63
+ "heldout_episodes": true
64
+ },
65
+ "checkpoints_active_seconds": 900,
66
+ "maximum_training_allocations": 3,
67
+ "no_lora": true,
68
+ "distribution": "FSDP1 root FULL_SHARD; FP32 optimizer parameters/reduction; BF16 compute; full CPU state checkpoints",
69
+ "serialization": "Explicit ChatML with byte-identical train/inference prefix; no template fallback or direct-generation shortcut",
70
+ "published_scope": "Only the user-requested en/de/fr/es/nl source episodes; other languages remain in original journals and archives"
71
+ },
72
+ "world": 64,
73
+ "accumulation": 2,
74
+ "effective_batch": 128,
75
+ "seed": 20261102,
76
+ "peak_semantic": 2e-05,
77
+ "peak_talker": 4e-05,
78
+ "warmup_fraction": 0.05,
79
+ "cosine_floor": 0.1,
80
+ "lr_restarts": 0,
81
+ "total_steps": 5613,
82
+ "checkpoints_seconds": 900,
83
+ "keep_all_checkpoints": true,
84
+ "optimizer_rng_scheduler_sampler_saved": true,
85
+ "pilot": false,
86
+ "distribution": "FSDP1 root FULL_SHARD, original FP32 optimizer parameters, BF16 compute, FP32 reduction, full CPU checkpoint",
87
+ "training_code_sha256": "118513d7a48bc36782c5b8ad7333013ad9fcbf2e40814e7f41ab8cb2a60f75e1",
88
+ "parent_train_fullft_sha256": "4e5f84b948afd3eabd28f762349d1a2c7429232ffc5bd6524f891c82c6a613d3",
89
+ "parent_attention_sha256": "98e46fbe74b8b4e8d48ff12e91a40ce79aab59ea2a970202088a5f91d53bb2cf",
90
+ "snapshot_sha256": "600c0ad3c0d72f1adbfa49cb097f1c983cfc17acf519ad7dc729c341bd5ba45d",
91
+ "variant": "podcast",
92
+ "contract_sha256": "795b57ea6cfca9f0b264e20f2bd5da797d0e9a00e998fb2fc3c5c25a681e818d"
93
+ }
stats/fullft-STATUS.json ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "state": "COMPLETE",
3
+ "step": 5613,
4
+ "total_steps": 5613,
5
+ "loss": 4.5207825703407405,
6
+ "job_id": "2650924",
7
+ "gpus": 64,
8
+ "elapsed_this_job_s": 12179.607034354936,
9
+ "peak_gpu_gb": 34.143688192,
10
+ "updated_unix": 1793645723.7996464
11
+ }
stats/fullft-steps.jsonl ADDED
@@ -0,0 +1,284 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {"step": 1, "total_steps": 5613, "loss": 5.587478797882795, "lr_semantic": 7.117437722419929e-08, "lr_talker": 1.4234875444839858e-07, "elapsed_s": 11.013597084907815, "job_id": "2650924"}
2
+ {"step": 2, "total_steps": 5613, "loss": 5.525776091963053, "lr_semantic": 1.4234875444839858e-07, "lr_talker": 2.8469750889679715e-07, "elapsed_s": 16.60024484898895, "job_id": "2650924"}
3
+ {"step": 3, "total_steps": 5613, "loss": 5.623797632753849, "lr_semantic": 2.135231316725979e-07, "lr_talker": 4.270462633451958e-07, "elapsed_s": 24.13340073195286, "job_id": "2650924"}
4
+ {"step": 20, "total_steps": 5613, "loss": 5.518706202507019, "lr_semantic": 1.423487544483986e-06, "lr_talker": 2.846975088967972e-06, "elapsed_s": 74.78572288993746, "job_id": "2650924"}
5
+ {"step": 40, "total_steps": 5613, "loss": 5.090944893658161, "lr_semantic": 2.846975088967972e-06, "lr_talker": 5.693950177935944e-06, "elapsed_s": 120.8007314610295, "job_id": "2650924"}
6
+ {"step": 60, "total_steps": 5613, "loss": 4.929759006947279, "lr_semantic": 4.270462633451958e-06, "lr_talker": 8.540925266903915e-06, "elapsed_s": 170.59753852407448, "job_id": "2650924"}
7
+ {"step": 80, "total_steps": 5613, "loss": 4.938163060694933, "lr_semantic": 5.693950177935944e-06, "lr_talker": 1.1387900355871889e-05, "elapsed_s": 232.3358086280059, "job_id": "2650924"}
8
+ {"step": 100, "total_steps": 5613, "loss": 4.852787749841809, "lr_semantic": 7.11743772241993e-06, "lr_talker": 1.423487544483986e-05, "elapsed_s": 273.8830103040673, "job_id": "2650924"}
9
+ {"step": 120, "total_steps": 5613, "loss": 4.8588650450110435, "lr_semantic": 8.540925266903915e-06, "lr_talker": 1.708185053380783e-05, "elapsed_s": 313.6654968110379, "job_id": "2650924"}
10
+ {"step": 140, "total_steps": 5613, "loss": 4.8637976460158825, "lr_semantic": 9.964412811387902e-06, "lr_talker": 1.9928825622775804e-05, "elapsed_s": 353.53465432301164, "job_id": "2650924"}
11
+ {"step": 160, "total_steps": 5613, "loss": 4.863433074206114, "lr_semantic": 1.1387900355871889e-05, "lr_talker": 2.2775800711743777e-05, "elapsed_s": 393.17336230608635, "job_id": "2650924"}
12
+ {"step": 180, "total_steps": 5613, "loss": 4.836579687893391, "lr_semantic": 1.2811387900355874e-05, "lr_talker": 2.5622775800711747e-05, "elapsed_s": 432.5499518690631, "job_id": "2650924"}
13
+ {"step": 200, "total_steps": 5613, "loss": 4.824142433702946, "lr_semantic": 1.423487544483986e-05, "lr_talker": 2.846975088967972e-05, "elapsed_s": 472.52124926890247, "job_id": "2650924"}
14
+ {"step": 220, "total_steps": 5613, "loss": 4.832095634192228, "lr_semantic": 1.5658362989323845e-05, "lr_talker": 3.131672597864769e-05, "elapsed_s": 512.6217995649204, "job_id": "2650924"}
15
+ {"step": 240, "total_steps": 5613, "loss": 4.821955591440201, "lr_semantic": 1.708185053380783e-05, "lr_talker": 3.416370106761566e-05, "elapsed_s": 553.1844750219025, "job_id": "2650924"}
16
+ {"step": 260, "total_steps": 5613, "loss": 4.816163405776024, "lr_semantic": 1.8505338078291815e-05, "lr_talker": 3.701067615658363e-05, "elapsed_s": 593.9156070020981, "job_id": "2650924"}
17
+ {"step": 280, "total_steps": 5613, "loss": 4.817517191171646, "lr_semantic": 1.9928825622775804e-05, "lr_talker": 3.985765124555161e-05, "elapsed_s": 635.7070532739162, "job_id": "2650924"}
18
+ {"step": 300, "total_steps": 5613, "loss": 4.843491647392511, "lr_semantic": 1.9999436057735316e-05, "lr_talker": 3.999887211547063e-05, "elapsed_s": 676.0006452200469, "job_id": "2650924"}
19
+ {"step": 320, "total_steps": 5613, "loss": 4.812273908406496, "lr_semantic": 1.9997624023821825e-05, "lr_talker": 3.999524804764365e-05, "elapsed_s": 715.7607630849816, "job_id": "2650924"}
20
+ {"step": 340, "total_steps": 5613, "loss": 4.772692650556564, "lr_semantic": 1.9994562587693766e-05, "lr_talker": 3.998912517538753e-05, "elapsed_s": 755.3094924690668, "job_id": "2650924"}
21
+ {"step": 360, "total_steps": 5613, "loss": 4.824440844357014, "lr_semantic": 1.9990252174459486e-05, "lr_talker": 3.998050434891897e-05, "elapsed_s": 795.2929087539669, "job_id": "2650924"}
22
+ {"step": 380, "total_steps": 5613, "loss": 4.802605751901865, "lr_semantic": 1.9984693382659205e-05, "lr_talker": 3.996938676531841e-05, "elapsed_s": 834.7539963200688, "job_id": "2650924"}
23
+ {"step": 400, "total_steps": 5613, "loss": 4.753821540623903, "lr_semantic": 1.99778869841819e-05, "lr_talker": 3.99557739683638e-05, "elapsed_s": 874.9783155990299, "job_id": "2650924"}
24
+ {"step": 420, "total_steps": 5613, "loss": 4.8291470147669315, "lr_semantic": 1.996983392415811e-05, "lr_talker": 3.993966784831622e-05, "elapsed_s": 942.8503442539368, "job_id": "2650924"}
25
+ {"step": 440, "total_steps": 5613, "loss": 4.769236523658037, "lr_semantic": 1.9960535320828727e-05, "lr_talker": 3.9921070641657454e-05, "elapsed_s": 983.7482710410841, "job_id": "2650924"}
26
+ {"step": 460, "total_steps": 5613, "loss": 4.784003414213657, "lr_semantic": 1.9949992465389688e-05, "lr_talker": 3.9899984930779376e-05, "elapsed_s": 1023.9067495749332, "job_id": "2650924"}
27
+ {"step": 480, "total_steps": 5613, "loss": 4.800135903060436, "lr_semantic": 1.993820682181269e-05, "lr_talker": 3.987641364362538e-05, "elapsed_s": 1065.0519276841078, "job_id": "2650924"}
28
+ {"step": 500, "total_steps": 5613, "loss": 4.788406662642956, "lr_semantic": 1.9925180026641902e-05, "lr_talker": 3.9850360053283805e-05, "elapsed_s": 1119.3691214669961, "job_id": "2650924"}
29
+ {"step": 520, "total_steps": 5613, "loss": 4.823740411549807, "lr_semantic": 1.991091388876674e-05, "lr_talker": 3.982182777753348e-05, "elapsed_s": 1159.5253813730087, "job_id": "2650924"}
30
+ {"step": 540, "total_steps": 5613, "loss": 4.778647020459175, "lr_semantic": 1.989541038917064e-05, "lr_talker": 3.979082077834128e-05, "elapsed_s": 1199.1351977949962, "job_id": "2650924"}
31
+ {"step": 560, "total_steps": 5613, "loss": 4.772263254970312, "lr_semantic": 1.9878671680656022e-05, "lr_talker": 3.9757343361312045e-05, "elapsed_s": 1240.0329527850263, "job_id": "2650924"}
32
+ {"step": 580, "total_steps": 5613, "loss": 4.764200121164322, "lr_semantic": 1.986070008754533e-05, "lr_talker": 3.972140017509066e-05, "elapsed_s": 1280.5460716281086, "job_id": "2650924"}
33
+ {"step": 600, "total_steps": 5613, "loss": 4.794390715658665, "lr_semantic": 1.984149810535829e-05, "lr_talker": 3.968299621071658e-05, "elapsed_s": 1320.8885340450797, "job_id": "2650924"}
34
+ {"step": 620, "total_steps": 5613, "loss": 4.754822490736842, "lr_semantic": 1.9821068400465378e-05, "lr_talker": 3.9642136800930756e-05, "elapsed_s": 1361.7153889329638, "job_id": "2650924"}
35
+ {"step": 640, "total_steps": 5613, "loss": 4.773165099322796, "lr_semantic": 1.979941380971758e-05, "lr_talker": 3.959882761943516e-05, "elapsed_s": 1402.0059591881, "job_id": "2650924"}
36
+ {"step": 660, "total_steps": 5613, "loss": 4.765598749741912, "lr_semantic": 1.9776537340052457e-05, "lr_talker": 3.955307468010491e-05, "elapsed_s": 1443.30640967004, "job_id": "2650924"}
37
+ {"step": 680, "total_steps": 5613, "loss": 4.755720004439354, "lr_semantic": 1.97524421680766e-05, "lr_talker": 3.95048843361532e-05, "elapsed_s": 1492.9528597129975, "job_id": "2650924"}
38
+ {"step": 700, "total_steps": 5613, "loss": 4.7521882597357035, "lr_semantic": 1.9727131639624558e-05, "lr_talker": 3.9454263279249115e-05, "elapsed_s": 1533.5034493610729, "job_id": "2650924"}
39
+ {"step": 720, "total_steps": 5613, "loss": 4.788029182702303, "lr_semantic": 1.97006092692942e-05, "lr_talker": 3.94012185385884e-05, "elapsed_s": 1574.881404126063, "job_id": "2650924"}
40
+ {"step": 740, "total_steps": 5613, "loss": 4.762650026008487, "lr_semantic": 1.967287873995872e-05, "lr_talker": 3.934575747991744e-05, "elapsed_s": 1614.4268972349819, "job_id": "2650924"}
41
+ {"step": 760, "total_steps": 5613, "loss": 4.774876531213522, "lr_semantic": 1.9643943902255194e-05, "lr_talker": 3.928788780451039e-05, "elapsed_s": 1654.7846474519465, "job_id": "2650924"}
42
+ {"step": 780, "total_steps": 5613, "loss": 4.775570642203093, "lr_semantic": 1.9613808774049926e-05, "lr_talker": 3.922761754809985e-05, "elapsed_s": 1694.818456322886, "job_id": "2650924"}
43
+ {"step": 800, "total_steps": 5613, "loss": 4.761255389079452, "lr_semantic": 1.95824775398805e-05, "lr_talker": 3.9164955079761e-05, "elapsed_s": 1734.431733086938, "job_id": "2650924"}
44
+ {"step": 820, "total_steps": 5613, "loss": 4.793417455628514, "lr_semantic": 1.9549954550374726e-05, "lr_talker": 3.909990910074945e-05, "elapsed_s": 1774.7855006279424, "job_id": "2650924"}
45
+ {"step": 840, "total_steps": 5613, "loss": 4.769841007888317, "lr_semantic": 1.9516244321646533e-05, "lr_talker": 3.9032488643293066e-05, "elapsed_s": 1814.8339103450999, "job_id": "2650924"}
46
+ {"step": 860, "total_steps": 5613, "loss": 4.799153067171574, "lr_semantic": 1.9481351534668842e-05, "lr_talker": 3.8962703069337684e-05, "elapsed_s": 1882.465703408001, "job_id": "2650924"}
47
+ {"step": 880, "total_steps": 5613, "loss": 4.769105590879917, "lr_semantic": 1.944528103462358e-05, "lr_talker": 3.889056206924716e-05, "elapsed_s": 1945.0641413300764, "job_id": "2650924"}
48
+ {"step": 900, "total_steps": 5613, "loss": 4.804544523358345, "lr_semantic": 1.9408037830228883e-05, "lr_talker": 3.8816075660457767e-05, "elapsed_s": 2000.0417511779815, "job_id": "2650924"}
49
+ {"step": 920, "total_steps": 5613, "loss": 4.7401402592659, "lr_semantic": 1.9369627093043593e-05, "lr_talker": 3.873925418608719e-05, "elapsed_s": 2039.9671033429913, "job_id": "2650924"}
50
+ {"step": 940, "total_steps": 5613, "loss": 4.748336724936962, "lr_semantic": 1.9330054156749133e-05, "lr_talker": 3.8660108313498266e-05, "elapsed_s": 2080.364146329928, "job_id": "2650924"}
51
+ {"step": 960, "total_steps": 5613, "loss": 4.739069011062384, "lr_semantic": 1.9289324516408877e-05, "lr_talker": 3.8578649032817754e-05, "elapsed_s": 2120.9013028850313, "job_id": "2650924"}
52
+ {"step": 980, "total_steps": 5613, "loss": 4.76051914319396, "lr_semantic": 1.924744382770511e-05, "lr_talker": 3.849488765541022e-05, "elapsed_s": 2160.1376525240485, "job_id": "2650924"}
53
+ {"step": 1000, "total_steps": 5613, "loss": 4.767393801361322, "lr_semantic": 1.92044179061537e-05, "lr_talker": 3.84088358123074e-05, "elapsed_s": 2200.0085443970747, "job_id": "2650924"}
54
+ {"step": 1020, "total_steps": 5613, "loss": 4.76765163987875, "lr_semantic": 1.916025272629654e-05, "lr_talker": 3.832050545259308e-05, "elapsed_s": 2241.2521952099632, "job_id": "2650924"}
55
+ {"step": 1040, "total_steps": 5613, "loss": 4.7280378099530935, "lr_semantic": 1.911495442087193e-05, "lr_talker": 3.822990884174386e-05, "elapsed_s": 2282.928931066999, "job_id": "2650924"}
56
+ {"step": 1060, "total_steps": 5613, "loss": 4.730967672541738, "lr_semantic": 1.906852927996301e-05, "lr_talker": 3.813705855992602e-05, "elapsed_s": 2321.671146604931, "job_id": "2650924"}
57
+ {"step": 1080, "total_steps": 5613, "loss": 4.730238527059555, "lr_semantic": 1.9020983750124297e-05, "lr_talker": 3.8041967500248594e-05, "elapsed_s": 2362.0779010460246, "job_id": "2650924"}
58
+ {"step": 1100, "total_steps": 5613, "loss": 4.72141157835722, "lr_semantic": 1.8972324433486553e-05, "lr_talker": 3.7944648866973106e-05, "elapsed_s": 2416.252424715087, "job_id": "2650924"}
59
+ {"step": 1120, "total_steps": 5613, "loss": 4.736902706325054, "lr_semantic": 1.892255808683999e-05, "lr_talker": 3.784511617367998e-05, "elapsed_s": 2459.3653775320854, "job_id": "2650924"}
60
+ {"step": 1140, "total_steps": 5613, "loss": 4.764671867713332, "lr_semantic": 1.8871691620696043e-05, "lr_talker": 3.7743383241392086e-05, "elapsed_s": 2500.5573995329905, "job_id": "2650924"}
61
+ {"step": 1160, "total_steps": 5613, "loss": 4.721237454563379, "lr_semantic": 1.881973209832778e-05, "lr_talker": 3.763946419665556e-05, "elapsed_s": 2549.46644647792, "job_id": "2650924"}
62
+ {"step": 1180, "total_steps": 5613, "loss": 4.731536339968443, "lr_semantic": 1.87666867347891e-05, "lr_talker": 3.75333734695782e-05, "elapsed_s": 2589.767932805, "job_id": "2650924"}
63
+ {"step": 1200, "total_steps": 5613, "loss": 4.735003147274256, "lr_semantic": 1.8712562895912868e-05, "lr_talker": 3.7425125791825735e-05, "elapsed_s": 2635.105361911934, "job_id": "2650924"}
64
+ {"step": 1220, "total_steps": 5613, "loss": 4.734358720481396, "lr_semantic": 1.865736809728808e-05, "lr_talker": 3.731473619457616e-05, "elapsed_s": 2675.131558994064, "job_id": "2650924"}
65
+ {"step": 1240, "total_steps": 5613, "loss": 4.756669394671917, "lr_semantic": 1.8601110003216273e-05, "lr_talker": 3.720222000643255e-05, "elapsed_s": 2715.594623999903, "job_id": "2650924"}
66
+ {"step": 1260, "total_steps": 5613, "loss": 4.7002569902688265, "lr_semantic": 1.8543796425647266e-05, "lr_talker": 3.708759285129453e-05, "elapsed_s": 2756.165475001093, "job_id": "2650924"}
67
+ {"step": 1280, "total_steps": 5613, "loss": 4.731663167476654, "lr_semantic": 1.8485435323094385e-05, "lr_talker": 3.697087064618877e-05, "elapsed_s": 2835.434735188959, "job_id": "2650924"}
68
+ {"step": 1300, "total_steps": 5613, "loss": 4.719036556780338, "lr_semantic": 1.8426034799529363e-05, "lr_talker": 3.685206959905873e-05, "elapsed_s": 2876.0257180531044, "job_id": "2650924"}
69
+ {"step": 1320, "total_steps": 5613, "loss": 4.743280284106731, "lr_semantic": 1.8365603103257037e-05, "lr_talker": 3.6731206206514074e-05, "elapsed_s": 2929.1522962970193, "job_id": "2650924"}
70
+ {"step": 1340, "total_steps": 5613, "loss": 4.7402151226997375, "lr_semantic": 1.8304148625769972e-05, "lr_talker": 3.6608297251539944e-05, "elapsed_s": 2980.258687512018, "job_id": "2650924"}
71
+ {"step": 1360, "total_steps": 5613, "loss": 4.711447082459927, "lr_semantic": 1.8241679900583252e-05, "lr_talker": 3.6483359801166504e-05, "elapsed_s": 3022.2461457950994, "job_id": "2650924"}
72
+ {"step": 1380, "total_steps": 5613, "loss": 4.722232082858682, "lr_semantic": 1.8178205602049493e-05, "lr_talker": 3.6356411204098985e-05, "elapsed_s": 3062.724447991932, "job_id": "2650924"}
73
+ {"step": 1400, "total_steps": 5613, "loss": 4.741885308176279, "lr_semantic": 1.811373454415437e-05, "lr_talker": 3.622746908830874e-05, "elapsed_s": 3103.5578841960523, "job_id": "2650924"}
74
+ {"step": 1420, "total_steps": 5613, "loss": 4.7331896759569645, "lr_semantic": 1.8048275679292674e-05, "lr_talker": 3.609655135858535e-05, "elapsed_s": 3145.3643633520696, "job_id": "2650924"}
75
+ {"step": 1440, "total_steps": 5613, "loss": 4.734523702412844, "lr_semantic": 1.798183809702522e-05, "lr_talker": 3.596367619405044e-05, "elapsed_s": 3195.941620595986, "job_id": "2650924"}
76
+ {"step": 1460, "total_steps": 5613, "loss": 4.7298208605498075, "lr_semantic": 1.7914431022816666e-05, "lr_talker": 3.582886204563333e-05, "elapsed_s": 3244.4972031789366, "job_id": "2650924"}
77
+ {"step": 1480, "total_steps": 5613, "loss": 4.717615306377411, "lr_semantic": 1.7846063816754468e-05, "lr_talker": 3.5692127633508935e-05, "elapsed_s": 3284.8206422769, "job_id": "2650924"}
78
+ {"step": 1500, "total_steps": 5613, "loss": 4.71048554033041, "lr_semantic": 1.7776745972249152e-05, "lr_talker": 3.5553491944498304e-05, "elapsed_s": 3328.4186289079953, "job_id": "2650924"}
79
+ {"step": 1520, "total_steps": 5613, "loss": 4.734640143811703, "lr_semantic": 1.7706487114716083e-05, "lr_talker": 3.5412974229432166e-05, "elapsed_s": 3386.097419199068, "job_id": "2650924"}
80
+ {"step": 1540, "total_steps": 5613, "loss": 4.74219785630703, "lr_semantic": 1.7635297000238855e-05, "lr_talker": 3.527059400047771e-05, "elapsed_s": 3427.683724239003, "job_id": "2650924"}
81
+ {"step": 1560, "total_steps": 5613, "loss": 4.720453768968582, "lr_semantic": 1.7563185514214604e-05, "lr_talker": 3.512637102842921e-05, "elapsed_s": 3468.931013341993, "job_id": "2650924"}
82
+ {"step": 1580, "total_steps": 5613, "loss": 4.726194063201547, "lr_semantic": 1.7490162669981296e-05, "lr_talker": 3.498032533996259e-05, "elapsed_s": 3508.7784433478955, "job_id": "2650924"}
83
+ {"step": 1600, "total_steps": 5613, "loss": 4.761078203096986, "lr_semantic": 1.7416238607427315e-05, "lr_talker": 3.483247721485463e-05, "elapsed_s": 3549.4732208650094, "job_id": "2650924"}
84
+ {"step": 1620, "total_steps": 5613, "loss": 4.743052579462528, "lr_semantic": 1.7341423591583436e-05, "lr_talker": 3.468284718316687e-05, "elapsed_s": 3590.2429941399023, "job_id": "2650924"}
85
+ {"step": 1640, "total_steps": 5613, "loss": 4.746201619505882, "lr_semantic": 1.7265728011197426e-05, "lr_talker": 3.453145602239485e-05, "elapsed_s": 3660.068397742929, "job_id": "2650924"}
86
+ {"step": 1660, "total_steps": 5613, "loss": 4.726677805185318, "lr_semantic": 1.7189162377291467e-05, "lr_talker": 3.4378324754582935e-05, "elapsed_s": 3737.718020984903, "job_id": "2650924"}
87
+ {"step": 1680, "total_steps": 5613, "loss": 4.733044046908617, "lr_semantic": 1.7111737321702624e-05, "lr_talker": 3.422347464340525e-05, "elapsed_s": 3783.821527886903, "job_id": "2650924"}
88
+ {"step": 1700, "total_steps": 5613, "loss": 4.732866659760475, "lr_semantic": 1.703346359560651e-05, "lr_talker": 3.406692719121302e-05, "elapsed_s": 3824.358500377042, "job_id": "2650924"}
89
+ {"step": 1720, "total_steps": 5613, "loss": 4.724854338914156, "lr_semantic": 1.6954352068024366e-05, "lr_talker": 3.390870413604873e-05, "elapsed_s": 3867.4716033579316, "job_id": "2650924"}
90
+ {"step": 1740, "total_steps": 5613, "loss": 4.7217960227280855, "lr_semantic": 1.687441372431383e-05, "lr_talker": 3.374882744862766e-05, "elapsed_s": 3908.567238708958, "job_id": "2650924"}
91
+ {"step": 1760, "total_steps": 5613, "loss": 4.7270301431417465, "lr_semantic": 1.67936596646435e-05, "lr_talker": 3.3587319329287e-05, "elapsed_s": 3949.0184991960414, "job_id": "2650924"}
92
+ {"step": 1780, "total_steps": 5613, "loss": 4.7064435333013535, "lr_semantic": 1.6712101102451584e-05, "lr_talker": 3.342420220490317e-05, "elapsed_s": 3988.7838503790554, "job_id": "2650924"}
93
+ {"step": 1800, "total_steps": 5613, "loss": 4.758328091353178, "lr_semantic": 1.6629749362888808e-05, "lr_talker": 3.3259498725777616e-05, "elapsed_s": 4028.887228704989, "job_id": "2650924"}
94
+ {"step": 1820, "total_steps": 5613, "loss": 4.739157922565937, "lr_semantic": 1.654661588124581e-05, "lr_talker": 3.309323176249162e-05, "elapsed_s": 4069.656256943941, "job_id": "2650924"}
95
+ {"step": 1840, "total_steps": 5613, "loss": 4.708026945590973, "lr_semantic": 1.6462712201365248e-05, "lr_talker": 3.2925424402730496e-05, "elapsed_s": 4110.507350655971, "job_id": "2650924"}
96
+ {"step": 1860, "total_steps": 5613, "loss": 4.730698335915804, "lr_semantic": 1.637804997403884e-05, "lr_talker": 3.275609994807768e-05, "elapsed_s": 4150.359022886958, "job_id": "2650924"}
97
+ {"step": 1880, "total_steps": 5613, "loss": 4.625305764377117, "lr_semantic": 1.6292640955389545e-05, "lr_talker": 3.258528191077909e-05, "elapsed_s": 4215.603769697947, "job_id": "2650924"}
98
+ {"step": 1900, "total_steps": 5613, "loss": 4.610010115429759, "lr_semantic": 1.6206497005239105e-05, "lr_talker": 3.241299401047821e-05, "elapsed_s": 4255.96354693803, "job_id": "2650924"}
99
+ {"step": 1920, "total_steps": 5613, "loss": 4.655441582202911, "lr_semantic": 1.6119630085461212e-05, "lr_talker": 3.2239260170922425e-05, "elapsed_s": 4296.034290221054, "job_id": "2650924"}
100
+ {"step": 1940, "total_steps": 5613, "loss": 4.625532982870936, "lr_semantic": 1.6032052258320482e-05, "lr_talker": 3.2064104516640964e-05, "elapsed_s": 4336.216298351064, "job_id": "2650924"}
101
+ {"step": 1960, "total_steps": 5613, "loss": 4.633244961500168, "lr_semantic": 1.5943775684797518e-05, "lr_talker": 3.1887551369595036e-05, "elapsed_s": 4376.645100472961, "job_id": "2650924"}
102
+ {"step": 1980, "total_steps": 5613, "loss": 4.6431789100170135, "lr_semantic": 1.5854812622900225e-05, "lr_talker": 3.170962524580045e-05, "elapsed_s": 4416.419933855068, "job_id": "2650924"}
103
+ {"step": 2000, "total_steps": 5613, "loss": 4.610240997746587, "lr_semantic": 1.5765175425961696e-05, "lr_talker": 3.153035085192339e-05, "elapsed_s": 4470.1600845619105, "job_id": "2650924"}
104
+ {"step": 2020, "total_steps": 5613, "loss": 4.615652056410909, "lr_semantic": 1.5674876540924814e-05, "lr_talker": 3.134975308184963e-05, "elapsed_s": 4509.586936654989, "job_id": "2650924"}
105
+ {"step": 2040, "total_steps": 5613, "loss": 4.6264883652329445, "lr_semantic": 1.5583928506613907e-05, "lr_talker": 3.1167857013227815e-05, "elapsed_s": 4550.146989380941, "job_id": "2650924"}
106
+ {"step": 2060, "total_steps": 5613, "loss": 4.645322745665908, "lr_semantic": 1.5492343951993585e-05, "lr_talker": 3.098468790398717e-05, "elapsed_s": 4591.555366650922, "job_id": "2650924"}
107
+ {"step": 2080, "total_steps": 5613, "loss": 4.631776470690966, "lr_semantic": 1.5400135594415136e-05, "lr_talker": 3.080027118883027e-05, "elapsed_s": 4631.77258078591, "job_id": "2650924"}
108
+ {"step": 2100, "total_steps": 5613, "loss": 4.5987372770905495, "lr_semantic": 1.5307316237850564e-05, "lr_talker": 3.061463247570113e-05, "elapsed_s": 4671.6307264589705, "job_id": "2650924"}
109
+ {"step": 2120, "total_steps": 5613, "loss": 4.652963560074568, "lr_semantic": 1.5213898771114663e-05, "lr_talker": 3.0427797542229326e-05, "elapsed_s": 4712.762785148108, "job_id": "2650924"}
110
+ {"step": 2140, "total_steps": 5613, "loss": 4.626855904236436, "lr_semantic": 1.5119896166075293e-05, "lr_talker": 3.0239792332150587e-05, "elapsed_s": 4755.9194285268895, "job_id": "2650924"}
111
+ {"step": 2160, "total_steps": 5613, "loss": 4.651434026658535, "lr_semantic": 1.5025321475852096e-05, "lr_talker": 3.005064295170419e-05, "elapsed_s": 4795.616878828965, "job_id": "2650924"}
112
+ {"step": 2180, "total_steps": 5613, "loss": 4.620770875364542, "lr_semantic": 1.4930187833003962e-05, "lr_talker": 2.9860375666007923e-05, "elapsed_s": 4835.597036266001, "job_id": "2650924"}
113
+ {"step": 2200, "total_steps": 5613, "loss": 4.610138909891248, "lr_semantic": 1.4834508447705466e-05, "lr_talker": 2.9669016895410933e-05, "elapsed_s": 4875.969234729884, "job_id": "2650924"}
114
+ {"step": 2220, "total_steps": 5613, "loss": 4.630080381408334, "lr_semantic": 1.4738296605912493e-05, "lr_talker": 2.9476593211824986e-05, "elapsed_s": 4915.884354220005, "job_id": "2650924"}
115
+ {"step": 2240, "total_steps": 5613, "loss": 4.613454734906554, "lr_semantic": 1.4641565667517379e-05, "lr_talker": 2.9283131335034757e-05, "elapsed_s": 4955.729310723022, "job_id": "2650924"}
116
+ {"step": 2260, "total_steps": 5613, "loss": 4.627314366400242, "lr_semantic": 1.454432906449375e-05, "lr_talker": 2.90886581289875e-05, "elapsed_s": 4995.154172322946, "job_id": "2650924"}
117
+ {"step": 2280, "total_steps": 5613, "loss": 4.6216220539063215, "lr_semantic": 1.4446600299031396e-05, "lr_talker": 2.889320059806279e-05, "elapsed_s": 5035.364102754975, "job_id": "2650924"}
118
+ {"step": 2300, "total_steps": 5613, "loss": 4.6380799021571875, "lr_semantic": 1.4348392941661333e-05, "lr_talker": 2.8696785883322666e-05, "elapsed_s": 5075.395715229912, "job_id": "2650924"}
119
+ {"step": 2320, "total_steps": 5613, "loss": 4.595997866243124, "lr_semantic": 1.424972062937146e-05, "lr_talker": 2.849944125874292e-05, "elapsed_s": 5145.3028938879725, "job_id": "2650924"}
120
+ {"step": 2340, "total_steps": 5613, "loss": 4.63494280539453, "lr_semantic": 1.4150597063712881e-05, "lr_talker": 2.8301194127425763e-05, "elapsed_s": 5185.5523059929255, "job_id": "2650924"}
121
+ {"step": 2360, "total_steps": 5613, "loss": 4.6449728310108185, "lr_semantic": 1.4051036008897368e-05, "lr_talker": 2.8102072017794736e-05, "elapsed_s": 5225.750247712946, "job_id": "2650924"}
122
+ {"step": 2380, "total_steps": 5613, "loss": 4.655777344480157, "lr_semantic": 1.3951051289886044e-05, "lr_talker": 2.7902102579772088e-05, "elapsed_s": 5272.4179692131, "job_id": "2650924"}
123
+ {"step": 2400, "total_steps": 5613, "loss": 4.625490026548505, "lr_semantic": 1.385065679046968e-05, "lr_talker": 2.770131358093936e-05, "elapsed_s": 5319.016970624914, "job_id": "2650924"}
124
+ {"step": 2420, "total_steps": 5613, "loss": 4.636262411251664, "lr_semantic": 1.3749866451340795e-05, "lr_talker": 2.749973290268159e-05, "elapsed_s": 5359.171833059983, "job_id": "2650924"}
125
+ {"step": 2440, "total_steps": 5613, "loss": 4.626359686255455, "lr_semantic": 1.3648694268157858e-05, "lr_talker": 2.7297388536315717e-05, "elapsed_s": 5399.3266346929595, "job_id": "2650924"}
126
+ {"step": 2460, "total_steps": 5613, "loss": 4.611562255769968, "lr_semantic": 1.3547154289601876e-05, "lr_talker": 2.7094308579203753e-05, "elapsed_s": 5440.610315886093, "job_id": "2650924"}
127
+ {"step": 2480, "total_steps": 5613, "loss": 4.644266894087195, "lr_semantic": 1.3445260615425607e-05, "lr_talker": 2.6890521230851213e-05, "elapsed_s": 5479.786678743083, "job_id": "2650924"}
128
+ {"step": 2500, "total_steps": 5613, "loss": 4.623125057667494, "lr_semantic": 1.3343027394495654e-05, "lr_talker": 2.6686054788991308e-05, "elapsed_s": 5519.988826805027, "job_id": "2650924"}
129
+ {"step": 2520, "total_steps": 5613, "loss": 4.619581380859017, "lr_semantic": 1.3240468822827806e-05, "lr_talker": 2.648093764565561e-05, "elapsed_s": 5560.519715071889, "job_id": "2650924"}
130
+ {"step": 2540, "total_steps": 5613, "loss": 4.620337029919028, "lr_semantic": 1.3137599141615759e-05, "lr_talker": 2.6275198283231517e-05, "elapsed_s": 5603.863650236977, "job_id": "2650924"}
131
+ {"step": 2560, "total_steps": 5613, "loss": 4.655339788645506, "lr_semantic": 1.3034432635253615e-05, "lr_talker": 2.606886527050723e-05, "elapsed_s": 5643.633498328971, "job_id": "2650924"}
132
+ {"step": 2580, "total_steps": 5613, "loss": 4.640034716576338, "lr_semantic": 1.2930983629352353e-05, "lr_talker": 2.5861967258704706e-05, "elapsed_s": 5683.5464796489105, "job_id": "2650924"}
133
+ {"step": 2600, "total_steps": 5613, "loss": 4.628433585166931, "lr_semantic": 1.2827266488750601e-05, "lr_talker": 2.5654532977501202e-05, "elapsed_s": 5723.099614835111, "job_id": "2650924"}
134
+ {"step": 2620, "total_steps": 5613, "loss": 4.6318860817700624, "lr_semantic": 1.2723295615519917e-05, "lr_talker": 2.5446591231039834e-05, "elapsed_s": 5769.974594871048, "job_id": "2650924"}
135
+ {"step": 2640, "total_steps": 5613, "loss": 4.611671743914485, "lr_semantic": 1.2619085446964971e-05, "lr_talker": 2.5238170893929942e-05, "elapsed_s": 5812.693918016972, "job_id": "2650924"}
136
+ {"step": 2660, "total_steps": 5613, "loss": 4.646994363516569, "lr_semantic": 1.2514650453618761e-05, "lr_talker": 2.5029300907237523e-05, "elapsed_s": 5852.106621605111, "job_id": "2650924"}
137
+ {"step": 2680, "total_steps": 5613, "loss": 4.643543936312199, "lr_semantic": 1.241000513723327e-05, "lr_talker": 2.482001027446654e-05, "elapsed_s": 5895.532369503053, "job_id": "2650924"}
138
+ {"step": 2700, "total_steps": 5613, "loss": 4.665915217250586, "lr_semantic": 1.2305164028765737e-05, "lr_talker": 2.4610328057531474e-05, "elapsed_s": 5935.712447670056, "job_id": "2650924"}
139
+ {"step": 2720, "total_steps": 5613, "loss": 4.630682196468115, "lr_semantic": 1.2200141686360935e-05, "lr_talker": 2.440028337272187e-05, "elapsed_s": 5975.7568022529595, "job_id": "2650924"}
140
+ {"step": 2740, "total_steps": 5613, "loss": 4.66122155636549, "lr_semantic": 1.2094952693329617e-05, "lr_talker": 2.4189905386659235e-05, "elapsed_s": 6015.790169884916, "job_id": "2650924"}
141
+ {"step": 2760, "total_steps": 5613, "loss": 4.595508266240358, "lr_semantic": 1.19896116561235e-05, "lr_talker": 2.3979223312247e-05, "elapsed_s": 6098.267138675088, "job_id": "2650924"}
142
+ {"step": 2780, "total_steps": 5613, "loss": 4.6194125432521105, "lr_semantic": 1.1884133202307006e-05, "lr_talker": 2.3768266404614013e-05, "elapsed_s": 6138.280159062939, "job_id": "2650924"}
143
+ {"step": 2800, "total_steps": 5613, "loss": 4.6435114070773125, "lr_semantic": 1.1778531978526136e-05, "lr_talker": 2.3557063957052272e-05, "elapsed_s": 6178.649523121072, "job_id": "2650924"}
144
+ {"step": 2820, "total_steps": 5613, "loss": 4.632688293233514, "lr_semantic": 1.1672822648474594e-05, "lr_talker": 2.3345645296949187e-05, "elapsed_s": 6218.725610052003, "job_id": "2650924"}
145
+ {"step": 2840, "total_steps": 5613, "loss": 4.620898652821779, "lr_semantic": 1.1567019890857644e-05, "lr_talker": 2.3134039781715288e-05, "elapsed_s": 6257.902763654944, "job_id": "2650924"}
146
+ {"step": 2860, "total_steps": 5613, "loss": 4.625769730657339, "lr_semantic": 1.1461138397353813e-05, "lr_talker": 2.2922276794707626e-05, "elapsed_s": 6297.234707331052, "job_id": "2650924"}
147
+ {"step": 2880, "total_steps": 5613, "loss": 4.595105350017548, "lr_semantic": 1.1355192870574828e-05, "lr_talker": 2.2710385741149656e-05, "elapsed_s": 6336.9683743950445, "job_id": "2650924"}
148
+ {"step": 2900, "total_steps": 5613, "loss": 4.603524900972843, "lr_semantic": 1.124919802202401e-05, "lr_talker": 2.249839604404802e-05, "elapsed_s": 6377.163062052103, "job_id": "2650924"}
149
+ {"step": 2920, "total_steps": 5613, "loss": 4.6121920589357615, "lr_semantic": 1.1143168570053474e-05, "lr_talker": 2.228633714010695e-05, "elapsed_s": 6417.040328416042, "job_id": "2650924"}
150
+ {"step": 2940, "total_steps": 5613, "loss": 4.605383405461907, "lr_semantic": 1.1037119237820326e-05, "lr_talker": 2.2074238475640652e-05, "elapsed_s": 6458.799037778983, "job_id": "2650924"}
151
+ {"step": 2960, "total_steps": 5613, "loss": 4.624900868162513, "lr_semantic": 1.093106475124223e-05, "lr_talker": 2.186212950248446e-05, "elapsed_s": 6499.928429676918, "job_id": "2650924"}
152
+ {"step": 2980, "total_steps": 5613, "loss": 4.616175290197134, "lr_semantic": 1.0825019836952577e-05, "lr_talker": 2.1650039673905153e-05, "elapsed_s": 6542.408533280017, "job_id": "2650924"}
153
+ {"step": 3000, "total_steps": 5613, "loss": 4.639580648392439, "lr_semantic": 1.0718999220255559e-05, "lr_talker": 2.1437998440511117e-05, "elapsed_s": 6581.880402375013, "job_id": "2650924"}
154
+ {"step": 3020, "total_steps": 5613, "loss": 4.603767963126302, "lr_semantic": 1.0613017623081425e-05, "lr_talker": 2.122603524616285e-05, "elapsed_s": 6625.251445908099, "job_id": "2650924"}
155
+ {"step": 3040, "total_steps": 5613, "loss": 4.6375779788941145, "lr_semantic": 1.0507089761942209e-05, "lr_talker": 2.1014179523884418e-05, "elapsed_s": 6669.651214292971, "job_id": "2650924"}
156
+ {"step": 3060, "total_steps": 5613, "loss": 4.590810565277934, "lr_semantic": 1.0401230345888205e-05, "lr_talker": 2.080246069177641e-05, "elapsed_s": 6708.853607652942, "job_id": "2650924"}
157
+ {"step": 3080, "total_steps": 5613, "loss": 4.607462951913476, "lr_semantic": 1.0295454074465483e-05, "lr_talker": 2.0590908148930965e-05, "elapsed_s": 6749.735308313044, "job_id": "2650924"}
158
+ {"step": 3100, "total_steps": 5613, "loss": 4.623072760179639, "lr_semantic": 1.0189775635674717e-05, "lr_talker": 2.0379551271349434e-05, "elapsed_s": 6791.6384207950905, "job_id": "2650924"}
159
+ {"step": 3120, "total_steps": 5613, "loss": 4.6187803372740746, "lr_semantic": 1.0084209703931636e-05, "lr_talker": 2.016841940786327e-05, "elapsed_s": 6832.483076035045, "job_id": "2650924"}
160
+ {"step": 3140, "total_steps": 5613, "loss": 4.590356990695, "lr_semantic": 9.978770938029332e-06, "lr_talker": 1.9957541876058664e-05, "elapsed_s": 6873.765201058006, "job_id": "2650924"}
161
+ {"step": 3160, "total_steps": 5613, "loss": 4.622335035353899, "lr_semantic": 9.873473979102764e-06, "lr_talker": 1.9746947958205528e-05, "elapsed_s": 6950.473682532087, "job_id": "2650924"}
162
+ {"step": 3180, "total_steps": 5613, "loss": 4.616848412901163, "lr_semantic": 9.768333448595686e-06, "lr_talker": 1.953666689719137e-05, "elapsed_s": 7027.935233348981, "job_id": "2650924"}
163
+ {"step": 3200, "total_steps": 5613, "loss": 4.60705847106874, "lr_semantic": 9.663363946230362e-06, "lr_talker": 1.9326727892460723e-05, "elapsed_s": 7068.292897902895, "job_id": "2650924"}
164
+ {"step": 3220, "total_steps": 5613, "loss": 4.6382788103073835, "lr_semantic": 9.558580047980217e-06, "lr_talker": 1.9117160095960435e-05, "elapsed_s": 7114.814613187918, "job_id": "2650924"}
165
+ {"step": 3240, "total_steps": 5613, "loss": 4.5957195814698935, "lr_semantic": 9.453996304045853e-06, "lr_talker": 1.8907992608091706e-05, "elapsed_s": 7175.236491824966, "job_id": "2650924"}
166
+ {"step": 3260, "total_steps": 5613, "loss": 4.632833460345864, "lr_semantic": 9.349627236834623e-06, "lr_talker": 1.8699254473669247e-05, "elapsed_s": 7215.2017654269, "job_id": "2650924"}
167
+ {"step": 3280, "total_steps": 5613, "loss": 4.62228437513113, "lr_semantic": 9.245487338944068e-06, "lr_talker": 1.8490974677888137e-05, "elapsed_s": 7254.26144577493, "job_id": "2650924"}
168
+ {"step": 3300, "total_steps": 5613, "loss": 4.634927546605468, "lr_semantic": 9.141591071149456e-06, "lr_talker": 1.828318214229891e-05, "elapsed_s": 7295.908539799973, "job_id": "2650924"}
169
+ {"step": 3320, "total_steps": 5613, "loss": 4.62289790250361, "lr_semantic": 9.037952860395806e-06, "lr_talker": 1.8075905720791612e-05, "elapsed_s": 7335.5786440589, "job_id": "2650924"}
170
+ {"step": 3340, "total_steps": 5613, "loss": 4.631784085184336, "lr_semantic": 8.934587097794555e-06, "lr_talker": 1.786917419558911e-05, "elapsed_s": 7374.582625098992, "job_id": "2650924"}
171
+ {"step": 3360, "total_steps": 5613, "loss": 4.603944197297096, "lr_semantic": 8.831508136625242e-06, "lr_talker": 1.7663016273250485e-05, "elapsed_s": 7415.573455769103, "job_id": "2650924"}
172
+ {"step": 3380, "total_steps": 5613, "loss": 4.604606613516808, "lr_semantic": 8.728730290342388e-06, "lr_talker": 1.7457460580684776e-05, "elapsed_s": 7454.984159963904, "job_id": "2650924"}
173
+ {"step": 3400, "total_steps": 5613, "loss": 4.6076365280896425, "lr_semantic": 8.62626783058798e-06, "lr_talker": 1.725253566117596e-05, "elapsed_s": 7494.683540343074, "job_id": "2650924"}
174
+ {"step": 3420, "total_steps": 5613, "loss": 4.607591565698385, "lr_semantic": 8.524134985209698e-06, "lr_talker": 1.7048269970419396e-05, "elapsed_s": 7533.725569159025, "job_id": "2650924"}
175
+ {"step": 3440, "total_steps": 5613, "loss": 4.63418716751039, "lr_semantic": 8.422345936285268e-06, "lr_talker": 1.6844691872570537e-05, "elapsed_s": 7572.850217720959, "job_id": "2650924"}
176
+ {"step": 3460, "total_steps": 5613, "loss": 4.61283715069294, "lr_semantic": 8.32091481815313e-06, "lr_talker": 1.664182963630626e-05, "elapsed_s": 7637.1775283101015, "job_id": "2650924"}
177
+ {"step": 3480, "total_steps": 5613, "loss": 4.619726676493883, "lr_semantic": 8.21985571544977e-06, "lr_talker": 1.643971143089954e-05, "elapsed_s": 7676.934100366896, "job_id": "2650924"}
178
+ {"step": 3500, "total_steps": 5613, "loss": 4.607974525541067, "lr_semantic": 8.119182661153934e-06, "lr_talker": 1.623836532230787e-05, "elapsed_s": 7719.310810083989, "job_id": "2650924"}
179
+ {"step": 3520, "total_steps": 5613, "loss": 4.624380446970463, "lr_semantic": 8.018909634638035e-06, "lr_talker": 1.603781926927607e-05, "elapsed_s": 7759.803617738886, "job_id": "2650924"}
180
+ {"step": 3540, "total_steps": 5613, "loss": 4.585276786237955, "lr_semantic": 7.919050559726964e-06, "lr_talker": 1.583810111945393e-05, "elapsed_s": 7800.0703570400365, "job_id": "2650924"}
181
+ {"step": 3560, "total_steps": 5613, "loss": 4.628160396590829, "lr_semantic": 7.819619302764659e-06, "lr_talker": 1.5639238605529317e-05, "elapsed_s": 7840.456648838939, "job_id": "2650924"}
182
+ {"step": 3580, "total_steps": 5613, "loss": 4.606885613873601, "lr_semantic": 7.72062967068863e-06, "lr_talker": 1.544125934137726e-05, "elapsed_s": 7880.857028143015, "job_id": "2650924"}
183
+ {"step": 3600, "total_steps": 5613, "loss": 4.604534378275275, "lr_semantic": 7.6220954091127486e-06, "lr_talker": 1.5244190818225497e-05, "elapsed_s": 7948.6377753249835, "job_id": "2650924"}
184
+ {"step": 3620, "total_steps": 5613, "loss": 4.642087118700147, "lr_semantic": 7.524030200418524e-06, "lr_talker": 1.5048060400837048e-05, "elapsed_s": 7989.182672624011, "job_id": "2650924"}
185
+ {"step": 3640, "total_steps": 5613, "loss": 4.6124731246382, "lr_semantic": 7.426447661855198e-06, "lr_talker": 1.4852895323710396e-05, "elapsed_s": 8037.746763360919, "job_id": "2650924"}
186
+ {"step": 3660, "total_steps": 5613, "loss": 4.610769663006067, "lr_semantic": 7.32936134364886e-06, "lr_talker": 1.465872268729772e-05, "elapsed_s": 8077.404462696984, "job_id": "2650924"}
187
+ {"step": 3680, "total_steps": 5613, "loss": 4.59444822743535, "lr_semantic": 7.2327847271208765e-06, "lr_talker": 1.4465569454241753e-05, "elapsed_s": 8116.995957107982, "job_id": "2650924"}
188
+ {"step": 3700, "total_steps": 5613, "loss": 4.599885921925306, "lr_semantic": 7.136731222815878e-06, "lr_talker": 1.4273462445631756e-05, "elapsed_s": 8156.510635749903, "job_id": "2650924"}
189
+ {"step": 3720, "total_steps": 5613, "loss": 4.619421795010567, "lr_semantic": 7.041214168639587e-06, "lr_talker": 1.4082428337279174e-05, "elapsed_s": 8196.255844068015, "job_id": "2650924"}
190
+ {"step": 3740, "total_steps": 5613, "loss": 4.6178270019590855, "lr_semantic": 6.946246828006742e-06, "lr_talker": 1.3892493656013484e-05, "elapsed_s": 8236.720981243998, "job_id": "2650924"}
191
+ {"step": 3760, "total_steps": 5613, "loss": 4.5287997759878635, "lr_semantic": 6.851842387999329e-06, "lr_talker": 1.3703684775998659e-05, "elapsed_s": 8307.158814005088, "job_id": "2650924"}
192
+ {"step": 3780, "total_steps": 5613, "loss": 4.5157803148031235, "lr_semantic": 6.7580139575354435e-06, "lr_talker": 1.3516027915070887e-05, "elapsed_s": 8347.439263015985, "job_id": "2650924"}
193
+ {"step": 3800, "total_steps": 5613, "loss": 4.492436217144132, "lr_semantic": 6.664774565548999e-06, "lr_talker": 1.3329549131097999e-05, "elapsed_s": 8388.475140315946, "job_id": "2650924"}
194
+ {"step": 3820, "total_steps": 5613, "loss": 4.514497401192784, "lr_semantic": 6.5721371591805535e-06, "lr_talker": 1.3144274318361107e-05, "elapsed_s": 8428.67107571708, "job_id": "2650924"}
195
+ {"step": 3840, "total_steps": 5613, "loss": 4.46937383338809, "lr_semantic": 6.48011460197945e-06, "lr_talker": 1.29602292039589e-05, "elapsed_s": 8469.715263373917, "job_id": "2650924"}
196
+ {"step": 3860, "total_steps": 5613, "loss": 4.508008701726794, "lr_semantic": 6.388719672117623e-06, "lr_talker": 1.2777439344235246e-05, "elapsed_s": 8509.82451614691, "job_id": "2650924"}
197
+ {"step": 3880, "total_steps": 5613, "loss": 4.498665811493993, "lr_semantic": 6.2979650606152165e-06, "lr_talker": 1.2595930121230433e-05, "elapsed_s": 8550.05722452607, "job_id": "2650924"}
198
+ {"step": 3900, "total_steps": 5613, "loss": 4.44620075263083, "lr_semantic": 6.207863369578337e-06, "lr_talker": 1.2415726739156674e-05, "elapsed_s": 8590.212388169952, "job_id": "2650924"}
199
+ {"step": 3920, "total_steps": 5613, "loss": 4.501476686447859, "lr_semantic": 6.118427110449115e-06, "lr_talker": 1.223685422089823e-05, "elapsed_s": 8630.740923413076, "job_id": "2650924"}
200
+ {"step": 3940, "total_steps": 5613, "loss": 4.569125657901168, "lr_semantic": 6.029668702268385e-06, "lr_talker": 1.205933740453677e-05, "elapsed_s": 8669.870596830035, "job_id": "2650924"}
201
+ {"step": 3960, "total_steps": 5613, "loss": 4.461178727447987, "lr_semantic": 5.9416004699512094e-06, "lr_talker": 1.1883200939902419e-05, "elapsed_s": 8710.126772614894, "job_id": "2650924"}
202
+ {"step": 3980, "total_steps": 5613, "loss": 4.515434131026268, "lr_semantic": 5.854234642575411e-06, "lr_talker": 1.1708469285150823e-05, "elapsed_s": 8750.327735577943, "job_id": "2650924"}
203
+ {"step": 4000, "total_steps": 5613, "loss": 4.514987234026194, "lr_semantic": 5.76758335168349e-06, "lr_talker": 1.153516670336698e-05, "elapsed_s": 8790.649440234993, "job_id": "2650924"}
204
+ {"step": 4020, "total_steps": 5613, "loss": 4.504336902871728, "lr_semantic": 5.681658629598021e-06, "lr_talker": 1.1363317259196043e-05, "elapsed_s": 8830.257627018029, "job_id": "2650924"}
205
+ {"step": 4040, "total_steps": 5613, "loss": 4.487777344882488, "lr_semantic": 5.596472407750888e-06, "lr_talker": 1.1192944815501776e-05, "elapsed_s": 8870.364806099096, "job_id": "2650924"}
206
+ {"step": 4060, "total_steps": 5613, "loss": 4.495494468137622, "lr_semantic": 5.512036515026457e-06, "lr_talker": 1.1024073030052915e-05, "elapsed_s": 8910.096186374081, "job_id": "2650924"}
207
+ {"step": 4080, "total_steps": 5613, "loss": 4.483938731253147, "lr_semantic": 5.428362676119063e-06, "lr_talker": 1.0856725352238127e-05, "elapsed_s": 8950.116008858895, "job_id": "2650924"}
208
+ {"step": 4100, "total_steps": 5613, "loss": 4.494588997215033, "lr_semantic": 5.345462509904901e-06, "lr_talker": 1.0690925019809801e-05, "elapsed_s": 8990.26555560599, "job_id": "2650924"}
209
+ {"step": 4120, "total_steps": 5613, "loss": 4.494730705395341, "lr_semantic": 5.263347527828662e-06, "lr_talker": 1.0526695055657324e-05, "elapsed_s": 9030.054463834036, "job_id": "2650924"}
210
+ {"step": 4140, "total_steps": 5613, "loss": 4.53859705477953, "lr_semantic": 5.182029132305044e-06, "lr_talker": 1.0364058264610089e-05, "elapsed_s": 9070.23684858391, "job_id": "2650924"}
211
+ {"step": 4160, "total_steps": 5613, "loss": 4.527783302590251, "lr_semantic": 5.101518615135439e-06, "lr_talker": 1.0203037230270879e-05, "elapsed_s": 9110.06045971089, "job_id": "2650924"}
212
+ {"step": 4180, "total_steps": 5613, "loss": 4.503189731389284, "lr_semantic": 5.021827155939951e-06, "lr_talker": 1.0043654311879902e-05, "elapsed_s": 9150.62700702995, "job_id": "2650924"}
213
+ {"step": 4200, "total_steps": 5613, "loss": 4.496820015832782, "lr_semantic": 4.942965820605014e-06, "lr_talker": 9.885931641210027e-06, "elapsed_s": 9216.700601124903, "job_id": "2650924"}
214
+ {"step": 4220, "total_steps": 5613, "loss": 4.473198881372809, "lr_semantic": 4.864945559746785e-06, "lr_talker": 9.72989111949357e-06, "elapsed_s": 9256.489080969943, "job_id": "2650924"}
215
+ {"step": 4240, "total_steps": 5613, "loss": 4.493655517697334, "lr_semantic": 4.787777207190554e-06, "lr_talker": 9.575554414381108e-06, "elapsed_s": 9297.0773801459, "job_id": "2650924"}
216
+ {"step": 4260, "total_steps": 5613, "loss": 4.497149819508195, "lr_semantic": 4.7114714784663626e-06, "lr_talker": 9.422942956932725e-06, "elapsed_s": 9337.289414040046, "job_id": "2650924"}
217
+ {"step": 4280, "total_steps": 5613, "loss": 4.501642098650336, "lr_semantic": 4.636038969321073e-06, "lr_talker": 9.272077938642147e-06, "elapsed_s": 9377.615158363013, "job_id": "2650924"}
218
+ {"step": 4300, "total_steps": 5613, "loss": 4.520987527444959, "lr_semantic": 4.56149015424703e-06, "lr_talker": 9.12298030849406e-06, "elapsed_s": 9417.534220606089, "job_id": "2650924"}
219
+ {"step": 4320, "total_steps": 5613, "loss": 4.527938229963183, "lr_semantic": 4.487835385027589e-06, "lr_talker": 8.975670770055178e-06, "elapsed_s": 9457.697311616037, "job_id": "2650924"}
220
+ {"step": 4340, "total_steps": 5613, "loss": 4.470086505636573, "lr_semantic": 4.415084889299689e-06, "lr_talker": 8.830169778599377e-06, "elapsed_s": 9497.87012825394, "job_id": "2650924"}
221
+ {"step": 4360, "total_steps": 5613, "loss": 4.477155515924096, "lr_semantic": 4.343248769133634e-06, "lr_talker": 8.686497538267268e-06, "elapsed_s": 9538.255287026055, "job_id": "2650924"}
222
+ {"step": 4380, "total_steps": 5613, "loss": 4.554677220061421, "lr_semantic": 4.272336999630336e-06, "lr_talker": 8.544673999260673e-06, "elapsed_s": 9578.239094093908, "job_id": "2650924"}
223
+ {"step": 4400, "total_steps": 5613, "loss": 4.504549885168672, "lr_semantic": 4.202359427536182e-06, "lr_talker": 8.404718855072364e-06, "elapsed_s": 9618.372801762074, "job_id": "2650924"}
224
+ {"step": 4420, "total_steps": 5613, "loss": 4.468563262373209, "lr_semantic": 4.133325769875727e-06, "lr_talker": 8.266651539751453e-06, "elapsed_s": 9659.369848165894, "job_id": "2650924"}
225
+ {"step": 4440, "total_steps": 5613, "loss": 4.50471817702055, "lr_semantic": 4.065245612602387e-06, "lr_talker": 8.130491225204775e-06, "elapsed_s": 9698.31437128107, "job_id": "2650924"}
226
+ {"step": 4460, "total_steps": 5613, "loss": 4.508229313418269, "lr_semantic": 3.998128409267349e-06, "lr_talker": 7.996256818534698e-06, "elapsed_s": 9738.533771286951, "job_id": "2650924"}
227
+ {"step": 4480, "total_steps": 5613, "loss": 4.4808026403188705, "lr_semantic": 3.931983479706852e-06, "lr_talker": 7.863966959413704e-06, "elapsed_s": 9777.471496402053, "job_id": "2650924"}
228
+ {"step": 4500, "total_steps": 5613, "loss": 4.475344978272915, "lr_semantic": 3.866820008748059e-06, "lr_talker": 7.733640017496119e-06, "elapsed_s": 9817.360064570094, "job_id": "2650924"}
229
+ {"step": 4520, "total_steps": 5613, "loss": 4.47369010746479, "lr_semantic": 3.802647044933639e-06, "lr_talker": 7.605294089867278e-06, "elapsed_s": 9857.07974260603, "job_id": "2650924"}
230
+ {"step": 4540, "total_steps": 5613, "loss": 4.481849290430546, "lr_semantic": 3.739473499265307e-06, "lr_talker": 7.478946998530614e-06, "elapsed_s": 9896.727220227942, "job_id": "2650924"}
231
+ {"step": 4560, "total_steps": 5613, "loss": 4.489246996119618, "lr_semantic": 3.6773081439664425e-06, "lr_talker": 7.354616287932885e-06, "elapsed_s": 9935.44392012991, "job_id": "2650924"}
232
+ {"step": 4580, "total_steps": 5613, "loss": 4.507993955165148, "lr_semantic": 3.6161596112640023e-06, "lr_talker": 7.232319222528005e-06, "elapsed_s": 9975.47193939588, "job_id": "2650924"}
233
+ {"step": 4600, "total_steps": 5613, "loss": 4.501274397596717, "lr_semantic": 3.556036392189834e-06, "lr_talker": 7.112072784379668e-06, "elapsed_s": 10015.058491972042, "job_id": "2650924"}
234
+ {"step": 4620, "total_steps": 5613, "loss": 4.511318193748593, "lr_semantic": 3.4969468354016343e-06, "lr_talker": 6.993893670803269e-06, "elapsed_s": 10055.509547737893, "job_id": "2650924"}
235
+ {"step": 4640, "total_steps": 5613, "loss": 4.528082717210054, "lr_semantic": 3.4388991460236567e-06, "lr_talker": 6.877798292047313e-06, "elapsed_s": 10095.575066080084, "job_id": "2650924"}
236
+ {"step": 4660, "total_steps": 5613, "loss": 4.532296687364578, "lr_semantic": 3.3819013845073606e-06, "lr_talker": 6.763802769014721e-06, "elapsed_s": 10163.833614460891, "job_id": "2650924"}
237
+ {"step": 4680, "total_steps": 5613, "loss": 4.509938716888428, "lr_semantic": 3.325961465512132e-06, "lr_talker": 6.651922931024264e-06, "elapsed_s": 10204.811694727046, "job_id": "2650924"}
238
+ {"step": 4700, "total_steps": 5613, "loss": 4.50479955598712, "lr_semantic": 3.2710871568062707e-06, "lr_talker": 6.542174313612541e-06, "elapsed_s": 10247.901896313066, "job_id": "2650924"}
239
+ {"step": 4720, "total_steps": 5613, "loss": 4.486642941832542, "lr_semantic": 3.217286078188368e-06, "lr_talker": 6.434572156376736e-06, "elapsed_s": 10287.350444924086, "job_id": "2650924"}
240
+ {"step": 4740, "total_steps": 5613, "loss": 4.51556740142405, "lr_semantic": 3.164565700429215e-06, "lr_talker": 6.32913140085843e-06, "elapsed_s": 10327.08104562806, "job_id": "2650924"}
241
+ {"step": 4760, "total_steps": 5613, "loss": 4.509736044332385, "lr_semantic": 3.1129333442344288e-06, "lr_talker": 6.2258666884688576e-06, "elapsed_s": 10370.734344020952, "job_id": "2650924"}
242
+ {"step": 4780, "total_steps": 5613, "loss": 4.491977885365486, "lr_semantic": 3.0623961792278984e-06, "lr_talker": 6.124792358455797e-06, "elapsed_s": 10410.598235925892, "job_id": "2650924"}
243
+ {"step": 4800, "total_steps": 5613, "loss": 4.490510620176792, "lr_semantic": 3.012961222956229e-06, "lr_talker": 6.025922445912458e-06, "elapsed_s": 10449.997615390923, "job_id": "2650924"}
244
+ {"step": 4820, "total_steps": 5613, "loss": 4.508950624614954, "lr_semantic": 2.9646353399142746e-06, "lr_talker": 5.929270679828549e-06, "elapsed_s": 10489.11248591193, "job_id": "2650924"}
245
+ {"step": 4840, "total_steps": 5613, "loss": 4.514956993982196, "lr_semantic": 2.9174252405919544e-06, "lr_talker": 5.834850481183909e-06, "elapsed_s": 10528.85751005006, "job_id": "2650924"}
246
+ {"step": 4860, "total_steps": 5613, "loss": 4.498611994087696, "lr_semantic": 2.871337480542431e-06, "lr_talker": 5.742674961084862e-06, "elapsed_s": 10568.632050517015, "job_id": "2650924"}
247
+ {"step": 4880, "total_steps": 5613, "loss": 4.55120425671339, "lr_semantic": 2.8263784594718203e-06, "lr_talker": 5.6527569189436406e-06, "elapsed_s": 10609.146117511904, "job_id": "2650924"}
248
+ {"step": 4900, "total_steps": 5613, "loss": 4.476833371445537, "lr_semantic": 2.7825544203505256e-06, "lr_talker": 5.565108840701051e-06, "elapsed_s": 10648.69591521495, "job_id": "2650924"}
249
+ {"step": 4920, "total_steps": 5613, "loss": 4.547092678025365, "lr_semantic": 2.739871448546349e-06, "lr_talker": 5.479742897092698e-06, "elapsed_s": 10688.280809924938, "job_id": "2650924"}
250
+ {"step": 4940, "total_steps": 5613, "loss": 4.518194805830717, "lr_semantic": 2.6983354709794795e-06, "lr_talker": 5.396670941958959e-06, "elapsed_s": 10728.113615673967, "job_id": "2650924"}
251
+ {"step": 4960, "total_steps": 5613, "loss": 4.499944154173136, "lr_semantic": 2.6579522552994934e-06, "lr_talker": 5.315904510598987e-06, "elapsed_s": 10767.352765566902, "job_id": "2650924"}
252
+ {"step": 4980, "total_steps": 5613, "loss": 4.5239817798137665, "lr_semantic": 2.6187274090844515e-06, "lr_talker": 5.237454818168903e-06, "elapsed_s": 10807.99079614901, "job_id": "2650924"}
253
+ {"step": 5000, "total_steps": 5613, "loss": 4.521790949627757, "lr_semantic": 2.5806663790622466e-06, "lr_talker": 5.161332758124493e-06, "elapsed_s": 10847.802871332038, "job_id": "2650924"}
254
+ {"step": 5020, "total_steps": 5613, "loss": 4.479529803618789, "lr_semantic": 2.543774450354269e-06, "lr_talker": 5.087548900708538e-06, "elapsed_s": 10886.892361076083, "job_id": "2650924"}
255
+ {"step": 5040, "total_steps": 5613, "loss": 4.53331470862031, "lr_semantic": 2.508056745741524e-06, "lr_talker": 5.016113491483048e-06, "elapsed_s": 10926.426077683922, "job_id": "2650924"}
256
+ {"step": 5060, "total_steps": 5613, "loss": 4.475990153849125, "lr_semantic": 2.473518224953281e-06, "lr_talker": 4.947036449906562e-06, "elapsed_s": 10966.475102063967, "job_id": "2650924"}
257
+ {"step": 5080, "total_steps": 5613, "loss": 4.487173097208142, "lr_semantic": 2.4401636839783747e-06, "lr_talker": 4.8803273679567495e-06, "elapsed_s": 11005.521174782887, "job_id": "2650924"}
258
+ {"step": 5100, "total_steps": 5613, "loss": 4.518084799870849, "lr_semantic": 2.40799775439924e-06, "lr_talker": 4.81599550879848e-06, "elapsed_s": 11070.073245553067, "job_id": "2650924"}
259
+ {"step": 5120, "total_steps": 5613, "loss": 4.458881165832281, "lr_semantic": 2.377024902748767e-06, "lr_talker": 4.754049805497534e-06, "elapsed_s": 11116.48473715689, "job_id": "2650924"}
260
+ {"step": 5140, "total_steps": 5613, "loss": 4.502075454220176, "lr_semantic": 2.3472494298900887e-06, "lr_talker": 4.694498859780177e-06, "elapsed_s": 11175.641847911058, "job_id": "2650924"}
261
+ {"step": 5160, "total_steps": 5613, "loss": 4.50912244617939, "lr_semantic": 2.318675470419362e-06, "lr_talker": 4.637350940838724e-06, "elapsed_s": 11215.239849477075, "job_id": "2650924"}
262
+ {"step": 5180, "total_steps": 5613, "loss": 4.4947781171649694, "lr_semantic": 2.291306992091649e-06, "lr_talker": 4.582613984183298e-06, "elapsed_s": 11255.565913405968, "job_id": "2650924"}
263
+ {"step": 5200, "total_steps": 5613, "loss": 4.493680028244853, "lr_semantic": 2.265147795269948e-06, "lr_talker": 4.530295590539896e-06, "elapsed_s": 11295.986628266051, "job_id": "2650924"}
264
+ {"step": 5220, "total_steps": 5613, "loss": 4.495013313367963, "lr_semantic": 2.2402015123974873e-06, "lr_talker": 4.480403024794975e-06, "elapsed_s": 11336.742370306049, "job_id": "2650924"}
265
+ {"step": 5240, "total_steps": 5613, "loss": 4.492965376004577, "lr_semantic": 2.21647160749332e-06, "lr_talker": 4.43294321498664e-06, "elapsed_s": 11376.87850391306, "job_id": "2650924"}
266
+ {"step": 5260, "total_steps": 5613, "loss": 4.506780857220292, "lr_semantic": 2.19396137567132e-06, "lr_talker": 4.38792275134264e-06, "elapsed_s": 11416.976068895077, "job_id": "2650924"}
267
+ {"step": 5280, "total_steps": 5613, "loss": 4.499888459220529, "lr_semantic": 2.172673942682619e-06, "lr_talker": 4.345347885365238e-06, "elapsed_s": 11456.664269140922, "job_id": "2650924"}
268
+ {"step": 5300, "total_steps": 5613, "loss": 4.518908817321062, "lr_semantic": 2.152612264481573e-06, "lr_talker": 4.305224528963146e-06, "elapsed_s": 11496.755048733903, "job_id": "2650924"}
269
+ {"step": 5320, "total_steps": 5613, "loss": 4.489227641373873, "lr_semantic": 2.133779126815298e-06, "lr_talker": 4.267558253630596e-06, "elapsed_s": 11537.315214381088, "job_id": "2650924"}
270
+ {"step": 5340, "total_steps": 5613, "loss": 4.488119645044208, "lr_semantic": 2.116177144836843e-06, "lr_talker": 4.232354289673686e-06, "elapsed_s": 11577.329608292086, "job_id": "2650924"}
271
+ {"step": 5360, "total_steps": 5613, "loss": 4.507138418033719, "lr_semantic": 2.0998087627420547e-06, "lr_talker": 4.199617525484109e-06, "elapsed_s": 11617.551594171906, "job_id": "2650924"}
272
+ {"step": 5380, "total_steps": 5613, "loss": 4.483428550884128, "lr_semantic": 2.084676253430176e-06, "lr_talker": 4.169352506860352e-06, "elapsed_s": 11657.543182423105, "job_id": "2650924"}
273
+ {"step": 5400, "total_steps": 5613, "loss": 4.507531909272075, "lr_semantic": 2.0707817181882362e-06, "lr_talker": 4.1415634363764725e-06, "elapsed_s": 11697.616981758969, "job_id": "2650924"}
274
+ {"step": 5420, "total_steps": 5613, "loss": 4.5199560560286045, "lr_semantic": 2.0581270863992647e-06, "lr_talker": 4.116254172798529e-06, "elapsed_s": 11737.684882604051, "job_id": "2650924"}
275
+ {"step": 5440, "total_steps": 5613, "loss": 4.516109714284539, "lr_semantic": 2.046714115274381e-06, "lr_talker": 4.093428230548762e-06, "elapsed_s": 11777.653627076885, "job_id": "2650924"}
276
+ {"step": 5460, "total_steps": 5613, "loss": 4.533677160739899, "lr_semantic": 2.0365443896087896e-06, "lr_talker": 4.073088779217579e-06, "elapsed_s": 11817.504115035059, "job_id": "2650924"}
277
+ {"step": 5480, "total_steps": 5613, "loss": 4.511550577357411, "lr_semantic": 2.027619321561713e-06, "lr_talker": 4.055238643123426e-06, "elapsed_s": 11858.314438190078, "job_id": "2650924"}
278
+ {"step": 5500, "total_steps": 5613, "loss": 4.508249634876847, "lr_semantic": 2.0199401504603083e-06, "lr_talker": 4.0398803009206166e-06, "elapsed_s": 11898.535210394999, "job_id": "2650924"}
279
+ {"step": 5520, "total_steps": 5613, "loss": 4.4926785957068205, "lr_semantic": 2.0135079426275685e-06, "lr_talker": 4.027015885255137e-06, "elapsed_s": 11938.88822698011, "job_id": "2650924"}
280
+ {"step": 5540, "total_steps": 5613, "loss": 4.5294253770262, "lr_semantic": 2.0083235912342546e-06, "lr_talker": 4.016647182468509e-06, "elapsed_s": 12006.199359528022, "job_id": "2650924"}
281
+ {"step": 5560, "total_steps": 5613, "loss": 4.465063022449613, "lr_semantic": 2.0043878161748764e-06, "lr_talker": 4.008775632349753e-06, "elapsed_s": 12046.419657595921, "job_id": "2650924"}
282
+ {"step": 5580, "total_steps": 5613, "loss": 4.495070664212108, "lr_semantic": 2.00170116396772e-06, "lr_talker": 4.00340232793544e-06, "elapsed_s": 12086.452257984085, "job_id": "2650924"}
283
+ {"step": 5600, "total_steps": 5613, "loss": 4.527787942439318, "lr_semantic": 2.000264007678965e-06, "lr_talker": 4.00052801535793e-06, "elapsed_s": 12125.804159580963, "job_id": "2650924"}
284
+ {"step": 5613, "total_steps": 5613, "loss": 4.5207825703407405, "lr_semantic": 2.0000000000000003e-06, "lr_talker": 4.000000000000001e-06, "elapsed_s": 12151.526500405977, "job_id": "2650924"}
stats/fullft-validation.jsonl ADDED
@@ -0,0 +1 @@
 
 
1
+ {"step": 0, "mean_loss": 5.40239987373352, "cases": 20, "time": 1793633547.4968805}\n{"step": 413, "mean_loss": 4.707755017280578, "cases": 20, "time": 1793634445.4615188}\n{"step": 847, "mean_loss": 4.679264855384827, "cases": 20, "time": 1793635373.4987214}\n{"step": 1260, "mean_loss": 4.667382431030274, "cases": 20, "time": 1793636300.7190757}\n{"step": 1652, "mean_loss": 4.656465816497803, "cases": 20, "time": 1793637235.9532719}\n{"step": 1871, "mean_loss": 4.651724743843078, "cases": 20, "time": 1793637716.785558}\n{"step": 2311, "mean_loss": 4.658494067192078, "cases": 20, "time": 1793638642.6502783}\n{"step": 2744, "mean_loss": 4.639594459533692, "cases": 20, "time": 1793639568.245913}\n{"step": 3160, "mean_loss": 4.634997391700745, "cases": 20, "time": 1793640494.9953086}\n{"step": 3581, "mean_loss": 4.620176243782043, "cases": 20, "time": 1793641427.281522}\n{"step": 3742, "mean_loss": 4.615711975097656, "cases": 20, "time": 1793641785.2390747}\n{"step": 4190, "mean_loss": 4.643639993667603, "cases": 20, "time": 1793642715.493736}\n{"step": 4641, "mean_loss": 4.642439317703247, "cases": 20, "time": 1793643642.0362904}\n{"step": 5089, "mean_loss": 4.637552738189697, "cases": 20, "time": 1793644568.1563737}\n{"step": 5525, "mean_loss": 4.63270890712738, "cases": 20, "time": 1793645493.5265963}\n{"step": 5613, "mean_loss": 4.6320901870727536, "cases": 20, "time": 1793645696.0330918}\n
stats/rank64-CONTRACT.json ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "variant": "podcast",
3
+ "parent": "/e/scratch/laionize/schuhmann1/hv_large13_notebooklm_20261102/large/training/checkpoints/step-00005613",
4
+ "parent_ready_sha256": "99c2578128c510e2dce04250a78bca465bf4e2ad1f7302eeb94a3a83cf0ec169",
5
+ "parent_bytes": 18201842943,
6
+ "ladder_sha256": "35492447edcf91fa5aa15a54394cb0355c609655ac53076ee09c29e0a8480f39",
7
+ "training_code_sha256": "22df229f2c5ea25c1273091fdf875dc53f79ec55b57fc96831c6ac2302d73214",
8
+ "schedule_sha256": "b070ddd84b67c8333bb9ad727aa3a594da55f768a7b8849a0c0edbe0e6dad674",
9
+ "packer_sha256": "d379eefc2128df8578da394e782aa64ca73dd9b69a76a5ab488d34f6588ad0a7",
10
+ "reader_sha256": "eb45d1a325eb5858d32fcbe2be0f76cd58eee54fc9e7fd8adc4b0da1a6fbb230",
11
+ "adapter_sha256": "f7eaf7ac6b6da344653f72dee77d498bc7019a3bc32fe715695d9cd2a994e579",
12
+ "world": 4,
13
+ "rank": 64,
14
+ "alpha": 64,
15
+ "seed": 20261102,
16
+ "peak": 3e-05,
17
+ "phase_steps": [
18
+ 183,
19
+ 160,
20
+ 132,
21
+ 91,
22
+ 43,
23
+ 43
24
+ ],
25
+ "total_steps": 652,
26
+ "reference": "two strictly past 5\u201315s speaker references, strictly past context"
27
+ }
stats/rank64-FINISHED.json ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ {
2
+ "step": 652,
3
+ "contract_sha256": "88d1284099df084d941f8274e953612a864c607e9ae4380af738280ef9dfc517",
4
+ "time": 1793657711.2167256
5
+ }