crewaigent / app.py
Prathamesh1420's picture
Update app.py
63cb2cf verified
raw
history blame
4.36 kB
import streamlit as st
from crewai import Agent, Task, Crew
from langchain_google_genai import ChatGoogleGenerativeAI
from dotenv import load_dotenv
import os
# Load environment variables
load_dotenv()
GOOGLE_API_KEY = os.getenv('GOOGLE_API_KEY')
# Define LLM (check if there's a synchronous alternative or ensure async handling)
llm = ChatGoogleGenerativeAI(
model="gemini-1.5-flash",
verbose=True,
temperature=0.5,
google_api_key=GOOGLE_API_KEY
)
# Define Agents
planner = Agent(
role="Content Planner",
goal="Plan engaging and factually accurate content on {topic}",
backstory="You're working on planning a blog article "
"about the topic: {topic}."
"You collect information that helps the "
"audience learn something "
"and make informed decisions. "
"Your work is the basis for "
"the Content Writer to write an article on this topic.",
allow_delegation=False,
verbose=True
)
writer = Agent(
role="Content Writer",
goal="Write a compelling and well-structured blog post on {topic}.",
backstory="You're a writer who uses the content plan to create a detailed blog post. "
"Ensure it aligns with SEO best practices and the brand's voice.",
allow_delegation=False,
verbose=True
)
editor = Agent(
role="Editor",
goal="Edit a given blog post to align with the writing style of the organization.",
backstory="You are an editor who receives a blog post "
"from the Content Writer. "
"Your goal is to review the blog post "
"to ensure that it follows journalistic best practices,"
"provides balanced viewpoints "
"when providing opinions or assertions, "
"and also avoids major controversial topics "
"or opinions when possible.",
allow_delegation=False,
verbose=True
)
# Define Tasks
plan = Task(
description=(
"1. Prioritize the latest trends, key players, "
"and noteworthy news on {topic}.\n"
"2. Identify the target audience, considering "
"their interests and pain points.\n"
"3. Develop a detailed content outline including "
"an introduction, key points, and a call to action.\n"
"4. Include SEO keywords and relevant data or sources."
),
expected_output="A comprehensive content plan document "
"with an outline, audience analysis, "
"SEO keywords, and resources.",
agent=planner,
)
write = Task(
description=(
"1. Use the content plan to craft a compelling "
"blog post on {topic}.\n"
"2. Incorporate SEO keywords naturally.\n"
"3. Sections/Subtitles are properly named "
"in an engaging manner.\n"
"4. Ensure the post is structured with an "
"engaging introduction, insightful body, "
"and a summarizing conclusion.\n"
"5. Proofread for grammatical errors and "
"alignment with the brand's voice.\n"
),
expected_output="A well-written blog post "
"in markdown format, ready for publication, "
"each section should have 2 or 3 paragraphs.",
agent=writer,
)
edit = Task(
description=("Proofread the given blog post for "
"grammatical errors and "
"alignment with the brand's voice."),
expected_output="A well-written blog post in markdown format, "
"ready for publication, "
"each section should have 2 or 3 paragraphs.",
agent=editor
)
# Define Crew
crew = Crew(
agents=[planner, writer, editor],
tasks=[plan, write, edit],
verbose=2
)
# Streamlit App
def main():
st.title("Content Creation Assistant")
# Input for topic
topic = st.text_input("Enter the topic for the blog post:")
if st.button("Generate Content"):
if topic:
with st.spinner('Generating content...'):
try:
result = crew.kickoff(inputs={"topic": topic})
st.markdown(result)
except Exception as e:
st.error(f"An error occurred: {e}")
else:
st.error("Please enter a topic.")
if __name__ == "__main__":
main()