40 lines
1.5 KiB
Python
40 lines
1.5 KiB
Python
"""Bridge Agent Event Bus events into Agent Observability metrics."""
|
|
|
|
from .agent_observability_hooks import AgentObservabilityHooks
|
|
|
|
|
|
class AgentEventObservabilityBridge:
|
|
def __init__(self, hooks: AgentObservabilityHooks | None = None):
|
|
self.hooks = hooks or AgentObservabilityHooks()
|
|
|
|
def consume(self, event: dict, *, actor=None, trace=None):
|
|
kind = event.get("kind")
|
|
payload = event.get("payload", {})
|
|
if kind == "agent_started":
|
|
return self.hooks.start(
|
|
user_id=payload.get("user_id", "unknown"),
|
|
visible_scope=payload.get("scope", "self"),
|
|
entry_agent=payload.get("agent", "unknown"),
|
|
execution_id=event.get("id"),
|
|
actor=actor,
|
|
trace=trace,
|
|
)
|
|
if kind == "agent_delegated":
|
|
return self.hooks.delegate(event["execution_id"], payload.get("agent", "unknown"))
|
|
if kind == "token_consumed":
|
|
return self.hooks.tokens(
|
|
event["execution_id"],
|
|
payload.get("input_tokens", 0),
|
|
payload.get("output_tokens", 0),
|
|
)
|
|
if kind in {"agent_completed", "agent_failed"}:
|
|
return self.hooks.finish(
|
|
event["execution_id"],
|
|
payload.get("closed_by"),
|
|
"failed" if kind == "agent_failed" else "completed",
|
|
)
|
|
return {"status": "ignored", "kind": kind}
|
|
|
|
|
|
__all__ = ["AgentEventObservabilityBridge"]
|