diff --git a/servers/fastapi/api/v1/ppt/endpoints/outlines.py b/servers/fastapi/api/v1/ppt/endpoints/outlines.py index b0ec47af..f1eff7ba 100644 --- a/servers/fastapi/api/v1/ppt/endpoints/outlines.py +++ b/servers/fastapi/api/v1/ppt/endpoints/outlines.py @@ -87,7 +87,8 @@ async def stream_outlines( presentation.outlines = presentation_outlines.model_dump() presentation.title = ( - presentation_outlines.slides[0][:50] + presentation_outlines.slides[0] + .content[:50] .replace("#", "") .replace("/", "") .replace("\\", "") diff --git a/servers/fastapi/models/document_chunk.py b/servers/fastapi/models/document_chunk.py index 6861e4fb..a7500be9 100644 --- a/servers/fastapi/models/document_chunk.py +++ b/servers/fastapi/models/document_chunk.py @@ -1,5 +1,7 @@ from pydantic import BaseModel +from models.presentation_outline_model import SlideOutlineModel + class DocumentChunk(BaseModel): heading: str @@ -7,5 +9,5 @@ class DocumentChunk(BaseModel): heading_index: int score: float - def to_slide_outline(self) -> str: - return f"{self.heading}\n{self.content}" + def to_slide_outline(self) -> SlideOutlineModel: + return SlideOutlineModel(content=f"{self.heading}\n{self.content}") diff --git a/servers/fastapi/models/presentation_outline_model.py b/servers/fastapi/models/presentation_outline_model.py index ad55ae4b..01a3b2b7 100644 --- a/servers/fastapi/models/presentation_outline_model.py +++ b/servers/fastapi/models/presentation_outline_model.py @@ -2,8 +2,12 @@ from typing import List from pydantic import BaseModel +class SlideOutlineModel(BaseModel): + content: str + + class PresentationOutlineModel(BaseModel): - slides: List[str] + slides: List[SlideOutlineModel] def to_string(self): message = "" diff --git a/servers/fastapi/utils/get_dynamic_models.py b/servers/fastapi/utils/get_dynamic_models.py index 744a6a5a..fd4b2bda 100644 --- a/servers/fastapi/utils/get_dynamic_models.py +++ b/servers/fastapi/utils/get_dynamic_models.py @@ -1,13 +1,23 @@ from typing import List from pydantic import Field -from models.presentation_outline_model import PresentationOutlineModel +from models.presentation_outline_model import ( + PresentationOutlineModel, + SlideOutlineModel, +) from models.presentation_structure_model import PresentationStructureModel def get_presentation_outline_model_with_n_slides(n_slides: int): + class SlideOutlineModelWithNSlides(SlideOutlineModel): + content: str = Field( + description="Markdown content for each slide", + min_length=100, + max_length=300, + ) + class PresentationOutlineModelWithNSlides(PresentationOutlineModel): - slides: List[str] = Field( - description="Markdown content for each slide in about 100 to 200 words", + slides: List[SlideOutlineModelWithNSlides] = Field( + description="List of slide outlines", min_items=n_slides, max_items=n_slides, ) diff --git a/servers/fastapi/utils/llm_calls/generate_presentation_outlines.py b/servers/fastapi/utils/llm_calls/generate_presentation_outlines.py index 507bb6eb..2a3c9e95 100644 --- a/servers/fastapi/utils/llm_calls/generate_presentation_outlines.py +++ b/servers/fastapi/utils/llm_calls/generate_presentation_outlines.py @@ -1,4 +1,3 @@ -import asyncio from typing import Optional from models.llm_message import LLMMessage diff --git a/servers/fastapi/utils/llm_calls/generate_slide_content.py b/servers/fastapi/utils/llm_calls/generate_slide_content.py index ecff518a..62b87e2b 100644 --- a/servers/fastapi/utils/llm_calls/generate_slide_content.py +++ b/servers/fastapi/utils/llm_calls/generate_slide_content.py @@ -1,5 +1,6 @@ from models.llm_message import LLMMessage from models.presentation_layout import SlideLayoutModel +from models.presentation_outline_model import SlideOutlineModel from services.llm_client import LLMClient from utils.llm_provider import get_model from utils.schema_utils import remove_fields_from_schema @@ -50,7 +51,7 @@ def get_messages(outline: str, language: str): async def get_slide_content_from_type_and_outline( - slide_layout: SlideLayoutModel, outline: str, language: str + slide_layout: SlideLayoutModel, outline: SlideOutlineModel, language: str ): client = LLMClient() model = get_model() @@ -62,7 +63,7 @@ async def get_slide_content_from_type_and_outline( response = await client.generate_structured( model=model, messages=get_messages( - outline, + outline.content, language, ), response_format=response_schema,