from crewai import Agent, Task, Crew, Process from langchain_google_genai import ChatGoogleGenerativeAI from langchain_community.tools import DuckDuckGoSearchRun from langchain.agents import Tool import gradio as gr import os from dotenv import load_dotenv load_dotenv() llm = ChatGoogleGenerativeAI(model="gemini-pro", verbose=True, temperature=0.75, google_api_key=os.getenv('API_KEY')) duckduckgo_search = DuckDuckGoSearchRun() def create_crewai_setup(age, gender, disease): fitness_expert = Agent( role="Fitness Expert", goal=f"""Analyze the fitness requirements for a {age}-year-old {gender} with {disease} and suggest exercise routines and fitness strategies""", backstory=f"""Expert at understanding fitness needs, age-specific requirements, and gender-specific considerations. Skilled in developing customized exercise routines and fitness strategies.""", verbose=True, llm=llm, allow_delegation=True, tools=[duckduckgo_search], ) nutritionist = Agent( role="Nutritionist", goal=f"""Assess nutritional requirements for a {age}-year-old {gender} with {disease} and provide dietary recommendations""", backstory=f"""Knowledgeable in nutrition for different age groups and genders, especially for individuals of {age} years old. Provides tailored dietary advice based on specific nutritional needs.""", verbose=True, llm=llm, allow_delegation=True, ) doctor = Agent( role="Doctor", goal=f"""Evaluate the overall health considerations for a {age}-year-old {gender} with {disease} and provide recommendations for a healthy lifestyle.Pass it on to the disease_expert if you are not an expert of {disease} """, backstory=f"""Medical professional experienced in assessing overall health and well-being. Offers recommendations for a healthy lifestyle considering age, gender, and disease factors.""", verbose=True, llm=llm, allow_delegation=True, ) # Check if the person has a disease if disease.lower() == "yes": disease_expert = Agent( role="Disease Expert", goal=f"""Provide recommendations for managing {disease}""", backstory=f"""Specialized in dealing with individuals having {disease}. Offers tailored advice for managing the specific health condition. Do not prescribe medicines but only give advice.""", verbose=True, llm=llm, allow_delegation=True, ) disease_task = Task( description=f"""Provide recommendations for managing {disease}""", agent=disease_expert, llm=llm ) health_crew = Crew( agents=[fitness_expert, nutritionist, doctor, disease_expert], tasks=[task1, task2, task3, disease_task], verbose=2, process=Process.sequential, ) else: task1 = Task( description=f"""Analyze the fitness requirements for a {age}-year-old {gender}. Provide recommendations for exercise routines and fitness strategies.""", agent=fitness_expert, llm=llm ) task2 = Task( description=f"""Assess nutritional requirements for a {age}-year-old {gender}. Provide dietary recommendations based on specific nutritional needs. Do not prescribe a medicine""", agent=nutritionist, llm=llm ) task3 = Task( description=f"""Evaluate overall health considerations for a {age}-year-old {gender}. Provide recommendations for a healthy lifestyle.""", agent=doctor, llm=llm ) health_crew = Crew( agents=[fitness_expert, nutritionist, doctor], tasks=[task1, task2, task3], verbose=2, process=Process.sequential, ) # Create and Run the Crew crew_result = health_crew.kickoff() # Write "No disease" if the user does not have a disease if disease.lower() != "yes": crew_result += f"\n disease: {disease}" return crew_result # Gradio interface def run_crewai_app(age, gender, disease): crew_result = create_crewai_setup(age, gender, disease) return crew_result iface = gr.Interface( fn=run_crewai_app, inputs=["text", "text", "text"], outputs="text", title="Health Analysis", description="Enter age, gender, and disease (or 'no' if there is no disease) to analyze fitness, nutrition, and health strategies." ) iface.launch()