| |
| """ |
| BitTransformerLM Dual Dashboard Launcher |
| ======================================== |
| |
| Launch both Flask and Gradio dashboards simultaneously for maximum flexibility. |
| - Flask Dashboard: http://localhost:5000 (Docker/production compatible) |
| - Gradio Dashboard: http://localhost:7860 (HuggingFace Spaces compatible) |
| - MCP Server: http://localhost:8000 (if enabled) |
| """ |
|
|
| import os |
| import sys |
| import time |
| import threading |
| import subprocess |
| from pathlib import Path |
|
|
| |
| sys.path.insert(0, str(Path(__file__).parent)) |
|
|
| def launch_flask_dashboard(): |
| """Launch the Flask dashboard in a separate thread.""" |
| print("π Starting Flask Dashboard...") |
| try: |
| os.environ["FLASK_ENV"] = "development" |
| |
| |
| from bit_transformer.dashboard_app import app |
| app.run(host="127.0.0.1", port=5000, debug=False, use_reloader=False) |
| except Exception as e: |
| print(f"β Flask dashboard failed: {e}") |
|
|
| def launch_gradio_dashboard(): |
| """Launch the Gradio dashboard in a separate thread.""" |
| print("π¨ Starting Gradio Dashboard...") |
| try: |
| from gradio_dashboard import run_gradio_server |
| run_gradio_server(host="127.0.0.1", port=7860, share=False) |
| except Exception as e: |
| print(f"β Gradio dashboard failed: {e}") |
|
|
| def launch_mcp_server(): |
| """Launch the MCP server if requested.""" |
| print("π Starting MCP Server...") |
| try: |
| from mcp_server import app as mcp_app |
| mcp_app.run(host="127.0.0.1", port=8000, debug=False, use_reloader=False) |
| except Exception as e: |
| print(f"β MCP server failed: {e}") |
|
|
| def main(): |
| """Main launcher function.""" |
| print("π BitTransformerLM Dual Dashboard Launcher") |
| print("=" * 50) |
| |
| |
| try: |
| import flask |
| import gradio |
| print(f"β
Flask {flask.__version__} and Gradio {gradio.__version__} are available") |
| except ImportError as e: |
| print(f"β Missing dependencies: {e}") |
| print("Please run: pip install -r requirements-gradio.txt") |
| return |
| |
| |
| enable_flask = os.getenv("ENABLE_FLASK", "true").lower() == "true" |
| enable_gradio = os.getenv("ENABLE_GRADIO", "true").lower() == "true" |
| enable_mcp = os.getenv("ENABLE_MCP", "false").lower() == "true" |
| |
| print(f"π§ Configuration:") |
| print(f" Flask Dashboard: {'Enabled' if enable_flask else 'Disabled'}") |
| print(f" Gradio Dashboard: {'Enabled' if enable_gradio else 'Disabled'}") |
| print(f" MCP Server: {'Enabled' if enable_mcp else 'Disabled'}") |
| print() |
| |
| |
| threads = [] |
| |
| if enable_flask: |
| flask_thread = threading.Thread(target=launch_flask_dashboard, daemon=True) |
| flask_thread.start() |
| threads.append(("Flask", flask_thread)) |
| time.sleep(2) |
| |
| if enable_mcp: |
| |
| os.environ["MCP_SERVER_ADDR"] = "http://localhost:8000" |
| mcp_thread = threading.Thread(target=launch_mcp_server, daemon=True) |
| mcp_thread.start() |
| threads.append(("MCP", mcp_thread)) |
| time.sleep(2) |
| |
| if enable_gradio: |
| gradio_thread = threading.Thread(target=launch_gradio_dashboard, daemon=True) |
| gradio_thread.start() |
| threads.append(("Gradio", gradio_thread)) |
| |
| |
| time.sleep(3) |
| |
| |
| print("π Access URLs:") |
| if enable_flask: |
| print(" Flask Dashboard: http://localhost:5000") |
| if enable_gradio: |
| print(" Gradio Dashboard: http://localhost:7860") |
| if enable_mcp: |
| print(" MCP Server: http://localhost:8000") |
| print() |
| |
| print("π‘ Usage Tips:") |
| print(" β’ Flask dashboard: Full Docker/production compatibility") |
| print(" β’ Gradio dashboard: HuggingFace Spaces ready interface") |
| print(" β’ MCP server: Programmatic API access") |
| print(" β’ Both dashboards share the same model state") |
| print(" β’ Press Ctrl+C to stop all services") |
| print() |
| |
| try: |
| |
| while True: |
| time.sleep(1) |
| except KeyboardInterrupt: |
| print("\nπ Shutting down all services...") |
| |
|
|
| if __name__ == "__main__": |
| import argparse |
| |
| parser = argparse.ArgumentParser(description="BitTransformerLM Dual Dashboard") |
| parser.add_argument("--flask-only", action="store_true", help="Launch only Flask dashboard") |
| parser.add_argument("--gradio-only", action="store_true", help="Launch only Gradio dashboard") |
| parser.add_argument("--enable-mcp", action="store_true", help="Enable MCP server") |
| |
| args = parser.parse_args() |
| |
| |
| if args.flask_only: |
| os.environ["ENABLE_FLASK"] = "true" |
| os.environ["ENABLE_GRADIO"] = "false" |
| elif args.gradio_only: |
| os.environ["ENABLE_FLASK"] = "false" |
| os.environ["ENABLE_GRADIO"] = "true" |
| |
| if args.enable_mcp: |
| os.environ["ENABLE_MCP"] = "true" |
| |
| main() |