mirror of
https://github.com/infiniteCable2/openpilot.git
synced 2026-09-05 07:43:41 +08:00
Merge branch 'master-new' of https://github.com/sunnypilot/sunnypilot into master-new
This commit is contained in:
@@ -55,7 +55,7 @@ jobs:
|
||||
path: ${{ github.workspace }}/selfdrive/modeld/models/*.onnx
|
||||
|
||||
build_model:
|
||||
runs-on: self-hosted
|
||||
runs-on: [self-hosted, tici]
|
||||
needs: get_model
|
||||
env:
|
||||
MODEL_NAME: ${{ inputs.custom_name || inputs.upstream_branch }} (${{ needs.get_model.outputs.model_date }})
|
||||
@@ -71,7 +71,7 @@ jobs:
|
||||
with:
|
||||
path: ${{env.SCONS_CACHE_DIR}}
|
||||
key: scons-${{ runner.os }}-${{ runner.arch }}-${{ github.head_ref || github.ref_name }}-model-${{ github.sha }}
|
||||
# Note: GitHub Actions enforces cache isolation between different build sources (PR builds, workflow dispatches, etc.)
|
||||
# Note: GitHub Actions enforces cache isolation between different build sources (PR builds, workflow dispatches, etc.)
|
||||
# for security. Only caches from the default branch are shared across all builds. This is by design and cannot be overridden.
|
||||
restore-keys: |
|
||||
scons-${{ runner.os }}-${{ runner.arch }}-${{ github.head_ref || github.ref_name }}-model
|
||||
|
||||
@@ -50,7 +50,7 @@ jobs:
|
||||
concurrency:
|
||||
group: build-${{ github.head_ref || github.ref_name }}
|
||||
cancel-in-progress: false
|
||||
runs-on: self-hosted
|
||||
runs-on: [self-hosted, tici]
|
||||
outputs:
|
||||
new_branch: ${{ steps.set-env.outputs.new_branch }}
|
||||
version: ${{ steps.set-env.outputs.version }}
|
||||
|
||||
@@ -153,6 +153,7 @@ jobs:
|
||||
}
|
||||
}' -F label="is:pr is:open label:${PR_LABEL} draft:false sort:created-asc")
|
||||
|
||||
PR_LIST=${PR_LIST//\'/}
|
||||
echo "PR_LIST=${PR_LIST}" >> $GITHUB_OUTPUT
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
# Model Selector Version Compatibility
|
||||
|
||||
This document explains the version compatibility mechanism used by the Model Selector system, and the rationale behind certain version constraints and JSON file management strategies.
|
||||
|
||||
## Overview
|
||||
|
||||
The Model Selector is responsible for selecting and validating model bundles based on their metadata and version constraints. Each model bundle is distributed via a JSON file and includes a `minimumSelectorVersion` field indicating the minimum selector version required to load it.
|
||||
|
||||
To ensure robust compatibility and prevent mismatches between model expectations and selector capabilities, the selector enforces two version boundaries:
|
||||
|
||||
* **`REQUIRED_MIN_SELECTOR_VERSION`**: the oldest selector version we support.
|
||||
* **`CURRENT_SELECTOR_VERSION`**: the current version of the selector logic.
|
||||
|
||||
## Version Compatibility Check
|
||||
|
||||
A model bundle is considered compatible if:
|
||||
|
||||
```python
|
||||
REQUIRED_MIN_SELECTOR_VERSION <= bundle["minimumSelectorVersion"] <= CURRENT_SELECTOR_VERSION
|
||||
```
|
||||
|
||||
This ensures:
|
||||
|
||||
* **Old bundles are rejected** if they rely on deprecated selector behavior.
|
||||
* **Future bundles are ignored** if they expect logic that the current selector doesn't yet implement.
|
||||
|
||||
## Handling Breaking Changes
|
||||
|
||||
When a deep change in selector behavior requires *all* models to be recompiled (e.g., due to a major architectural update), we:
|
||||
|
||||
1. **Create a new JSON file** (e.g., from `models_v4.json` to `models_v5.json`).
|
||||
2. **Assign updated `minimumSelectorVersion` values** in the new bundles.
|
||||
|
||||
This allows older selector versions to continue using the previous JSON file, while newer versions point to the new one, preventing cross-contamination.
|
||||
|
||||
## Why `REQUIRED_MIN_SELECTOR_VERSION` Still Matters
|
||||
|
||||
Despite using new JSON files to isolate breaking changes, `REQUIRED_MIN_SELECTOR_VERSION` plays a critical role:
|
||||
|
||||
### 1. **Cached Bundle Validation**
|
||||
|
||||
Model bundles are cached locally (e.g., in-memory or on disk). A user might have previously loaded a now-invalid bundle from an older JSON file.
|
||||
|
||||
`REQUIRED_MIN_SELECTOR_VERSION` prevents the selector from reloading or trusting that stale cached bundle, even if the original JSON is gone.
|
||||
|
||||
### 2. **Explicit Deprecation Boundary**
|
||||
|
||||
By raising `REQUIRED_MIN_SELECTOR_VERSION`, we declare older bundles officially unsupported, even if they technically still exist in a legacy JSON file.
|
||||
|
||||
### 3. **Avoiding Race Conditions**
|
||||
|
||||
Some clients may have intermittent access to updated JSONs. The runtime check ensures version compatibility is enforced independently of external file state.
|
||||
|
||||
## Summary
|
||||
|
||||
| Component | Purpose |
|
||||
| ------------------------------- | --------------------------------------------------------------------- |
|
||||
| `minimumSelectorVersion` | Declares the minimum selector version required to load a model bundle |
|
||||
| `REQUIRED_MIN_SELECTOR_VERSION` | Prevents loading bundles that are too old (e.g., from stale cache) |
|
||||
| `CURRENT_SELECTOR_VERSION` | Prevents loading bundles that are too new or forward-incompatible |
|
||||
| JSON file renaming | Isolates bundles by selector generation to handle full recompiles |
|
||||
|
||||
This layered strategy ensures safe evolution of the model selection system while maintaining backward compatibility and runtime protection against stale or incompatible bundles.
|
||||
@@ -115,7 +115,7 @@ class ModelCache:
|
||||
|
||||
class ModelFetcher:
|
||||
"""Handles fetching and caching of model data from remote source"""
|
||||
MODEL_URL = "https://docs.sunnypilot.ai/driving_models_v4.json"
|
||||
MODEL_URL = "https://docs.sunnypilot.ai/driving_models_v6.json"
|
||||
|
||||
def __init__(self, params: Params):
|
||||
self.params = params
|
||||
|
||||
@@ -19,8 +19,9 @@ from openpilot.system.hardware import PC
|
||||
from openpilot.system.hardware.hw import Paths
|
||||
from pathlib import Path
|
||||
|
||||
CURRENT_SELECTOR_VERSION = 7
|
||||
REQUIRED_MIN_SELECTOR_VERSION = 5
|
||||
# see the README.md for more details on the model selector versioning
|
||||
CURRENT_SELECTOR_VERSION = 8
|
||||
REQUIRED_MIN_SELECTOR_VERSION = 6
|
||||
|
||||
USE_ONNX = os.getenv('USE_ONNX', PC)
|
||||
|
||||
|
||||
+1
-1
Submodule tinygrad_repo updated: 519dec6677...7737cbb2a0
Reference in New Issue
Block a user