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, | |
) | |