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:
commit
2830362d74
4 changed files with 30 additions and 15 deletions
|
|
@ -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,
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue