import json import os import openai from dotenv import load_dotenv load_dotenv() AZURE_OPENAI_API_KEY = os.getenv("AZURE_OPENAI_API_KEY") AZURE_OPENAI_ENDPOINT = os.getenv("AZURE_OPENAI_ENDPOINT") AZURE_OPENAI_API_VERSION = os.getenv("AZURE_OPENAI_API_VERSION") client = openai.AzureOpenAI( api_version=AZURE_OPENAI_API_VERSION, api_key=AZURE_OPENAI_API_KEY, azure_endpoint=AZURE_OPENAI_ENDPOINT, ) def generate_fake_text(text_generation_model, title, content): # Generate text using the selected models prompt = """Generate a random fake news tittle in this format: --- # Title: [Fake Title] # Content: [Fake Content] --- """ if title and content: prompt += """base on the following context: # Title: {news_title}:\n# Content: {news_content}""" elif title: prompt += """base on the following context: # Title: {news_title}:\n""" elif content: prompt += """base on the following context: # Content: {news_content}""" # Generate text using the text generation model # Generate text using the selected model try: response = client.chat.completions.create( model=text_generation_model, messages=[{"role": "system", "content": prompt}], ) print( "Response from OpenAI API: ", response.choices[0].message.content, ) fake_text = response.choices[0].message.content except openai.OpenAIError as e: print(f"Error interacting with OpenAI API: {e}") fake_text = "" if fake_text != "": fake_title, fake_content = extract_title_content(fake_text) return fake_title, fake_content def extract_title_content(fake_news): """ Extracts the title and content from the generated fake news string. This function parses a string containing fake news, which is expected to have a specific format with a title and content section marked by '# Title:' and '# Content:' respectively. Args: fake_news (str): A string containing the generated fake news. Returns: tuple: A tuple containing two elements: - title (str): The extracted title of the fake news. - content (str): The extracted content of the fake news. Note: The function assumes that the input string follows the expected format. If the format is not as expected, it may return unexpected results. """ # Extract the title and content from the generated fake news title_start_index = fake_news.find("# Title: ") + len("# Title: ") title_end_index = fake_news.find("\n", title_start_index) title = fake_news[title_start_index:title_end_index].strip() content_start_index = fake_news.find("\n# Content: ") + len( "\n# Content: ", ) content = fake_news[content_start_index:].strip() return title, content def generate_fake_image(model, title): if len(title) > 0: IMAGE_PROMPT = f"Generate a random image about {title}" else: IMAGE_PROMPT = "Generate a random image" result = client.images.generate( model="dall-e-3", # the name of your DALL-E 3 deployment prompt=IMAGE_PROMPT, n=1, ) image_url = json.loads(result.model_dump_json())["data"][0]["url"] return image_url def replace_text(news_title, news_content, replace_df): """ Replaces occurrences in the input text based on the provided DataFrame. Args: text: The input text. replace_df: A DF with 2 columns: "find_what" & "replace_with". Returns: The text after all replacements have been made. """ for _, row in replace_df.iterrows(): find_what = row["Find what:"] replace_with = row["Replace with:"] news_content = news_content.replace(find_what, replace_with) news_title = news_title.replace(find_what, replace_with) return news_title, news_content