# app.py (主入口文件) import os os.system("pip uninstall -y gradio") os.system("pip install gradio==3.50.2") 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", 7860)) uvicorn.run(app, host="0.0.0.0", port=port)