mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-03 13:18:29 +00:00
* WIP. Procedure appears to be working well. Working on mocking properly for tests * All tests are passing now * rshift working * Add back in Gui's tool_usage fix * WIP * Going to start refactoring for pipeline_output * Update terminology * new pipeline flow with traces and usage metrics working. need to add more tests and make sure PipelineOutput behaves likew CrewOutput * Fix pipelineoutput to look more like crewoutput and taskoutput * Implemented additional tests for pipeline. One test is failing. Need team support * Update docs for pipeline * Update pipeline to properly process input and ouput dictionary * Update Pipeline docs * Add back in commentary at top of pipeline file * Starting to work on router * Drop router for now. will add in separately * In the middle of fixing router. A ton of circular dependencies. Moving over to a new design. * WIP. * Fix circular dependencies and updated PipelineRouter * Add in Eduardo feedback. Still need to add in more commentary describing the design decisions for pipeline * Add developer notes to explain what is going on in pipelines. * Add doc strings * Fix missing rag datatype * WIP. Converting usage metrics from a dict to an object * Fix tests that were checking usage metrics * Drop todo * Fix 1 type error in pipeline * Update pipeline to use UsageMetric * Add missing doc string * WIP. * Change names * Rename variables based on joaos feedback * Fix critical circular dependency issues. Now needing to fix trace issue. * Tests working now! * Add more tests which showed underlying issue with traces * Fix tests * Remove overly complicated test * Add router example to docs * Clean up end of docs * Clean up docs * Working on creating Crew templates and pipeline templates * WIP. * WIP * Fix poetry install from templates * WIP * Restructure * changes for lorenze * more todos * WIP: create pipelines cli working * wrapped up router * ignore mypy src on templates * ignored signature of copy * fix all verbose * rm print statements * brought back correct folders * fixes missing folders and then rm print statements * fixed tests * fixed broken test * fixed type checker * fixed type ignore * ignore types for templates * needed * revert * exclude only required * rm type errors on templates * rm excluding type checks for template files on github action * fixed missing quotes --------- Co-authored-by: Brandon Hancock <brandon@brandonhancock.io>
108 lines
3.8 KiB
Python
108 lines
3.8 KiB
Python
import shutil
|
|
from pathlib import Path
|
|
|
|
import click
|
|
|
|
|
|
def create_pipeline(name, router=False):
|
|
"""Create a new pipeline project."""
|
|
folder_name = name.replace(" ", "_").replace("-", "_").lower()
|
|
class_name = name.replace("_", " ").replace("-", " ").title().replace(" ", "")
|
|
|
|
click.secho(f"Creating pipeline {folder_name}...", fg="green", bold=True)
|
|
|
|
project_root = Path(folder_name)
|
|
if project_root.exists():
|
|
click.secho(f"Error: Folder {folder_name} already exists.", fg="red")
|
|
return
|
|
|
|
# Create directory structure
|
|
(project_root / "src" / folder_name).mkdir(parents=True)
|
|
(project_root / "src" / folder_name / "pipelines").mkdir(parents=True)
|
|
(project_root / "src" / folder_name / "crews").mkdir(parents=True)
|
|
(project_root / "src" / folder_name / "tools").mkdir(parents=True)
|
|
(project_root / "tests").mkdir(exist_ok=True)
|
|
|
|
# Create .env file
|
|
with open(project_root / ".env", "w") as file:
|
|
file.write("OPENAI_API_KEY=YOUR_API_KEY")
|
|
|
|
package_dir = Path(__file__).parent
|
|
template_folder = "pipeline_router" if router else "pipeline"
|
|
templates_dir = package_dir / "templates" / template_folder
|
|
|
|
# List of template files to copy
|
|
root_template_files = [".gitignore", "pyproject.toml", "README.md"]
|
|
src_template_files = ["__init__.py", "main.py"]
|
|
tools_template_files = ["tools/__init__.py", "tools/custom_tool.py"]
|
|
|
|
if router:
|
|
crew_folders = [
|
|
"classifier_crew",
|
|
"normal_crew",
|
|
"urgent_crew",
|
|
]
|
|
pipelines_folders = [
|
|
"pipelines/__init__.py",
|
|
"pipelines/pipeline_classifier.py",
|
|
"pipelines/pipeline_normal.py",
|
|
"pipelines/pipeline_urgent.py",
|
|
]
|
|
else:
|
|
crew_folders = [
|
|
"research_crew",
|
|
"write_linkedin_crew",
|
|
"write_x_crew",
|
|
]
|
|
pipelines_folders = ["pipelines/__init__.py", "pipelines/pipeline.py"]
|
|
|
|
def process_file(src_file, dst_file):
|
|
with open(src_file, "r") as file:
|
|
content = file.read()
|
|
|
|
content = content.replace("{{name}}", name)
|
|
content = content.replace("{{crew_name}}", class_name)
|
|
content = content.replace("{{folder_name}}", folder_name)
|
|
content = content.replace("{{pipeline_name}}", class_name)
|
|
|
|
with open(dst_file, "w") as file:
|
|
file.write(content)
|
|
|
|
# Copy and process root template files
|
|
for file_name in root_template_files:
|
|
src_file = templates_dir / file_name
|
|
dst_file = project_root / file_name
|
|
process_file(src_file, dst_file)
|
|
|
|
# Copy and process src template files
|
|
for file_name in src_template_files:
|
|
src_file = templates_dir / file_name
|
|
dst_file = project_root / "src" / folder_name / file_name
|
|
process_file(src_file, dst_file)
|
|
|
|
# Copy tools files
|
|
for file_name in tools_template_files:
|
|
src_file = templates_dir / file_name
|
|
dst_file = project_root / "src" / folder_name / file_name
|
|
shutil.copy(src_file, dst_file)
|
|
|
|
# Copy pipelines folders
|
|
for file_name in pipelines_folders:
|
|
src_file = templates_dir / file_name
|
|
dst_file = project_root / "src" / folder_name / file_name
|
|
process_file(src_file, dst_file)
|
|
|
|
# Copy crew folders
|
|
for crew_folder in crew_folders:
|
|
src_crew_folder = templates_dir / "crews" / crew_folder
|
|
dst_crew_folder = project_root / "src" / folder_name / "crews" / crew_folder
|
|
if src_crew_folder.exists():
|
|
shutil.copytree(src_crew_folder, dst_crew_folder)
|
|
else:
|
|
click.secho(
|
|
f"Warning: Crew folder {crew_folder} not found in template.",
|
|
fg="yellow",
|
|
)
|
|
|
|
click.secho(f"Pipeline {name} created successfully!", fg="green", bold=True)
|