File size: 3,095 Bytes
1c86ad8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from langchain.base_language import BaseLanguageModel
from langchain.chains import LLMChain, SequentialChain
from langchain.chat_models import ChatAnthropic
from langchain.chat_models import ChatOpenAI
from langchain.llms import HuggingFaceHub
from langchain.prompts import (
    PromptTemplate,
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    HumanMessagePromptTemplate,
)


class GenerateStyleText:
    example: str
    prompt: str
    llm: BaseLanguageModel

    def __init__(self, example=None, prompt=None, llm=None):
        self.example = example
        self.prompt = prompt
        self.llm = llm

    def set_imp_llm(self, model):
        if model == 'GPT3':
            self.llm = ChatOpenAI(model_name="gpt-3.5-turbo-16k")
        elif model == "GPT4":
            self.llm = ChatOpenAI(model_name="gpt-4")
        elif model == "Claude":
            self.llm = ChatAnthropic()
        else:
            self.llm = HuggingFaceHub(repo_id=model)

    def run(self):
        return self.process()

    def process(self):
        seq_chain = SequentialChain(
            chains=[self.get_extract_tone_chain(), self.get_generate_text_chain(self.prompt),
                    self.get_apply_style_chain()],
            input_variables=["text"], verbose=True)
        result = seq_chain({'text': self.example, "style": ""})
        return str(result.get('result'))

    def create_chain(self, chat_prompt, output_key):
        return LLMChain(llm=self.llm,
                        prompt=chat_prompt, output_key=output_key)

    def get_extract_tone_chain(self):
        template = """Based on the tone and writing style in the seed text, create a style guide for a blog or 
        publication that captures the essence of the seed’s tone. Emphasize engaging techniques that help readers 
        feel connected to the content.
        """
        system_message_prompt = SystemMessagePromptTemplate.from_template(template)
        human_template = "{text}"
        human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
        chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])

        return self.create_chain(chat_prompt, "style")

    def get_generate_text_chain(self, prompt):
        template = """Generate a text following the user_request(use same language of the request):
                      {user_request}
                      """.replace("{user_request}", prompt)
        return self.create_chain(PromptTemplate.from_template(template),
                                 "generated_text")

    def get_apply_style_chain(self):
        template = """STYLE:
                    {style}
                    REWRITE THE TEXT BELLOW APPLYING THE STYLE ABOVE(use same language of the request), 
                    ONLY GENERATE NEW TEXT BASED ON THE STYLE CONTEXT, DO NOT COPY STYLE EXACT PARTS:
                    {generated_text}
        """

        prompt = PromptTemplate.from_template(template=template)
        prompt.partial(style="")
        return self.create_chain(prompt, "result")