Skip to content

Commit 2128dec

Browse files
authored
Merge branch 'main' into feature/add-multitask-dit
2 parents b575632 + 292333c commit 2128dec

File tree

6 files changed

+320
-60
lines changed

6 files changed

+320
-60
lines changed

.github/ISSUE_TEMPLATE/bug-report.yml

Lines changed: 66 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -12,57 +12,92 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
name: "\U0001F41B Bug Report"
16-
description: Submit a bug report to help us improve LeRobot
15+
name: "🚀 Issue / Bug / Request"
16+
description: Report a bug, suggest an improvement, or ask a technical question.
1717
body:
1818
- type: markdown
1919
attributes:
2020
value: |
21-
Thanks for taking the time to submit a bug report! 🐛
22-
If this is not a bug related to the LeRobot library directly, but instead a general question about your code or the library specifically please use our [discord](https://discord.gg/s3KuuzsPFb).
21+
### Thanks for contributing to LeRobot! 🙌
22+
Please choose the most relevant sections below. If this is a general "how-to" question, consider our [Discord](https://discord.gg/s3KuuzsPFb) for faster community support.
23+
24+
- type: dropdown
25+
id: issue-type
26+
attributes:
27+
label: Issue Type
28+
description: What kind of ticket are you opening?
29+
options:
30+
- label: "🐛 Bug Report (Something isn't working)"
31+
- label: "💡 Feature Request / Improvement"
32+
- label: "❓ Technical Question"
33+
- label: "🧹 Maintenance / Documentation"
34+
validations:
35+
required: true
2336

2437
- type: textarea
2538
id: system-info
2639
attributes:
27-
label: System Info
28-
description: Please share your LeRobot configuration by running `lerobot-info` (if installed) or `python -m lerobot.scripts.display_sys_info` (if not installed) and pasting the output below.
40+
label: Environment & System Info
41+
description: |
42+
For bugs or technical questions, please run `lerobot-info` and paste the output.
43+
(Optional for feature requests).
2944
render: Shell
30-
placeholder: lerobot version, OS, python version, numpy version, torch version, and lerobot's configuration
45+
placeholder: lerobot version, OS, python version, etc.
46+
47+
- type: textarea
48+
id: description
3149
validations:
3250
required: true
33-
34-
- type: checkboxes
35-
id: information-scripts-examples
3651
attributes:
37-
label: Information
38-
description: 'The problem arises when using:'
39-
options:
40-
- label: "One of the scripts in the examples/ folder of LeRobot"
41-
- label: "My own task or dataset (give details below)"
52+
label: Description
53+
description: |
54+
Provide a clear summary of the issue or your proposal.
55+
- **Bugs:** What is happening?
56+
- **Features:** What is the goal/use case?
57+
- **Questions:** What are you trying to achieve?
58+
placeholder: |
59+
A clear and concise description of the issue or suggestion.
4260
4361
- type: textarea
44-
id: reproduction
62+
id: context-repro
4563
validations:
4664
required: true
4765
attributes:
48-
label: Reproduction
66+
label: Context & Reproduction
4967
description: |
50-
If needed, provide a simple code sample that reproduces the problem you ran into. It can be a Colab link or just a code snippet.
51-
Sharing error messages or stack traces could be useful as well!
52-
Important! Use code tags to correctly format your code. See https://help.github.com/en/github/writing-on-github/creating-and-highlighting-code-blocks#syntax-highlighting
53-
Try to avoid screenshots, as they are hard to read and don't allow copy-and-pasting.
54-
68+
Provide a code snippet, steps to reproduce a bug, or technical details about your proposal.
69+
Please use code blocks for logs and scripts.
5570
placeholder: |
56-
Steps to reproduce the behavior:
57-
58-
1.
59-
2.
60-
3.
71+
Steps to reproduce / Usage example:
72+
1.
73+
2.
74+
3.
6175
6276
- type: textarea
6377
id: expected-behavior
64-
validations:
65-
required: true
6678
attributes:
67-
label: Expected behavior
68-
description: "A clear and concise description of what you would expect to happen."
79+
label: Expected Behavior / Desired Outcome
80+
description: "Describe what you expected to happen or what the ideal solution looks like."
81+
placeholder: "e.g. The script should finish without OOM, or I would like a new flag --fast-mode."
82+
83+
- type: textarea
84+
id: logs
85+
attributes:
86+
label: Relevant logs or stack trace
87+
description: If applicable, paste relevant error logs here.
88+
render: Shell
89+
90+
- type: checkboxes
91+
id: extras
92+
attributes:
93+
label: Checklist
94+
options:
95+
- label: I have searched existing issues to ensure this isn't a duplicate.
96+
- label: I am using the latest version of the `main` branch.
97+
- label: (For bugs) I have verified this is not an environment-specific issue.
98+
99+
- type: textarea
100+
id: workaround
101+
attributes:
102+
label: Additional Info / Workarounds
103+
description: Anything else we should know? If you have a workaround, please share it!

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 40 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,54 @@
1-
## What this does
1+
## Title
22

3-
Explain what this PR does. Feel free to tag your PR with the appropriate label(s).
3+
Short, imperative summary (e.g., "fix(robots): handle None in sensor parser"). See [CONTRIBUTING.md](../CONTRIBUTING.md) for PR conventions.
44

5-
Examples:
6-
| Title | Label |
7-
|----------------------|-----------------|
8-
| Fixes #[issue] | (🐛 Bug) |
9-
| Adds new dataset | (🗃️ Dataset) |
10-
| Optimizes something | (⚡️ Performance) |
5+
## Type / Scope
116

12-
## How it was tested
7+
- **Type**: (Bug | Feature | Docs | Performance | Test | CI | Chore)
8+
- **Scope**: (optional — name of module or package affected)
139

14-
Explain/show how you tested your changes.
10+
## Summary / Motivation
1511

16-
Examples:
12+
- One-paragraph description of what changes and why.
13+
- Why this change is needed and any trade-offs or design notes.
1714

18-
- Added `test_something` in `tests/test_stuff.py`.
19-
- Added `new_feature` and checked that training converges with policy X on dataset/environment Y.
20-
- Optimized `some_function`, it now runs X times faster than previously.
15+
## Related issues
2116

22-
## How to checkout & try? (for the reviewer)
17+
- Fixes / Closes: # (if any)
18+
- Related: # (if any)
2319

24-
Provide a simple way for the reviewer to try out your changes.
20+
## What changed
2521

26-
Examples:
22+
- Short, concrete bullets of the modifications (files/behaviour).
23+
- Short note if this introduces breaking changes and migration steps.
2724

28-
```bash
29-
pytest -sx tests/test_stuff.py::test_something
30-
```
25+
## How was this tested
3126

32-
```bash
33-
lerobot-train --some.option=true
34-
```
27+
- Tests added: list new tests or test files.
28+
- Manual checks / dataset runs performed.
3529

36-
## SECTION TO REMOVE BEFORE SUBMITTING YOUR PR
30+
## How to run locally (reviewer)
3731

38-
**Note**: Anyone in the community is free to review the PR once the tests have passed. Feel free to tag
39-
members/contributors who may be interested in your PR. Try to avoid tagging more than 3 people.
32+
- Run the relevant tests:
4033

41-
**Note**: Before submitting this PR, please read the [contributor guideline](https://github.com/huggingface/lerobot/blob/main/CONTRIBUTING.md#submitting-a-pull-request-pr).
34+
```bash
35+
pytest -q tests/ -k <keyword>
36+
```
37+
38+
- Run a quick example or CLI (if applicable):
39+
40+
```bash
41+
lerobot-train --some.option=true
42+
```
43+
44+
## Checklist (required before merge)
45+
46+
- [ ] Linting/formatting run (`pre-commit run -a`)
47+
- [ ] All tests pass locally (`pytest`)
48+
- [ ] Documentation updated
49+
- [ ] CI is green
50+
51+
## Reviewer notes
52+
53+
- Anything the reviewer should focus on (performance, edge-cases, specific files) or general notes.
54+
- Anyone in the community is free to review the PR.
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
# Copyright 2025 The HuggingFace Inc. team. All rights reserved.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
# This workflow automatically labels issues based on their content.
16+
name: Issue Labeler
17+
on:
18+
# Trigger on new issues and edits to existing issues
19+
issues:
20+
types: [opened, edited]
21+
22+
permissions:
23+
contents: read
24+
issues: write
25+
26+
jobs:
27+
label-issue:
28+
name: Auto Label Issue
29+
runs-on: ubuntu-latest
30+
if: github.repository == 'huggingface/lerobot'
31+
steps:
32+
- uses: actions/github-script@v8
33+
with:
34+
script: |
35+
// Setup Input Text (Unified Title + Body)
36+
const body = (context.payload.issue.body || '');
37+
const title = (context.payload.issue.title || '');
38+
39+
// We keep a lowercased version for keyword matching
40+
const text = `${title}\n${body}`.toLowerCase();
41+
42+
const labelsToAdd = new Set();
43+
44+
// Helper: Simple regex test
45+
const matches = (re) => re.test(text);
46+
47+
// Issue Type Detection (Dropdowns & Explicit Headers)
48+
if (text.includes('bug report') || /\bissue type:.*bug/.test(text)) {
49+
labelsToAdd.add('bug');
50+
}
51+
if (text.includes('feature request') || /\bissue type:.*feature/.test(text)) {
52+
labelsToAdd.add('enhancement');
53+
}
54+
if (text.includes('technical question') || /\bissue type:.*question/.test(text)) {
55+
labelsToAdd.add('question');
56+
}
57+
if (text.includes('maintenance') || /\bissue type:.*maintenance/.test(text)) {
58+
labelsToAdd.add('documentation');
59+
}
60+
61+
// Keyword Heuristic
62+
63+
// Domain Specific
64+
if (matches(/example(s)?\b|script(s)?\b|sample(s)?\b|demo(s)?\b|notebook(s)?\b/i)) labelsToAdd.add('examples');
65+
if (matches(/dataset(s)?\b|data loader|data augmentation|data preprocessing/i)) labelsToAdd.add('dataset');
66+
if (matches(/mujoco|isaac|\bsimulation\b|\bsim /i)) labelsToAdd.add('simulation');
67+
if (matches(/train|loss|optimizer|backward|gradient|wandb|sac\b/i)) labelsToAdd.add('training');
68+
if (matches(/rerun|plot|video|render|visualiz|gif/i)) labelsToAdd.add('visualization');
69+
if (matches(/camera|realsense|lidar|depth|sensor|imu|microphone|rgbd/i)) labelsToAdd.add('sensors');
70+
if (matches(/aloha|koch|so-100|so100|mobile|teleop|manipulator|robot(s)?\b/i)) labelsToAdd.add('robots');
71+
if (matches(/teleop|teleoperator|controller|leader|follower|joystick|gamepad/i)) labelsToAdd.add('teleoperators');
72+
if (matches(/policy|policies|p0licy/i)) labelsToAdd.add('policies');
73+
if (matches(/processor(s)?\b|implement.*processor|processor pipeline/i)) labelsToAdd.add('processor');
74+
if (matches(/eval|evaluate|evaluation|metric(s)?\b|score|benchmark/i)) labelsToAdd.add('evaluation');
75+
76+
// Infrastructure & Code Quality
77+
if (matches(/test|pytest|unittest|failing test/i)) labelsToAdd.add('tests');
78+
if (matches(/ci|github actions|workflow|gha|action(s)?\b|pipeline/i)) {
79+
labelsToAdd.add('CI');
80+
labelsToAdd.add('github_actions');
81+
}
82+
if (matches(/perf|latency|benchmark|throughput|fps|speed|performance|benchmarking/i)) labelsToAdd.add('performance');
83+
if (matches(/dependency|requirements|pip|conda|install error|importerror|package not found/i)) labelsToAdd.add('dependencies');
84+
if (matches(/python\b|pyproject|requirements(\.txt)?|pip install|typing error/i)) labelsToAdd.add('python');
85+
86+
// Documentation & Meta
87+
if (matches(/doc|documentation|docs|readme|typo|how to/i)) labelsToAdd.add('documentation');
88+
if (matches(/refactor|cleanup|restructure|rename|modernize code/i)) labelsToAdd.add('refactor');
89+
if (matches(/release|changelog|version bump|cut a release|tag v/i)) labelsToAdd.add('release');
90+
91+
// Fixed: "BREAKING CHANGE" must be lowercase in regex because 'text' is lowercase
92+
if (matches(/breaking change|breaking:|major change/i)) labelsToAdd.add('breaking change');
93+
94+
// Apply Labels
95+
const labels = Array.from(labelsToAdd).filter(Boolean);
96+
97+
if (labels.length > 0) {
98+
console.log(`Adding labels: ${labels.join(', ')}`);
99+
await github.rest.issues.addLabels({
100+
owner: context.repo.owner,
101+
repo: context.repo.repo,
102+
issue_number: context.issue.number,
103+
labels,
104+
});
105+
}

.github/workflows/labeler.yml

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
# Copyright 2025 The HuggingFace Inc. team. All rights reserved.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
CI:
16+
- changed-files:
17+
- any-glob-to-any-file:
18+
- '.github/**'
19+
- 'docker/**'
20+
21+
github_actions:
22+
- changed-files:
23+
- any-glob-to-any-file: '.github/**'
24+
25+
documentation:
26+
- changed-files:
27+
- any-glob-to-any-file:
28+
- '**/*.md'
29+
- 'docs/**'
30+
31+
examples:
32+
- changed-files:
33+
- any-glob-to-any-file: 'examples/**'
34+
35+
tests:
36+
- changed-files:
37+
- any-glob-to-any-file: 'tests/**'
38+
39+
sensors:
40+
- changed-files:
41+
- any-glob-to-any-file: 'src/lerobot/cameras/**'
42+
43+
configuration:
44+
- changed-files:
45+
- any-glob-to-any-file: 'src/lerobot/configs/**'
46+
47+
dataset:
48+
- changed-files:
49+
- any-glob-to-any-file: 'src/lerobot/datasets/**'
50+
51+
evaluation:
52+
- changed-files:
53+
- any-glob-to-any-file: 'src/lerobot/envs/**'
54+
55+
robots:
56+
- changed-files:
57+
- any-glob-to-any-file:
58+
- 'src/lerobot/teleoperators/**'
59+
- 'src/lerobot/robots/**'
60+
- 'src/lerobot/motors/**'
61+
62+
policies:
63+
- changed-files:
64+
- any-glob-to-any-file: 'src/lerobot/policies/**'
65+
66+
processor:
67+
- changed-files:
68+
- any-glob-to-any-file: 'src/lerobot/processor/**'

0 commit comments

Comments
 (0)