Spaces:
Running
Running
| import platform | |
| import uvicorn | |
| from backend.device import get_device_name | |
| from backend.models.device import DeviceInfo | |
| from constants import APP_VERSION, DEVICE | |
| from context import Context | |
| from fastapi import FastAPI, Request | |
| from fastapi_mcp import FastApiMCP | |
| from state import get_settings | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from models.interface_types import InterfaceType | |
| from fastapi.staticfiles import StaticFiles | |
| app_settings = get_settings() | |
| app = FastAPI( | |
| title="FastSD CPU", | |
| description="Fast stable diffusion on CPU", | |
| version=APP_VERSION, | |
| license_info={ | |
| "name": "MIT", | |
| "identifier": "MIT", | |
| }, | |
| describe_all_responses=True, | |
| describe_full_response_schema=True, | |
| ) | |
| origins = ["*"] | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=origins, | |
| allow_credentials=True, | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| print(app_settings.settings.lcm_diffusion_setting) | |
| context = Context(InterfaceType.API_SERVER) | |
| app.mount("/results", StaticFiles(directory="results"), name="results") | |
| async def info() -> dict: | |
| device_info = DeviceInfo( | |
| device_type=DEVICE, | |
| device_name=get_device_name(), | |
| os=platform.system(), | |
| platform=platform.platform(), | |
| processor=platform.processor(), | |
| ) | |
| return device_info.model_dump() | |
| async def generate( | |
| prompt: str, | |
| request: Request, | |
| ) -> str: | |
| """ | |
| Returns URL of the generated image for text prompt | |
| """ | |
| app_settings.settings.lcm_diffusion_setting.prompt = prompt | |
| images = context.generate_text_to_image(app_settings.settings) | |
| image_names = context.save_images( | |
| images, | |
| app_settings.settings, | |
| ) | |
| url = request.url_for("results", path=image_names[0]) | |
| image_url = f"The generated image available at the URL {url}" | |
| return image_url | |
| def start_mcp_server(port: int = 8000): | |
| mcp = FastApiMCP( | |
| app, | |
| name="FastSDCPU MCP", | |
| description="MCP server for FastSD CPU API", | |
| base_url=f"http://localhost:{port}", | |
| ) | |
| mcp.mount() | |
| uvicorn.run( | |
| app, | |
| host="0.0.0.0", | |
| port=port, | |
| ) | |