Updates
This commit is contained in:
58
DreamCanvas/backend/routes.py
Normal file
58
DreamCanvas/backend/routes.py
Normal file
@@ -0,0 +1,58 @@
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from fastapi.responses import FileResponse, JSONResponse, StreamingResponse
|
||||
from .models import LLMRequest, PromptRequest
|
||||
from .services import generate_images, get_quick_prompts_data, ask_llm_service
|
||||
from PIL import Image
|
||||
import io
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
# Serve HTML file (index.html)
|
||||
@router.get("/")
|
||||
async def get_index():
|
||||
return FileResponse("ui/index.html")
|
||||
|
||||
# Endpoint to serve quick prompts from configuration file
|
||||
@router.get("/quick_prompts/")
|
||||
async def get_quick_prompts():
|
||||
try:
|
||||
prompts = get_quick_prompts_data()
|
||||
return JSONResponse(content=prompts)
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail="Error reading quick prompts file.")
|
||||
|
||||
# Endpoint to ask the LLM for creative ideas based on the positive prompt
|
||||
@router.post("/ask_llm/")
|
||||
async def ask_llm(request: LLMRequest):
|
||||
try:
|
||||
response = ask_llm_service(request.positive_prompt)
|
||||
return JSONResponse(content={"assistant_reply": response})
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail="Error interacting with LLM: " + str(e))
|
||||
|
||||
# Endpoint to generate images
|
||||
@router.post("/generate_images/")
|
||||
async def generate_images_api(request: PromptRequest):
|
||||
try:
|
||||
images, seed = await generate_images(
|
||||
request.positive_prompt,
|
||||
request.negative_prompt,
|
||||
request.steps,
|
||||
(request.width, request.height)
|
||||
)
|
||||
|
||||
# Convert images to a format FastAPI can return
|
||||
image_responses = []
|
||||
for node_id in images:
|
||||
for image_data in images[node_id]:
|
||||
img = Image.open(io.BytesIO(image_data))
|
||||
img_byte_arr = io.BytesIO()
|
||||
img.save(img_byte_arr, format='PNG')
|
||||
img_byte_arr.seek(0)
|
||||
|
||||
# Append the image response to a list
|
||||
image_responses.append(StreamingResponse(img_byte_arr, media_type="image/png"))
|
||||
|
||||
return image_responses[0] # Return the first image for simplicity
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Image generation failed: {str(e)}")
|
||||
Reference in New Issue
Block a user