PregoPal / modal_deploy /diagnose_volume.py
J.B-Lin
docs: pre-refactor backup - before tech log integration
d14aeea
Raw History Blame Contribute Delete
2.1 kB
"""
Diagnose: check model files in Modal Volume.
Run: modal run modal_deploy.diagnose_volume
"""
import os
import sys
MODEL_DIR = "/models"
MODEL_SUBDIR = f"{MODEL_DIR}/MiniCPM-o-4_5-gguf"
MAIN_GGUF = "MiniCPM-o-4_5-Q4_K_M.gguf"
def main():
print(f"{'='*60}")
print(f"MODEL_DIR: {MODEL_DIR}")
print(f"MODEL_SUBDIR: {MODEL_SUBDIR}")
print(f"{'='*60}")
# List all files
print(f"\n๐Ÿ“‚ Contents of {MODEL_SUBDIR}:")
for root, dirs, files in os.walk(MODEL_SUBDIR):
level = root.replace(MODEL_SUBDIR, '').count(os.sep)
indent = ' ' * 2 * level
print(f"{indent}{os.path.basename(root)}/")
subindent = ' ' * 2 * (level + 1)
for file in files:
fpath = os.path.join(root, file)
size = os.path.getsize(fpath)
print(f"{subindent}{file} ({size:,} bytes = {size/1024**3:.2f} GB)")
# Check main model
main_path = os.path.join(MODEL_SUBDIR, MAIN_GGUF)
if os.path.isfile(main_path):
size = os.path.getsize(main_path)
mb = size / (1024 * 1024)
print(f"\nโœ… {MAIN_GGUF}: {size:,} bytes ({mb:.0f} MB)")
if mb < 100:
print(f"โš ๏ธ WARNING: File seems too small for a GGUF model!")
else:
print(f"\nโŒ {MAIN_GGUF} NOT FOUND at {main_path}")
# Check vision mmproj
vision_path = os.path.join(MODEL_SUBDIR, "vision", "MiniCPM-o-4_5-vision-F16.gguf")
if os.path.isfile(vision_path):
size = os.path.getsize(vision_path)
mb = size / (1024 * 1024)
print(f"\nโœ… Vision mmproj: {size:,} bytes ({mb:.0f} MB)")
else:
print(f"\nโŒ Vision mmproj NOT FOUND at {vision_path}")
# Check first 8 bytes of main model (GGUF magic)
if os.path.isfile(main_path):
with open(main_path, "rb") as f:
magic = f.read(8)
print(f"\n๐Ÿ” First 8 bytes (magic): {magic.hex()}")
if magic[:4] == b"GGUF":
print(f"โœ… Valid GGUF header detected")
else:
print(f"โŒ Not a valid GGUF file!")
if __name__ == "__main__":
main()