Merge pull request #253 from presenton/feat/multiple-document-support
feat/multiple document support
This commit is contained in:
commit
ffe5478b08
3 changed files with 43 additions and 14 deletions
|
|
@ -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 = ""
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue