diff --git a/GramAddict/core/perception/action_memory.py b/GramAddict/core/perception/action_memory.py index ee36e27..a3fa1ed 100644 --- a/GramAddict/core/perception/action_memory.py +++ b/GramAddict/core/perception/action_memory.py @@ -71,7 +71,10 @@ class ActionMemory: self._last_click_context = None return - logger.info(f"✅ [ActionMemory] Confirming success for '{ctx['intent']}'. Boosting confidence.") + logger.info( + f"✅ [ActionMemory] Confirming success for '{ctx['intent']}'. Boosting confidence.", + extra={"color": "\x1b[32m"} + ) # Store or boost in Qdrant try: @@ -95,7 +98,10 @@ class ActionMemory: if intent and ctx["intent"] != intent: return - logger.warning(f"❌ [ActionMemory] Click failed for '{ctx['intent']}'. Applying penalty.") + logger.warning( + f"❌ [ActionMemory] Click failed for '{ctx['intent']}'. Applying penalty.", + extra={"color": "\x1b[31m"} + ) try: self.ui_memory.decay_confidence(ctx["intent"], ctx["xml_context"]) diff --git a/GramAddict/core/qdrant_memory.py b/GramAddict/core/qdrant_memory.py index aff3a14..a0a7a9d 100644 --- a/GramAddict/core/qdrant_memory.py +++ b/GramAddict/core/qdrant_memory.py @@ -429,8 +429,9 @@ class UIMemoryDB(QdrantBase): if exact_points: eval_result = _evaluate_payload(exact_points[0].payload, score=1.0, point_id=point_id) if eval_result: - logger.debug( - f"Resolved intent '{intent}' from Qdrant Memory via EXACT ID MATCH! (Confidence: {eval_result['effective_confidence']:.2f})" + logger.info( + f"🧠 [Memory] Applying learned pattern for '{intent}' (EXACT MATCH, Confidence: {eval_result['effective_confidence']:.2f})", + extra={"color": "\x1b[36m"} # Cyan color ) return eval_result["solution"] # If exact match failed evaluation (e.g. decayed), we shouldn't fall back to vector search because it's the exact intent! @@ -459,8 +460,9 @@ class UIMemoryDB(QdrantBase): if results and results[0].score >= similarity_threshold: eval_result = _evaluate_payload(results[0].payload, score=results[0].score, point_id=results[0].id) if eval_result: - logger.debug( - f"Resolved intent '{intent}' from Qdrant Memory via vector search! (Score: {results[0].score:.3f}, Confidence: {eval_result['effective_confidence']:.2f})" + logger.info( + f"🧠 [Memory] Applying learned pattern for '{intent}' (VECTOR MATCH, Score: {results[0].score:.3f}, Confidence: {eval_result['effective_confidence']:.2f})", + extra={"color": "\x1b[36m"} # Cyan color ) return eval_result["solution"] return None @@ -511,7 +513,10 @@ class UIMemoryDB(QdrantBase): ], wait=True, ) - logger.info(f"Learned pattern for '{intent}' and saved to Qdrant Memory (ID: {point_id[:8]}...).") + logger.info( + f"📥 [Memory] Learned new pattern for '{intent}' and saved to Qdrant (ID: {point_id[:8]}...)", + extra={"color": "\x1b[35m"} # Magenta color + ) except Exception as e: logger.debug(f"Qdrant storage error: {e}") @@ -573,7 +578,12 @@ class UIMemoryDB(QdrantBase): payload={"confidence": new_confidence}, points=[point_id], ) - logger.debug(f"Confidence for '{intent}' adjusted to {new_confidence:.2f} (delta: {delta:+.2f}).") + color = "\x1b[32m" if delta > 0 else "\x1b[31m" # Green for positive, Red for negative + symbol = "📈 [Memory] Positive Reinforcement:" if delta > 0 else "📉 [Memory] Negative Reinforcement:" + logger.info( + f"{symbol} Confidence for '{intent}' adjusted to {new_confidence:.2f} (delta: {delta:+.2f})", + extra={"color": color} + ) except Exception as e: logger.debug(f"Confidence adjustment error: {e}")