# SPDX-License-Identifier: AGPL-3.0-only # Copyright 2026-present the Unsloth AI Inc. team. All rights reserved. See /studio/LICENSE.AGPL-3.0 """ Colab-specific helpers for running Unsloth Studio. Uses Colab's built-in proxy - no external tunneling needed! """ from pathlib import Path import sys # Add backend to path early so local modules like loggers can be imported backend_path = str(Path(__file__).parent) if backend_path not in sys.path: sys.path.insert(0, backend_path) from loggers import get_logger logger = get_logger(__name__) def get_colab_url(port: int = 8000) -> str: """ Get the actual Colab proxy URL for a port. """ try: from google.colab.output import eval_js # Use Colab's proxy mechanism url = eval_js(f"google.colab.kernel.proxyPort({port})", timeout_sec = 5) return url if url else f"http://localhost:{port}" except Exception as e: logger.info(f"Note: Could not get Colab URL ({e})") return f"http://localhost:{port}" def show_link(port: int = 8000): """Display a styled clickable link to the UI.""" from IPython.display import display, HTML # Get real Colab proxy URL url = get_colab_url(port) short_url = ( url[: url.index("-", url.index("8000-") + 5) + 1] + "..." if "8000-" in url else url ) html = f"""
""" display(HTML(html)) def start(port: int = 8000): """ Start Unsloth Studio server in Colab and display the URL. Usage: from colab import start start() """ import sys logger.info("🦥 Starting Unsloth Studio...") logger.info(" Loading backend...") from run import run_server # Auto-detect frontend path repo_root = Path(__file__).parent.parent frontend_path = repo_root / "frontend" / "dist" if not frontend_path.exists(): logger.info("❌ Frontend not built! Please run the setup cell first.") return logger.info(" Starting server...") # Start server silently run_server(host = "0.0.0.0", port = port, frontend_path = frontend_path, silent = True) logger.info(" Server started!") # Show the clickable link with real URL show_link(port) if __name__ == "__main__": start()