mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-07-02 13:48:09 +00:00
Fix JSON crew template rendering (#6359)
JSON crews were not using existing CLI templates.
This commit is contained in:
@@ -12,6 +12,8 @@ from packaging.version import Version
|
||||
import crewai_cli.create_json_crew as json_crew
|
||||
import crewai_cli.tui_picker as tui_picker
|
||||
from crewai_cli.create_crew import create_crew, create_folder_structure
|
||||
from crewai_cli.utils import render_template
|
||||
from crewai_cli.version import get_crewai_tools_dependency
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@@ -735,7 +737,7 @@ def test_json_create_provider_preselects_default_model(tmp_path, monkeypatch):
|
||||
|
||||
pyproject = tomli.loads((tmp_path / "json_crew" / "pyproject.toml").read_text())
|
||||
dependency = pyproject["project"]["dependencies"][0]
|
||||
assert dependency == "crewai[tools]>=1.15.0,<2.0.0"
|
||||
assert dependency == get_crewai_tools_dependency()
|
||||
assert Version("1.15.0") in Requirement(dependency).specifier
|
||||
assert Version("2.0.0") not in Requirement(dependency).specifier
|
||||
assert pyproject["tool"]["hatch"]["build"]["targets"]["wheel"][
|
||||
@@ -816,6 +818,37 @@ def test_json_create_provider_preselects_default_model(tmp_path, monkeypatch):
|
||||
assert '"knowledge_sources": []' in agent_template
|
||||
|
||||
|
||||
def test_json_crew_uses_template_files():
|
||||
template_names = {
|
||||
"pyproject.toml",
|
||||
"README.md",
|
||||
".gitignore",
|
||||
"agent.jsonc",
|
||||
"agent_settings.jsonc",
|
||||
"task.jsonc",
|
||||
"crew.jsonc",
|
||||
"knowledge/user_preference.txt",
|
||||
}
|
||||
|
||||
for template_name in template_names:
|
||||
assert (json_crew._TEMPLATES_DIR / template_name).is_file()
|
||||
|
||||
|
||||
def test_render_template_does_not_replace_tokens_inside_replacement_values(tmp_path):
|
||||
template = tmp_path / "template.txt"
|
||||
template.write_text("{{first}} {{second}}", encoding="utf-8")
|
||||
|
||||
rendered = render_template(
|
||||
template,
|
||||
{
|
||||
"first": "{{second}}",
|
||||
"second": "done",
|
||||
},
|
||||
)
|
||||
|
||||
assert rendered == "{{second}} done"
|
||||
|
||||
|
||||
def test_json_provider_default_model_helper():
|
||||
assert json_crew._default_model_for_provider("openai") == "openai/gpt-5.5"
|
||||
assert json_crew._default_model_for_provider("anthropic/claude-custom") == (
|
||||
|
||||
@@ -227,6 +227,80 @@ def test_json_runner_code_loads_current_cli_package_over_project_env(tmp_path: P
|
||||
assert marker.read_text() == "current:trained.pkl"
|
||||
|
||||
|
||||
def test_json_runner_imports_with_older_project_env_crewai_core(tmp_path: Path):
|
||||
old_parent = tmp_path / "old_env"
|
||||
old_crewai_core = old_parent / "crewai_core"
|
||||
old_crewai_core.mkdir(parents=True)
|
||||
(old_crewai_core / "__init__.py").write_text("")
|
||||
(old_crewai_core / "constants.py").write_text(
|
||||
"CREWAI_TRAINED_AGENTS_FILE_ENV = 'CREWAI_TRAINED_AGENTS_FILE'\n"
|
||||
)
|
||||
(old_crewai_core / "project.py").write_text(
|
||||
"def read_toml(*args, **kwargs):\n"
|
||||
" return {}\n"
|
||||
"def parse_toml(*args, **kwargs):\n"
|
||||
" return {}\n"
|
||||
"def get_project_description(*args, **kwargs):\n"
|
||||
" return None\n"
|
||||
"def get_project_name(*args, **kwargs):\n"
|
||||
" return None\n"
|
||||
"def get_project_version(*args, **kwargs):\n"
|
||||
" return None\n"
|
||||
)
|
||||
(old_crewai_core / "tool_credentials.py").write_text(
|
||||
"def build_env_with_all_tool_credentials(*args, **kwargs):\n"
|
||||
" return {}\n"
|
||||
"def build_env_with_tool_repository_credentials(*args, **kwargs):\n"
|
||||
" return {}\n"
|
||||
)
|
||||
(old_crewai_core / "version.py").write_text(
|
||||
"def check_version(*args, **kwargs):\n"
|
||||
" return None\n"
|
||||
"def get_crewai_version(*args, **kwargs):\n"
|
||||
" return '1.0.0'\n"
|
||||
"def get_latest_version_from_pypi(*args, **kwargs):\n"
|
||||
" return None\n"
|
||||
"def is_current_version_yanked(*args, **kwargs):\n"
|
||||
" return False\n"
|
||||
"def is_newer_version_available(*args, **kwargs):\n"
|
||||
" return False\n"
|
||||
)
|
||||
|
||||
marker = tmp_path / "marker.txt"
|
||||
old_crewai_project = old_parent / "crewai" / "project"
|
||||
old_crewai_project.mkdir(parents=True)
|
||||
(old_parent / "crewai" / "__init__.py").write_text("")
|
||||
(old_crewai_project / "__init__.py").write_text("")
|
||||
(old_crewai_project / "crew_loader.py").write_text(
|
||||
"from pathlib import Path\n"
|
||||
"class Crew:\n"
|
||||
" agents = []\n"
|
||||
" tasks = []\n"
|
||||
" def kickoff(self, inputs):\n"
|
||||
f" Path({str(marker)!r}).write_text('ran')\n"
|
||||
" return 'done'\n"
|
||||
"def load_crew(path):\n"
|
||||
" return Crew(), {}\n"
|
||||
)
|
||||
|
||||
env = os.environ.copy()
|
||||
env["PYTHONPATH"] = str(old_parent)
|
||||
env["CREWAI_DMN"] = "true"
|
||||
env[run_crew_module._CREWAI_CLI_RUNNER_PACKAGE_DIR_ENV] = str(
|
||||
Path(run_crew_module.__file__).resolve().parent
|
||||
)
|
||||
env[run_crew_module._CREWAI_JSON_CREW_DEFINITION_ENV] = "crew.jsonc"
|
||||
|
||||
subprocess.run(
|
||||
[sys.executable, "-c", run_crew_module._JSON_CREW_RUNNER_CODE],
|
||||
check=True,
|
||||
env=env,
|
||||
cwd=tmp_path,
|
||||
)
|
||||
|
||||
assert marker.read_text() == "ran"
|
||||
|
||||
|
||||
def test_json_run_without_pyproject_runs_in_process(monkeypatch, tmp_path: Path):
|
||||
monkeypatch.chdir(tmp_path)
|
||||
called: dict = {}
|
||||
|
||||
Reference in New Issue
Block a user