diff --git a/README.md b/README.md
index dbb0167f..8008f295 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@ Prompting is abstracted to get going sooner. Focus on your content quality, rath
Alwrity gives hyper content personalization, factual web researched & SEO optimized content and tools for automating content & digital marketing.
AI will help achieve Content Hyper-Personalization.
-
+
---
1). [Visit alwrity.com](https://www.alwrity.com/ai-writing-tools), You will find AI content writing tools, which are Free & No-Signup.
**Note:** Although, this is limited, as is our wallet & Resources.
@@ -35,9 +35,10 @@ If you have 💻 Laptop + 🛜 Internet + 10 minutes, you will be generating blo
3). streamlit run alwrity.py
```
---
-**Still stuck, [Open issue here](https://github.com/AJaySi/AI-Writer/issues) & Someone will bail you out.
+**Still stuck, [Open issue here](https://github.com/AJaySi/AI-Writer/issues) & Someone will bail you out.**
---
+
### AI Tools & Features of Alwrity:
| No. | Alwrity Tool | Description |
@@ -67,7 +68,7 @@ If you have 💻 Laptop + 🛜 Internet + 10 minutes, you will be generating blo
---
# AI Content Generation Toolkit - Alwrity
-
+
## Introduction
diff --git a/alwrity.py b/alwrity.py
index bf78791e..ee62cb24 100644
--- a/alwrity.py
+++ b/alwrity.py
@@ -9,13 +9,13 @@ import base64
load_dotenv()
#from lib.chatbot_custom.chatbot_local_docqa import alwrity_chat_docqa
-from lib.utils.alwrity_utils import (blog_from_keyword, ai_agents_team,
- essay_writer, ai_news_writer, ai_seo_tools,
+from lib.utils.alwrity_utils import (blog_from_keyword, ai_agents_team, essay_writer, ai_news_writer, ai_seo_tools,
ai_finance_ta_writer, ai_social_writer,
do_web_research, competitor_analysis,
)
from lib.ai_writers.ai_story_writer.story_writer import story_input_section
+from lib.ai_writers.ai_product_description_writer import write_ai_prod_desc
# Function to check if API keys are present and prompt user to input if not
@@ -334,9 +334,9 @@ def main():
# Define the tabs
tab1, tab2, tab3, tab4, tab5, tab6 = st.tabs(
- ["AI Writers", "Content Planning", "Agents Teams", "AI SEO tools", "Alwrity Brain", "Ask Alwrity"])
+ ["AI Writers", "Content Planning", "Agents Teams", "AI SEO tools", "AI Social Tools", "Ask Alwrity"])
with tab1:
- write_blog()
+ ai_writers()
with tab2:
content_planning_tools()
@@ -348,10 +348,10 @@ def main():
ai_seo_tools()
with tab5:
- alwrity_brain()
+ ai_social_writer()
with tab6:
- st.info("Chatbot")
+ st.subheader("Chat with your Data, Chat with any Data.. COMING SOON !")
st.markdown("Create a collection by uploading files (PDF, MD, CSV, etc), or crawl a data source (Websites, more sources coming soon.")
st.markdown("One can ask/chat, summarize and do semantic search over the uploaded data")
#alwrity_chat_docqa()
@@ -374,14 +374,14 @@ def main():
# Functions for the main options
-def write_blog():
+def ai_writers():
options = [
"AI Blog Writer",
"Story Writer",
"Essay writer",
"Write News reports",
"Write Financial TA report",
- "AI Social writer (instagram, tweets, linkedin, facebook post)",
+ "AI Product Description Writer",
"AI Copywriter",
"Quit"
]
@@ -399,10 +399,10 @@ def write_blog():
ai_news_writer()
elif choice == "Write Financial TA report":
ai_finance_ta_writer()
- elif choice == "AI Social writer (instagram, tweets, linkedin, facebook post)":
- ai_social_writer()
+ elif choice == "AI Product Description Writer":
+ write_ai_prod_desc()
elif choice == "Quit":
- st.write("Exiting, Getting Lost. But.... I have nowhere to go 🥹🥹")
+ st.subheader("Exiting, Getting Lost. But.... I have nowhere to go 🥹🥹")
def content_planning_tools():
diff --git a/lib/check_blog_seo/TBD b/lib/ai_seo_tools/TBD
similarity index 100%
rename from lib/check_blog_seo/TBD
rename to lib/ai_seo_tools/TBD
diff --git a/lib/check_blog_seo/cgpt_seo_analyzer.py b/lib/ai_seo_tools/cgpt_seo_analyzer.py
similarity index 100%
rename from lib/check_blog_seo/cgpt_seo_analyzer.py
rename to lib/ai_seo_tools/cgpt_seo_analyzer.py
diff --git a/lib/check_blog_seo/plagiarism_checker_from_known_sources.py b/lib/ai_seo_tools/plagiarism_checker_from_known_sources.py
similarity index 100%
rename from lib/check_blog_seo/plagiarism_checker_from_known_sources.py
rename to lib/ai_seo_tools/plagiarism_checker_from_known_sources.py
diff --git a/lib/check_blog_seo/seo_analysis.py b/lib/ai_seo_tools/seo_analysis.py
similarity index 100%
rename from lib/check_blog_seo/seo_analysis.py
rename to lib/ai_seo_tools/seo_analysis.py
diff --git a/lib/ai_writers/ai_product_description_writer.py b/lib/ai_writers/ai_product_description_writer.py
new file mode 100644
index 00000000..a33a57c1
--- /dev/null
+++ b/lib/ai_writers/ai_product_description_writer.py
@@ -0,0 +1,115 @@
+import streamlit as st
+import json
+
+from ..gpt_providers.text_generation.main_text_generation import llm_text_gen
+
+
+def generate_product_description(title, details, audience, tone, length, keywords):
+ """
+ Generates a product description using OpenAI's API.
+
+ Args:
+ title (str): The title of the product.
+ details (list): A list of product details (features, benefits, etc.).
+ audience (list): A list of target audience segments.
+ tone (str): The desired tone of the description (e.g., "Formal", "Informal").
+ length (str): The desired length of the description (e.g., "short", "medium", "long").
+ keywords (str): Keywords related to the product (comma-separated).
+
+ Returns:
+ str: The generated product description.
+ """
+ prompt = f"""
+ Write a compelling product description for {title}.
+
+ Highlight these key features: {', '.join(details)}
+
+ Emphasize the benefits of these features for the target audience ({audience}).
+ Maintain a {tone} tone and aim for a length of approximately {length} words.
+
+ Use these keywords naturally throughout the description: {', '.join(keywords)}.
+
+ Remember to be persuasive and focus on the value proposition.
+ """
+
+ try:
+ response = llm_text_gen(prompt)
+ return response
+ except Exception as err:
+ logger.error(f"Exit: Failed to get response from LLM: {err}")
+ exit(1)
+
+
+def display_inputs():
+ st.title("📝 AI Product Description Writer 🚀")
+ st.markdown("**Generate compelling and accurate product descriptions with AI.**")
+
+ col1, col2 = st.columns(2)
+
+ with col1:
+ product_title = st.text_input("🏷️ **Product Title**", placeholder="Enter the product title (e.g., Wireless Bluetooth Headphones)")
+ with col2:
+ product_details = st.text_area("📄 **Product Details**", placeholder="Enter features, benefits, specifications, materials, etc. (e.g., Noise Cancellation, Long Battery Life, Water Resistant, Comfortable Design)")
+
+ col3, col4 = st.columns(2)
+
+ with col3:
+ keywords = st.text_input("🔑 **Keywords**", placeholder="Enter keywords, comma-separated (e.g., wireless headphones, noise cancelling, Bluetooth 5.0)")
+ with col4:
+ target_audience = st.multiselect(
+ "🎯 **Target Audience**",
+ ["Teens", "Adults", "Seniors", "Music Lovers", "Fitness Enthusiasts", "Tech Savvy", "Busy Professionals", "Travelers", "Casual Users"],
+ placeholder="Select target audience (optional)"
+ )
+
+ col5, col6 = st.columns(2)
+
+ with col5:
+ description_length = st.selectbox(
+ "📏 **Desired Description Length**",
+ ["Short (1-2 sentences)", "Medium (3-5 sentences)", "Long (6+ sentences)"],
+ help="Select the desired length of the product description"
+ )
+ with col6:
+ brand_tone = st.selectbox(
+ "🎨 **Brand Tone**",
+ ["Formal", "Informal", "Fun & Energetic"],
+ help="Select the desired tone for the description"
+ )
+
+ return product_title, product_details, target_audience, brand_tone, description_length, keywords
+
+
+def display_output(description):
+ if description:
+ st.subheader("✨ Generated Product Description:")
+ st.write(description)
+
+ json_ld = {
+ "@context": "https://schema.org",
+ "@type": "Product",
+ "name": product_title,
+ "description": description,
+ "audience": target_audience,
+ "brand": {
+ "@type": "Brand",
+ "name": "Your Brand Name"
+ },
+ "keywords": keywords.split(", ")
+ }
+
+
+def write_ai_prod_desc():
+ product_title, product_details, target_audience, brand_tone, description_length, keywords = display_inputs()
+
+ if st.button("Generate Product Description 🚀"):
+ with st.spinner("Generating description..."):
+ description = generate_product_description(
+ product_title,
+ product_details.split(", "), # Split details into a list
+ target_audience,
+ brand_tone,
+ description_length.split(" ")[0].lower(), # Extract length from selectbox
+ keywords
+ )
+ display_output(description)
diff --git a/lib/ai_writers/facebook_ai_writer.py b/lib/ai_writers/facebook_ai_writer.py
index 683efb17..20987c95 100644
--- a/lib/ai_writers/facebook_ai_writer.py
+++ b/lib/ai_writers/facebook_ai_writer.py
@@ -87,12 +87,6 @@ def facebook_post_writer():
)
with col2:
- business_type = st.text_input(
- "🏢 **What is your business type?**",
- placeholder="e.g., Fitness coach",
- help="Provide the type of your business. This will help tailor the post content."
- )
-
post_tone_options = ["Informative", "Humorous", "Inspirational", "Upbeat", "Casual", "Customize"]
post_tone = st.selectbox(
"🎨 **What tone do you want to use?**",
@@ -108,6 +102,12 @@ def facebook_post_writer():
help="Provide a specific tone if you selected 'Customize'."
)
+ business_type = st.text_input(
+ "🏢 **What is your business type?**",
+ placeholder="e.g., Fitness coach",
+ help="Provide the type of your business. This will help tailor the post content."
+ )
+
avoid = st.text_input(
"❌ **What elements do you want to avoid?**",
placeholder="e.g., Long paragraphs",
diff --git a/lib/github_blogs/github_getting_started.py b/lib/ai_writers/github_blogs/github_getting_started.py
similarity index 100%
rename from lib/github_blogs/github_getting_started.py
rename to lib/ai_writers/github_blogs/github_getting_started.py
diff --git a/lib/github_blogs/main_getting_started_blogs.py b/lib/ai_writers/github_blogs/main_getting_started_blogs.py
similarity index 100%
rename from lib/github_blogs/main_getting_started_blogs.py
rename to lib/ai_writers/github_blogs/main_getting_started_blogs.py
diff --git a/lib/github_blogs/scrape_github_readme.py b/lib/ai_writers/github_blogs/scrape_github_readme.py
similarity index 100%
rename from lib/github_blogs/scrape_github_readme.py
rename to lib/ai_writers/github_blogs/scrape_github_readme.py
diff --git a/lib/scholar_blogs/main_arxiv_to_blog.py b/lib/ai_writers/scholar_blogs/main_arxiv_to_blog.py
similarity index 100%
rename from lib/scholar_blogs/main_arxiv_to_blog.py
rename to lib/ai_writers/scholar_blogs/main_arxiv_to_blog.py
diff --git a/lib/scholar_blogs/write_blog_scholar_paper.py b/lib/ai_writers/scholar_blogs/write_blog_scholar_paper.py
similarity index 100%
rename from lib/scholar_blogs/write_blog_scholar_paper.py
rename to lib/ai_writers/scholar_blogs/write_blog_scholar_paper.py
diff --git a/lib/scholar_blogs/write_research_review_blog.py b/lib/ai_writers/scholar_blogs/write_research_review_blog.py
similarity index 100%
rename from lib/scholar_blogs/write_research_review_blog.py
rename to lib/ai_writers/scholar_blogs/write_research_review_blog.py
diff --git a/lib/amzn_affliate_links/README.md b/lib/amzn_affliate_links/README.md
deleted file mode 100644
index 7e1153d4..00000000
--- a/lib/amzn_affliate_links/README.md
+++ /dev/null
@@ -1 +0,0 @@
-I want you to pretend that you are an E-commerce SEO expert who writes compelling product descriptions for users looking to buy online. I am going to provide the title of one e-commerce product and I want you to come up with a minimum of three distinct content sections for the product description, each section about a unique subset of keywords relating to the product I provide you. Make sure that each of the unique content sections are labeled with an informative and eye-catching subheading describing the main focus of the content section. The main point of these commands is for you to developing a new keyword-rich, informative, and captivating product summary/description that is less than 1000 words. The purpose of product description is marketing the products to users looking to buy. Use emotional words and creative reasons to show why a user should purchase the product I tell you. After you generate the new product summary, please generate a bulleted list of 5 possible H1 headings for this product page, and make each H1 less than 7 words each. Please also include bulleted list of broad match keywords that were used to accomplish writing the product summary. Write a persuasive and professional sounding Meta Title and Description that integrates similar language present in the new product summary text. Make sure to include a numerical aspect in the Meta Title. Do not echo my prompt. Do not remind me what I asked you for. Do not apologize. Do not self-reference. Please use the following products:{Enter descriptive product name - 1 only}
diff --git a/lib/amzn_affliate_links/amzn_afflt_img_html.py b/lib/amzn_affliate_links/amzn_afflt_img_html.py
deleted file mode 100644
index 38689498..00000000
--- a/lib/amzn_affliate_links/amzn_afflt_img_html.py
+++ /dev/null
@@ -1,79 +0,0 @@
-###############################################################################
-#
-# To use the module, simply create an instance of the AmazonAffiliateImages class,
-# passing in your Amazon affiliate tag. Then, you can use the get_image_url() or
-# get_image_html() methods to get the Amazon affiliate image URL or HTML for a product,
-# passing in either the product ASIN or the product URL.
-#
-###############################################################################
-
-import requests
-from bs4 import BeautifulSoup
-
-class AmazonAffiliateImages:
- def __init__(self, associate_tag):
- self.associate_tag = associate_tag
-
- def get_product_asin(self, product_url):
- """Gets the Amazon product ASIN from a product URL.
-
- Args:
- product_url: The Amazon product URL.
-
- Returns:
- The Amazon product ASIN, or None if the product URL is not valid.
- """
-
- soup = BeautifulSoup(requests.get(product_url).content, "html.parser")
- asin = soup.find("input", type="hidden", name="ASIN")
- if asin is not None:
- return asin.get("value")
- else:
- return None
-
- def get_image_url(self, product_asin):
- """Gets the Amazon affiliate image URL for a product.
-
- Args:
- product_asin: The Amazon product ASIN.
-
- Returns:
- The Amazon affiliate image URL, or None if the product is not found.
- """
-
- url = f"https://images-na.ssl-images-amazon.com/images/I/{product_asin}.jpg"
- response = requests.get(url)
- if response.status_code == 200:
- return url
- else:
- return None
-
- def get_image_html(self, product_asin):
- """Gets the Amazon affiliate image HTML for a product.
-
- Args:
- product_asin: The Amazon product ASIN.
-
- Returns:
- The Amazon affiliate image HTML, or None if the product is not found.
- """
-
- image_url = self.get_image_url(product_asin)
- if image_url is not None:
- return f'
'
- else:
- return None
-
-
-#######################################################
-
-import amazon_affiliate_images
-
-affiliate_images = AmazonAffiliateImages("YOUR_ASSOCIATE_TAG")
-image_html = affiliate_images.get_image_html("B00004CB54")
-
-# Print the image HTML
-print(image_html)
-
-# Output :
-# You can then use this image HTML in your blog post.
diff --git a/lib/amzn_affliate_links/amzn_product_description_writer.py b/lib/amzn_affliate_links/amzn_product_description_writer.py
deleted file mode 100644
index 85edb884..00000000
--- a/lib/amzn_affliate_links/amzn_product_description_writer.py
+++ /dev/null
@@ -1,30 +0,0 @@
-import openai
-from dotenv import load_dotenv
-
-load_dotenv()
-OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY")
-
-def gen_ecomm_product_desc(product_name):
- """Given a product name, generate relevant content for blogging.
- """
-
- product_desc = openai.ChatCompletion.create(
- model="gpt-3.5-turbo-16k",
- messages=[
- {"role": "system",
- "content": """Act as an expert E-commerce copywriter specializing in content optimization for SEO. As an E-commerce SEO expert who writes compelling product descriptions for users looking to buy online. I am going to provide the title of one e-commerce product and I want you to come up with a minimum of three distinct content sections for the product description, each section about a unique subset of keywords relating to the product I provide you. Make sure that each of the unique content sections are labeled with an informative and eye-catching subheading describing the main focus of the content section. The main point of these commands is for you to developing a new keyword-rich, informative, and captivating product summary/description that is less than 1000 words. The purpose of product description is marketing the products to users looking to buy. Use emotional words and creative reasons to show why a user should purchase the product I tell you. After you generate the new product summary, please generate a bulleted list of 5 possible H1 headings for this product page, and make each H1 less than 7 words each. Please also include bulleted list of broad match keywords that were used to accomplish writing the product summary. Write a persuasive and professional sounding Meta Title and Description that integrates similar language present in the new product summary text. Make sure to include a numerical aspect in the Meta Title. Do not echo my prompt. Do not remind me what I asked you for. Do not apologize. Do not self-reference."""
- },
- {
- "role": "user",
- "content": f"""Craft blog content for following e commerce product.
- Product: {product_name}""",
- },
- ],
- max_tokens=4096,
- temperature=1,
- )
-
- if "choices" in product_desc and len(product_desc["choices"]) > 0:
- return product_desc["choices"][0]["message"]["content"]
- else:
- return None
diff --git a/lib/utils/.alwrity_utils.py.swp b/lib/utils/.alwrity_utils.py.swp
new file mode 100644
index 00000000..6073c717
Binary files /dev/null and b/lib/utils/.alwrity_utils.py.swp differ
diff --git a/lib/workspace/structured_data_seo.mp4 b/lib/workspace/structured_data_seo.mp4
new file mode 100644
index 00000000..af177027
Binary files /dev/null and b/lib/workspace/structured_data_seo.mp4 differ