New tools added to ToBeMigrated/ directory: ai_marketing_tools/: - ai_backlinker: AI-powered backlink generation - ai_google_ads_generator: Google Ads generation with templates ai_writers/: - ai_blog_faqs_writer: FAQ generation for blogs - ai_copywriter: Multiple copywriter frameworks (AIDA, PAS, 4C, 4R, etc.) - ai_finance_report_generator: Financial report generation - ai_story_illustrator: Story illustration - ai_story_video_generator: Story video generation - ai_story_writer: AI story writing - github_blogs: GitHub blog integration - speech_to_blog: Audio to blog conversion - twitter_writers: Twitter/X content generation - youtube_writers: YouTube content generation These tools are in ToBeMigrated/ for future migration to the main backend.
193 lines
7.1 KiB
Python
193 lines
7.1 KiB
Python
import os
|
|
import configparser
|
|
import streamlit as st
|
|
from langchain_google_genai import ChatGoogleGenerativeAI
|
|
|
|
# Initialize session state variables if not already done
|
|
if 'progress' not in st.session_state:
|
|
st.session_state.progress = 0
|
|
|
|
|
|
def create_agents(search_keywords):
|
|
"""Create agents for content creation."""
|
|
try:
|
|
from crewai import Agent
|
|
from crewai_tools import SerperDevTool
|
|
except ImportError:
|
|
raise ImportError("The 'crewai' and/or 'crewai_tools' package is not installed. Please install them to use AI Agents Crew Writer features.")
|
|
search_tool = SerperDevTool()
|
|
google_api_key = os.getenv("GEMINI_API_KEY")
|
|
|
|
llm = ChatGoogleGenerativeAI(
|
|
model="gemini-1.5-flash-latest", verbose=True, temperature=0.6, google_api_key=google_api_key
|
|
)
|
|
|
|
try:
|
|
role, goal, backstory = read_config("content_researcher")
|
|
content_researcher = Agent(
|
|
role=role, goal=goal, backstory=backstory, tools=[search_tool], memory=True,
|
|
verbose=True, max_rpm=None, max_iter=10, allow_delegation=False, llm=llm
|
|
)
|
|
|
|
role, goal, backstory = read_config("content_outliner")
|
|
content_outliner = Agent(
|
|
role=role, goal=goal, backstory=backstory, memory=True,
|
|
verbose=True, tools=[search_tool], max_rpm=10, max_iter=10, allow_delegation=False, llm=llm
|
|
)
|
|
|
|
role, goal, backstory = read_config("content_writer")
|
|
content_writer = Agent(
|
|
role=role, goal=goal, backstory=backstory, memory=True,
|
|
verbose=True, max_rpm=10, max_iter=15, allow_delegation=False, llm=llm
|
|
)
|
|
|
|
role, goal, backstory = read_config("content_reviewer")
|
|
content_reviewer = Agent(
|
|
role=role, goal=goal, backstory=backstory, memory=True,
|
|
verbose=True, max_rpm=10, max_iter=10, allow_delegation=False, llm=llm
|
|
)
|
|
|
|
except Exception as err:
|
|
st.error(f"Error creating agents: {err}")
|
|
st.stop()
|
|
|
|
return [content_researcher, content_outliner, content_writer, content_reviewer]
|
|
|
|
def create_tasks(agents, search_keywords):
|
|
"""Create tasks for the agents."""
|
|
try:
|
|
from crewai import Task
|
|
except ImportError:
|
|
raise ImportError("The 'crewai' package is not installed. Please install it to use AI Agents Crew Writer features.")
|
|
try:
|
|
task_description, expected_output = read_config("research_task")
|
|
research_task = Task(
|
|
description=f"The main focus keywords are: '{search_keywords}'.\n{task_description}.",
|
|
expected_output=expected_output,
|
|
agent=agents[0]
|
|
)
|
|
|
|
task_description, expected_output = read_config("outline_task")
|
|
outline_task = Task(
|
|
description=f"{task_description}.\nThe main focus keywords are {search_keywords}",
|
|
expected_output=expected_output,
|
|
agent=agents[1]
|
|
)
|
|
|
|
task_description, expected_output = read_config("writer_task")
|
|
writer_task = Task(
|
|
description=f"{task_description}\nThe main focus keywords are {search_keywords}.",
|
|
expected_output=expected_output,
|
|
agent=agents[2]
|
|
)
|
|
|
|
task_description, expected_output = read_config("review_task")
|
|
proofread_task = Task(
|
|
description=f"{task_description}.\nThe main focus keywords are: {search_keywords}.",
|
|
expected_output=expected_output,
|
|
agent=agents[3]
|
|
)
|
|
|
|
except Exception as err:
|
|
st.error(f"Error creating tasks: {err}")
|
|
st.stop()
|
|
|
|
return [research_task, outline_task, writer_task, proofread_task]
|
|
|
|
def execute_tasks(agents, tasks, lang):
|
|
"""Execute tasks with the agents."""
|
|
try:
|
|
from crewai import Crew
|
|
except ImportError:
|
|
raise ImportError("The 'crewai' package is not installed. Please install it to use AI Agents Crew Writer features.")
|
|
crew = Crew(
|
|
agents=agents,
|
|
tasks=tasks,
|
|
verbose=2,
|
|
language=lang
|
|
)
|
|
try:
|
|
result = crew.kickoff()
|
|
except Exception as err:
|
|
st.error(f"Error executing tasks: {err}")
|
|
st.stop()
|
|
return result
|
|
|
|
def read_config(which_member):
|
|
"""Reads configuration for the specified agent or task."""
|
|
team_dir = os.path.join(os.getcwd(), "lib", "workspace", "my_content_team")
|
|
config_file = None
|
|
|
|
if 'content_researcher' in which_member or 'research_task' in which_member:
|
|
config_file = os.path.join(team_dir, "content_researcher.txt")
|
|
elif 'content_writer' in which_member or 'writer_task' in which_member:
|
|
config_file = os.path.join(team_dir, "content_writer.txt")
|
|
elif 'content_reviewer' in which_member or 'review_task' in which_member:
|
|
config_file = os.path.join(team_dir, "content_reviewer.txt")
|
|
elif 'content_outliner' in which_member or 'outline_task' in which_member:
|
|
config_file = os.path.join(team_dir, "content_outliner.txt")
|
|
|
|
try:
|
|
config = configparser.ConfigParser()
|
|
config.read(config_file)
|
|
role = config.get('main', 'role')
|
|
goal = config.get('main', 'goal')
|
|
backstory = config.get('backstory', 'text')
|
|
except Exception as err:
|
|
st.error(f"Error reading config: {err}")
|
|
st.stop()
|
|
|
|
if 'task' not in which_member:
|
|
return role, goal, backstory
|
|
else:
|
|
try:
|
|
task_description = config.get('task', 'task_description')
|
|
expected_output = config.get('task', 'task_expected_output')
|
|
except Exception as err:
|
|
st.error(f"Error reading task config: {err}")
|
|
st.stop()
|
|
return task_description, expected_output
|
|
|
|
|
|
def ai_agents_writers(search_keywords, lang="en"):
|
|
"""Main function to kickoff AI Agents content team."""
|
|
|
|
progress_bar = st.progress(0)
|
|
status_text = st.empty()
|
|
|
|
st.session_state.progress = 0
|
|
status_text.text("Setting up environment...")
|
|
status_text.text("Creating Agents team...")
|
|
try:
|
|
agents = create_agents(search_keywords)
|
|
st.session_state.progress += 10
|
|
progress_bar.progress(st.session_state.progress)
|
|
except Exception as err:
|
|
st.error(f"Failed in creating Agents team: {err}")
|
|
st.stop()
|
|
|
|
status_text.text("Creating tasks for Agents team...")
|
|
try:
|
|
tasks = create_tasks(agents, search_keywords)
|
|
st.session_state.progress += 25
|
|
progress_bar.progress(st.session_state.progress)
|
|
except Exception as err:
|
|
st.error(f"Failed in creating tasks for Agents team: {err}")
|
|
st.stop()
|
|
|
|
status_text.text("AI Agents busy writing your content...")
|
|
try:
|
|
result = execute_tasks(agents, tasks, lang)
|
|
st.session_state.progress += 60
|
|
progress_bar.progress(st.session_state.progress)
|
|
status_text.text("Tasks executed successfully.")
|
|
st.success("Successfully executed tasks.")
|
|
|
|
# Display result with an option to copy the content
|
|
st.markdown("### Result")
|
|
st.code(result, language='markdown')
|
|
st.download_button('Download Content', data=result, file_name='alwrity_result.md')
|
|
except Exception as err:
|
|
st.error(f"Failed to execute tasks: {err}")
|
|
|