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.utilities import I18N, Logger, Prompts, RPMController
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()
@@ -58,6 +64,7 @@ class Agent(BaseModel):
_request_within_rpm_limit: Any = PrivateAttr(default=None)
_token_process: TokenProcess = TokenProcess()
agent_ops_agent_name: str = None
agent_ops_agent_id: str = None
formatting_errors: int = 0
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.tools.agent_tools import AgentTools
from crewai.utilities import I18N, Logger, RPMController
import agentops
try:
import agentops
except ImportError:
agentops = None
class Crew(BaseModel):
"""
@@ -346,8 +348,8 @@ class Crew(BaseModel):
def _finish_execution(self, output) -> None:
if self.max_rpm:
self._rpm_controller.stop_rpm_counter()
agentops.end_session(end_state="Success", end_state_reason="Finished Execution")
if agentops:
agentops.end_session(end_state="Success", end_state_reason="Finished Execution")
self._telemetry.end_crew(self, output)
def __repr__(self):

View File

@@ -4,6 +4,10 @@ import json
import os
import platform
from typing import Any
try:
import agentops
except ImportError:
agentops = None
import pkg_resources
from opentelemetry import trace
@@ -196,6 +200,21 @@ class Telemetry:
"""
if (self.ready) and (crew.share_crew):
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")
span = tracer.start_span("Crew Execution")
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.tools.tool_calling import InstructorToolCalling, ToolCalling
from crewai.utilities import I18N, Converter, ConverterError, Printer
import agentops
try:
import agentops
except ImportError:
agentops = None
OPENAI_BIGGER_MODELS = ["gpt-4"]
@@ -98,7 +101,7 @@ class ToolUsage:
tool: BaseTool,
calling: Union[ToolCalling, InstructorToolCalling],
) -> 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):
try:
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")
return error
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)
if self.tools_handler:
@@ -183,7 +187,8 @@ class ToolUsage:
)
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(
llm=self.function_calling_llm,
tool_name=tool.name,