Merge pull request #2336 from sakunkun/bug_fix

fix: retrieve function_calling_llm from registered LLMs in CrewBase
This commit is contained in:
Lucas Gomide
2025-04-09 09:59:38 -03:00
committed by GitHub
3 changed files with 38 additions and 8 deletions

View File

@@ -137,13 +137,11 @@ def CrewBase(cls: T) -> T:
all_functions, "is_cache_handler" all_functions, "is_cache_handler"
) )
callbacks = self._filter_functions(all_functions, "is_callback") callbacks = self._filter_functions(all_functions, "is_callback")
agents = self._filter_functions(all_functions, "is_agent")
for agent_name, agent_info in self.agents_config.items(): for agent_name, agent_info in self.agents_config.items():
self._map_agent_variables( self._map_agent_variables(
agent_name, agent_name,
agent_info, agent_info,
agents,
llms, llms,
tool_functions, tool_functions,
cache_handler_functions, cache_handler_functions,
@@ -154,7 +152,6 @@ def CrewBase(cls: T) -> T:
self, self,
agent_name: str, agent_name: str,
agent_info: Dict[str, Any], agent_info: Dict[str, Any],
agents: Dict[str, Callable],
llms: Dict[str, Callable], llms: Dict[str, Callable],
tool_functions: Dict[str, Callable], tool_functions: Dict[str, Callable],
cache_handler_functions: Dict[str, Callable], cache_handler_functions: Dict[str, Callable],
@@ -172,9 +169,10 @@ def CrewBase(cls: T) -> T:
] ]
if function_calling_llm := agent_info.get("function_calling_llm"): if function_calling_llm := agent_info.get("function_calling_llm"):
self.agents_config[agent_name]["function_calling_llm"] = agents[ try:
function_calling_llm self.agents_config[agent_name]["function_calling_llm"] = llms[function_calling_llm]()
]() except KeyError:
self.agents_config[agent_name]["function_calling_llm"] = function_calling_llm
if step_callback := agent_info.get("step_callback"): if step_callback := agent_info.get("step_callback"):
self.agents_config[agent_name]["step_callback"] = callbacks[ self.agents_config[agent_name]["step_callback"] = callbacks[

View File

@@ -8,6 +8,7 @@ researcher:
developments in {topic}. Known for your ability to find the most relevant developments in {topic}. Known for your ability to find the most relevant
information and present it in a clear and concise manner. information and present it in a clear and concise manner.
verbose: true verbose: true
function_calling_llm: "local_llm"
reporting_analyst: reporting_analyst:
role: > role: >
@@ -18,4 +19,5 @@ reporting_analyst:
You're a meticulous analyst with a keen eye for detail. You're known for You're a meticulous analyst with a keen eye for detail. You're known for
your ability to turn complex data into clear and concise reports, making your ability to turn complex data into clear and concise reports, making
it easy for others to understand and act on the information you provide. it easy for others to understand and act on the information you provide.
verbose: true verbose: true
function_calling_llm: "online_llm"

View File

@@ -2,7 +2,16 @@ import pytest
from crewai.agent import Agent from crewai.agent import Agent
from crewai.crew import Crew from crewai.crew import Crew
from crewai.project import CrewBase, after_kickoff, agent, before_kickoff, crew, task from crewai.llm import LLM
from crewai.project import (
CrewBase,
after_kickoff,
agent,
before_kickoff,
crew,
llm,
task,
)
from crewai.task import Task from crewai.task import Task
@@ -31,6 +40,13 @@ class InternalCrew:
agents_config = "config/agents.yaml" agents_config = "config/agents.yaml"
tasks_config = "config/tasks.yaml" tasks_config = "config/tasks.yaml"
@llm
def local_llm(self):
return LLM(
model='openai/model_name',
api_key="None",
base_url="http://xxx.xxx.xxx.xxx:8000/v1")
@agent @agent
def researcher(self): def researcher(self):
return Agent(config=self.agents_config["researcher"]) return Agent(config=self.agents_config["researcher"])
@@ -105,6 +121,20 @@ def test_task_name():
), "Custom task name is not being set as expected" ), "Custom task name is not being set as expected"
def test_agent_function_calling_llm():
crew = InternalCrew()
llm = crew.local_llm()
obj_llm_agent = crew.researcher()
assert (
obj_llm_agent.function_calling_llm is llm
), "agent's function_calling_llm is incorrect"
str_llm_agent = crew.reporting_analyst()
assert (
str_llm_agent.function_calling_llm.model == "online_llm"
), "agent's function_calling_llm is incorrect"
@pytest.mark.vcr(filter_headers=["authorization"]) @pytest.mark.vcr(filter_headers=["authorization"])
def test_before_kickoff_modification(): def test_before_kickoff_modification():
crew = InternalCrew() crew = InternalCrew()