mirror of https://github.com/razor-ai/soup.git
fix: use AutoModel for audio, is_relative_to path check, early librosa import
- Use AutoModel instead of AutoModelForCausalLM for audio-language models (Qwen2-Audio, Whisper don't work with causal LM auto class) - Use Path.is_relative_to() for path traversal check (symlink-safe, Python 3.9+) - Fail fast with helpful error if librosa not installed before dataset processing
This commit is contained in:
parent
fb1f49afc8
commit
20c2f4e515
|
|
@ -195,7 +195,7 @@ def _validate_audio_files(data: list[dict], audio_dir: Path) -> list[dict]:
|
|||
audio_path = audio_dir / audio_path
|
||||
# Path traversal protection: resolved path must stay under audio_dir
|
||||
resolved = audio_path.resolve()
|
||||
if not str(resolved).startswith(str(resolved_base)):
|
||||
if not resolved.is_relative_to(resolved_base):
|
||||
traversal += 1
|
||||
continue
|
||||
valid.append({**row, "audio": str(resolved)})
|
||||
|
|
|
|||
|
|
@ -424,7 +424,7 @@ class SFTTrainerWrapper:
|
|||
"""Load audio-language model via transformers (Qwen2-Audio, Whisper, etc.)."""
|
||||
from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training
|
||||
from rich.panel import Panel as RichPanel
|
||||
from transformers import AutoModelForCausalLM, AutoProcessor, BitsAndBytesConfig
|
||||
from transformers import AutoModel, AutoProcessor, BitsAndBytesConfig
|
||||
|
||||
console.print(
|
||||
RichPanel(
|
||||
|
|
@ -461,7 +461,9 @@ class SFTTrainerWrapper:
|
|||
if bnb_config:
|
||||
model_kwargs["quantization_config"] = bnb_config
|
||||
|
||||
self.model = AutoModelForCausalLM.from_pretrained(cfg.base, **model_kwargs)
|
||||
# Use AutoModel for audio models — AutoModelForCausalLM doesn't handle
|
||||
# audio-language architectures (Qwen2-Audio, Whisper, etc.)
|
||||
self.model = AutoModel.from_pretrained(cfg.base, **model_kwargs)
|
||||
|
||||
if tcfg.quantization in ("4bit", "8bit"):
|
||||
self.model = prepare_model_for_kbit_training(self.model)
|
||||
|
|
@ -485,6 +487,14 @@ class SFTTrainerWrapper:
|
|||
"""Prepare dataset for audio fine-tuning with audio loading."""
|
||||
from datasets import Dataset
|
||||
|
||||
try:
|
||||
import librosa # noqa: F401
|
||||
except ImportError:
|
||||
raise ImportError(
|
||||
"librosa is required for audio training. "
|
||||
"Install with: pip install 'soup-cli[audio]'"
|
||||
)
|
||||
|
||||
def load_and_format_audio(example):
|
||||
import librosa
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue