async def _nlu_model_for_finetuning( model_to_finetune: Text, file_importer: TrainingDataImporter, finetuning_epoch_fraction: float = 1.0, called_from_combined_training: bool = False, ) -> Optional[Interpreter]: path_to_archive = model.get_model_for_finetuning(model_to_finetune) if not path_to_archive: return None rasa.shared.utils.cli.print_info( f"Loading NLU model from {path_to_archive} for finetuning...", ) with model.unpack_model(path_to_archive) as unpacked: _, old_nlu = model.get_model_subdirectories(unpacked) new_fingerprint = await model.model_fingerprint(file_importer) old_fingerprint = model.fingerprint_from_path(unpacked) if not model.can_finetune( old_fingerprint, new_fingerprint, nlu=True, core=called_from_combined_training, ): rasa.shared.utils.cli.print_error_and_exit( "NLU model can not be finetuned.") config = await file_importer.get_config() model_to_finetune = Interpreter.load( old_nlu, new_config=config, finetuning_epoch_fraction=finetuning_epoch_fraction, ) if not model_to_finetune: return None return model_to_finetune
async def _core_model_for_finetuning( model_to_finetune: Text, file_importer: TrainingDataImporter, finetuning_epoch_fraction: float = 1.0, ) -> Optional[Agent]: path_to_archive = model.get_model_for_finetuning(model_to_finetune) if not path_to_archive: return None rasa.shared.utils.cli.print_info( f"Loading Core model from {path_to_archive} for finetuning...", ) with model.unpack_model(path_to_archive) as unpacked: new_fingerprint = await model.model_fingerprint(file_importer) old_fingerprint = model.fingerprint_from_path(unpacked) if not model.can_finetune(old_fingerprint, new_fingerprint, core=True): rasa.shared.utils.cli.print_error_and_exit( "Core model can not be finetuned.") config = await file_importer.get_config() agent = Agent.load( unpacked, new_config=config, finetuning_epoch_fraction=finetuning_epoch_fraction, ) # Agent might be empty if no underlying Core model was found. if agent.domain is not None and agent.policy_ensemble is not None: return agent return None