From 5fd3b4adac3138f68c4d3f592d1b43942f3806ff Mon Sep 17 00:00:00 2001 From: discountchubbs Date: Thu, 13 Aug 2026 10:39:13 -0700 Subject: [PATCH] reduce flakiness by using artifact-name from build-model to regex, speed up pub b y checking the name before trying to clone and publish again --- .../workflows/build-all-tinygrad-models.yaml | 25 +++++++++++++------ openpilot/selfdrive/modeld/modeld.py | 3 +++ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build-all-tinygrad-models.yaml b/.github/workflows/build-all-tinygrad-models.yaml index 3c87bbb85a..30ab1b4b4a 100644 --- a/.github/workflows/build-all-tinygrad-models.yaml +++ b/.github/workflows/build-all-tinygrad-models.yaml @@ -138,20 +138,21 @@ jobs: retry_failed_models: needs: [setup, get_and_build] runs-on: ubuntu-latest - if: ${{ needs.setup.result != 'failure' && !cancelled() }} + if: ${{ !cancelled() && needs.setup.result == 'success' && (needs.get_and_build.result == 'success' || needs.get_and_build.result == 'failure') }} outputs: retry_matrix: ${{ steps.set-retry-matrix.outputs.retry_matrix }} steps: - uses: actions/download-artifact@v4 with: - pattern: model-* + pattern: artifact-name-* path: output + continue-on-error: true - id: set-retry-matrix run: | echo '${{ needs.setup.outputs.model_matrix }}' > matrix.json - built=(); while IFS= read -r line; do built+=("$line"); done < <( - find output -maxdepth 1 -name 'model-*' -printf "%f\n" | sed -E 's/^model-//' | sed -E 's/-[0-9]+$//' | sed -E 's/ \([^)]*\)//' | awk '{gsub(/^ +| +$/, ""); print}' + built=(); while IFS= read -r line; do [ -n "$line" ] && built+=("$line"); done < <( + find output -maxdepth 1 -name 'artifact-name-*' -printf "%f\n" 2>/dev/null | sed -E 's/^artifact-name-//' | awk '{gsub(/^ +| +$/, ""); print}' ) jq -c --argjson built "$(printf '%s\n' "${built[@]}" | jq -R . | jq -s .)" \ 'map(select(.display_name as $n | ($built | index($n | gsub("^ +| +$"; "")) | not)))' matrix.json > retry_matrix.json @@ -159,7 +160,7 @@ jobs: retry_get_and_build: needs: [setup, get_and_build, retry_failed_models] - if: ${{ needs.get_and_build.result == 'failure' || (needs.retry_failed_models.outputs.retry_matrix != '[]' && needs.retry_failed_models.outputs.retry_matrix != '') }} + if: ${{ !cancelled() && needs.retry_failed_models.result == 'success' && needs.retry_failed_models.outputs.retry_matrix != '[]' && needs.retry_failed_models.outputs.retry_matrix != '' }} strategy: matrix: model: ${{ fromJson(needs.retry_failed_models.outputs.retry_matrix) }} @@ -178,7 +179,7 @@ jobs: publish_models: name: Publish models sequentially needs: [setup, get_and_build, retry_failed_models, retry_get_and_build] - if: ${{ !cancelled() && (needs.get_and_build.result != 'failure' || needs.retry_get_and_build.result == 'success' || (needs.retry_failed_models.outputs.retry_matrix != '[]' && needs.retry_failed_models.outputs.retry_matrix != '')) }} + if: ${{ !cancelled() && needs.setup.result == 'success' && (needs.get_and_build.result == 'success' || needs.get_and_build.result == 'failure') && (needs.retry_failed_models.result == 'success' || needs.retry_failed_models.result == 'failure' || needs.retry_failed_models.result == 'skipped') && (needs.retry_get_and_build.result == 'success' || needs.retry_get_and_build.result == 'failure' || needs.retry_get_and_build.result == 'skipped') }} runs-on: ubuntu-latest strategy: fail-fast: false @@ -232,24 +233,29 @@ jobs: fi - name: Download artifact name file + id: download-name uses: actions/download-artifact@v4 + continue-on-error: true with: name: artifact-name-${{ env.ARTIFACT_NAME_INPUT }} path: artifact_name - name: Read artifact name id: read-artifact-name + if: steps.download-name.outcome == 'success' run: | ARTIFACT_NAME=$(cat artifact_name/artifact_name.txt) echo "artifact_name=$ARTIFACT_NAME" >> $GITHUB_OUTPUT - name: Download model artifact + if: steps.download-name.outcome == 'success' uses: actions/download-artifact@v4 with: name: ${{ steps.read-artifact-name.outputs.artifact_name }} path: output - name: Copy model artifacts to gitlab + if: steps.download-name.outcome == 'success' env: ARTIFACT_NAME: ${{ steps.read-artifact-name.outputs.artifact_name }} run: | @@ -271,6 +277,7 @@ jobs: done - name: Push recompiled dir to GitLab + if: steps.download-name.outcome == 'success' env: GITLAB_SSH_PRIVATE_KEY: ${{ secrets.GITLAB_SSH_PRIVATE_KEY }} run: | @@ -285,11 +292,14 @@ jobs: git config --global user.email "action@github.com" git commit -m "Update $RECOMPILED_DIR with model from build-all-tinygrad-models" || echo "No changes to commit" git push origin main - - run: | + - name: Pull gh-pages + if: steps.download-name.outcome == 'success' + run: | cd docs git pull origin gh-pages - name: update json + if: steps.download-name.outcome == 'success' run: | ARGS="" [ -n "${{ inputs.set_min_version }}" ] && ARGS="$ARGS --set-min-version \"${{ inputs.set_min_version }}\"" @@ -301,6 +311,7 @@ jobs: $ARGS - name: Push updated json to GitHub + if: steps.download-name.outcome == 'success' run: | cd docs git config --global user.name "GitHub Action" diff --git a/openpilot/selfdrive/modeld/modeld.py b/openpilot/selfdrive/modeld/modeld.py index 2906d20dab..18e0cb502b 100755 --- a/openpilot/selfdrive/modeld/modeld.py +++ b/openpilot/selfdrive/modeld/modeld.py @@ -392,6 +392,7 @@ def main(demo=False): modelv2_send = messaging.new_message('modelV2') drivingdata_send = messaging.new_message('drivingModelData') posenet_send = messaging.new_message('cameraOdometry') + mdv2sp_send = messaging.new_message('modelDataV2SP') action = get_action_from_model(model_output, prev_action, lat_action_t, long_action_t, v_ego) prev_action = action @@ -408,12 +409,14 @@ def main(demo=False): DH.update(sm['carState'], sm['carControl'].latActive, lane_change_prob, left_edge, right_edge) modelv2_send.modelV2.meta.laneChangeState = DH.lane_change_state modelv2_send.modelV2.meta.laneChangeDirection = DH.lane_change_direction + mdv2sp_send.modelDataV2SP.laneTurnDirection = DH.lane_turn_direction fill_driving_model_data(drivingdata_send, modelv2_send) fill_pose_msg(posenet_send, model_output, meta_main.frame_id, vipc_dropped_frames, meta_main.timestamp_eof, extrinsics_calibration_seen) pm.send('modelV2', modelv2_send) pm.send('drivingModelData', drivingdata_send) pm.send('cameraOdometry', posenet_send) + pm.send('modelDataV2SP', mdv2sp_send) last_vipc_frame_id = meta_main.frame_id if chestnut_state is not None and run_count % round(ModelConstants.MODEL_RUN_FREQ / SERVICE_LIST['chestnutState'].frequency) == 0: