Merge PR #394: Derive task memory feedback_score from persisted task.status

- Use canonical persisted task.status (from DB) instead of incoming request parameter
- Implement explicit status-to-score mapping: completed→+1, skipped/dismissed/rejected→-1, other→0
- Normalize all negative outcomes uniformly for self-learning memory
- Ensure memory feedback aligns with backend status normalization rules
- Preserve contextuality_validation and quality_status response fields
- Keep failures non-fatal to API behavior with exception handling
- Improve code clarity with explicit conditional logic over ternary operators
This commit is contained in:
ajaysi
2026-03-08 18:28:52 +05:30

View File

@@ -191,10 +191,18 @@ async def set_task_status(
# Record outcome in memory for self-learning # Record outcome in memory for self-learning
try: try:
memory = TaskMemoryService(user_id, db) memory = TaskMemoryService(user_id, db)
normalized_status = (task.status or "").lower()
if normalized_status == "completed":
feedback_score = 1
elif normalized_status in {"skipped", "dismissed", "rejected"}:
feedback_score = -1
else:
feedback_score = 0
await memory.record_task_outcome( await memory.record_task_outcome(
task, task,
feedback_score=1 if status == "completed" else -1 if status == "dismissed" else 0, feedback_score=feedback_score,
feedback_text=completion_notes feedback_text=completion_notes,
) )
except Exception as e: except Exception as e:
logger.warning( logger.warning(