46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from app.agents.schemas.learning import LearningDecision, LearningSignal
|
||
|
|
|
||
|
|
|
||
|
|
def route_learning_signal(signal: LearningSignal) -> str:
|
||
|
|
if signal.signal_type == "preference":
|
||
|
|
return "memory"
|
||
|
|
if signal.signal_type in {"workflow", "decomposition", "tool_success"}:
|
||
|
|
return "skill"
|
||
|
|
if signal.signal_type == "correction":
|
||
|
|
return "audit"
|
||
|
|
return "memory"
|
||
|
|
|
||
|
|
|
||
|
|
def build_learning_bridge_summary(signals: list[LearningSignal]) -> dict[str, object]:
|
||
|
|
memory_count = 0
|
||
|
|
skill_count = 0
|
||
|
|
audit_count = 0
|
||
|
|
|
||
|
|
for signal in signals:
|
||
|
|
route = route_learning_signal(signal)
|
||
|
|
if route == "memory":
|
||
|
|
memory_count += 1
|
||
|
|
elif route == "skill":
|
||
|
|
skill_count += 1
|
||
|
|
else:
|
||
|
|
audit_count += 1
|
||
|
|
|
||
|
|
return {
|
||
|
|
"memory_signal_count": memory_count,
|
||
|
|
"skill_signal_count": skill_count,
|
||
|
|
"audit_signal_count": audit_count,
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
def update_learning_decision_with_bridge(
|
||
|
|
decision: LearningDecision,
|
||
|
|
signals: list[LearningSignal],
|
||
|
|
) -> LearningDecision:
|
||
|
|
bridge_summary = build_learning_bridge_summary(signals)
|
||
|
|
metadata = dict(decision.metadata or {})
|
||
|
|
metadata["bridge"] = bridge_summary
|
||
|
|
decision.metadata = metadata
|
||
|
|
return decision
|