diff --git a/common/params_keys.h b/common/params_keys.h index 9bc6ef464..68cf7ea8c 100644 --- a/common/params_keys.h +++ b/common/params_keys.h @@ -296,10 +296,10 @@ inline static std::unordered_map keys = { {"DownloadAllModels", {CLEAR_ON_MANAGER_START, BOOL, "0", "0"}}, {"DownloadMaps", {CLEAR_ON_MANAGER_START, BOOL, "0", "0"}}, {"DriverCamera", {PERSISTENT, BOOL, "0", "0", 1, SETTINGS_SIMPLE}}, - {"Model", {PERSISTENT, STRING, "rdf", "rdf", 1}}, + {"Model", {PERSISTENT, STRING, "rdf43", "rdf43", 1}}, {"ModelVersion", {PERSISTENT, STRING, "v15", "v15", 1}}, - {"DrivingModel", {PERSISTENT, STRING, "rdf", "rdf", 1}}, - {"DrivingModelName", {PERSISTENT, STRING, "Regret Driven Framework", "Regret Driven Framework", 1}}, + {"DrivingModel", {PERSISTENT, STRING, "rdf43", "rdf43", 1}}, + {"DrivingModelName", {PERSISTENT, STRING, "Regret Driven Framework V4", "Regret Driven Framework V4", 1}}, {"DrivingModelVersion", {PERSISTENT, STRING, "v15", "v15", 1}}, {"DynamicPathWidth", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, {"DynamicPedalsOnUI", {PERSISTENT, BOOL, "1", "0", 1, SETTINGS_SIMPLE}}, diff --git a/selfdrive/modeld/modeld.py b/selfdrive/modeld/modeld.py index a0559f9d1..11ef530e6 100755 --- a/selfdrive/modeld/modeld.py +++ b/selfdrive/modeld/modeld.py @@ -48,8 +48,8 @@ from openpilot.starpilot.common.starpilot_variables import get_starpilot_toggles PROCESS_NAME = "selfdrive.modeld.modeld" SEND_RAW_PRED = os.getenv('SEND_RAW_PRED') -BUILTIN_MODEL_KEY = "rdf" -BUILTIN_MODEL_ALIASES = {BUILTIN_MODEL_KEY} +BUILTIN_MODEL_KEY = "rdf43" +BUILTIN_MODEL_ALIASES = {BUILTIN_MODEL_KEY, "rdf"} MODEL_ID_ALIASES = {"sc": "sc2"} @@ -125,7 +125,7 @@ def _canonical_model_id(model_id: str) -> str: def _select_builtin_model(params: Params) -> None: params.put("Model", BUILTIN_MODEL_KEY) params.put("DrivingModel", BUILTIN_MODEL_KEY) - params.put("DrivingModelName", "Regret Driven Framework") + params.put("DrivingModelName", "Regret Driven Framework V4") def get_action_from_model(model_output: dict[str, np.ndarray], prev_action: log.ModelDataV2.Action, diff --git a/selfdrive/modeld/models/driving_tinygrad.pkl.chunk01of03 b/selfdrive/modeld/models/driving_tinygrad.pkl.chunk01of03 index f0b34bdd0..3d0dac632 100644 Binary files a/selfdrive/modeld/models/driving_tinygrad.pkl.chunk01of03 and b/selfdrive/modeld/models/driving_tinygrad.pkl.chunk01of03 differ diff --git a/selfdrive/modeld/models/driving_tinygrad.pkl.chunk02of03 b/selfdrive/modeld/models/driving_tinygrad.pkl.chunk02of03 index 337a9c33d..fdbf77e8f 100644 Binary files a/selfdrive/modeld/models/driving_tinygrad.pkl.chunk02of03 and b/selfdrive/modeld/models/driving_tinygrad.pkl.chunk02of03 differ diff --git a/selfdrive/modeld/models/driving_tinygrad.pkl.chunk03of03 b/selfdrive/modeld/models/driving_tinygrad.pkl.chunk03of03 index e2eff7e95..14304c317 100644 Binary files a/selfdrive/modeld/models/driving_tinygrad.pkl.chunk03of03 and b/selfdrive/modeld/models/driving_tinygrad.pkl.chunk03of03 differ diff --git a/selfdrive/modeld/models/driving_tinygrad.pkl.sha256 b/selfdrive/modeld/models/driving_tinygrad.pkl.sha256 index e534b320c..a7320cb07 100644 --- a/selfdrive/modeld/models/driving_tinygrad.pkl.sha256 +++ b/selfdrive/modeld/models/driving_tinygrad.pkl.sha256 @@ -1 +1 @@ -66fca133dfb3658949a294e2e6eccce875bf892572ea6b5774e8441514eb0367 driving_tinygrad.pkl +a77db33c2e2d6a7570dc2a4a70c2b877429ee8bd9ca5dfeda74b5a41231aaff9 driving_tinygrad.pkl diff --git a/selfdrive/modeld/tests/test_model_fallback.py b/selfdrive/modeld/tests/test_model_fallback.py index 609dba843..5b582d042 100644 --- a/selfdrive/modeld/tests/test_model_fallback.py +++ b/selfdrive/modeld/tests/test_model_fallback.py @@ -30,7 +30,7 @@ def test_incompatible_downloaded_model_falls_back_to_builtin(monkeypatch): assert params.values == { "Model": modeld.BUILTIN_MODEL_KEY, "DrivingModel": modeld.BUILTIN_MODEL_KEY, - "DrivingModelName": "Regret Driven Framework", + "DrivingModelName": "Regret Driven Framework V4", } diff --git a/selfdrive/ui/layouts/settings/starpilot/driving_model.py b/selfdrive/ui/layouts/settings/starpilot/driving_model.py index 2c8601b62..adc58f2b5 100644 --- a/selfdrive/ui/layouts/settings/starpilot/driving_model.py +++ b/selfdrive/ui/layouts/settings/starpilot/driving_model.py @@ -821,13 +821,13 @@ class StarPilotDrivingModelLayout(_SettingsPage): default_key = self._params.get_default_value("Model") or self._params.get_default_value("DrivingModel") if isinstance(default_key, bytes): default_key = default_key.decode("utf-8", errors="ignore") - return canonical_model_key(str(default_key or "").strip()) or "rdf" + return canonical_model_key(str(default_key or "").strip()) or "rdf43" def _default_model_name(self) -> str: default_name = self._params.get_default_value("DrivingModelName") if isinstance(default_name, bytes): default_name = default_name.decode("utf-8", errors="ignore") - return _clean_model_name(default_name or "") or "Regret Driven Framework" + return _clean_model_name(default_name or "") or "Regret Driven Framework V4" def _default_model_version(self) -> str: default_version = self._params.get_default_value("ModelVersion") or self._params.get_default_value("DrivingModelVersion") diff --git a/selfdrive/ui/mici/layouts/settings/driving_model.py b/selfdrive/ui/mici/layouts/settings/driving_model.py index 665fde49f..2a3b4535d 100644 --- a/selfdrive/ui/mici/layouts/settings/driving_model.py +++ b/selfdrive/ui/mici/layouts/settings/driving_model.py @@ -723,11 +723,13 @@ class DrivingModelBigButton(BigButton): default_key = default_key.decode("utf-8", errors="ignore") default_key = str(default_key or "").strip() if not default_key: - default_key = "rdf" + default_key = "rdf43" # Keep the built-in model selectable even when the manifest omits it. if key == default_key: return True + if default_key == "rdf43" and key == "rdf": + return True if default_key.endswith("2") and key == default_key[:-1]: return True if not default_key.endswith("2") and key == f"{default_key}2": diff --git a/starpilot/assets/model_manager.py b/starpilot/assets/model_manager.py index 5be5809a0..e49cd5a79 100644 --- a/starpilot/assets/model_manager.py +++ b/starpilot/assets/model_manager.py @@ -25,13 +25,16 @@ from openpilot.starpilot.common.starpilot_variables import MODELS_PATH MANIFEST_CANDIDATES = ("v23",) MODEL_NAMESPACE_SUFFIX = "3" -DEFAULT_MODEL_KEY = "rdf" +DEFAULT_MODEL_KEY = "rdf43" LOCAL_MODEL_PREFIX = "local-" LOCAL_MODEL_SERIES = "Local Series" ARTIFACT_URLS_CACHE = ".model_artifact_urls.json" ARTIFACT_METADATA_CACHE = ".model_artifacts.json" MODEL_KEY_CANONICAL_MAP = { "sc": "sc2", + # The original bundled RDF key remains valid after the bundled default moves + # to the v23 RDF V4 artifact. + "rdf": DEFAULT_MODEL_KEY, } LEGACY_DRIVING_PREFIXES = ( "driving_", @@ -622,7 +625,7 @@ class ModelManager: default_name = ( self.available_model_names[default_index] if default_index is not None and default_index < len(self.available_model_names) - else "Regret Driven Framework" + else "Regret Driven Framework V4" ) default_version = ( self.model_versions[default_index] diff --git a/starpilot/common/starpilot_variables.py b/starpilot/common/starpilot_variables.py index 9cbea71b6..ea094e1de 100644 --- a/starpilot/common/starpilot_variables.py +++ b/starpilot/common/starpilot_variables.py @@ -1185,10 +1185,10 @@ class StarPilotVariables: toggle.recovery_power = self.get_value("RecoveryPower", cast=float, condition=longitudinal_tuning, default=1.0, min=0.5, max=2.0) toggle.taco_tune = self.get_value("TacoTune", condition=longitudinal_tuning) - toggle.model = self.get_value("Model", cast=None, default="rdf") + toggle.model = self.get_value("Model", cast=None, default="rdf43") if not toggle.model: - toggle.model = self.get_value("DrivingModel", cast=None, default="rdf") - toggle.model_name = self.get_value("DrivingModelName", cast=None, default="Regret Driven Framework") + toggle.model = self.get_value("DrivingModel", cast=None, default="rdf43") + toggle.model_name = self.get_value("DrivingModelName", cast=None, default="Regret Driven Framework V4") toggle.model_version = self.get_value("ModelVersion", cast=None, default="v15") if not toggle.model_version: toggle.model_version = self.get_value("DrivingModelVersion", cast=None, default="v15") diff --git a/starpilot/system/the_galaxy/the_galaxy.py b/starpilot/system/the_galaxy/the_galaxy.py index 338b2d8f4..285d91063 100644 --- a/starpilot/system/the_galaxy/the_galaxy.py +++ b/starpilot/system/the_galaxy/the_galaxy.py @@ -5504,10 +5504,10 @@ def setup(app): def _default_model_key(): default_key = _param_text(params.get_default_value("Model") or params.get_default_value("DrivingModel")) - return canonical_model_key(default_key) or "rdf" + return canonical_model_key(default_key) or "rdf43" def _default_model_name(): - return _param_text(params.get_default_value("DrivingModelName")) or "Regret Driven Framework" + return _param_text(params.get_default_value("DrivingModelName")) or "Regret Driven Framework V4" def _default_model_version(): default_version = _param_text(params.get_default_value("ModelVersion") or params.get_default_value("DrivingModelVersion")) diff --git a/starpilot/ui/qt/offroad/model_settings.cc b/starpilot/ui/qt/offroad/model_settings.cc index 487387313..6839a60d2 100644 --- a/starpilot/ui/qt/offroad/model_settings.cc +++ b/starpilot/ui/qt/offroad/model_settings.cc @@ -22,22 +22,26 @@ QString builtinDefaultModelKey(const Params ¶ms) { if (key.isEmpty()) { key = paramDefaultValue(params, "DrivingModel"); } - return key.isEmpty() ? QStringLiteral("rdf") : key; + return key.isEmpty() ? QStringLiteral("rdf43") : key; } QString builtinDefaultModelName(const Params ¶ms) { QString name = paramDefaultValue(params, "DrivingModelName"); - return name.isEmpty() ? QStringLiteral("Regret Driven Framework") : name; + return name.isEmpty() ? QStringLiteral("Regret Driven Framework V4") : name; } QStringList builtinDefaultModelAliases(const QString &defaultKey) { QString canonical = defaultKey.trimmed(); if (canonical.isEmpty()) { - canonical = QStringLiteral("rdf"); + canonical = QStringLiteral("rdf43"); } QStringList aliases{canonical}; + if (canonical == QStringLiteral("rdf43")) { + aliases.append(QStringLiteral("rdf")); + } + if (canonical.endsWith("2")) { aliases.append(canonical.left(canonical.size() - 1)); } else { diff --git a/system/manager/manager.py b/system/manager/manager.py index 07ea217f8..431635fa1 100755 --- a/system/manager/manager.py +++ b/system/manager/manager.py @@ -67,7 +67,7 @@ STARPILOT_PARAM_RENAME_MIGRATION_FLAG = Path("/data") / "starpilot_param_rename_ STARPILOT_PARAM_CANONICALIZATION_MIGRATION_FLAG = Path("/data") / "starpilot_param_canonicalization_v1" STARPILOT_PC_ROOT_MIGRATION_FLAG = Path("/data") / "starpilot_pc_root_v1" STARPILOT_PARAMS_CACHE_MIGRATION_FLAG = Path("/data") / "starpilot_params_cache_v1" -STARPILOT_DEFAULT_MODEL_MIGRATION_FLAG = Path("/data") / "starpilot_default_model_rdf_v1" +STARPILOT_DEFAULT_MODEL_MIGRATION_FLAG = Path("/data") / "starpilot_default_model_rdf_v4" STARPILOT_CE_MODEL_STOP_TIME_MIGRATION_FLAG = Path("/data") / "starpilot_ce_model_stop_time_v2" STARPILOT_LEGACY_CACHE_MARKER_KEYS = ("RemapCancelToDistance",) STARPILOT_REMOVED_PARAM_KEYS = ("CoastUpToLeads", "HumanAcceleration", "HumanFollowing", "PrioritizeSmoothFollowing") @@ -609,7 +609,7 @@ def migrate_starpilot_default_parity(params: Params, params_cache: Params) -> No def migrate_starpilot_default_model(params: Params, params_cache: Params) -> None: - """Move the old bundled South Carolina selection to the bundled RDF model once.""" + """Move the old bundled default to the bundled RDF V4 model once.""" if STARPILOT_DEFAULT_MODEL_MIGRATION_FLAG.exists(): return @@ -624,19 +624,26 @@ def migrate_starpilot_default_model(params: Params, params_cache: Params) -> Non selected_version = persisted_text("ModelVersion") or persisted_text("DrivingModelVersion") selected_name = persisted_text("DrivingModelName").lower() - is_legacy_default = selected_model.lower() in {"sc", "sc2"} - is_legacy_metadata = (not selected_version or selected_version.lower() == "v11") and (not selected_name or selected_name.startswith("south carolina")) + is_legacy_default = selected_model.lower() in {"sc", "sc2", "rdf"} + is_legacy_metadata = ( + not selected_version + or selected_version.lower() in {"v11", "v15"} + ) and ( + not selected_name + or selected_name.startswith("south carolina") + or selected_name.startswith("regret driven framework") + ) if is_legacy_default and is_legacy_metadata: for key, value in { - "Model": "rdf", - "DrivingModel": "rdf", - "DrivingModelName": "Regret Driven Framework", + "Model": "rdf43", + "DrivingModel": "rdf43", + "DrivingModelName": "Regret Driven Framework V4", "ModelVersion": "v15", "DrivingModelVersion": "v15", }.items(): params.put(key, value) params_cache.put(key, value) - cloudlog.warning("Migrated the bundled default model from South Carolina to RDF") + cloudlog.warning("Migrated the bundled default model to RDF V4") try: STARPILOT_DEFAULT_MODEL_MIGRATION_FLAG.parent.mkdir(parents=True, exist_ok=True) diff --git a/system/manager/test/test_manager.py b/system/manager/test/test_manager.py index d1c63459a..14f491ed0 100644 --- a/system/manager/test/test_manager.py +++ b/system/manager/test/test_manager.py @@ -386,7 +386,7 @@ class TestManager: assert params_cache.get("CEModelStopTime") == "7.7" def test_migrate_starpilot_default_model(self, tmp_path, monkeypatch): - monkeypatch.setattr(manager, "STARPILOT_DEFAULT_MODEL_MIGRATION_FLAG", tmp_path / "starpilot_default_model_rdf_v1") + monkeypatch.setattr(manager, "STARPILOT_DEFAULT_MODEL_MIGRATION_FLAG", tmp_path / "starpilot_default_model_rdf_v4") params = FileBackedFakeParams(tmp_path / "params", { "Model": "sc2", @@ -399,11 +399,11 @@ class TestManager: manager.migrate_starpilot_default_model(params, params_cache) - assert params.get("Model") == "rdf" - assert params.get("DrivingModel") == "rdf" - assert params.get("DrivingModelName") == "Regret Driven Framework" + assert params.get("Model") == "rdf43" + assert params.get("DrivingModel") == "rdf43" + assert params.get("DrivingModelName") == "Regret Driven Framework V4" assert params.get("ModelVersion") == "v15" - assert params_cache.get("DrivingModel") == "rdf" + assert params_cache.get("DrivingModel") == "rdf43" assert manager.STARPILOT_DEFAULT_MODEL_MIGRATION_FLAG.exists() def test_migrate_starpilot_ce_model_stop_time(self, tmp_path, monkeypatch):