from dataclasses import dataclass from pathlib import Path @dataclass(frozen=True) class DataIngestionConfig: root_dir : Path source_URL : str local_data_file : Path unzip_dir : Path @dataclass(frozen=True) class DataValidationConfig: root_dir : Path STATUS_FILE : str ALL_REQUIRED_FILES : list data_dir : Path @dataclass(frozen=True) class DataTransformationConfig: root_dir: Path data_path: Path tokenizer_name: str # dev quick-run options dev_run: bool = False dev_model: str | None = None @dataclass(frozen=True) class ModelTrainerConfig: root_dir: Path data_path: Path model_ckpt: str num_train_epochs: int warmup_steps: int per_device_train_batch_size: int weight_decay: float logging_steps: int eval_strategy: str eval_steps: int save_steps: float gradient_accumulation_steps: int # dev / quick-train options dev_run: bool = False dev_model: str | None = None dev_subset: int = 0 @dataclass(frozen=True) class ModelEvaluationConfig: root_dir: Path data_path: Path model_path: Path tokenizer_path: Path metric_file_name: Path # Hub model ID used as fallback when the local fine-tuned model is absent hub_model_id: str = "google/pegasus-cnn_dailymail"