from typing import List from langchain.prompts import PromptTemplate from langchain.chains import LLMChain from langchain.llms import OpenAI from load_model import call_palm from calling_apis import google_api_key, openai_api_key def article_generator(idea : str, outline : str, section : str, tone_of_voice : str, language='En', model_name='Google Palm 2', creativity='Original') -> str: ''' Description This function generates paragraphs for an article based on provided parameters such as the main idea, outline, section, language model, and tone of voice. It utilizes a PromptTemplate and an LLMChain for content creation. Parameters: idea -> Required: (str) Represents the main idea or topic of the article. outline -> Required: (str) Indicates the existing outline content (if any) for the article. section -> Required: (str) Specifies the main point or section that requires content generation. tone_of_voice -> Required: (str) Defines the desired tone for the article (e.g., formal, informal, technical). language (str): Opitonal Parameter -> The language of the model. creativity (str): Optional Parameter -> Controling the randomness of the model. Default value is Original model_name (str): Optional Parameter -> select the LLM model. Default Value is Google Palm 2 Return: - `article`: (str) The generated article paragraph based on the provided parameters and content prompts. ''' temp = 0 if creativity == 'Original': temp = 0 elif creativity == 'Balanced': temp = 0.25 elif creativity == 'Creative': temp = 0.5 elif creativity == 'Spirited': temp = 0.75 elif creativity == 'Visionary': temp = 1 if model_name == 'Google Palm 2': llm = call_palm(google_api_key, temperature=temp) elif model_name == 'GPT-3.5': llm = OpenAI(model_name='gpt-3.5-turbo', openai_api_key=openai_api_key, temperature=temp) elif model_name == 'GPT-4': llm = OpenAI(model_name='gpt-4', openai_api_key=openai_api_key, temperature=temp) if language == 'En': if len(outline) == 0: article_prompt = f"Generate Catchy Introduction paragraph for my article on {idea} using the following main point: {section}\nThe tone should be {tone_of_voice}." else: article_prompt = f"Generate well-organized paragraph for my article on {idea}. I have already covered: {outline} in the outline. I need help with the following main point: {section}. Please ensure the paragraphs are connected logically and provide a smooth transition between main topics. The tone should be {tone_of_voice}." article_promptTemp = PromptTemplate( input_variables=["text_input"], template="You are a Professional content creator and article Writer:\n\n{text_input}\n\nParagraph:") elif language == 'Ar': if len(outline) == 0: article_prompt = f"أنشئ فقرة مثيرة للاهتمام لمقالي عن {idea} باستخدام النقطة الرئيسية التالية: {section}\nيجب أن يكون اللهجة {tone_of_voice}." else: article_prompt = f"انشئ فقرة منظمة تماماً لمقالي حول {idea}. لقد غطيت بالفعل: {outline} في الخطة العريضة. أحتاج مساعدة في النقطة الرئيسية التالية: {section}. يرجى التأكد من أن الفقرات متصلة منطقياً وتوفير انتقال سلس بين المواضيع الرئيسية. يجب أن يكون اللهجة {tone_of_voice}." article_promptTemp = PromptTemplate( input_variables=["text_input"], template="أنت مبدع محترف للمحتوى وكاتب مقالات:\n\n{text_input}\n\nالفقرة:") article_extraction_chain = LLMChain(llm=llm, prompt=article_promptTemp) article = article_extraction_chain.run(article_prompt) return article def full_article(idea : str, outline_list : List[str], tone_of_voice : str, language='En', model_name='Google Palm 2', creativity='Original') -> List[str]: ''' Description: This function generates a full article by iteratively creating paragraphs for each section in an outline list using the `article_generator` function. It accumulates the generated paragraphs into a list representing the complete article. Parameters: - `idea` -> Required: (str) Represents the main idea or topic of the article. - `outline_list` -> Required: (list) Contains sections or main points forming the outline structure of the article. - `tone_of_voice` -> Required: (str) Defines the desired tone for the article (e.g., formal, informal, technical). - `llm` -> Required: (object) Represents the language model used for generating the article content. language (str): Opitonal Parameter -> The language of the model. creativity (str): Optional Parameter -> Controling the randomness of the model. Default value is Original model_name (str): Optional Parameter -> select the LLM model. Default Value is Google Palm 2 Return: - `article`: (list) A list containing paragraphs generated for each section in the `outline_list`. ''' article = [] outline = [] try: for section in outline_list: para = article_generator(idea, ' '.join(outline), section, tone_of_voice, language=language, model_name=model_name, creativity=creativity) outline.append(section) article.append(para) except: pass return article