Files
crewAI/tests/yaml_config_test.py
2025-03-11 08:44:54 +00:00

80 lines
2.6 KiB
Python

import os
import tempfile
import yaml
import pytest
from crewai.project import CrewBase, agent, crew, task, tool
from crewai import Agent, Crew, Task, Process
from crewai.tools import BaseTool
from pydantic import BaseModel, Field
from typing import Type
def test_function_calling_llm_in_yaml():
"""Test that function_calling_llm can be specified in YAML."""
# Create temporary YAML files
with tempfile.TemporaryDirectory() as temp_dir:
# Create agents.yaml with function_calling_llm
agents_yaml = os.path.join(temp_dir, "agents.yaml")
with open(agents_yaml, "w") as f:
yaml.dump(
{
"test_agent": {
"role": "Test Agent",
"goal": "Test Goal",
"backstory": "Test Backstory",
"function_calling_llm": "gpt-4o-mini"
}
},
f
)
# Create tasks.yaml
tasks_yaml = os.path.join(temp_dir, "tasks.yaml")
with open(tasks_yaml, "w") as f:
yaml.dump(
{
"test_task": {
"description": "Test Task",
"expected_output": "Test Output",
"agent": "test_agent"
}
},
f
)
# Create a CrewBase class that uses the YAML files
@CrewBase
class TestCrew:
"""Test crew with function_calling_llm in YAML."""
agents_config = agents_yaml
tasks_config = tasks_yaml
@agent
def test_agent(self) -> Agent:
return Agent(
config=self.agents_config["test_agent"],
verbose=True
)
@task
def test_task(self) -> Task:
return Task(
config=self.tasks_config["test_task"]
)
@crew
def crew(self) -> Crew:
return Crew(
agents=self.agents,
tasks=self.tasks,
process=Process.sequential,
verbose=True
)
# Initialize the crew - this should not raise a KeyError
test_crew = TestCrew()
crew_instance = test_crew.crew()
# Verify that function_calling_llm was properly set
assert crew_instance.agents[0].function_calling_llm is not None
assert crew_instance.agents[0].function_calling_llm.model == "gpt-4o-mini"