linkedin-post-generator / post_generator.py
DrishtiSharma's picture
Update post_generator.py
6f28dc4 verified
raw
history blame
4.06 kB
import re # For handling hashtags
from llm_helper import llm
from few_shot import FewShotPosts
few_shot = FewShotPosts()
def get_length_str(length):
if length == "Short":
return "1 to 5 lines"
if length == "Medium":
return "6 to 10 lines"
if length == "Long":
return "11 to 15 lines"
def generate_closing_line(language, tag, tone):
"""
Generate a closing line using the LLM based on language, tag, and tone.
"""
closing_prompt = f"""
You are writing a LinkedIn post. Create a concise and engaging closing line.
- The closing line should reflect the topic: "{tag}".
- Use the tone/style: "{tone}".
- Add hashtags only at the end, i.e., after the closing line and not before it.
- The closing line must encourage engagement or provide a call to action, relevant to the topic.
- Use the language: "{language}" (Hinglish means Hindi phrases written in English script).
Examples:
- Topic: "Job Search", Tone: "Motivational", Language: "English"
Closing Line: "Your dream job is closer than you think. Stay determined! πŸš€"
- Topic: "Mental Health", Tone: "Professional", Language: "English"
Closing Line: "Your mental well-being is essential. Let’s discuss ways to manage stress. πŸ’‘"
- Topic: "Dating", Tone: "Informal", Language: "Hinglish"
Closing Line: "Apka perfect date idea kya hai? Neeche share karein! πŸ˜„"
Now, write a relevant closing line for the following inputs:
Topic: "{tag}"
Tone: "{tone}"
Language: "{language}"
"""
response = llm.invoke(closing_prompt)
return response.content.strip()
def extract_hashtags(content):
"""
Extract all hashtags from the given content.
"""
return re.findall(r"#\w+", content)
def remove_hashtags(content):
"""
Remove all hashtags from the given content.
"""
return re.sub(r"#\w+", "", content).strip()
def generate_post(length, language, tag, selected_tone=None):
"""
Generate a LinkedIn post dynamically with LLM, ensuring hashtags are added only at the end.
"""
# Generate the main content
prompt = get_prompt(length, language, tag)
response = llm.invoke(prompt)
post_content = response.content.strip() # Clean up whitespace
# Extract and remove hashtags from the main content
hashtags = extract_hashtags(post_content)
post_content = remove_hashtags(post_content)
# Generate the closing line
closing_line = ""
if selected_tone and tag:
try:
closing_line = generate_closing_line(language, tag, selected_tone)
# Extract and remove hashtags from the closing line
hashtags += extract_hashtags(closing_line)
closing_line = remove_hashtags(closing_line).strip()
except Exception as e:
closing_line = "Thank you for reading. Your feedback is valued! πŸ™Œ"
# Combine the cleaned main content and closing line
full_post = f"{post_content}\n\n{closing_line}"
# Add unique hashtags at the end of the post
if hashtags:
unique_hashtags = " ".join(set(hashtags)) # Remove duplicates
full_post += f"\n\n{unique_hashtags}"
return full_post
def get_prompt(length, language, tag):
length_str = get_length_str(length)
prompt = f'''
Write a professional, engaging LinkedIn post.
1. Topic: "{tag}"
2. Post Length: "{length_str}"
3. Language: "{language}" (Hinglish means Hindi phrases written in English script).
4. Incorporate creativity, enthusiasm, emotional appeal, and actionable advice.
'''
examples = few_shot.get_filtered_posts(length, language, tag)
if examples:
prompt += "\nExamples of great posts:\n"
for i, post in enumerate(examples[:2]): # Limit to 2 examples
post_text = post['text']
prompt += f"Example {i + 1}: {post_text}\n"
prompt += "\nNow write the post."
return prompt
if __name__ == "__main__":
print(generate_post("Medium", "English", "Mental Health"))