Spaces:
Running
Running
#!/usr/bin/env python3 | |
""" | |
Minimal version of the AI Knowledge Distillation Platform | |
For testing and debugging purposes | |
""" | |
import os | |
import sys | |
import logging | |
from datetime import datetime | |
from pathlib import Path | |
# Add src to path | |
sys.path.insert(0, str(Path(__file__).parent / "src")) | |
from fastapi import FastAPI, Request, HTTPException | |
from fastapi.staticfiles import StaticFiles | |
from fastapi.templating import Jinja2Templates | |
from fastapi.responses import HTMLResponse, JSONResponse | |
from fastapi.middleware.cors import CORSMiddleware | |
import uvicorn | |
# Setup basic logging | |
logging.basicConfig(level=logging.INFO) | |
logger = logging.getLogger(__name__) | |
# Initialize FastAPI app | |
app = FastAPI( | |
title="AI Knowledge Distillation Platform", | |
description="Minimal version for testing", | |
version="2.0.0-minimal" | |
) | |
# Add CORS middleware | |
app.add_middleware( | |
CORSMiddleware, | |
allow_origins=["*"], | |
allow_credentials=True, | |
allow_methods=["*"], | |
allow_headers=["*"], | |
) | |
# Create directories | |
for directory in ["static", "templates", "cache", "database", "logs"]: | |
Path(directory).mkdir(exist_ok=True) | |
# Mount static files and templates | |
try: | |
app.mount("/static", StaticFiles(directory="static"), name="static") | |
templates = Jinja2Templates(directory="templates") | |
except Exception as e: | |
logger.warning(f"Could not mount static files: {e}") | |
templates = None | |
# Initialize components with error handling | |
memory_manager = None | |
token_manager = None | |
medical_dataset_manager = None | |
try: | |
from src.core.memory_manager import AdvancedMemoryManager | |
memory_manager = AdvancedMemoryManager(max_memory_gb=14.0) | |
logger.info("β Memory manager initialized") | |
except Exception as e: | |
logger.warning(f"β οΈ Could not initialize memory manager: {e}") | |
try: | |
from src.core.token_manager import TokenManager | |
token_manager = TokenManager() | |
logger.info("β Token manager initialized") | |
except Exception as e: | |
logger.warning(f"β οΈ Could not initialize token manager: {e}") | |
try: | |
from src.medical.medical_datasets import MedicalDatasetManager | |
if memory_manager: | |
medical_dataset_manager = MedicalDatasetManager(memory_manager) | |
logger.info("β Medical dataset manager initialized") | |
except Exception as e: | |
logger.warning(f"β οΈ Could not initialize medical dataset manager: {e}") | |
async def read_root(): | |
"""Serve the main web interface""" | |
if templates: | |
try: | |
return templates.TemplateResponse("index.html", {"request": {}}) | |
except Exception as e: | |
logger.error(f"Template error: {e}") | |
return HTMLResponse("<h1>AI Knowledge Distillation Platform</h1><p>Minimal version running</p>") | |
else: | |
return HTMLResponse("<h1>AI Knowledge Distillation Platform</h1><p>Minimal version running</p>") | |
async def health_check(): | |
"""Health check endpoint""" | |
try: | |
status = { | |
"status": "healthy", | |
"version": "2.0.0-minimal", | |
"timestamp": datetime.now().isoformat(), | |
"components": { | |
"memory_manager": memory_manager is not None, | |
"token_manager": token_manager is not None, | |
"medical_datasets": medical_dataset_manager is not None, | |
"templates": templates is not None | |
} | |
} | |
if memory_manager: | |
try: | |
memory_info = memory_manager.get_memory_info() | |
status["memory"] = { | |
"usage_percent": memory_info.get("process_memory_percent", 0), | |
"available_gb": memory_info.get("system_memory_available_gb", 0) | |
} | |
except Exception as e: | |
status["memory"] = {"error": str(e)} | |
return status | |
except Exception as e: | |
logger.error(f"Health check failed: {e}") | |
return { | |
"status": "unhealthy", | |
"error": str(e), | |
"timestamp": datetime.now().isoformat() | |
} | |
async def token_management_page(request: Request): | |
"""Token management page""" | |
if templates: | |
try: | |
return templates.TemplateResponse("token-management.html", {"request": request}) | |
except Exception as e: | |
logger.error(f"Template error: {e}") | |
return HTMLResponse("<h1>Token Management</h1><p>Template not available</p>") | |
else: | |
return HTMLResponse("<h1>Token Management</h1><p>Templates not available</p>") | |
async def medical_datasets_page(request: Request): | |
"""Medical datasets page""" | |
if templates: | |
try: | |
return templates.TemplateResponse("medical-datasets.html", {"request": request}) | |
except Exception as e: | |
logger.error(f"Template error: {e}") | |
return HTMLResponse("<h1>Medical Datasets</h1><p>Template not available</p>") | |
else: | |
return HTMLResponse("<h1>Medical Datasets</h1><p>Templates not available</p>") | |
async def list_tokens(): | |
"""List all saved tokens""" | |
if token_manager: | |
try: | |
tokens = token_manager.list_tokens() | |
return {"tokens": tokens} | |
except Exception as e: | |
logger.error(f"Error listing tokens: {e}") | |
raise HTTPException(status_code=500, detail=str(e)) | |
else: | |
return {"tokens": [], "error": "Token manager not available"} | |
async def list_medical_datasets(): | |
"""List supported medical datasets""" | |
if medical_dataset_manager: | |
try: | |
datasets = medical_dataset_manager.list_supported_datasets() | |
return {"datasets": datasets} | |
except Exception as e: | |
logger.error(f"Error listing medical datasets: {e}") | |
raise HTTPException(status_code=500, detail=str(e)) | |
else: | |
return {"datasets": [], "error": "Medical dataset manager not available"} | |
async def get_memory_info(): | |
"""Get current memory information""" | |
if memory_manager: | |
try: | |
memory_info = memory_manager.get_memory_info() | |
return memory_info | |
except Exception as e: | |
logger.error(f"Error getting memory info: {e}") | |
raise HTTPException(status_code=500, detail=str(e)) | |
else: | |
return {"error": "Memory manager not available"} | |
async def debug_info(): | |
"""Debug information""" | |
import psutil | |
return { | |
"python_version": sys.version, | |
"platform": sys.platform, | |
"memory_gb": psutil.virtual_memory().total / (1024**3), | |
"cpu_cores": os.cpu_count(), | |
"working_directory": str(Path.cwd()), | |
"python_path": sys.path[:3], # First 3 entries | |
"environment_variables": { | |
"OMP_NUM_THREADS": os.getenv("OMP_NUM_THREADS"), | |
"MKL_NUM_THREADS": os.getenv("MKL_NUM_THREADS"), | |
"HF_TOKEN": "***" if os.getenv("HF_TOKEN") else None | |
}, | |
"components_status": { | |
"memory_manager": memory_manager is not None, | |
"token_manager": token_manager is not None, | |
"medical_datasets": medical_dataset_manager is not None, | |
"templates": templates is not None | |
} | |
} | |
if __name__ == "__main__": | |
print("π Starting AI Knowledge Distillation Platform (Minimal)") | |
print("π Access at: http://localhost:8000") | |
print("π Debug info: http://localhost:8000/debug") | |
print("π Health check: http://localhost:8000/health") | |
uvicorn.run( | |
app, | |
host="0.0.0.0", | |
port=8000, | |
log_level="info" | |
) | |