
=== 2026-07-16 16:53:11 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/pipeline.py /srv/music-files-platform-next/pipeline/batch-20260716-165311-87b60f/_input.json -o /srv/music-files-platform-next/pipeline/batch-20260716-165311-87b60f -cg 2 -cs 2 --skip-feishu --profile __runtime_batch-20260716-165311-87b60f --step1-only ===
[profile] ✅ Loaded profile '__runtime_batch-20260716-165311-87b60f' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260716-165311-87b60f.yaml
[   INFO   ] MusicExtractorSVM: no classifier models were configured by default
[   INFO   ] On connection Flux::flux → IIR::signal:
[   INFO   ] BUFFER SIZE MISMATCH: max=0 - asked for read size 4096
[   INFO   ] resizing buffer to 36040/4505
[   INFO   ] On connection Flux::flux → IIR::signal:
[   INFO   ] BUFFER SIZE MISMATCH: max=0 - asked for read size 4096
[   INFO   ] resizing buffer to 36040/4505
[   INFO   ] FrameCutter: dropping incomplete frame
/usr/local/lib/python3.13/dist-packages/scipy/cluster/hierarchy.py:810: ClusterWarning: The symmetric non-negative hollow observation matrix looks suspiciously like an uncondensed distance matrix
  return linkage(y, method='ward', metric='euclidean')

======================================================================
music-pipeline3000 v2 | 3 songs
======================================================================
Gemini concurrency: 2 | Suno concurrency: 2
Output: /srv/music-files-platform-next/pipeline/batch-20260716-165311-87b60f
Skip Suno: False | Step1 only: True | Version: v4
======================================================================

[16:53:13] 🏥 Health check...
[16:53:15] ✅ qishui: OK
[16:53:15] ✅ netease: OK
[16:53:15] ✅ qq: OK

[16:53:15] 🔍 [01_套马杆_20260716] Step 0: Fetching...
[16:53:15] 🔍 [02_西海情歌_20260716] Step 0: Fetching...
[16:53:15] 🔍 [03_吹吹山顶的风_20260716] Step 0: Fetching...
[16:53:17] 🔄 [03_吹吹山顶的风_20260716] Step 0: retry 1/2 in 5s...
[16:53:19] ✅ [02_西海情歌_20260716] Step 0: netease | 432c lyrics
[16:53:19] ⬇️  [02_西海情歌_20260716] Step 0.5: Download from netease...
[16:53:19] ✅ [01_套马杆_20260716] Step 0: netease | 353c lyrics
[16:53:19] ⬇️  [01_套马杆_20260716] Step 0.5: Download from netease...
[16:53:23] 🔄 [03_吹吹山顶的风_20260716] Step 0: retry 2/2 in 10s...
[16:53:23] ✅ [01_套马杆_20260716] Step 0.5: 1899662 bytes | 134.9s
[16:53:23] 🔬 [01_套马杆_20260716] Step 0.75: Audio features...
[16:53:31] ✅ [02_西海情歌_20260716] Step 0.5: 6712583 bytes | 343.2s
[16:53:31] 🔬 [02_西海情歌_20260716] Step 0.75: Audio features...
[16:53:43] ❌ [03_吹吹山顶的风_20260716] Step 0: No audio URL
[16:53:53] ✅ [01_套马杆_20260716] Step 0.75: BPM=96.03 Key=D# minor (30.1s)
[16:53:53] 🧠 [01_套马杆_20260716] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-07-16T08:53:53.986Z", "trace_id": "batch-20260716-165311-87b60f", "song_key": "01_套马杆_20260716", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260716-165311-87b60f/01_套马杆_20260716/song_pgc.mp3", "has_features": true}}
/usr/local/lib/python3.13/dist-packages/scipy/cluster/hierarchy.py:810: ClusterWarning: The symmetric non-negative hollow observation matrix looks suspiciously like an uncondensed distance matrix
  return linkage(y, method='ward', metric='euclidean')
[16:54:14] ✅ [02_西海情歌_20260716] Step 0.75: BPM=151.97 Key=G minor (42.6s)
[16:54:14] 🧠 [02_西海情歌_20260716] Step 1: Gemini (queuing)...
{"__trace__": true, "ts": "2026-07-16T08:54:14.214Z", "trace_id": "batch-20260716-165311-87b60f", "song_key": "02_西海情歌_20260716", "step": "step1", "type": "step_start", "inputs": {"audio": "/srv/music-files-platform-next/pipeline/batch-20260716-165311-87b60f/02_西海情歌_20260716/song_pgc.mp3", "has_features": true}}
  📊 Gemini official: 41s | prompt_tokens=7712 completion=1165
{"__trace__": true, "ts": "2026-07-16T08:54:34.958Z", "trace_id": "batch-20260716-165311-87b60f", "song_key": "01_套马杆_20260716", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 41.0, "cost_usd": null, "status": "success"}
{"__trace__": true, "ts": "2026-07-16T08:54:34.958Z", "trace_id": "batch-20260716-165311-87b60f", "song_key": "01_套马杆_20260716", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 40.972}
[16:54:34] ⚠️  [01_套马杆_20260716] Step 1.5: prompt 1028c > 1000c, compressing...
  📏 [01_套马杆_20260716] prompt 1028c → 948c (smart truncate)
[16:54:34] ✅ [01_套马杆_20260716] Step 1.5: prompt compressed 1028c → 948c
[16:54:34] ✅ [01_套马杆_20260716] Step 1: 41.0s | prompt=948c | prompt_ok=True lyrics_ok=True
  📊 Gemini official: 34s | prompt_tokens=14428 completion=1301
{"__trace__": true, "ts": "2026-07-16T08:54:48.415Z", "trace_id": "batch-20260716-165311-87b60f", "song_key": "02_西海情歌_20260716", "step": "step1", "type": "api_call", "provider": "gemini", "model": "gemini-2.5-pro", "duration_sec": 34.1, "cost_usd": null, "status": "success"}
{"__trace__": true, "ts": "2026-07-16T08:54:48.415Z", "trace_id": "batch-20260716-165311-87b60f", "song_key": "02_西海情歌_20260716", "step": "step1", "type": "step_end", "status": "success", "duration_sec": 34.201}
[16:54:48] ⚠️  [02_西海情歌_20260716] Step 1.5: prompt 1176c > 1000c, compressing...
  📏 [02_西海情歌_20260716] prompt 1176c → 976c (smart truncate)
[16:54:48] ✅ [02_西海情歌_20260716] Step 1.5: prompt compressed 1176c → 976c
[16:54:48] ✅ [02_西海情歌_20260716] Step 1: 34.1s | prompt=976c | prompt_ok=True lyrics_ok=True

======================================================================
SUMMARY | 93s (1.5min)
======================================================================
✅ Done: 2 | ⏳ Awaiting Step 2: 0 | ❌ Failed: 1
[MasterDB] ✅ 批次 batch-20260716-165311-87b60f → +0 新增, ~0 更新 | 总计 811 首
[exit 0]

=== 2026-07-16 16:54:49 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/orchestrate_phase2.py /srv/music-files-platform-next/pipeline/batch-20260716-165311-87b60f --profile __runtime_batch-20260716-165311-87b60f --resume-mode end --skip-feishu ===
[phase2] batch=batch-20260716-165311-87b60f pending=2 groups=1
[phase2] group 1/1 -> 01_套马杆_20260716, 02_西海情歌_20260716
[profile] ✅ Loaded profile '__runtime_batch-20260716-165311-87b60f' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260716-165311-87b60f.yaml
[phase2] 🌐 01_套马杆_20260716: target_language=auto
[profile] ✅ Loaded profile '__runtime_batch-20260716-165311-87b60f' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260716-165311-87b60f.yaml
[phase2] 🌐 02_西海情歌_20260716: target_language=auto
[phase2] resume -> /usr/bin/python3 /srv/repos/3000music-platform-next/services/music-pipeline/scripts/pipeline.py /srv/music-files-platform-next/pipeline/batch-20260716-165311-87b60f/_manifest.json --resume /srv/music-files-platform-next/pipeline/batch-20260716-165311-87b60f --profile __runtime_batch-20260716-165311-87b60f --skip-feishu
[16:54:49] 🌐 [01_套马杆_20260716] Step 2: target_language=auto → lang_mode=AUTO | single-turn
[16:54:49] 🤖 [01_套马杆_20260716] Step 2 Turn 2: 13615 chars ≈ 3403 tokens → claude-sonnet-4-6
[16:54:49] 🌐 [02_西海情歌_20260716] Step 2: target_language=auto → lang_mode=AUTO | single-turn
[16:54:49] 🤖 [02_西海情歌_20260716] Step 2 Turn 2: 14514 chars ≈ 3628 tokens → claude-sonnet-4-6
[16:55:32] ⚠️  [01_套马杆_20260716] Step 2 API: originality 79% < 85% | 0 copied phrases
[16:55:32] 🔄 [01_套马杆_20260716] Step 2 API: originality retry 1/3...
[16:55:32] ⚠️  [02_西海情歌_20260716] Step 2 API: originality 82% < 85% | 0 copied phrases
[16:55:32] 🔄 [02_西海情歌_20260716] Step 2 API: originality retry 1/3...
[16:56:16] ⚠️  [01_套马杆_20260716] Step 2 API retry 1: originality 82%
[16:56:16] 🔄 [01_套马杆_20260716] Step 2 API: originality retry 2/3...
[16:56:17] ⚠️  [02_西海情歌_20260716] Step 2 API retry 1: originality 82%
[16:56:17] 🔄 [02_西海情歌_20260716] Step 2 API: originality retry 2/3...
[16:56:59] ⚠️  [01_套马杆_20260716] Step 2 API retry 2: originality 82%
[16:56:59] 🔄 [01_套马杆_20260716] Step 2 API: originality retry 3/3...
[16:57:06] ⚠️  [02_西海情歌_20260716] Step 2 API originality retry 2 failed: Expecting value: line 1 column 1 (char 0)
[16:57:06] ⚠️  [02_西海情歌_20260716] Step 2 API: best originality 82% after 3 retries
[16:57:33] 🎨 [02_西海情歌_20260716] Step 2 craft: 79/100
[16:57:33] ✅ [02_西海情歌_20260716] Step 2 API: 《你说过会回来的》 engine=? | 87.4s | in=25423 out=5508 | ~$0.159
[16:57:54] ⚠️  [01_套马杆_20260716] Step 2 API originality retry 3 failed: Expecting value: line 1 column 1 (char 0)
[16:57:54] ⚠️  [01_套马杆_20260716] Step 2 API: best originality 82% after 3 retries
[16:58:15] 🎨 [01_套马杆_20260716] Step 2 craft: 79/100
[16:58:15] ✅ [01_套马杆_20260716] Step 2 API: 《长生天下你是我的人》 engine=? | 130.1s | in=40505 out=7169 | ~$0.229
{"timestamp": "2026-07-16T16:54:49.444263+08:00", "batch_dir": "/srv/music-files-platform-next/pipeline/batch-20260716-165311-87b60f", "profile": "__runtime_batch-20260716-165311-87b60f", "concurrency": 3, "resume_mode": "end", "pending_song_count": 2, "groups": [{"group_index": 1, "songs": ["/srv/music-files-platform-next/pipeline/batch-20260716-165311-87b60f/01_套马杆_20260716", "/srv/music-files-platform-next/pipeline/batch-20260716-165311-87b60f/02_西海情歌_20260716"], "success_count": 2, "failed_count": 0, "results": [{"status": "success", "song_dir": "/srv/music-files-platform-next/pipeline/batch-20260716-165311-87b60f/01_套马杆_20260716", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260716-165311-87b60f/01_套马杆_20260716/step2_json_b.json", "agent_summary": "API direct: 长生天下你是我的人", "returncode": 0, "stderr": "", "attempt": 1, "attempts": [{"status": "success", "song_dir": "/srv/music-files-platform-next/pipeline/batch-20260716-165311-87b60f/01_套马杆_20260716", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260716-165311-87b60f/01_套马杆_20260716/step2_json_b.json", "agent_summary": "API direct: 长生天下你是我的人", "returncode": 0, "stderr": "", "attempt": 1}]}, {"status": "success", "song_dir": "/srv/music-files-platform-next/pipeline/batch-20260716-165311-87b60f/02_西海情歌_20260716", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260716-165311-87b60f/02_西海情歌_20260716/step2_json_b.json", "agent_summary": "API direct: 你说过会回来的", "returncode": 0, "stderr": "", "attempt": 1, "attempts": [{"status": "success", "song_dir": "/srv/music-files-platform-next/pipeline/batch-20260716-165311-87b60f/02_西海情歌_20260716", "step2_file": "/srv/music-files-platform-next/pipeline/batch-20260716-165311-87b60f/02_西海情歌_20260716/step2_json_b.json", "agent_summary": "API direct: 你说过会回来的", "returncode": 0, "stderr": "", "attempt": 1}]}]}], "resume": {"status": "success", "returncode": 0, "stdout_tail": "\n======================================================================\nmusic-pipeline3000 v2 | 3 songs\n======================================================================\nGemini concurrency: 2 | Suno concurrency: 3\nOutput: /srv/music-files-platform-next/pipeline/batch-20260716-165311-87b60f\nSkip Suno: False | Step1 only: False | Version: v4\n======================================================================\n\n[16:58:16] 🏥 Health check...\n[16:58:18] ✅ qishui: OK\n[16:58:18] ✅ netease: OK\n[16:58:18] ✅ qq: OK\n\n[16:58:18] 🔍 [03_吹吹山顶的风_20260716] Step 0: Fetching...\n  📝 [01_套马杆_20260716] lyrics stripped: 2598c → 2593c\n[16:58:18] 🎵 [01_套马杆_20260716] Step 3: Suno generation (weirdness=50, style_influence=50)...\n  📝 [02_西海情歌_20260716] lyrics stripped: 3491c → 3485c\n[16:58:18] 🎵 [02_西海情歌_20260716] Step 3: Suno generation (weirdness=50, style_influence=50)...\n[16:58:20] 🔄 [03_吹吹山顶的风_20260716] Step 0: retry 1/2 in 5s...\n[16:58:27] 🔄 [03_吹吹山顶的风_20260716] Step 0: retry 2/2 in 10s...\n[16:58:39] ❌ [03_吹吹山顶的风_20260716] Step 0: No audio URL\n  ✅ submitted: ['67afa053', 'b078b870']\n  🎵 67afa053... → submitted\n  🎵 b078b870... → submitted\n  🎵 67afa053... → queued\n  🎵 b078b870... → queued\n  🎵 67afa053... → streaming\n  🎵 b078b870... → streaming\n  ✅ submitted: ['9db8495e', '14897c81']\n  🎵 9db8495e... → submitted\n  🎵 14897c81... → submitted\n  🎵 9db8495e... → queued\n  🎵 14897c81... → queued\n  🎵 9db8495e... → streaming\n  🎵 14897c81... → streaming\n  🎵 67afa053... → complete\n  🎵 b078b870... → complete\n[17:02:45]    🎧 [02_西海情歌_20260716] Song 1: https://cdn1.suno.ai/67afa053-e694-4c34-8fe4-5ca7cd13b0a3.mp3\n[17:02:45]    🎧 [02_西海情歌_20260716] Song 2: https://cdn1.suno.ai/b078b870-fdfd-42b9-9f4a-a2c76999cb83.mp3\n[17:02:45] 🎛️ [02_西海情歌_20260716] Step 3.5: 混音...\n[17:03:11]    🎚️ [02_西海情歌_20260716] Song 1: pop | 低35/中62/高4%\n  🎵 9db8495e... → complete\n[17:03:30]    🎚️ [02_西海情歌_20260716] Song 2: hip_hop | 低45/中49/高6%\n[17:03:30] ✅ [02_西海情歌_20260716] Step 3.5: 44.8s | 2 songs mixed\n  🎵 14897c81... → complete\n[17:03:30]    🎧 [01_套马杆_20260716] Song 1: https://cdn1.suno.ai/9db8495e-bec2-4b93-9233-5e59d69e7faf.mp3\n[17:03:30]    🎧 [01_套马杆_20260716] Song 2: https://cdn1.suno.ai/14897c81-1a8f-45e0-bfef-498937d5cd89.mp3\n[17:03:30] 🎛️ [01_套马杆_20260716] Step 3.5: 混音...\n[17:03:48]    🎚️ [01_套马杆_20260716] Song 1: pop | 低54/中41/高5%\n[17:04:08]    🎚️ [01_套马杆_20260716] Song 2: pop | 低51/中44/高4%\n[17:04:08] ✅ [01_套马杆_20260716] Step 3.5: 37.8s | 2 songs mixed\n\n======================================================================\nSUMMARY | 350s (5.8min)\n======================================================================\n✅ Done: 2 | ⏳ Awaiting Step 2: 0 | ❌ Failed: 1\n[MasterDB] ✅ 批次 batch-20260716-165311-87b60f → +2 新增, ~0 更新 | 总计 813 首\n", "stderr_tail": "[profile] ✅ Loaded profile '__runtime_batch-20260716-165311-87b60f' from /srv/repos/3000music-platform-next/services/music-pipeline/scripts/profiles/__runtime_batch-20260716-165311-87b60f.yaml\nUnclosed connection\nclient_connection: Connection<ConnectionKey(host='localhost', port=12138, is_ssl=False, ssl=True, proxy=None, proxy_auth=None, proxy_headers_hash=None)>\nUnclosed connection\nclient_connection: Connection<ConnectionKey(host='localhost', port=12138, is_ssl=False, ssl=True, proxy=None, proxy_auth=None, proxy_headers_hash=None)>\n", "summary": {"timestamp": "2026-07-16T17:04:08.761058+08:00", "wall_clock": 350.2, "total": 3, "success": 2, "awaiting_step2": 0, "failed": 1}}, "status": "success"}
[exit 0]

=== 2026-07-16 17:04:09 exec: /usr/bin/python3 /srv/current/3000music-platform-next/services/music-pipeline/scripts/steps/step5_feishu.py /srv/music-files-platform-next/pipeline/batch-20260716-165311-87b60f ===
[Feishu] ✅ Exported 2 songs to: https://ccnu62373cgc.feishu.cn/sheets/R619sHDiwhRRmPtlI7XcruzQngc
[Feishu] 📐 Expanded master sheet from 748 to 850 rows
[Feishu] ✅ Appended 2 new songs to master sheet (rows 749-750)
[MasterDB] ✅ 批次 batch-20260716-165311-87b60f → +2 新增, ~0 更新 | 总计 750 首
[Feishu IM] ✅ Text sent: 📊 本批次结果表格：https://ccnu62373cgc.feishu.cn/sheets/R619sHDiwhRR
[17:04:38] 📨 Step 5: Sending files to Feishu IM...
[Feishu IM] ✅ [长生天下你是我的人] topic head sent (message_id=om_x100b6abda4b900acb2ea26a931c3843)
[Feishu IM] ✅ [长生天下你是我的人] 长生天下你是我的人_V1_raw.mp3 replied
[Feishu IM] ✅ [长生天下你是我的人] 长生天下你是我的人_V1_mixed.mp3 replied
[Feishu IM] ✅ [长生天下你是我的人] 长生天下你是我的人_V2_raw.mp3 replied
[Feishu IM] ✅ [长生天下你是我的人] 长生天下你是我的人_V2_mixed.mp3 replied
[Feishu IM] ✅ [你说过会回来的] topic head sent (message_id=om_x100b6abda2d6a4b8b228c0246ad0c2b)
[Feishu IM] ✅ [你说过会回来的] 你说过会回来的_V1_raw.mp3 replied
[Feishu IM] ✅ [你说过会回来的] 你说过会回来的_V1_mixed.mp3 replied
[Feishu IM] ✅ [你说过会回来的] 你说过会回来的_V2_raw.mp3 replied
[Feishu IM] ✅ [你说过会回来的] 你说过会回来的_V2_mixed.mp3 replied
[Feishu] ✅ Already on file server: /srv/music-files-platform-next/pipeline/batch-20260716-165311-87b60f
[Feishu] ✅ Archived to GDrive: /mnt/gdrive/music-pipeline/batch-20260716-165311-87b60f
[Feishu] 📦 Local files kept at: /srv/music-files-platform-next/pipeline/batch-20260716-165311-87b60f

📊 https://ccnu62373cgc.feishu.cn/sheets/R619sHDiwhRRmPtlI7XcruzQngc
[exit 0]
