-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_entity_learner_manual.py
More file actions
90 lines (77 loc) · 3.19 KB
/
Copy pathtest_entity_learner_manual.py
File metadata and controls
90 lines (77 loc) · 3.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# test_entity_learner_manual.py
import asyncio
import sqlite3
import sys
import os
import tempfile
import shutil
import json
sys.path.insert(0, os.getcwd())
from memory.lesson_store import LessonStore
from core.entity_learner import EntityLearner
from core.constants import ENTITY_LEARNER_MIN_EVIDENCE
async def test_consolidation():
print("🧪 Test EntityLearner - Consolidation")
temp_dir = tempfile.mkdtemp()
db_path = os.path.join(temp_dir, "test.db")
print(f"📁 Base temporaire : {db_path}")
# 1. Base sur fichier
store = LessonStore(db_path)
print("✅ LessonStore créée.")
# 2. Insérer 3 leçons brutes distinctes via SQL (pour éviter l'upsert)
with store._get_connection() as conn:
cursor = conn.cursor()
for i in range(3):
cursor.execute('''
INSERT INTO lessons (
entity_type, scope, recommendation, environment,
confidence, evidence_count, keywords_json,
source_episodes_json, polarity, is_consolidated, is_active
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
''', (
"Planner",
"test_open_notepad",
f"Éviter de cliquer sur le bouton X (test {i})",
"simulated",
2/3,
1,
json.dumps(["notepad", "close"]),
json.dumps([f"mission_{i}"]),
"avoid",
0,
1
))
conn.commit()
print("✅ 3 leçons avoid insérées (via SQL direct).")
# Diagnostic : afficher le contenu
with store._get_connection() as conn:
conn.row_factory = sqlite3.Row
cursor = conn.cursor()
cursor.execute("SELECT id, scope, is_consolidated, is_active FROM lessons")
rows = cursor.fetchall()
print("🔍 Contenu de la table lessons :")
for row in rows:
print(dict(row))
# 3. Vérifier que le groupe est candidat
groups = store.get_unconsolidated_groups()
print(f"📊 Groupes candidats : {groups}")
assert len(groups) == 1, f"Un groupe devrait être candidat, trouvé {len(groups)}"
assert groups[0]["scope"] == "test_open_notepad"
# 4. Exécuter la consolidation
learner = EntityLearner(lesson_store=store, cache_manager=None)
count = await learner.consolidate_if_needed()
print(f"✅ Consolidation exécutée : {count} groupe(s) traités.")
# 5. Vérifier la leçon consolidée
consolidated = store.get_consolidated_lessons(["Planner"], "simulated")
print(f"📊 Leçons consolidées : {consolidated}")
assert len(consolidated) == 1, "Une leçon consolidée devrait exister"
assert consolidated[0]["scope"] == "test_open_notepad"
# 6. Vérifier les brutes (toujours présentes)
brutes = store.get_brute_lessons_by_group("Planner", "test_open_notepad", "simulated")
print(f"📊 Leçons brutes encore présentes : {len(brutes)}")
assert len(brutes) == 3, "Les 3 brutes doivent rester actives"
print("🎉 Test réussi !")
shutil.rmtree(temp_dir)
return True
if __name__ == "__main__":
asyncio.run(test_consolidation())