diff --git a/servers/fastapi/api/v1/ppt/endpoints/outlines.py b/servers/fastapi/api/v1/ppt/endpoints/outlines.py index d5a2b963..5f485b7c 100644 --- a/servers/fastapi/api/v1/ppt/endpoints/outlines.py +++ b/servers/fastapi/api/v1/ppt/endpoints/outlines.py @@ -38,7 +38,7 @@ async def stream_outlines( documents_loader = DocumentsLoader(file_paths=presentation.file_paths) await documents_loader.load_documents(temp_dir) documents = documents_loader.documents - if documents: + if documents and len(documents) == 1: additional_context = documents[0] chunker = ScoreBasedChunker() try: @@ -50,6 +50,8 @@ async def stream_outlines( ) except Exception as e: print(e) + else: + additional_context = "\n\n".join(documents) if not presentation_outlines: presentation_outlines_text = "" diff --git a/servers/fastapi/api/v1/ppt/endpoints/presentation.py b/servers/fastapi/api/v1/ppt/endpoints/presentation.py index e42c58a5..440f7c89 100644 --- a/servers/fastapi/api/v1/ppt/endpoints/presentation.py +++ b/servers/fastapi/api/v1/ppt/endpoints/presentation.py @@ -20,6 +20,8 @@ from models.presentation_layout import PresentationLayoutModel from models.presentation_structure_model import PresentationStructureModel from models.presentation_with_slides import PresentationWithSlides +from services.documents_loader import DocumentsLoader +from services.score_based_chunker import ScoreBasedChunker from utils.get_layout_by_name import get_layout_by_name from services.image_generation_service import ImageGenerationService from utils.dict_utils import deep_update @@ -321,6 +323,21 @@ async def generate_presentation_api( presentation_outlines = None additional_context = "" + # Process files + if request.files: + documents_loader = DocumentsLoader(file_paths=request.files) + await documents_loader.load_documents() + documents = documents_loader.documents + if documents and len(documents) == 1: + additional_context = documents[0] + chunker = ScoreBasedChunker() + chunks = await chunker.get_n_chunks(documents[0], request.n_slides) + presentation_outlines = PresentationOutlineModel( + slides=[chunk.to_slide_outline() for chunk in chunks] + ) + elif documents: + additional_context = "\n\n".join(documents) + if not presentation_outlines: presentation_outlines_text = "" async for chunk in generate_ppt_outline( @@ -331,15 +348,16 @@ async def generate_presentation_api( ): presentation_outlines_text += chunk - try: - presentation_outlines_json = json.loads(presentation_outlines_text) - except Exception as e: - print(e) - raise HTTPException( - status_code=400, - detail="Failed to generate presentation outlines. Please try again.", - ) - presentation_outlines = PresentationOutlineModel(**presentation_outlines_json) + try: + presentation_outlines_json = json.loads(presentation_outlines_text) + except Exception as e: + print(e) + raise HTTPException( + status_code=400, + detail="Failed to generate presentation outlines. Please try again.", + ) + presentation_outlines = PresentationOutlineModel(**presentation_outlines_json) + outlines = presentation_outlines.slides[: request.n_slides] total_outlines = len(outlines) diff --git a/servers/fastapi/models/generate_presentation_request.py b/servers/fastapi/models/generate_presentation_request.py index f8c65670..a38f6a2e 100644 --- a/servers/fastapi/models/generate_presentation_request.py +++ b/servers/fastapi/models/generate_presentation_request.py @@ -1,10 +1,19 @@ -from typing import Literal, Optional +from typing import List, Literal, Optional from pydantic import BaseModel, Field class GeneratePresentationRequest(BaseModel): prompt: str = Field(..., description="The prompt for generating the presentation") n_slides: int = Field(default=8, description="Number of slides to generate") - language: str = Field(default="English", description="Language for the presentation") - template: str = Field(default="general", description="Template to use for the presentation") - export_as: Literal["pptx", "pdf"] = Field(default="pptx", description="Export format") + language: str = Field( + default="English", description="Language for the presentation" + ) + template: str = Field( + default="general", description="Template to use for the presentation" + ) + files: Optional[List[str]] = Field( + default=None, description="Files to use for the presentation" + ) + export_as: Literal["pptx", "pdf"] = Field( + default="pptx", description="Export format" + )