PLUS: защита от наборов, которые размазывают модель
Browse files- plus/serve_muscriptor.py +37 -0
plus/serve_muscriptor.py
CHANGED
|
@@ -382,6 +382,32 @@ def expand_instruments(text: str) -> list[str]:
|
|
| 382 |
return WIDE_INSTRUMENTS.split(",")
|
| 383 |
return [name.strip() for name in cleaned.split(",") if name.strip()]
|
| 384 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 385 |
def start_proxy(server_port: int, listen_port: int,
|
| 386 |
instruments: str = BAND_INSTRUMENTS,
|
| 387 |
multi_pass: str = "",
|
|
@@ -457,6 +483,17 @@ def main(argv: list[str] | None = None) -> int:
|
|
| 457 |
CUSTOM_SSH = args.ssh
|
| 458 |
|
| 459 |
ensure_package()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 460 |
if not args.skip_audio:
|
| 461 |
ensure_audio_tools()
|
| 462 |
ensure_ssh()
|
|
|
|
| 382 |
return WIDE_INSTRUMENTS.split(",")
|
| 383 |
return [name.strip() for name in cleaned.split(",") if name.strip()]
|
| 384 |
|
| 385 |
+
MAX_GROUPS = 10 # шире модель размазывается: замерено
|
| 386 |
+
BAND_LIST = "drums,electric_bass,acoustic_bass,chromatic_percussion,acoustic_piano,electric_piano,clean_electric_guitar,synth_pad".split(",")
|
| 387 |
+
|
| 388 |
+
|
| 389 |
+
def guard_instruments(names: list[str], label: str = "") -> tuple[list[str], str]:
|
| 390 |
+
"""Свести опасный набор к проверенному и объяснить почему."""
|
| 391 |
+
if not names:
|
| 392 |
+
return names, ""
|
| 393 |
+
band_alias = [n for n in names if n.lower() in ("band", "набор")]
|
| 394 |
+
if band_alias:
|
| 395 |
+
return list(BAND_LIST), "%s: это слово-псевдоним, беру проверенный набор" % label
|
| 396 |
+
known = set(ALL_INSTRUMENTS.split(","))
|
| 397 |
+
unknown = [n for n in names if n not in known]
|
| 398 |
+
if unknown:
|
| 399 |
+
names = [n for n in names if n in known]
|
| 400 |
+
if not names:
|
| 401 |
+
return list(BAND_LIST), ("%s: неизвестные группы %s, беру проверенный набор"
|
| 402 |
+
% (label, ", ".join(unknown[:4])))
|
| 403 |
+
return names, "%s: выкинул неизвестные группы %s" % (label, ", ".join(unknown[:4]))
|
| 404 |
+
if len(names) > MAX_GROUPS:
|
| 405 |
+
return list(BAND_LIST), (
|
| 406 |
+
"%s: %d групп из %d — модель размазывается (замер: 35 групп дали 0 нот,"
|
| 407 |
+
" 12 групп хуже на 9 попаданий). Беру проверенный набор из %d."
|
| 408 |
+
% (label or "набор", len(names), len(names), len(BAND_LIST)))
|
| 409 |
+
return names, ""
|
| 410 |
+
|
| 411 |
def start_proxy(server_port: int, listen_port: int,
|
| 412 |
instruments: str = BAND_INSTRUMENTS,
|
| 413 |
multi_pass: str = "",
|
|
|
|
| 483 |
CUSTOM_SSH = args.ssh
|
| 484 |
|
| 485 |
ensure_package()
|
| 486 |
+
checked, warning = guard_instruments(expand_instruments(args.instruments),
|
| 487 |
+
"--instruments")
|
| 488 |
+
if warning:
|
| 489 |
+
say(" " + warning)
|
| 490 |
+
args.instruments = ",".join(checked)
|
| 491 |
+
if args.multi_pass:
|
| 492 |
+
checked_pass, warning = guard_instruments(expand_instruments(args.multi_pass),
|
| 493 |
+
"--multi-pass")
|
| 494 |
+
if warning:
|
| 495 |
+
say(" " + warning)
|
| 496 |
+
args.multi_pass = ",".join(checked_pass)
|
| 497 |
if not args.skip_audio:
|
| 498 |
ensure_audio_tools()
|
| 499 |
ensure_ssh()
|