128 lines
5.9 KiB
Python
128 lines
5.9 KiB
Python
import time #Iwish
|
|
import os
|
|
import json
|
|
import streamlit as st
|
|
from tenacity import (
|
|
retry,
|
|
stop_after_attempt,
|
|
wait_random_exponential,
|
|
)
|
|
import google.generativeai as genai
|
|
|
|
from ..gpt_providers.text_generation.main_text_generation import llm_text_gen
|
|
|
|
|
|
def ai_title_generator():
|
|
""" Use AI to personalize content title generation """
|
|
st.title("✍️ Alwrity - AI Blog Title Generator")
|
|
|
|
# Input section
|
|
with st.expander("**PRO-TIP** - Follow the steps below for best results.", expanded=True):
|
|
col1, col2 = st.columns([5, 5])
|
|
|
|
with col1:
|
|
input_blog_keywords = st.text_input(
|
|
'**🔑 Enter main keywords of your blog!**',
|
|
placeholder="e.g., AI tools, digital marketing, SEO",
|
|
help="Use 2-3 words that best describe the main topic of your blog."
|
|
)
|
|
input_blog_content = st.text_area(
|
|
'**📄 Copy/Paste your entire blog content.** (Optional)',
|
|
placeholder="e.g., Content about the importance of AI in digital marketing...",
|
|
help="Paste your full blog content here for more accurate title suggestions. This is optional."
|
|
)
|
|
|
|
with col2:
|
|
input_title_type = st.selectbox(
|
|
'📝 Blog Type',
|
|
('General', 'How-to Guides', 'Tutorials', 'Listicles', 'Newsworthy Posts', 'FAQs', 'Checklists/Cheat Sheets'),
|
|
index=0
|
|
)
|
|
input_title_intent = st.selectbox(
|
|
'🔍 Search Intent',
|
|
('Informational Intent', 'Commercial Intent', 'Transactional Intent', 'Navigational Intent'),
|
|
index=0
|
|
)
|
|
language_options = ["English", "Spanish", "French", "German", "Chinese", "Japanese", "Other"]
|
|
input_language = st.selectbox(
|
|
'🌐 Select Language',
|
|
options=language_options,
|
|
index=0,
|
|
help="Choose the language for your blog title."
|
|
)
|
|
if input_language == "Other":
|
|
input_language = st.text_input(
|
|
'Specify Language',
|
|
placeholder="e.g., Italian, Dutch",
|
|
help="Specify your preferred language."
|
|
)
|
|
|
|
# Generate Blog Title button
|
|
if st.button('**Generate Blog Titles**'):
|
|
with st.spinner("Generating blog titles..."):
|
|
if input_blog_content == 'Optional':
|
|
input_blog_content = None
|
|
|
|
if not input_blog_keywords and not input_blog_content:
|
|
st.error('**🫣 Provide Inputs to generate Blog Titles. Either Blog Keywords OR content is required!**')
|
|
else:
|
|
blog_titles = generate_blog_titles(input_blog_keywords, input_blog_content, input_title_type, input_title_intent, input_language)
|
|
if blog_titles:
|
|
st.subheader('**👩🧕🔬 Go Rule search ranking with these Blog Titles!**')
|
|
with st.expander("**Final - Blog Titles Output 🎆🎇🎇**", expanded=True):
|
|
st.markdown(blog_titles)
|
|
else:
|
|
st.error("💥 **Failed to generate blog titles. Please try again!**")
|
|
|
|
|
|
# Function to generate blog metadesc
|
|
def generate_blog_titles(input_blog_keywords, input_blog_content, input_title_type, input_title_intent, input_language):
|
|
""" Function to call upon LLM to get the work done. """
|
|
# If keywords and content both are given.
|
|
if input_blog_content and input_blog_keywords:
|
|
prompt = f"""As a SEO expert, I will provide you with main 'blog keywords' and 'blog content'.
|
|
Your task is write 5 SEO optimised blog titles, from given blog keywords and content.
|
|
|
|
Follow the below guidelines for generating the blog titles:
|
|
1). As SEO expert, follow all best practises for SEO optimised blog titles.
|
|
2). Your response should be optimised around given keywords and content.
|
|
3). Optimise your response for web search intent {input_title_intent}.
|
|
4). Optimise your response for blog type of {input_title_type}.
|
|
5). Your blog titles should in {input_language} language.\n
|
|
|
|
blog keywords: '{input_blog_keywords}'\n
|
|
blog content: '{input_blog_content}'
|
|
"""
|
|
elif input_blog_keywords and not input_blog_content:
|
|
prompt = f"""As a SEO expert, I will provide you with main 'keywords' of a blog.
|
|
Your task is write 5 SEO optimised blog titles from given blog keywords.
|
|
|
|
Follow the below guidelines for generating the blog titles:
|
|
1). As SEO expert, follow all best practises for SEO optimised blog titles.
|
|
2). Your response should be optimised around given keywords and content.
|
|
3). Optimise your response for web search intent {input_title_intent}.
|
|
4). Optimise your response for blog type of {input_title_type}.
|
|
5). Your blog titles should in {input_language} language.\n
|
|
|
|
blog keywords: '{input_blog_keywords}'\n
|
|
"""
|
|
elif input_blog_content and not input_blog_keywords:
|
|
prompt = f"""As a SEO expert, I will provide you with a 'blog content'.
|
|
Your task is write 5 SEO optimised blog titles from given blog content.
|
|
|
|
Follow the below guidelines for generating the blog titles:
|
|
1). As SEO expert, follow all best practises for SEO optimised blog titles.
|
|
2). Your response should be optimised around given keywords and content.
|
|
3). Optimise your response for web search intent {input_title_intent}.
|
|
4). Optimise your response for blog type of {input_title_type}.
|
|
5). Your blog titles should in {input_language} language.\n
|
|
|
|
blog content: '{input_blog_content}'\n
|
|
"""
|
|
|
|
try:
|
|
response = llm_text_gen(prompt)
|
|
return response
|
|
except Exception as err:
|
|
st.error(f"Exit: Failed to get response from LLM: {err}")
|