"""Configuration settings for model fine-tuning.""" from pathlib import Path # Directory paths FINE_TUNING_DIR = Path(__file__).parent MODELS_DIR = FINE_TUNING_DIR / "models" DATA_DIR = FINE_TUNING_DIR / "data" # Fine-tuning parameters DEFAULT_FINE_TUNING_CONFIG = { "min_training_samples": 1000, "training_interval_hours": 24, "epochs": 5, # Reduced from 10 to 5 epochs "batch_size": 64, # Increased from 32 to 64 for faster processing "learning_rate": 2e-5, "max_seq_length": 512, # Maximum sequence length for tokenization (Note: CrossEncoder uses its own model.max_length) "warmup_steps": 500, # Reduced from 1000 to 500 "use_mixed_precision": True, # Enable mixed precision training "gradient_accumulation_steps": 2, # Reduced from 4 to 2 for faster updates "dataloader_num_workers": 2, # Reduced from 4 to 2 to prevent memory issues "pin_memory": True, # Pin memory for faster data transfer to GPU "weight_decay": 0.01, # L2 regularization "num_cycles": 2, # Reduced from 3 to 2 "early_stopping_patience": 2, # Reduced from 3 to 2 "early_stopping_min_delta": 1e-4, # Minimum improvement for early stopping "adam_epsilon": 1e-8, # Adam optimizer epsilon "max_grad_norm": 1.0, # Maximum gradient norm for clipping "adam_betas": (0.9, 0.999), # Adam optimizer betas # Parameters for hard negative mining (names aligned with trainer.py's .get() calls) "hard_negatives_top_k": 2, # Reduced from 3 to 2 "hard_negatives_weight": 1.2, # Weight for hard negative examples # Note: The following parameters from the original config are not directly used by # the provided trainer.py or are redundant, so they have been removed for clarity: # embedding_batch_size, use_ipex, use_amp, scheduler, validation_split, # save_best_model, fp16_opt_level, scheduler_num_cycles, scheduler_power, # num_folds (trainer uses hardcoded 5), min_feedback_confidence, ensemble_aggregation, # feedback_weight_scale, min_samples_per_class, temperature, use_weighted_sampling, # augmentation_strength, confidence_threshold, ensemble_diversity_weight, # label_smoothing, dropout_rate, warmup_ratio, max_train_steps, eval_steps, # logging_steps, save_steps, save_total_limit (utils.py has MAX_OLD_MODELS). } # Model versioning MODEL_STATUS = { "BASE": "base", "FINE_TUNED": "fine_tuned", "TRAINING": "training" } # File names TRAINING_DATA_FILE = "reranker_training_data.jsonl" MODEL_METADATA_FILE = "model_metadata.json" USER_FEEDBACK_FILE = "user_feedback.jsonl"