Open the-praxs opened 19 hours ago
@liqul here you will find the documentation of the AgentOps platform and the challenges in integrating TaskWeaver with it.
To explain some context:
SessionEventHandler
is more designed for displaying the process on any user interface. Therefore, it should contain all information that is needed for the ActionEvent from your description. CompletionService
creates a unified interface for integration with different LLM providers. Tracing
tracks most significant events from the perspective of TaskWeaver, such as planning and code execution.For now, Tracing
has tracked all the input/output to the LLM endpoint. It is standard Opentelemetry tracing, and each trace is a single round of a conversation (or session), started with the user's request and ended with the response to the user. So, you should be able to find all information for ActionEvent and LLMEvent from the traces. However, I'm not an expert of Opentelemetry and not sure if it is easy to customize a Opentelemtry data collector.
The hard part is the ToolEvent. Currently, we only track the code snippet execution as a whole, and you may know that each tool is a python function call in the code. The dynamically generated code is also in the trace, but we do not support tracking individual function call during the execution. This part could be tricky to support as we do not assume that the code execution will always happen in the local enviroment. It could be inside a container or even on a remote server (though we haven't supported this feature yet), which means, to track the fine-grained execution time of each plugin, there is still quite a lot of effort on the infrastructure.
So, in conclusion, I believe you can find most information from the traces, but I haven't any experiences in handling Opentelemetry traces. Since you have already get most of ActionEvents from SessionEventHandler
, having a minimum modification to CompletionService
is sufficient for LLMEvents. But tracking fine-grained tool invocations is not supported today.
I can experiment with the Tracing
module for what I need in the LLMEvent
attributes.
What kind of modifications are you thinking for the CompletionService
? I think that's easier than collecting the traces so it will get the ball rolling.
Is your feature request related to a problem? Please describe.
I am using AgentOps as my agent observability platform, and I'm trying to build a TaskWeaver integration. Currently there are some blockers that prevent TaskWeaver from exporting the required information to AgentOps.
What is AgentOps?
AgentOps is a platform for tracking and analyzing the interactions between users and AI agents. It provides a python SDK for tracking the analytics of AI agents. and a dashboard for visualization of the collected data.
The docs are available here and the Github repo is available here.
Challenges integrating TaskWeaver with AgentOps
This PR is using the
SessionEventHandler
class to track the analytics of the TaskWeaver app. We want to track the information about different events in the TaskWeaver app i.e. theSession
, theRound
and thePost
by mapping them to the AgentOps events -ActionEvent
,LLMEvent
,ToolEvent
, and an additionalErrorEvent
for reporing errors during tracking of any aforementioned events.However, the following caveats are observed:
SessionEventHandler
class, we are able to track most of the information except those of the LLM calls and the associated Tool calls. Since thesend_message
function is not handled by theSessionEventHandler
class, the user query is not available for tracking. Similarly, thetaskweaver_config.json
file is not being tracked as theapp_dir
variable is not available in theSessionEventHandler
class.openai
,anthropic
etc) but TaskWeaver uses a custom wrapper around the LLM provider libraries using aCompletionService
class. I made an attempt to patch theCompletionService
class for each LLM provider in TaskWeaver to track the LLM calls, but no information was captured.Tracing
module which is a wrapper around theopentelemetry
library. However, I see no detailed documentation on modifying this class to use a different tracing backend.Describe the solution you'd like
From my observations, the TaskWeaver app is using the
Injector
library to manage the dependency injections in the codebase. The following proposed solutions are based on this observation:Injector
class to inject the AgentOps python SDK so that theSessionEventHandler
class can track the analytics of the TaskWeaver app.CompletionService
class to track the LLM calls and the associated Tool calls.Tracing
class to use a different tracing backend.Alternatively, I would like to know if we can expose the information ranging from the user query to the LLM provider used in the
SessionEventHandler
class so that we can track the analytics using the AgentOps python SDK.Describe alternatives you've considered
One of the ways is to pass the
Session
object to the AgentOps handler directly and extract the required information. This is not a clean solution as changes to the TaskWeaver codebase would break the integration and thus affect scalability.Additional context
Here is the code I used to track the analytics of the TaskWeaver app:
This video will demonstrate the tracking on the AgentOps dashboard.