File size: 5,316 Bytes
fb293f8 59f5166 00aced7 ee397c8 1c7a0a7 15b8627 1c7a0a7 eea8c7f fe0c112 1c7a0a7 f06be5d 230d96d d1de168 ce7387d 4453360 3981c3e 86f2a58 230d96d df58f18 230d96d 3bd69bd 5028b6b 7ddb52b f407c48 7bc23ab e026826 7da0809 eea8c7f 35828ac 1c7a0a7 35828ac 7da0809 eea8c7f b6591d5 eea8c7f 69b460d ed057c8 eea8c7f ed057c8 eea8c7f 1c7a0a7 eea8c7f b6591d5 eea8c7f 3981c3e eea8c7f 6245998 f855987 eea8c7f b6591d5 a3b026a b6591d5 6bf14de 3981c3e 86f2a58 b6591d5 f855987 1c7a0a7 7f78cfc b6591d5 35828ac 3981c3e 86f2a58 b6591d5 f855987 35828ac 7da0809 4453360 0263c08 bfd09a6 4453360 bec1a98 2c55e46 bec1a98 4453360 7da0809 eea8c7f b6591d5 eea8c7f 35828ac eea8c7f b6591d5 eea8c7f b6591d5 13c2cf4 eea8c7f b6591d5 4453360 7da0809 cfae976 4453360 7da0809 35828ac 0b498b7 b6591d5 4453360 bec1a98 4453360 cfae976 4453360 ab1c2b7 d3c5ea2 7d6d333 d3c5ea2 fe96564 1312508 fe96564 1312508 0b498b7 1312508 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
import os
from crewai import Agent, Crew, Process, Task
from crewai.tools import tool
from crewai_tools import (
CodeInterpreterTool,
SerperDevTool,
VisionTool,
WebsiteSearchTool,
YoutubeVideoSearchTool
)
from openinference.instrumentation.crewai import CrewAIInstrumentor
from phoenix.otel import register
from util import get_final_answer
MANAGER_MODEL = "gpt-4.5-preview"
AGENT_MODEL = "gpt-4.5-preview"
PHOENIX_API_KEY = os.environ["PHOENIX_API_KEY"]
os.environ["PHOENIX_CLIENT_HEADERS"] = f"api_key={PHOENIX_API_KEY}"
os.environ["PHOENIX_COLLECTOR_ENDPOINT"] = "https://app.phoenix.arize.com"
tracer_provider = register(
auto_instrument=True,
project_name="gaia"
)
CrewAIInstrumentor().instrument(tracer_provider=tracer_provider)
def run_crew(question, file_name):
# Tools
python_coding_tool = CodeInterpreterTool()
image_search_tool = VisionTool()
web_search_tool = SerperDevTool()
web_rag_tool = WebsiteSearchTool()
youtube_search_tool = YoutubeVideoSearchTool()
# Agents
image_analysis_agent = Agent(
role="Image Analysis Agent",
goal="Analyze image to help answer question \"{topic}\". ",
backstory="As an expert image analysis assistant, you analyze the image to help answer the question. ",
allow_delegation=False,
llm=AGENT_MODEL,
#max_iter=1,
tools=[image_search_tool],
verbose=True
)
python_coding_agent = Agent(
role="Python Coding Agent",
goal="Write and/or execute Python code to help answer question \"{topic}\". ",
backstory="As an expert Python coding assistant, you write and/or execute Python code to help answer the question. ",
allow_delegation=False,
llm=AGENT_MODEL,
max_iter=1,
tools=[python_coding_tool],
verbose=False,
)
video_analysis_agent = Agent(
role="Video Analysis Agent",
goal="Analyze video to help answer question \"{topic}\". ",
backstory="As an expert video analysis assistant, you analyze the video to help answer the question. ",
allow_delegation=False,
llm=AGENT_MODEL,
max_iter=1,
tools=[youtube_search_tool],
verbose=False
)
web_search_agent = Agent(
role="Web Search Agent",
goal="Search the web to help answer question \"{topic}\", then scrape the most relevant web page. ",
backstory="As an expert web search assistant, you search the web to help answer the question. ",
allow_delegation=False,
llm=AGENT_MODEL,
max_iter=1,
tools=[web_search_tool, web_rag_tool],
verbose=False
)
manager_agent = Agent(
role="Manager",
goal="Try to answer the following question. If needed, delegate to **one** of your coworkers, image_analysis_agent, python_coding_agent, web_search_agent, or video_analysis_agent for help. Question: \"{topic}\" ",
backstory="As an expert manager assistant, you answer the question. ",
allow_delegation=True,
llm=MANAGER_MODEL,
max_iter=5,
tools=[],
verbose=False
)
# Tasks
image_analysis_task = Task(
agent=image_analysis_agent,
description="Analyze image to help answer question \"{topic}\". ",
expected_output="Content to help answer the question. "
)
python_coding_task = Task(
agent=python_coding_agent,
description="Write and/or execute Python code to help answer question \"{topic}\". ",
expected_output="Content to help answer the question. "
)
video_analysis_task = Task(
agent=video_analysis_agent,
description="Analyze video to help answer question \"{topic}\". ",
expected_output="Content to help answer the question. "
)
web_search_task = Task(
agent=web_search_agent,
description="Search the web to help answer question \"{topic}\", then scrape the most relevant web page. ",
expected_output="Content to help answer the question. "
)
#manager_task = Task(
# agent=manager_agent,
# description="Try to answer the following question. If needed, delegate to **one** of your coworkers, image_analysis_agent, python_coding_agent, web_search_agent, or video_analysis_agent for help. Question: \"{topic}\" ",
# expected_output="The answer to the question. "
#)
# Crew
crew = Crew(
agents=[image_analysis_agent, python_coding_agent, web_search_agent, video_analysis_agent],
#planning=True,
manager_agent=manager_agent,
#manager_llm=MANAGER_MODEL,
process=Process.hierarchical,
tasks=[image_analysis_task, python_coding_task, web_search_task, video_analysis_task],
#tasks=[manager_task],
verbose=True
)
if file_name:
question = f"{question} File name: data/{file_name}."
print("###")
print(f"Question: {question}")
print("###")
initial_answer = crew.kickoff(inputs={"topic": question})
print("###")
print(f"Initial answer: {initial_answer}")
final_answer = get_final_answer(question, str(initial_answer))
print(f"Final answer: {final_answer}")
print("###")
return final_answer |