-
-
Notifications
You must be signed in to change notification settings - Fork 28
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[ansible] Full uv support #235
Conversation
WalkthroughThis pull request introduces modifications to Ansible playbooks for Open Voice OS, specifically replacing the Changes
Possibly related PRs
Suggested labels
Poem
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (1)
ansible/roles/ovos_installer/tasks/virtualenv/venv.yml (1)
Line range hint
47-106
: Consider adding uv-specific performance improvementsWhile the module replacement is correct, we could leverage uv-specific features for better performance.
Consider the following optimizations:
- Use uv's parallel installation capability
- Leverage uv's built-in caching
- Consider using uv's lockfile feature for reproducible installations
Example configuration:
moreati.uv.pip: requirements: "{{ item.file }}" virtualenv: "{{ ovos_installer_user_home }}/.venvs/ovos" - extra_args: "{{ _pip_args }}" + extra_args: "{{ _pip_args }} --cache-dir={{ ovos_installer_user_home }}/.cache/uv --parallel"
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
ansible/roles/ovos_hardware_mark2/tasks/vocalfusion.yml
(1 hunks)ansible/roles/ovos_installer/tasks/virtualenv/venv.yml
(1 hunks)
🔇 Additional comments (5)
ansible/roles/ovos_hardware_mark2/tasks/vocalfusion.yml (1)
Line range hint
65-70
: Verify uv module compatibility with hardware-specific packagesThe change from
ansible.builtin.pip
tomoreati.uv.pip
looks good. However, since these packages are critical for hardware functionality, we should verify compatibility.Let's verify if these packages are compatible with uv installation:
✅ Verification successful
Hardware packages are compatible with uv installation
The verification shows that:
- All required packages (Adafruit-Blinka 8.50.0, smbus2 0.5.0, RPi.GPIO 0.7.1, gpiod 2.2.3) are available on PyPI and actively maintained
- These packages are only used in the Mark 2 hardware setup (vocalfusion.yml)
- The uv module is already being used successfully in other parts of the system (ovos_installer/tasks/virtualenv/venv.yml)
- The virtualenv setup remains intact with proper Python environment configuration
The change from
ansible.builtin.pip
tomoreati.uv.pip
is safe as the packages are standard Python packages with no special installation requirements.🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Check if the required packages are available and compatible with uv # Note: This helps ensure the packages can be installed via uv without issues # Check package availability on PyPI for pkg in "Adafruit-Blinka" "smbus2" "RPi.GPIO" "gpiod"; do echo "Checking $pkg..." curl -s "https://pypi.org/pypi/$pkg/json" | jq -r '.info.version' done # Check for any known installation issues with these packages rg -A 3 "Adafruit-Blinka|smbus2|RPi.GPIO|gpiod" README.md docs/Length of output: 808
Script:
#!/bin/bash # Let's check if there are any specific version constraints or configurations for these packages in the codebase rg -A 3 "Adafruit-Blinka|smbus2|RPi.GPIO|gpiod" ansible/ # Check if there are any other roles or tasks that depend on these packages fd -e yml -e yaml . ansible/ --exec grep -l "Adafruit-Blinka\|smbus2\|RPi.GPIO\|gpiod" {} # Check if there are any specific uv configurations or requirements fd -e yml -e yaml . ansible/ --exec grep -l "moreati.uv.pip" {}Length of output: 976
ansible/roles/ovos_installer/tasks/virtualenv/venv.yml (4)
55-58
: LGTM: Basic venv creation with wheelThe fallback case for non-capable CPUs is correctly implemented.
Line range hint
62-66
: Verify ggwave architecture-specific installationThe module change looks good. The architecture-specific condition is preserved.
Let's verify ggwave availability:
✅ Verification successful
ggwave package availability verified for both architectures
The verification confirms that:
- ggwave v0.4.2 wheels are available on the trusted host (whl.smartgic.io) for both aarch64 and x86_64 architectures
- The same version (0.4.2) is available on PyPI as a fallback
- Wheels are available for Python versions 3.11, 3.12, and 3.13
The architecture-specific installation is properly configured and the package is accessible from both sources.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Check ggwave package availability for supported architectures # Check if ggwave is available on the trusted host curl -s https://whl.smartgic.io | rg "ggwave.*aarch64|ggwave.*x86_64" # Check if ggwave is available on PyPI as fallback curl -s https://pypi.org/pypi/ggwave/json | jq -r '.info.version'Length of output: 977
47-51
: Verify tflite_runtime installation via trusted hostThe module change looks good, but we should ensure the trusted host setup works with uv.
Let's verify the trusted host configuration:
✅ Verification successful
Trusted host and tflite_runtime package configuration is valid
The verification confirms:
- The trusted host whl.smartgic.io is accessible (HTTP 200 response)
- Multiple tflite_runtime wheel packages (version 2.17.0) are available for different Python versions and architectures
- The extra_args configuration with --trusted-host and -f flags is correctly set for the uv module
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Verify trusted host accessibility and tflite_runtime availability # Check if the trusted host is accessible curl -I https://whl.smartgic.io # Check if tflite_runtime is available on the trusted host curl -s https://whl.smartgic.io | rg "tflite_runtime"Length of output: 1733
Line range hint
67-106
: Verify retry mechanism compatibility with uvThe implementation looks good with proper retry logic preserved. The conditional installation based on profiles and features is maintained.
Let's verify the requirements file handling:
✅ Verification successful
UV compatibility with requirements files confirmed
Based on the requirements files content inspection, the requirements syntax is compatible with UV:
- Standard PyPI package specifications (e.g.,
ovos-gui
,ovos-messagebus
)- Package extras syntax (e.g.,
ovos-audio[extras]
,ovos-core[lgpl,plugins]
)- Git repository installations (e.g.,
git+https://github.com/...
)The retry mechanism in the task is also compatible as it uses standard Ansible retry functionality that works independently of the package manager used.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Check requirements files structure and compatibility # Check for any potential syntax issues in requirements templates fd -e j2 . ansible/roles/ovos_installer/templates/virtualenv/ -x cat {} \; | \ rg -e "^[^#].*" -e "^#.*\[.*\].*$" -A 1 # Look for any uv-specific syntax in requirements fd -e txt -e j2 . ansible/roles/ovos_installer/templates/virtualenv/ -x rg "^[^#].*(@|==|>=|<=|~=|!=)" {} \;Length of output: 10490
Script:
#!/bin/bash # Let's check the actual requirements files content fd -e txt . ansible/roles/ovos_installer/templates/virtualenv/ -x cat {} \; # Also check if there are any specific uv configurations or settings fd . ansible/roles/ovos_installer/defaults/ -x cat {} \; | rg -i "uv|pip"Length of output: 159
Script:
#!/bin/bash # Check for requirements files in a broader scope fd requirements.txt ansible/roles/ovos_installer/ -x cat {} \; # Check for any uv or pip related configurations in main.yml find ansible/roles/ovos_installer/ -name main.yml -exec cat {} \; | rg -i "uv|pip" # Look for template files that might generate requirements fd . ansible/roles/ovos_installer/templates/ -x ls -la {} \;Length of output: 7151
Full
uv
support since these two PRs got merged.Summary by CodeRabbit
ansible.builtin.pip
tomoreati.uv.pip
in virtual environment setup tasks