AI-Agents-using-CrewAI / ContentGeneratorAgent.py
Sarath0x8f's picture
Upload 11 files
a9df80e verified
from crewai import Agent, Task, Crew, Process
from crewai_tools import SerperDevTool
import os
# Model options
llm_models = [
"gemini/gemini-1.5-flash",
"gemini/gemini-1.5-pro",
"gemini/gemini-pro"
]
selected_model = llm_models[0]
def set_model(selected_model_name):
global selected_model
selected_model = selected_model_name
def configure_api_keys(gemini_api_key, search_choice, serper_api_key):
if not gemini_api_key:
raise ValueError("Gemini API key is required")
os.environ['GEMINI_API_KEY'] = gemini_api_key
search_tool = None
if search_choice == "Yes":
if not serper_api_key:
raise ValueError("Serper API key is required for online search")
os.environ['SERPER_API_KEY'] = serper_api_key
search_tool = SerperDevTool()
return search_tool
def run_crew_cga(gemini_api_key, search_choice, serper_api_key, topic):
try:
search_tool = configure_api_keys(gemini_api_key, search_choice, serper_api_key)
researcher = Agent(
role="Online Research Specialist",
goal=f"Aggregate comprehensive information on {topic}",
verbose=True,
backstory="Expert research analyst with data sourcing expertise",
tools=[search_tool] if search_tool else [],
llm=selected_model,
allow_delegation=True
)
content_writer = Agent(
role="Expert Content Writer",
goal=f"Create SEO-optimized content on {topic}",
verbose=True,
backstory="Professional writer with digital journalism background",
tools=[],
llm=selected_model,
allow_delegation=False
)
research_task = Task(
description=f"Conduct SEO research on '{topic}'",
expected_output="Detailed research report with SEO recommendations",
tools=[search_tool] if search_tool else [],
agent=researcher
)
writer_task = Task(
description=f"Write SEO-optimized article on '{topic}'",
expected_output="Polished article draft ready for publication",
agent=content_writer,
output_file="content.md"
)
crew = Crew(
agents=[researcher, content_writer],
tasks=[research_task, writer_task],
process=Process.sequential,
verbose=True,
max_rpm=100,
share_crew=True,
output_log_file=True
)
crew.kickoff(inputs={'topic': topic})
with open("content.md", "r") as f:
content = f.read()
with open("logs.txt", 'r') as f:
logs = f.read()
# Clear the logs file after reading
with open("logs.txt", 'w') as f:
f.truncate(0)
return content, logs
except Exception as e:
return f"Error: {str(e)}", str(e)