from __future__ import annotations import shutil from pathlib import Path SEARCH_ROOTS = [ Path.home() / "Downloads", Path.home() / "models", Path.home() / "Models", Path.home() / ".cache", Path.home() / ".cache" / "lm-studio", Path.home() / ".lmstudio", Path.home() / ".lmstudio-home", Path.home() / ".llamafile", ] def main() -> None: add_lmstudio_home_pointer() server = shutil.which("llama-server") or shutil.which("llama-server.exe") cli = shutil.which("llama-cli") or shutil.which("llama-cli.exe") print(f"llama-server: {server or 'not found on PATH'}") print(f"llama-cli: {cli or 'not found on PATH'}") print() print("Likely Gemma-family GGUF models:") for model in find_models(limit=20): print(model) def find_models(limit: int) -> list[Path]: found: list[Path] = [] for root in SEARCH_ROOTS: if not root.exists(): continue try: for path in bounded_rglob(root, "*.gguf", max_dirs=3000): name = path.name.lower() if "gemma" in name or "4b" in name: found.append(path) if len(found) >= limit: return found except OSError: continue return found def add_lmstudio_home_pointer() -> None: pointer = Path.home() / ".lmstudio-home-pointer" if not pointer.exists(): return try: target = Path(pointer.read_text(encoding="utf-8").strip()) except OSError: return if target.exists() and target not in SEARCH_ROOTS: SEARCH_ROOTS.append(target) def bounded_rglob(root: Path, pattern: str, max_dirs: int) -> list[Path]: results: list[Path] = [] pending = [root] visited = 0 while pending and visited < max_dirs: current = pending.pop() visited += 1 try: for child in current.iterdir(): if child.is_dir(): pending.append(child) elif child.match(pattern): results.append(child) except OSError: continue return results if __name__ == "__main__": main()