fix: add comprehensive error logging to find_model_files for verify command
The verify command was showing all models as "NOT DOWNLOADED" because find_model_files() was exiting silently without diagnostic output. This made debugging impossible. Changes: - Added detailed error messages to Python script in find_model_files() - Reports which directories were checked and why they failed - Shows actual vs expected paths for model/snapshots directories - Includes DEBUG messages showing which snapshot is being used - Warns when no files match the filter - Modified verify_model_download() to capture and display stderr - Changed from suppressing stderr (2>/dev/null) to capturing it (2>&1) - Filters ERROR/WARN/DEBUG prefixes from file paths - Logs diagnostic messages to stderr for visibility This will help identify the actual cache structure mismatch causing verification failures. 🤖 Generated with Claude Code (https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -384,26 +384,44 @@ cache_path = Path(cache_dir)
|
|||||||
repo_path = repo_id.replace('/', '--')
|
repo_path = repo_id.replace('/', '--')
|
||||||
model_dir = cache_path / 'models--{0}'.format(repo_path)
|
model_dir = cache_path / 'models--{0}'.format(repo_path)
|
||||||
|
|
||||||
# Fallback to hub/ subdirectory if direct path doesn't exist
|
# First attempt: direct path
|
||||||
|
model_dir_original = model_dir
|
||||||
if not model_dir.exists():
|
if not model_dir.exists():
|
||||||
|
# Fallback to hub/ subdirectory if direct path doesn't exist
|
||||||
model_dir = cache_path / 'hub' / 'models--{0}'.format(repo_path)
|
model_dir = cache_path / 'hub' / 'models--{0}'.format(repo_path)
|
||||||
|
|
||||||
if not model_dir.exists():
|
if not model_dir.exists():
|
||||||
|
sys.stderr.write('ERROR: Model directory not found for {0}\n'.format(repo_id))
|
||||||
|
sys.stderr.write(' Tried: {0}\n'.format(str(model_dir_original)))
|
||||||
|
sys.stderr.write(' Tried: {0}\n'.format(str(model_dir)))
|
||||||
|
sys.stderr.write(' Cache: {0}\n'.format(str(cache_path)))
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
# Find the latest snapshot
|
# Find the latest snapshot
|
||||||
snapshots_dir = model_dir / 'snapshots'
|
snapshots_dir = model_dir / 'snapshots'
|
||||||
if not snapshots_dir.exists():
|
if not snapshots_dir.exists():
|
||||||
|
sys.stderr.write('ERROR: Snapshots directory not found for {0}\n'.format(repo_id))
|
||||||
|
sys.stderr.write(' Model dir: {0}\n'.format(str(model_dir)))
|
||||||
|
sys.stderr.write(' Expected: {0}\n'.format(str(snapshots_dir)))
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
# Get all snapshot directories sorted by modification time
|
# Get all snapshot directories sorted by modification time
|
||||||
snapshots = sorted(snapshots_dir.iterdir(), key=lambda x: x.stat().st_mtime, reverse=True)
|
try:
|
||||||
|
snapshots = sorted(snapshots_dir.iterdir(), key=lambda x: x.stat().st_mtime, reverse=True)
|
||||||
|
except Exception as e:
|
||||||
|
sys.stderr.write('ERROR: Failed to list snapshots for {0}: {1}\n'.format(repo_id, str(e)))
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
if not snapshots:
|
if not snapshots:
|
||||||
|
sys.stderr.write('ERROR: No snapshots found for {0}\n'.format(repo_id))
|
||||||
|
sys.stderr.write(' Snapshots dir: {0}\n'.format(str(snapshots_dir)))
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
latest_snapshot = snapshots[0]
|
latest_snapshot = snapshots[0]
|
||||||
|
sys.stderr.write('DEBUG: Using snapshot {0}\n'.format(str(latest_snapshot)))
|
||||||
|
|
||||||
# Find model files
|
# Find model files
|
||||||
|
file_count = 0
|
||||||
for file_path in latest_snapshot.rglob('*'):
|
for file_path in latest_snapshot.rglob('*'):
|
||||||
if file_path.is_file():
|
if file_path.is_file():
|
||||||
# If filename filter is specified, only match those files
|
# If filename filter is specified, only match those files
|
||||||
@@ -417,6 +435,10 @@ for file_path in latest_snapshot.rglob('*'):
|
|||||||
if file_path.name.endswith('.json') and not file_path.name in important_files:
|
if file_path.name.endswith('.json') and not file_path.name in important_files:
|
||||||
continue
|
continue
|
||||||
print(str(file_path))
|
print(str(file_path))
|
||||||
|
file_count += 1
|
||||||
|
|
||||||
|
if file_count == 0:
|
||||||
|
sys.stderr.write('WARN: No files matched filter for {0} (filter: {1})\n'.format(repo_id, filename_filter))
|
||||||
EOPYFINDFIND
|
EOPYFINDFIND
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -617,10 +639,23 @@ verify_model_download() {
|
|||||||
local filename_filter="$3"
|
local filename_filter="$3"
|
||||||
|
|
||||||
# Find model files in cache
|
# Find model files in cache
|
||||||
|
# Capture both stdout (file paths) and stderr (error messages)
|
||||||
|
local find_output
|
||||||
|
find_output=$(find_model_files "$repo_id" "$filename_filter" 2>&1)
|
||||||
|
|
||||||
|
# Separate file paths from error/debug messages
|
||||||
local model_files
|
local model_files
|
||||||
model_files=$(find_model_files "$repo_id" "$filename_filter" 2>/dev/null)
|
model_files=$(echo "$find_output" | grep -v "^ERROR:" | grep -v "^WARN:" | grep -v "^DEBUG:")
|
||||||
|
|
||||||
|
# Extract error messages for logging
|
||||||
|
local error_msgs
|
||||||
|
error_msgs=$(echo "$find_output" | grep "^ERROR:\|^WARN:\|^DEBUG:")
|
||||||
|
|
||||||
if [[ -z "$model_files" ]]; then
|
if [[ -z "$model_files" ]]; then
|
||||||
|
# Log error messages to stderr if they exist
|
||||||
|
if [[ -n "$error_msgs" ]]; then
|
||||||
|
echo "$error_msgs" >&2
|
||||||
|
fi
|
||||||
echo "NOT_FOUND|0|0|"
|
echo "NOT_FOUND|0|0|"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user