# app.py (主入口文件) import os os.system("pip uninstall -y gradio") os.system("pip install gradio") from fastapi import FastAPI, File, UploadFile from fastapi.staticfiles import StaticFiles from fastapi.middleware.cors import CORSMiddleware import gradio as gr import uvicorn import aiofiles from typing import List import service # ---------- 原 controller.py 的核心逻辑 ---------- uploadPath = "./data/latents/" # 初始化 FastAPP app = FastAPI() # CORS 配置(保持与 controller.py 一致) app.add_middleware( CORSMiddleware, allow_origins=["http://localhost:5173"], # 前端开发地址 allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # ---------- 原 controller.py 的路由 ---------- @app.get("/dataList/{datatype}") async def read_data(datatype): return service.getALlData() # 示例数据,替换为实际 service 调用 # 定义带路径参数的 GET 请求处理函数 @app.get("/details/{name}") async def read_item(name: str = None): data = service.getListByName("integration_accuracy.csv", name) return data @app.post("/upload") async def upload_files(files: List[UploadFile] = File(...)): for file in files: save_path = os.path.join(uploadPath, file.filename) try: async with aiofiles.open(save_path, 'wb') as out_file: content = await file.read() await out_file.write(content) except Exception as e: return {"message": f"Error: {e}"} finally: await file.close() return {"success": True, "message": "Files uploaded"} # 挂载 Vue3 前端静态文件(部署时需要) app.mount("/", StaticFiles(directory="static", html=True), name="static") # ---------- 集成 Gradio 接口 ---------- def gradio_predict(text): return f"Processed: {text}" gradio_ui = gr.Interface( fn=gradio_predict, inputs=gr.Textbox(label="输入文本"), outputs=gr.Textbox(label="处理结果"), title="Gradio 交互界面" ) # 将 Gradio 挂载到 /gradio 路径 app = gr.mount_gradio_app(app, gradio_ui, path="/gradio") # ---------- 启动配置 ---------- if __name__ == "__main__": # Hugging Face Spaces 使用 PORT 环境变量 port = int(os.getenv("PORT", 8000)) uvicorn.run(app, host="0.0.0.0", port=port)