c889a57b6b
Test Suites / Build CI Environment (push) Has been cancelled
Test Suites / Basic Tests (push) Has been cancelled
Test Suites / End-to-End Tests (push) Has been cancelled
Test Suites / CLI Tests (push) Has been cancelled
Test Suites / Slow End-to-End Tests (push) Has been cancelled
Test Suites / Graph Database Tests (push) Has been cancelled
Test Suites / Vector DB Tests (push) Has been cancelled
Test Suites / Temporal Graph Test (push) Has been cancelled
Test Suites / Search Test on Different DBs (push) Has been cancelled
Test Suites / Example Tests (push) Has been cancelled
Test Suites / Notebook Tests (push) Has been cancelled
Test Suites / OS and Python Tests Ubuntu (push) Has been cancelled
Test Suites / OS and Python Tests Extended (push) Has been cancelled
Test Suites / LLM Test Suite (push) Has been cancelled
Test Suites / S3 File Storage Test (push) Has been cancelled
Test Suites / Run Integration Tests (push) Has been cancelled
Test Suites / MCP Tests (push) Has been cancelled
Test Suites / Docker Compose Test (push) Has been cancelled
Test Suites / Docker CI test (push) Has been cancelled
Test Suites / Relational DB Migration Tests (push) Has been cancelled
Test Suites / Distributed Cognee Test (push) Has been cancelled
Test Suites / DB Examples Tests (push) Has been cancelled
Test Suites / Test Completion Status (push) Has been cancelled
Test Suites / Claude Code Review (push) Has been cancelled
Test Suites / basic checks (push) Has been cancelled
build | Build and Push Cognee MCP Docker Image to dockerhub / docker-build-and-push (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
build | Build and Push Docker Image to dockerhub / docker-build-and-push (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges Core Functionality (3.11) (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges Core Functionality (3.12) (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges with Different Graph Databases (kuzu, kuzu) (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges with Different Graph Databases (neo4j, neo4j) (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges Examples (push) Has been cancelled
Weighted Edges Tests / Code Quality for Weighted Edges (push) Has been cancelled
135 lines
5.1 KiB
Python
135 lines
5.1 KiB
Python
import json
|
|
from typing import Optional
|
|
|
|
from cognee.context_global_variables import session_user
|
|
from cognee.exceptions import CogneeSystemError
|
|
from cognee.infrastructure.session.get_session_manager import get_session_manager
|
|
from cognee.modules.users.models import User
|
|
from cognee.shared.logging_utils import get_logger
|
|
|
|
logger = get_logger("extract_agent_trace_feedbacks")
|
|
|
|
|
|
def _normalize_trace_content(value) -> Optional[str]:
|
|
"""Convert raw trace content into a non-empty string suitable for memify payloads."""
|
|
if value is None:
|
|
return None
|
|
if isinstance(value, str):
|
|
normalized = value.strip()
|
|
return normalized or None
|
|
if isinstance(value, (bool, int, float)):
|
|
return str(value)
|
|
|
|
serialized = json.dumps(value, ensure_ascii=False, sort_keys=True)
|
|
normalized = serialized.strip()
|
|
return normalized or None
|
|
|
|
|
|
async def extract_agent_trace_feedbacks(
|
|
data,
|
|
session_ids: Optional[list[str]] = None,
|
|
raw_trace_content: bool = False,
|
|
last_n_steps: Optional[int] = None,
|
|
):
|
|
"""
|
|
Extract step-level agent trace content for the current user.
|
|
|
|
Retrieves either stored ``session_feedback`` values or raw ``method_return_value``
|
|
values from agent trace sessions and yields one formatted text blob per session.
|
|
Only non-empty entries are included.
|
|
|
|
Args:
|
|
data: Data passed from memify. If empty dict ({}), no external data is provided.
|
|
session_ids: Optional list of specific session IDs to extract.
|
|
raw_trace_content: When True, persist raw ``method_return_value`` values instead
|
|
of ``session_feedback`` summaries.
|
|
last_n_steps: Optional number of most recent trace steps to extract per
|
|
session. When None, all stored steps are used.
|
|
|
|
Yields:
|
|
String containing the session ID and all non-empty extracted entries.
|
|
|
|
Raises:
|
|
CogneeSystemError: If SessionManager is unavailable or extraction fails.
|
|
"""
|
|
try:
|
|
if not data or data == [{}]:
|
|
logger.info("Fetching agent trace feedback for current user")
|
|
|
|
user: User = session_user.get()
|
|
if not user:
|
|
raise CogneeSystemError(message="No authenticated user found in context", log=False)
|
|
|
|
user_id = str(user.id)
|
|
|
|
session_manager = get_session_manager()
|
|
if not session_manager.is_available:
|
|
raise CogneeSystemError(
|
|
message=(
|
|
"SessionManager not available for agent trace feedback extraction, "
|
|
"please enable caching in order to have sessions to save"
|
|
),
|
|
log=False,
|
|
)
|
|
|
|
if not isinstance(raw_trace_content, bool):
|
|
raise CogneeSystemError(
|
|
message="raw_trace_content must be a boolean",
|
|
log=False,
|
|
)
|
|
|
|
if session_ids:
|
|
for session_id in session_ids:
|
|
try:
|
|
content_label = (
|
|
"method_return_value" if raw_trace_content else "session_feedback"
|
|
)
|
|
if not raw_trace_content:
|
|
trace_values = await session_manager.get_agent_trace_feedback(
|
|
user_id=user_id,
|
|
session_id=session_id,
|
|
last_n=last_n_steps,
|
|
)
|
|
else:
|
|
trace_session = await session_manager.get_agent_trace_session(
|
|
user_id=user_id,
|
|
session_id=session_id,
|
|
last_n=last_n_steps,
|
|
)
|
|
trace_values = [entry.method_return_value for entry in trace_session]
|
|
|
|
normalized_trace_values = [
|
|
normalized
|
|
for value in trace_values
|
|
if (normalized := _normalize_trace_content(value)) is not None
|
|
]
|
|
if normalized_trace_values:
|
|
logger.info(
|
|
"Extracted session %s via SessionManager with %d %s entries",
|
|
session_id,
|
|
len(normalized_trace_values),
|
|
content_label,
|
|
)
|
|
yield f"Session ID: {session_id}\n\n" + "\n".join(normalized_trace_values)
|
|
except Exception as error:
|
|
logger.warning(
|
|
"Failed to extract agent trace %s for session %s: %s",
|
|
content_label,
|
|
session_id,
|
|
error,
|
|
)
|
|
continue
|
|
else:
|
|
logger.info(
|
|
"No specific session_ids provided. Please specify which sessions to extract."
|
|
)
|
|
|
|
except CogneeSystemError:
|
|
raise
|
|
except Exception as error:
|
|
logger.error("Error extracting agent trace feedbacks: %s", error)
|
|
raise CogneeSystemError(
|
|
message=f"Failed to extract agent trace feedbacks: {error}",
|
|
log=False,
|
|
)
|