Prudvireddy's picture
Upload 16 files
31fd2e3 verified
from crewai import Agent, Task
from tools import scrape_website, generate_images_and_add_to_blog, generate_video
# from langchain_groq import ChatGroq
from langchain_openai import ChatOpenAI
from utils import post_image_and_text
def get_agents_and_tasks(is_token):
# llm = ChatGroq(model="llama3-70b-8192", api_key=groq_api_key)
llm = ChatOpenAI(model='gpt-4o-mini')
information_retriever_agent = Agent(
role="Web Information Retriever",
goal="To retieve all the information from the website and summarize the information.",
backstory="You are web information retriever agent. You are expert in scraping websites and summarizing the content.",
verbose=True,
llm=llm,
allow_delegation=False
)
task_scrape = Task(
description="Scrape all the informatin from the website: {website}.",
expected_output="Scraped information from the website: {website}",
agent=information_retriever_agent,
tools=[scrape_website]
)
task_summarize = Task(
description="provide a neet summary of the company. Do not add up things. ",
expected_output="Detailed summary of a company web page. "
# "Start with Company name, Mission and Vision, Leadership. "
# "Explain it's Products and Services, Market presence, Financial highlights, Recent Developments and Future plans. "
# "If there are not mentioned, explain they have mentioned."
"Do not add up things.",
agent=information_retriever_agent,
context=[task_scrape]
)
blog_agent = Agent(
role="Blog Writer",
goal="Create captivating blog that inspire and educate readers.",
backstory="You are a skilled blog writer for a company, creating insightful and engaging blog posts on various topics. You have a passion for sharing knowledge through writing. With years of experience in the industry, you know how to craft compelling narratives and provide valuable insights to your audience.",
verbose=True,
llm=llm,
allow_delegation=False
)
task_create_blog = Task(
description=
"Write a compelling blog on the topic '{topic}' for the company."
"Begin by explaining the topic, followed by an introduction to the company. Do not add up things. "
# "In the second half of blog, include a brief mention of the company to highlight its relevance to the topic. "
"The blog should cover various aspects relevant to {topic}, ensuring it provides comprehensive insights and value to the readers. "
"The blog should contain 2 image, so insert '<-IMAGE->' where image has to be inserted. One image should be after first paragraph. "
"The blog should not contain author details.",
expected_output="A full engaging and informative blog post about the topic: '{topic}'",
# output_file="topic_blog_post.md",
agent=blog_agent,
context=[task_summarize]
)
task_visual_prompts = Task(
description = "Replace <-IMAGE-> with prompts.There should be 2 images in the blog. "
"Every prompt should be enclosed in '<image> prompt </image>' tag. "
"The image should not contain any form of text, names of persons, company or company logo, etc. "
"Prompt is 'What you wish to see in the output image'. "
"A descriptive prompt that clearly defines elements, colors, and subjects will lead to better results. "
# "To control the weight of a given word use the format (word:weight), where word is the word you'd like to control the weight of and weight is a value between 0 and 1. "
"For example: The sky was a crisp (blue:0.3) and (green:0.8) would convey a sky that was blue and green, but more green than blue. The weight applies to all words in the prompt. ",
# "Image should not contain names of persons, company or company logo, etc. ",
expected_output= "A full blog with prompts enclosed in '<image> prompt </image>' tag.",
agent = blog_agent,
context = [task_create_blog]
)
task_add_images = Task(
description = "Generate images and add to blog using the provided tool. If image generation fails, stop the execution.",
expected_output= "A full blog with images.",
agent = blog_agent,
# output_file="blog_post.md",
tools = [generate_images_and_add_to_blog],
context = [task_visual_prompts]
)
content_creation_agent = Agent(
role="Content Creator",
goal="To generate accurate and engaging narration and image prompt pairs for video scripts and subsequently generate videos using these pairs.",
backstory="The agent is designed to assist in creating engaging video content by generating narrations and image prompts, and then compiling them into videos.",
verbose=True,
llm=llm,
allow_delegation=False
)
# task_summarize_blog = Task(
# description = "Summarize the blog into two to three paragraphs.",
# # focusing on the topic: '{topic}'. "
# # "Ensure the summary is concise yet comprehensive, capturing the essence of the '{topic}' and its significance. ",
# expected_output = "Two to three paragraphs of summary of the blog, mainly focussed on '{topic}'. ",
# agent = content_creation_agent,
# context = [task_visual_prompts]
# )
# task_video_script = Task(
# description = "Write a script for video about the topic: {topic}. Remember to use context as just reference, do not use context as script.",
# expected_output = "Two to three paragraphs of script for the video, mainly focussed on '{topic}'. ",
# agent = content_creation_agent,
# context = [task_visual_prompts]
# )
task_generate_narration_image_pairs = Task(
description = "Generate narration and image prompt pairs for video script about the topic: '{topic}'. The number of pairs are limited to two. Total words in narration should be less than 100."
"Image should not contain any form of text, names of persons, company or company logo, etc. "
"Prompt is 'What you wish to see in the output image'. "
"A descriptive prompt that clearly defines elements, colors, and subjects will lead to better results. "
"To control the weight of a given word use the format (word:weight), where word is the word you'd like to control the weight of and weight is a value between 0 and 1. "
"For example: The sky was a crisp (blue:0.3) and (green:0.8) would convey a sky that was blue and green, but more green than blue. The weight applies to all words in the prompt. ",
# "Image should not contain names of persons, company or company logo, etc. ",
expected_output="Pairs of sentences. Narrations are enclosed in <narration> narration here </narration> tag. Image prompts are enclosed in <image> image prompt here </image> tag.",
agent=content_creation_agent,
# context = [task_video_script]
)
task_generate_video = Task(
description="Generate video using narration and image prompt pairs. If image generation fails, stop the execution.",
expected_output="Path of the video",
agent=content_creation_agent,
context = [task_generate_narration_image_pairs],
tools=[generate_video]
)
LinkedInPosterAgent = Agent(
role="LinkedIn Poster",
goal="To post articles on LinkedIn",
backstory="This agent is responsible for automating the posting of articles on LinkedIn to keep the profile active and engaging.",
verbose=True,
llm=llm,
allow_delegation=False
)
BlogtoArticle = Task(
description="Convert the blog into engaging LinkedIn post of 150 words. "
"Make the post attractive using emojis and symbols ."
"Use one image from blog for LinkedIn post",
expected_output="A dictionary containing image_path, post_content. ",
agent=LinkedInPosterAgent,
context = [task_add_images]
)
PostArticleToLinkedIn = Task(
description="""post article on LinkedIn.
token:
{token}
""",
expected_output="A confirmation that the article was successfully posted on LinkedIn.",
agent=LinkedInPosterAgent,
context = [BlogtoArticle],
tools=[post_image_and_text]
)
agents = [
information_retriever_agent,
blog_agent,
content_creation_agent,
]
tasks = [
task_scrape,
task_summarize,
task_create_blog,
task_visual_prompts,
task_add_images,
# task_summarize_blog,
# task_video_script,
task_generate_narration_image_pairs,
task_generate_video,
]
if is_token:
agents.append(LinkedInPosterAgent)
tasks.append(BlogtoArticle)
tasks.append(PostArticleToLinkedIn)
return agents, tasks