implements agentops with a langchain handler, agent tracking and tool call recording

This commit is contained in:
Braelyn Boynton
2024-03-19 18:47:22 -07:00
parent 637bd885cf
commit f6ee12dbc5
4 changed files with 75 additions and 2 deletions

View File

@@ -24,8 +24,11 @@ from pydantic_core import PydanticCustomError
from crewai.agents import CacheHandler, CrewAgentExecutor, CrewAgentParser, ToolsHandler
from crewai.utilities import I18N, Logger, Prompts, RPMController
from crewai.utilities.token_counter_callback import TokenCalcHandler, TokenProcess
from agentops.agent import track_agent
from agentops import LangchainCallbackHandler
@track_agent(name=None)
class Agent(BaseModel):
"""Represents an agent in a system.
@@ -55,6 +58,8 @@ class Agent(BaseModel):
_rpm_controller: RPMController = PrivateAttr(default=None)
_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)
@@ -119,6 +124,7 @@ class Agent(BaseModel):
def __init__(__pydantic_self__, **data):
config = data.pop("config", {})
super().__init__(**config, **data)
__pydantic_self__._agent_ops_agent_name = __pydantic_self__.role
@field_validator("id", mode="before")
@classmethod
@@ -151,7 +157,8 @@ class Agent(BaseModel):
"""set agent executor is set."""
if hasattr(self.llm, "model_name"):
self.llm.callbacks = [
TokenCalcHandler(self.llm.model_name, self._token_process)
TokenCalcHandler(self.llm.model_name, self._token_process),
LangchainCallbackHandler()
]
if not self.agent_executor:
self.set_cache_handler(self.cache_handler)

View File

@@ -9,6 +9,7 @@ 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
from agentops import record, ToolEvent
OPENAI_BIGGER_MODELS = ["gpt-4"]
@@ -80,6 +81,7 @@ class ToolUsage:
return error
try:
tool = self._select_tool(calling.tool_name)
record(ToolEvent(name=calling.tool_name))
except Exception as e:
error = getattr(e, "message", str(e))
self.task.increment_tools_errors()