Merge pull request #167 from presenton/fix/language-issue-in-slides

fix(fastapi): adds explicit language guidelines for slide generation and edit
This commit is contained in:
Saurav Niraula 2025-07-30 10:33:13 +05:45 committed by GitHub
commit 2830362d74
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 30 additions and 15 deletions

View file

@ -218,7 +218,7 @@ async def stream_presentation(
for i, slide_layout_index in enumerate(structure.slides):
slide_layout = layout.slides[slide_layout_index]
slide_content = await get_slide_content_from_type_and_outline(
slide_layout, outline.slides[i]
slide_layout, outline.slides[i], presentation.language
)
slide = SlideModel(
presentation=presentation_id,

View file

@ -1,6 +1,5 @@
import asyncio
import json
from typing import Optional
from models.presentation_layout import SlideLayoutModel
from models.sql.slide import SlideModel
@ -21,24 +20,32 @@ system_prompt = """
- The goal is to change Slide data based on the provided prompt.
- Do not change **Image prompts** and **Icon queries** if not asked for in prompt.
- Generate **Image prompts** and **Icon queries** if asked to generate or change in prompt.
- Make sure to follow language guidelines.
**Go through all notes and steps and make sure they are followed, including mentioned constraints**
"""
def get_user_prompt(prompt: str, slide_data: dict, language: Optional[str] = None):
def get_user_prompt(prompt: str, slide_data: dict, language: str):
return f"""
- Prompt: {prompt}
- Output Language: {language}
- Image Prompts and Icon Queries Language: English
- Slide data: {slide_data}
## Icon Query And Image Prompt Language
English
## Slide Content Language
{language}
## Prompt
{prompt}
## Slide data
{slide_data}
"""
def get_prompt_to_edit_slide_content(
prompt: str,
slide_data: dict,
language: Optional[str] = None,
language: str,
):
return [
{
@ -56,7 +63,7 @@ async def get_edited_slide_content(
prompt: str,
slide_layout: SlideLayoutModel,
slide: SlideModel,
language: Optional[str] = None,
language: str,
):
model = get_large_model()
response_schema = remove_fields_from_schema(

View file

@ -24,12 +24,19 @@ system_prompt = """
- Provide prompt to generate image on "__image_prompt__" property.
- Provide query to search icon on "__icon_query__" property.
- Do not use markdown formatting in slide body.
- **Strictly follow the max and min character limit for every property in the slide.**
- Make sure to follow language guidelines.
**Strictly follow the max and min character limit for every property in the slide.**
"""
def get_user_prompt(title: str, outline: str):
def get_user_prompt(title: str, outline: str, language: str):
return f"""
## Icon Query And Image Prompt Language
English
## Slide Content Language
{language}
## Slide Title
{title}
@ -38,7 +45,7 @@ def get_user_prompt(title: str, outline: str):
"""
def get_prompt_to_generate_slide_content(title: str, outline: str):
def get_prompt_to_generate_slide_content(title: str, outline: str, language: str):
return [
{
@ -47,13 +54,13 @@ def get_prompt_to_generate_slide_content(title: str, outline: str):
},
{
"role": "user",
"content": get_user_prompt(title, outline),
"content": get_user_prompt(title, outline, language),
},
]
async def get_slide_content_from_type_and_outline(
slide_layout: SlideLayoutModel, outline: SlideOutlineModel
slide_layout: SlideLayoutModel, outline: SlideOutlineModel, language: str
):
model = get_large_model()
@ -68,6 +75,7 @@ async def get_slide_content_from_type_and_outline(
messages=get_prompt_to_generate_slide_content(
outline.title,
outline.body,
language,
),
response_format={
"type": "json_schema",
@ -83,7 +91,7 @@ async def get_slide_content_from_type_and_outline(
response = await asyncio.to_thread(
client.models.generate_content,
model=model,
contents=[get_user_prompt(outline.title, outline.body)],
contents=[get_user_prompt(outline.title, outline.body, language)],
config=GenerateContentConfig(
system_instruction=system_prompt,
response_mime_type="application/json",