File size: 4,114 Bytes
d90acf0
0a89e97
 
d90acf0
 
 
 
0a89e97
 
d90acf0
 
0a89e97
 
d90acf0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7f2245c
d90acf0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
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)