|
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") |
|
|
|
|
|
@app.get( |
|
"/info", |
|
description="Get system information", |
|
summary="Get system information", |
|
operation_id="get_system_info", |
|
) |
|
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() |
|
|
|
|
|
@app.post( |
|
"/generate", |
|
description="Generate image from text prompt", |
|
summary="Text to image generation", |
|
operation_id="generate", |
|
) |
|
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, |
|
) |
|
|