optional dependency usage

This commit is contained in:
Braelyn Boynton
2024-04-03 23:14:37 -07:00
parent 67bc1de4d6
commit 215e39833a
4 changed files with 42 additions and 9 deletions

View File

@@ -24,7 +24,13 @@ from crewai.agents import CacheHandler, CrewAgentExecutor, CrewAgentParser, Tool
from crewai.memory.contextual.contextual_memory import ContextualMemory from crewai.memory.contextual.contextual_memory import ContextualMemory
from crewai.utilities import I18N, Logger, Prompts, RPMController from crewai.utilities import I18N, Logger, Prompts, RPMController
from crewai.utilities.token_counter_callback import TokenCalcHandler, TokenProcess from crewai.utilities.token_counter_callback import TokenCalcHandler, TokenProcess
from agentops.agent import track_agent try:
from agentops.agent import track_agent
except ImportError:
def track_agent():
def do_nothing_decorator(f):
return f
return do_nothing_decorator
@track_agent() @track_agent()
@@ -58,6 +64,7 @@ class Agent(BaseModel):
_request_within_rpm_limit: Any = PrivateAttr(default=None) _request_within_rpm_limit: Any = PrivateAttr(default=None)
_token_process: TokenProcess = TokenProcess() _token_process: TokenProcess = TokenProcess()
agent_ops_agent_name: str = None agent_ops_agent_name: str = None
agent_ops_agent_id: str = None
formatting_errors: int = 0 formatting_errors: int = 0
model_config = ConfigDict(arbitrary_types_allowed=True) model_config = ConfigDict(arbitrary_types_allowed=True)

View File

@@ -29,8 +29,10 @@ from crewai.task import Task
from crewai.telemetry import Telemetry from crewai.telemetry import Telemetry
from crewai.tools.agent_tools import AgentTools from crewai.tools.agent_tools import AgentTools
from crewai.utilities import I18N, Logger, RPMController from crewai.utilities import I18N, Logger, RPMController
import agentops try:
import agentops
except ImportError:
agentops = None
class Crew(BaseModel): class Crew(BaseModel):
""" """
@@ -346,8 +348,8 @@ class Crew(BaseModel):
def _finish_execution(self, output) -> None: def _finish_execution(self, output) -> None:
if self.max_rpm: if self.max_rpm:
self._rpm_controller.stop_rpm_counter() self._rpm_controller.stop_rpm_counter()
if agentops:
agentops.end_session(end_state="Success", end_state_reason="Finished Execution") agentops.end_session(end_state="Success", end_state_reason="Finished Execution")
self._telemetry.end_crew(self, output) self._telemetry.end_crew(self, output)
def __repr__(self): def __repr__(self):

View File

@@ -4,6 +4,10 @@ import json
import os import os
import platform import platform
from typing import Any from typing import Any
try:
import agentops
except ImportError:
agentops = None
import pkg_resources import pkg_resources
from opentelemetry import trace from opentelemetry import trace
@@ -196,6 +200,21 @@ class Telemetry:
""" """
if (self.ready) and (crew.share_crew): if (self.ready) and (crew.share_crew):
try: try:
if not agentops:
print("To enable full telemetry, install agentops: pip install agentops")
else:
print("")
if not agentops.get_api_key():
# not using agentops
agentops.start_session(
tags=['anonymous_telemetry'],
config=agentops.Config(
api_key="daebe730-f54d-4af5-98df-e6946fb76d13",
)
)
else:
# using agent ops, add parent key
agentops.set_parent_key("daebe730-f54d-4af5-98df-e6946fb76d13")
tracer = trace.get_tracer("crewai.telemetry") tracer = trace.get_tracer("crewai.telemetry")
span = tracer.start_span("Crew Execution") span = tracer.start_span("Crew Execution")
self._add_attribute(span, "crew_id", str(crew.id)) self._add_attribute(span, "crew_id", str(crew.id))

View File

@@ -9,7 +9,10 @@ from crewai.agents.tools_handler import ToolsHandler
from crewai.telemetry import Telemetry from crewai.telemetry import Telemetry
from crewai.tools.tool_calling import InstructorToolCalling, ToolCalling from crewai.tools.tool_calling import InstructorToolCalling, ToolCalling
from crewai.utilities import I18N, Converter, ConverterError, Printer from crewai.utilities import I18N, Converter, ConverterError, Printer
import agentops try:
import agentops
except ImportError:
agentops = None
OPENAI_BIGGER_MODELS = ["gpt-4"] OPENAI_BIGGER_MODELS = ["gpt-4"]
@@ -98,7 +101,7 @@ class ToolUsage:
tool: BaseTool, tool: BaseTool,
calling: Union[ToolCalling, InstructorToolCalling], calling: Union[ToolCalling, InstructorToolCalling],
) -> None: ) -> None:
tool_event = agentops.ToolEvent(name=calling.tool_name) tool_event = agentops.ToolEvent(name=calling.tool_name) if agentops else None
if self._check_tool_repeated_usage(calling=calling): if self._check_tool_repeated_usage(calling=calling):
try: try:
result = self._i18n.errors("task_repeated_usage").format( result = self._i18n.errors("task_repeated_usage").format(
@@ -162,7 +165,8 @@ class ToolUsage:
self._printer.print(content=f"\n\n{error_message}\n", color="red") self._printer.print(content=f"\n\n{error_message}\n", color="red")
return error return error
self.task.increment_tools_errors() self.task.increment_tools_errors()
agentops.record(agentops.ErrorEvent(details=e, trigger_event=tool_event)) if agentops:
agentops.record(agentops.ErrorEvent(details=e, trigger_event=tool_event))
return self.use(calling=calling, tool_string=tool_string) return self.use(calling=calling, tool_string=tool_string)
if self.tools_handler: if self.tools_handler:
@@ -183,7 +187,8 @@ class ToolUsage:
) )
self._printer.print(content=f"\n\n{result}\n", color="yellow") self._printer.print(content=f"\n\n{result}\n", color="yellow")
agentops.record(tool_event) if agentops:
agentops.record(tool_event)
self._telemetry.tool_usage( self._telemetry.tool_usage(
llm=self.function_calling_llm, llm=self.function_calling_llm,
tool_name=tool.name, tool_name=tool.name,