Spaces:
Runtime error
Runtime error
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() | |