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)