diff --git a/surfsense_backend/app/agents/multi_agent_chat/middleware/shared/permissions/ask/request.py b/surfsense_backend/app/agents/multi_agent_chat/middleware/shared/permissions/ask/request.py index d61d38f34..a725bfee1 100644 --- a/surfsense_backend/app/agents/multi_agent_chat/middleware/shared/permissions/ask/request.py +++ b/surfsense_backend/app/agents/multi_agent_chat/middleware/shared/permissions/ask/request.py @@ -17,6 +17,7 @@ from langchain_core.tools import BaseTool from langgraph.types import interrupt from app.agents.new_chat.permissions import Rule +from app.observability import metrics as ot_metrics from app.observability import otel as ot from .decision import normalize_permission_decision @@ -52,6 +53,8 @@ def request_permission_decision( ), ot.interrupt_span(interrupt_type=PERMISSION_ASK_INTERRUPT_TYPE), ): + ot_metrics.record_permission_ask(permission=tool_name) + ot_metrics.record_interrupt(interrupt_type=PERMISSION_ASK_INTERRUPT_TYPE) decision = interrupt(payload) return normalize_permission_decision(decision) diff --git a/surfsense_backend/app/agents/new_chat/middleware/compaction.py b/surfsense_backend/app/agents/new_chat/middleware/compaction.py index 16361e16b..8173976fe 100644 --- a/surfsense_backend/app/agents/new_chat/middleware/compaction.py +++ b/surfsense_backend/app/agents/new_chat/middleware/compaction.py @@ -34,6 +34,7 @@ from deepagents.middleware.summarization import ( ) from langchain_core.messages import SystemMessage +from app.observability import metrics as ot_metrics from app.observability import otel as ot if TYPE_CHECKING: @@ -178,6 +179,7 @@ class SurfSenseCompactionMiddleware(SummarizationMiddleware): messages_in=len(conversation_messages), extra={"compaction.cutoff_index": int(cutoff_index)}, ): + ot_metrics.record_compaction_run(reason="auto") messages_to_summarize, preserved_messages = super()._partition_messages( conversation_messages, cutoff_index ) diff --git a/surfsense_backend/app/agents/new_chat/middleware/doom_loop.py b/surfsense_backend/app/agents/new_chat/middleware/doom_loop.py index 850ecd1d2..d50cadc0e 100644 --- a/surfsense_backend/app/agents/new_chat/middleware/doom_loop.py +++ b/surfsense_backend/app/agents/new_chat/middleware/doom_loop.py @@ -47,6 +47,7 @@ from langgraph.config import get_config from langgraph.runtime import Runtime from langgraph.types import interrupt +from app.observability import metrics as ot_metrics from app.observability import otel as ot logger = logging.getLogger(__name__) @@ -195,6 +196,7 @@ class DoomLoopMiddleware(AgentMiddleware[AgentState[ResponseT], ContextT, Respon "interrupt.tool": (action or {}).get("tool", ""), }, ): + ot_metrics.record_interrupt(interrupt_type="permission_ask") decision = interrupt( { "type": "permission_ask", diff --git a/surfsense_backend/app/agents/new_chat/middleware/permission.py b/surfsense_backend/app/agents/new_chat/middleware/permission.py index f77b7e387..e174ab0bd 100644 --- a/surfsense_backend/app/agents/new_chat/middleware/permission.py +++ b/surfsense_backend/app/agents/new_chat/middleware/permission.py @@ -61,6 +61,7 @@ from app.agents.new_chat.permissions import ( aggregate_action, evaluate_many, ) +from app.observability import metrics as ot_metrics from app.observability import otel as ot logger = logging.getLogger(__name__) @@ -284,6 +285,8 @@ class PermissionMiddleware(AgentMiddleware): # type: ignore[type-arg] ), ot.interrupt_span(interrupt_type="permission_ask"), ): + ot_metrics.record_permission_ask(permission=tool_name) + ot_metrics.record_interrupt(interrupt_type="permission_ask") decision = interrupt(payload) return _normalize_permission_decision(decision)