RobotPai / scripts /quick_fix_requirements.py
atr0p05's picture
Upload 294 files
78402dd verified
#!/usr/bin/env python3
"""
Quick Fix for Common Requirements Issues
This script automatically fixes common version problems in requirements.txt
"""
import subprocess
import sys
import re
# Known problematic packages and their fixes
KNOWN_FIXES = {
"llama-index-readers-file==0.5.0": "llama-index-readers-file==0.4.9",
"duckduckgo-search==3.9.0": "duckduckgo-search==3.9.3",
"langchain-core==0.1.0": "langchain-core==0.3.60",
"langchain-openai==0.0.5": "langchain-openai==0.3.20",
"langchain-community==0.0.10": "langchain-community==0.3.20",
"langchain-experimental==0.0.49": "langchain-experimental==0.3.3",
"langchain-groq==0.0.1": "langchain-groq==0.3.0",
"langchain-tavily==0.0.1": "langchain-tavily==0.3.0",
"llama-index-embeddings-openai==0.1.0": "llama-index-embeddings-openai==0.4.1",
"llama-index-vector-stores-supabase==0.1.0": "llama-index-vector-stores-supabase==0.4.0",
}
def get_latest_version(package_name):
"""Get the latest version of a package from PyPI."""
try:
result = subprocess.run(
[sys.executable, "-m", "pip", "index", "versions", package_name],
capture_output=True,
text=True,
timeout=10
)
if result.returncode == 0:
# Parse the output to find available versions
lines = result.stdout.strip().split('\n')
for line in lines:
if 'Available versions:' in line:
versions = line.split(':', 1)[1].strip().split(', ')
# Filter out pre-release versions
stable_versions = [v for v in versions if not any(x in v for x in ['a', 'b', 'rc', 'dev'])]
if stable_versions:
return stable_versions[0]
elif versions:
return versions[0]
return None
except Exception:
return None
def fix_requirements_file(filename):
"""Fix common issues in requirements.txt file."""
print(f"Fixing requirements in {filename}...")
try:
with open(filename, 'r') as f:
lines = f.readlines()
except FileNotFoundError:
print(f"Error: File '{filename}' not found")
return False
# Backup original file
backup_filename = filename + '.backup'
with open(backup_filename, 'w') as f:
f.writelines(lines)
print(f"Created backup: {backup_filename}")
fixed_lines = []
changes_made = 0
for line in lines:
original_line = line
line_stripped = line.strip()
# Skip comments and empty lines
if not line_stripped or line_stripped.startswith('#'):
fixed_lines.append(original_line)
continue
# Check if line matches any known problematic package
fixed = False
for problem, fix in KNOWN_FIXES.items():
if line_stripped == problem:
fixed_lines.append(fix + '\n')
print(f" Fixed: {problem}{fix}")
changes_made += 1
fixed = True
break
if not fixed:
# Check for LangChain 0.1.x to 0.3.x migration
if 'langchain' in line_stripped and '==0.0.' in line_stripped:
package_match = re.match(r'^(langchain[a-zA-Z0-9-_]*)==0\.0\.\d+', line_stripped)
if package_match:
package_name = package_match.group(1)
# Try to get latest version
latest = get_latest_version(package_name)
if latest and latest.startswith('0.3'):
new_line = f"{package_name}=={latest}\n"
fixed_lines.append(new_line)
print(f" Updated: {line_stripped}{package_name}=={latest}")
changes_made += 1
fixed = True
# Check for llama-index version consistency
elif line_stripped.startswith('llama-index=='):
fixed_lines.append('llama-index==0.12.42\n')
if line_stripped != 'llama-index==0.12.42':
print(f" Updated: {line_stripped} → llama-index==0.12.42")
changes_made += 1
fixed = True
elif line_stripped.startswith('llama-index-core=='):
fixed_lines.append('llama-index-core==0.12.42\n')
if line_stripped != 'llama-index-core==0.12.42':
print(f" Updated: {line_stripped} → llama-index-core==0.12.42")
changes_made += 1
fixed = True
if not fixed:
fixed_lines.append(original_line)
# Write fixed file
with open(filename, 'w') as f:
f.writelines(fixed_lines)
print(f"\nTotal changes made: {changes_made}")
if changes_made > 0:
print(f"\n✅ Fixed {filename} successfully!")
print(f"Backup saved as {backup_filename}")
return True
else:
print("\n✅ No issues found in requirements.txt")
return True
def main():
"""Main function."""
filename = 'requirements.txt'
if len(sys.argv) > 1:
filename = sys.argv[1]
print("Requirements Quick Fix Tool")
print("==========================")
print("This tool fixes common version issues in requirements.txt\n")
if fix_requirements_file(filename):
print("\nNext steps:")
print("1. Review the changes")
print("2. Test installation: pip install -r requirements.txt")
print("3. If issues persist, use the verify script to check all versions")
if __name__ == "__main__":
main()