Compare commits

..

76 Commits

Author SHA1 Message Date
Brandon Hancock
48e1505a0a Merge branch 'main' into undo-agentops-api-check 2024-10-16 11:18:19 -04:00
Vini Brasil
a6b7295092 Adapt Tools CLI to uv (#1455)
* Adapt Tools CLI to UV

* Fix failing test
2024-10-16 10:55:04 -03:00
dbubel
725d159e44 fix typo in template file (#1432) 2024-10-14 16:51:04 -04:00
Stephen Hankinson
ef21da15e6 Correct the role for the message being added to the messages list (#1438)
Co-authored-by: Brandon Hancock (bhancock_ai) <109994880+bhancockio@users.noreply.github.com>
2024-10-14 16:49:16 -04:00
Muhammad Noman Fareed
de5d2eaa9b Fix Cache Typo in Documentation (#1441) 2024-10-14 16:30:31 -04:00
Stephen Hankinson
e2badaa4c6 Use a slice for the manager request. Make the task use the agent i18n settings (#1446) 2024-10-14 16:30:05 -04:00
Eduardo Chiarotti
916dec2418 fix: training issue (#1433)
* fix: training issue

* fix: output from crew

* fix: message
2024-10-11 22:35:17 -03:00
Braelyn Boynton
161e2e20a5 remove extra code 2024-09-05 14:50:01 +09:00
Braelyn Boynton
a68f2cec41 remove extra code 2024-09-05 14:48:54 +09:00
Braelyn Boynton
9db3a4ab23 remove extra code 2024-09-05 14:48:28 +09:00
Braelyn Boynton
7d4cf9a7bc undo agentops api key check 2024-09-05 14:45:01 +09:00
Braelyn Boynton
7af89abe53 Merge remote-tracking branch 'refs/remotes/upstream/main' into undo-agentops-api-check 2024-09-05 14:41:51 +09:00
Braelyn Boynton
b3ae127d2c Merge remote-tracking branch 'refs/remotes/upstream/main' 2024-08-08 16:56:49 -07:00
Braelyn Boynton
0543059dbe Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	pyproject.toml
#	src/crewai/agent.py
#	src/crewai/crew.py
#	src/crewai/task.py
#	src/crewai/tools/tool_usage.py
#	src/crewai/utilities/evaluators/task_evaluator.py
2024-07-23 17:55:15 -04:00
Braelyn Boynton
c3b8ea21d3 deprecation messages 2024-07-08 13:56:17 -07:00
Braelyn Boynton
fa9a42cd89 fix crew logger bug 2024-06-06 18:28:11 -07:00
Braelyn Boynton
9b965d9e33 fix crew logger bug 2024-06-06 18:26:09 -07:00
Braelyn Boynton
45655a956a conditional protect agentops use 2024-06-06 17:58:34 -07:00
Braelyn Boynton
f2d2804854 Merge remote-tracking branch 'origin/main' 2024-06-06 17:09:05 -07:00
Braelyn Boynton
ae65622bd0 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	src/crewai/task.py
2024-06-06 17:08:39 -07:00
Braelyn Boynton
f516fba9b6 Merge branch 'main' into main 2024-06-06 17:07:28 -07:00
Braelyn Boynton
a4622bfce8 support skip auto end session 2024-05-29 14:28:24 -07:00
theCyberTech - Rip&Tear
0dd4f444ea Added timestamp to logger (#646)
* Added timestamp to logger

Updated the logger.py file to include timestamps when logging output. For example:

 [2024-05-20 15:32:48][DEBUG]: == Working Agent: Researcher
 [2024-05-20 15:32:48][INFO]: == Starting Task: Research the topic
 [2024-05-20 15:33:22][DEBUG]: == [Researcher] Task output:

* Update tool_usage.py

* Revert "Update tool_usage.py"

This reverts commit 95d18d5b6f.

incorrect bramch for this commit
2024-05-28 16:45:50 -07:00
Saif Mahmud
e2dfba63cd fixes #665 (#666) 2024-05-28 16:45:50 -07:00
theCyberTech - Rip&Tear
3bba04ac71 Update crew.py (#644)
Fixed Type on line 53
2024-05-28 16:45:50 -07:00
Mish Ushakov
b153bc1a80 Update BrowserbaseLoadTool.md (#647) 2024-05-28 16:45:50 -07:00
Mike Heavers
8e5bface29 Update README.md (#652)
Rework example so that if you use a custom LLM it doesn't throw code errors by uncommenting.
2024-05-28 16:45:50 -07:00
Anudeep Kolluri
9ac6752cbf Update agent.py (#655)
Changed default model value from gpt-4 to gpt-4o.
Reasoning.
gpt-4 costs 30$ per million tokens while gpt-4o costs 5$.
This is more cost friendly for default option.
2024-05-28 16:45:50 -07:00
Paul Sanders
a08d0dfe12 Clarify text in docstring (#662) 2024-05-28 16:45:50 -07:00
Paul Sanders
96e0dacfc1 Enable search in docs (#663) 2024-05-28 16:45:50 -07:00
Olivier Roberdet
f4ce482eb7 Fix typo in instruction en.json (#676) 2024-05-28 16:45:50 -07:00
Braelyn Boynton
c6471814b3 merge upstream 2024-05-28 16:45:20 -07:00
Howard Gil
2d88109cc3 Merge branch 'main' of https://github.com/joaomdmoura/crewAI 2024-05-21 12:18:03 -07:00
Braelyn Boynton
54237c9974 track task evaluator 2024-05-09 13:15:12 -07:00
Braelyn Boynton
b4241a892e agentops version bump 2024-05-06 21:28:47 -07:00
Braelyn Boynton
a6de5253d5 Merge remote-tracking branch 'upstream/main' 2024-05-06 11:50:31 -07:00
Braelyn Boynton
b9d6ec5721 use langchain callback handler to support all LLMs 2024-05-03 15:07:17 -07:00
Braelyn Boynton
498bf77f08 black formatting 2024-05-02 13:06:34 -07:00
Braelyn Boynton
be91c32488 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	pyproject.toml
#	src/crewai/agent.py
#	src/crewai/crew.py
#	src/crewai/tools/tool_usage.py
2024-05-02 12:52:31 -07:00
Braelyn Boynton
f2c2a625b0 add crew tag 2024-05-02 12:28:06 -07:00
Braelyn Boynton
b160a52139 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	pyproject.toml
#	src/crewai/agent.py
#	src/crewai/crew.py
#	src/crewai/tools/tool_usage.py
2024-04-30 01:09:16 -07:00
Braelyn Boynton
a19a37bd9a noop 2024-04-29 23:31:48 -07:00
Braelyn Boynton
2f789800b7 Revert "Revert "Revert "true dependency"""
This reverts commit e9335e89
2024-04-29 23:30:02 -07:00
Braelyn Boynton
8be18c8e11 agentops update 2024-04-19 20:05:47 -07:00
João Moura
e366f006ac Update pyproject.toml 2024-04-19 23:38:20 -03:00
João Moura
d678190850 Forcing version 0.1.5 2024-04-19 23:18:43 -03:00
Braelyn Boynton
9005dc7c59 cleanup 2024-04-19 19:10:26 -07:00
Braelyn Boynton
e9335e89a6 Revert "Revert "true dependency""
This reverts commit 4d1b460b
2024-04-19 19:09:20 -07:00
Braelyn Boynton
fd7de7f2eb Revert "Revert "cleanup""
This reverts commit cea33d9a5d.
2024-04-19 19:08:22 -07:00
Braelyn Boynton
c52b5e9690 agentops 0.1.5 2024-04-19 19:07:53 -07:00
Braelyn Boynton
7725e7c52e optional parent key 2024-04-19 19:04:21 -07:00
Braelyn Boynton
7f8573e6cb Merge remote-tracking branch 'origin/main' 2024-04-19 19:02:39 -07:00
Braelyn Boynton
cea33d9a5d Revert "cleanup"
This reverts commit 7f5635fb9e.
2024-04-19 19:02:20 -07:00
Braelyn Boynton
4d1b460b80 Revert "true dependency"
This reverts commit e52e8e9568.
2024-04-19 19:01:52 -07:00
João Moura
906a5bd8ec Update pyproject.toml 2024-04-19 22:54:57 -03:00
Braelyn Boynton
216cc832dc Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	poetry.lock
2024-04-18 16:21:19 -07:00
Braelyn Boynton
7f5635fb9e cleanup 2024-04-17 17:19:38 -07:00
Braelyn Boynton
0ce8d14742 add crew org key to agentops 2024-04-17 14:48:58 -07:00
Braelyn Boynton
e52e8e9568 true dependency 2024-04-17 14:39:23 -07:00
Braelyn Boynton
4f7a9a5b4b Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	src/crewai/crew.py
2024-04-17 14:27:31 -07:00
Braelyn Boynton
2af85c35b4 remove org key 2024-04-15 15:39:24 -04:00
Braelyn Boynton
e82149aaf9 Merge remote-tracking branch 'upstream/main' 2024-04-11 12:32:17 -07:00
Braelyn Boynton
de0ee8ce41 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	src/crewai/crew.py
2024-04-05 15:48:35 -07:00
Braelyn Boynton
b20ae847c4 agentops version bump 2024-04-05 15:47:01 -07:00
Braelyn Boynton
59f56324ea Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	poetry.lock
#	src/crewai/tools/tool_usage.py
2024-04-05 15:18:40 -07:00
Braelyn Boynton
79a0d8b94d optional agentops 2024-04-04 14:34:20 -07:00
Braelyn Boynton
750085498f remove telemetry code 2024-04-04 13:23:20 -07:00
Braelyn Boynton
215e39833a optional dependency usage 2024-04-03 23:14:37 -07:00
Braelyn Boynton
67bc1de4d6 make agentops optional 2024-04-03 15:36:47 -07:00
Braelyn Boynton
45e307b98a code cleanup 2024-04-02 12:25:52 -07:00
Braelyn Boynton
4402c9be74 merge upstream 2024-04-02 12:22:49 -07:00
Braelyn Boynton
5e46514398 better tool and llm tracking 2024-03-29 17:45:58 -07:00
Braelyn Boynton
c44c2b6808 track tool usage time 2024-03-29 14:28:33 -07:00
Braelyn Boynton
a9339fcef6 end session after completion 2024-03-26 14:09:58 -07:00
Braelyn Boynton
f67d0a26f1 track tool usage 2024-03-20 18:25:41 -07:00
Braelyn Boynton
f6ee12dbc5 implements agentops with a langchain handler, agent tracking and tool call recording 2024-03-19 18:47:22 -07:00
14 changed files with 66 additions and 81 deletions

View File

@@ -33,7 +33,7 @@ Think of an agent as a member of a team, with specific skills and a particular j
| **Verbose** *(optional)* | `verbose` | Setting this to `True` configures the internal logger to provide detailed execution logs, aiding in debugging and monitoring. Default is `False`. |
| **Allow Delegation** *(optional)* | `allow_delegation` | Agents can delegate tasks or questions to one another, ensuring that each task is handled by the most suitable agent. Default is `False`.
| **Step Callback** *(optional)* | `step_callback` | A function that is called after each step of the agent. This can be used to log the agent's actions or to perform other operations. It will overwrite the crew `step_callback`. |
| gbv vbn zzdsxcdsdfc**Cache** *(optional)* | `cache` | Indicates if the agent should use a cache for tool usage. Default is `True`. |
| **Cache** *(optional)* | `cache` | Indicates if the agent should use a cache for tool usage. Default is `True`. |
| **System Template** *(optional)* | `system_template` | Specifies the system format for the agent. Default is `None`. |
| **Prompt Template** *(optional)* | `prompt_template` | Specifies the prompt format for the agent. Default is `None`. |
| **Response Template** *(optional)* | `response_template` | Specifies the response format for the agent. Default is `None`. |

View File

@@ -15,27 +15,18 @@ from crewai.utilities.constants import TRAINED_AGENTS_DATA_FILE, TRAINING_DATA_F
from crewai.utilities.token_counter_callback import TokenCalcHandler
from crewai.utilities.training_handler import CrewTrainingHandler
agentops = None
try:
import agentops # type: ignore # Name "agentops" already defined on line 21
from agentops import track_agent # type: ignore
except ImportError:
def mock_agent_ops_provider():
def track_agent(*args, **kwargs):
def track_agent():
def noop(f):
return f
return noop
return track_agent
agentops = None
if os.environ.get("AGENTOPS_API_KEY"):
try:
from agentops import track_agent
except ImportError:
track_agent = mock_agent_ops_provider()
else:
track_agent = mock_agent_ops_provider()
@track_agent()
class Agent(BaseAgent):

View File

@@ -81,6 +81,7 @@ class BaseAgentTools(BaseModel, ABC):
task_with_assigned_agent = Task( # type: ignore # Incompatible types in assignment (expression has type "Task", variable has type "str")
description=task,
agent=agent,
expected_output="Your best answer to your coworker asking you this, accounting for the context shared.",
expected_output=agent.i18n.slice("manager_request"),
i18n=agent.i18n,
)
return agent.execute_task(task_with_assigned_agent, context)

View File

@@ -151,7 +151,7 @@ class CrewAgentExecutor(CrewAgentExecutorMixin):
)
self.have_forced_answer = True
self.messages.append(
self._format_msg(formatted_answer.text, role="user")
self._format_msg(formatted_answer.text, role="assistant")
)
except OutputParserException as e:

View File

@@ -25,7 +25,9 @@ class PlusAPI:
def _make_request(self, method: str, endpoint: str, **kwargs) -> requests.Response:
url = urljoin(self.base_url, endpoint)
return requests.request(method, url, headers=self.headers, **kwargs)
session = requests.Session()
session.trust_env = False
return session.request(method, url, headers=self.headers, **kwargs)
def login_to_tool_repository(self):
return self._make_request("POST", f"{self.TOOLS_RESOURCE}/login")

View File

@@ -2,7 +2,7 @@
import sys
from {{folder_name}}.crew import {{crew_name}}Crew
# This main file is intended to be a way for your to run your
# This main file is intended to be a way for you to run your
# crew locally, so refrain from adding necessary logic into this file.
# Replace with inputs you want to test with, it will automatically
# interpolate any tasks and agents information

View File

@@ -0,0 +1,10 @@
# Python-generated files
__pycache__/
*.py[oc]
build/
dist/
wheels/
*.egg-info
# Virtual environments
.venv

View File

@@ -1,14 +1,10 @@
[tool.poetry]
[project]
name = "{{folder_name}}"
version = "0.1.0"
description = "Power up your crews with {{folder_name}}"
authors = ["Your Name <you@example.com>"]
readme = "README.md"
requires-python = ">=3.10,<=3.13"
dependencies = [
"crewai[tools]>=0.70.1"
]
[tool.poetry.dependencies]
python = ">=3.10,<=3.13"
crewai = { extras = ["tools"], version = ">=0.70.1,<1.0.0" }
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

View File

@@ -4,6 +4,8 @@ import platform
import subprocess
import tempfile
from pathlib import Path
from netrc import netrc
import stat
import click
from rich.console import Console
@@ -147,7 +149,7 @@ class ToolCommand(BaseCommand, PlusAPIMixin):
if login_response.status_code != 200:
console.print(
"Failed to authenticate to the tool repository. Make sure you have the access to tools.",
"Authentication failed. Verify access to the tool repository, or try `crewai login`. ",
style="bold red",
)
raise SystemExit
@@ -159,23 +161,19 @@ class ToolCommand(BaseCommand, PlusAPIMixin):
"Successfully authenticated to the tool repository.", style="bold green"
)
def _set_netrc_credentials(self, credentials):
# Create .netrc or _netrc file
netrc_filename = "_netrc" if platform.system() == "Windows" else ".netrc"
netrc_path = Path.home() / netrc_filename
def _set_netrc_credentials(self, credentials, netrc_path=None):
if not netrc_path:
netrc_filename = "_netrc" if platform.system() == "Windows" else ".netrc"
netrc_path = Path.home() / netrc_filename
netrc_path.touch(mode=stat.S_IRUSR | stat.S_IWUSR, exist_ok=True)
netrc_content = f"""machine app.crewai.com
login {credentials['username']}
password {credentials['password']}
"""
netrc_instance = netrc(file=netrc_path)
netrc_instance.hosts["app.crewai.com"] = (credentials["username"], "", credentials["password"])
with open(netrc_path, "a") as netrc_file:
netrc_file.write(netrc_content)
with open(netrc_path, 'w') as file:
file.write(str(netrc_instance))
# Set appropriate permissions for Unix-like systems
if platform.system() != "Windows":
os.chmod(netrc_path, 0o600)
console.print(f"Added credentials to {netrc_filename}", style="bold green")
console.print(f"Added credentials to {netrc_path}", style="bold green")
def _add_package(self, tool_details):
tool_handle = tool_details["handle"]

View File

@@ -1,6 +1,5 @@
import asyncio
import json
import os
import uuid
import warnings
from concurrent.futures import Future
@@ -48,12 +47,10 @@ from crewai.utilities.planning_handler import CrewPlanner
from crewai.utilities.task_output_storage_handler import TaskOutputStorageHandler
from crewai.utilities.training_handler import CrewTrainingHandler
agentops = None
if os.environ.get("AGENTOPS_API_KEY"):
try:
import agentops # type: ignore
except ImportError:
pass
try:
import agentops
except ImportError:
agentops = None
if TYPE_CHECKING:
from crewai.pipeline.pipeline import Pipeline

View File

@@ -1,26 +1,22 @@
import ast
import datetime
import os
import time
from difflib import SequenceMatcher
from textwrap import dedent
from typing import Any, List, Union
import crewai.utilities.events as events
from crewai.agents.tools_handler import ToolsHandler
from crewai.task import Task
from crewai.telemetry import Telemetry
from crewai.tools.tool_calling import InstructorToolCalling, ToolCalling
from crewai.tools.tool_usage_events import ToolUsageError, ToolUsageFinished
from crewai.utilities import I18N, Converter, ConverterError, Printer
import crewai.utilities.events as events
agentops = None
if os.environ.get("AGENTOPS_API_KEY"):
try:
import agentops # type: ignore
except ImportError:
pass
try:
import agentops
except ImportError:
agentops = None
OPENAI_BIGGER_MODELS = ["gpt-4", "gpt-4o", "o1-preview", "o1-mini"]

View File

@@ -20,7 +20,8 @@
"getting_input": "This is the agent's final answer: {final_answer}\n\n",
"summarizer_system_message": "You are a helpful assistant that summarizes text.",
"sumamrize_instruction": "Summarize the following text, make sure to include all the important information: {group}",
"summary": "This is a summary of our conversation so far:\n{merged_summary}"
"summary": "This is a summary of our conversation so far:\n{merged_summary}",
"manager_request": "Your best answer to your coworker asking you this, accounting for the context shared."
},
"errors": {
"force_final_answer_error": "You can't keep going, this was the best you could do.\n {formatted_answer.text}",

View File

@@ -1,4 +1,3 @@
import os
from typing import List
from pydantic import BaseModel, Field
@@ -7,26 +6,16 @@ from crewai.utilities import Converter
from crewai.utilities.pydantic_schema_parser import PydanticSchemaParser
def mock_agent_ops_provider():
def track_agent(*args, **kwargs):
agentops = None
try:
from agentops import track_agent
except ImportError:
def track_agent(name):
def noop(f):
return f
return noop
return track_agent
agentops = None
if os.environ.get("AGENTOPS_API_KEY"):
try:
from agentops import track_agent
except ImportError:
track_agent = mock_agent_ops_provider()
else:
track_agent = mock_agent_ops_provider()
class Entity(BaseModel):
name: str = Field(description="The name of the entity.")

View File

@@ -92,16 +92,20 @@ class TestPlusAPI(unittest.TestCase):
)
self.assertEqual(response, mock_response)
@patch("crewai.cli.plus_api.requests.request")
def test_make_request(self, mock_request):
@patch("crewai.cli.plus_api.requests.Session")
def test_make_request(self, mock_session):
mock_response = MagicMock()
mock_request.return_value = mock_response
mock_session_instance = mock_session.return_value
mock_session_instance.request.return_value = mock_response
response = self.api._make_request("GET", "test_endpoint")
mock_request.assert_called_once_with(
mock_session.assert_called_once()
mock_session_instance.request.assert_called_once_with(
"GET", f"{self.api.base_url}/test_endpoint", headers=self.api.headers
)
mock_session_instance.trust_env = False
self.assertEqual(response, mock_response)
@patch("crewai.cli.plus_api.PlusAPI._make_request")