perf(multi-agent): add kb_context_projection timing log

This commit is contained in:
CREDO23 2026-05-19 21:30:09 +02:00
parent 33bfce4406
commit bd153d3cdb

View file

@ -2,6 +2,7 @@
from __future__ import annotations from __future__ import annotations
import time
from typing import Any from typing import Any
from langchain.agents.middleware import AgentMiddleware, AgentState from langchain.agents.middleware import AgentMiddleware, AgentState
@ -10,6 +11,9 @@ from langgraph.runtime import Runtime
from app.agents.new_chat.filesystem_state import SurfSenseFilesystemState from app.agents.new_chat.filesystem_state import SurfSenseFilesystemState
from app.agents.new_chat.middleware.knowledge_search import _render_priority_message from app.agents.new_chat.middleware.knowledge_search import _render_priority_message
from app.utils.perf import get_perf_logger
_perf_log = get_perf_logger()
class KbContextProjectionMiddleware(AgentMiddleware): # type: ignore[type-arg] class KbContextProjectionMiddleware(AgentMiddleware): # type: ignore[type-arg]
@ -30,17 +34,34 @@ class KbContextProjectionMiddleware(AgentMiddleware): # type: ignore[type-arg]
runtime: Runtime[Any], runtime: Runtime[Any],
) -> dict[str, Any] | None: ) -> dict[str, Any] | None:
del runtime del runtime
start = time.perf_counter()
tree_text = state.get("workspace_tree_text") tree_text = state.get("workspace_tree_text")
priority = state.get("kb_priority") priority = state.get("kb_priority")
if not tree_text and not priority: if not tree_text and not priority:
_perf_log.info(
"[kb_context_projection] tree=0 priority=0 elapsed=%.3fs",
time.perf_counter() - start,
)
return None return None
messages = list(state.get("messages") or []) messages = list(state.get("messages") or [])
insert_at = max(len(messages) - 1, 0) insert_at = max(len(messages) - 1, 0)
tree_chars = 0
if tree_text: if tree_text:
tree_chars = len(tree_text)
messages.insert(insert_at, SystemMessage(content=tree_text)) messages.insert(insert_at, SystemMessage(content=tree_text))
priority_count = 0
if priority: if priority:
priority_count = (
len(priority) if hasattr(priority, "__len__") else 1
)
messages.insert(insert_at, _render_priority_message(priority)) messages.insert(insert_at, _render_priority_message(priority))
_perf_log.info(
"[kb_context_projection] tree_chars=%d priority_items=%d elapsed=%.3fs",
tree_chars,
priority_count,
time.perf_counter() - start,
)
return {"messages": messages} return {"messages": messages}