Spaces:
Running
on
Zero
Running
on
Zero
from typing import List, Callable | |
# from googletrans import Translator | |
from deep_translator import GoogleTranslator | |
import random | |
from src.prompt_configs import PromptConfig, prefix | |
# translator = Translator() | |
translator = GoogleTranslator(source='auto', target='en') | |
def get_translation(text: str, dest: str = 'en') -> str: | |
return translator.translate(text) | |
# return translator.translate(text, dest=dest).text | |
def llm_generate_titles( | |
llm_generate: Callable[[str], str], | |
description: str, | |
prompt_config: PromptConfig, | |
) -> List[str]: | |
""" | |
Generate presentation slide titles using a language model. | |
Args: | |
llm_generate (Callable[[str], str]): Function to generate text using a language model. | |
description (str): Description of the presentation. | |
prompt_config (PromptConfig): Configuration for prompts. | |
Returns: | |
List[str]: List of generated slide titles. | |
""" | |
prompt = prompt_config.title_prompt.format( | |
description=description | |
) | |
titles_str = llm_generate(prompt) | |
titles = [] | |
for title in titles_str.split("\n"): | |
sep_index = title.index('. ') | |
title = title.strip()[sep_index:] | |
title = title.replace('.', '') | |
title = title.replace('\n', '') | |
if prefix in title.lower(): | |
title = title[ | |
title.lower().index(prefix)+len(prefix): | |
] | |
titles.append(title) | |
return titles | |
def llm_generate_text( | |
llm_generate: Callable[[str], str], | |
description: str, | |
titles: List[str], | |
prompt_config: PromptConfig | |
) -> List[str]: | |
""" | |
Generate text for each slide title using a language model. | |
Args: | |
llm_generate (Callable[[str], str]): Function to generate text using a language model. | |
description (str): Description of the presentation. | |
titles (List[str]): List of slide titles. | |
prompt_config (PromptConfig): Configuration for prompts. | |
Returns: | |
List[str]: List of generated texts for each slide. | |
""" | |
texts = [] | |
for title in titles: | |
query = prompt_config.text_prompt.format(description=description, title=title) | |
text = llm_generate(query) | |
if prefix in text.lower(): | |
text = text[text.lower().index(prefix)+len(prefix):] | |
text = text.replace('\n', '') | |
texts.append(text) | |
return texts | |
def llm_generate_image_prompt( | |
llm_generate: Callable[[str], str], | |
description: str, | |
title: str, | |
prompt_config: PromptConfig | |
) -> str: | |
""" | |
Generate an image prompt for a slide using a language model and translate it. | |
Args: | |
llm_generate (Callable[[str], str]): Function to generate text using a language model. | |
description (str): Description of the presentation. | |
title (str): Slide title. | |
prompt_config (PromptConfig): Configuration for prompts. | |
Returns: | |
str: Translated image prompt. | |
""" | |
query = prompt_config.image_prompt.format(description=description, title=title) | |
prompt = llm_generate(query) | |
if prefix in prompt: | |
prompt = prompt[prompt.lower().index(prompt)+len(prompt):] | |
prompt = prompt.replace('\n', '') | |
return get_translation(prompt) | |
def llm_generate_background_prompt( | |
llm_generate: Callable[[str], str], | |
description: str, | |
title: str, | |
prompt_config: PromptConfig, | |
background_style: str = '' | |
) -> str: | |
""" | |
Generate a background prompt for a slide using a language model and translate it. | |
Args: | |
llm_generate (Callable[[str], str]): Function to generate text using a language model. | |
description (str): Description of the presentation. | |
title (str): Slide title. | |
prompt_config (PromptConfig): Configuration for prompts. | |
Returns: | |
str: Translated background prompt. | |
""" | |
query = prompt_config.background_prompt.format(description=description, title=title) | |
keywords = llm_generate(query) | |
background_prompt = f'{keywords}, {background_style}' | |
return get_translation(background_prompt) |