Trying to add graceful contradiction handling
This commit is contained in:
parent
e6fa97965c
commit
e00dacdbd3
@ -80,9 +80,13 @@ class ReginaldCog(commands.Cog):
|
|||||||
]
|
]
|
||||||
|
|
||||||
if user_profile:
|
if user_profile:
|
||||||
|
facts_text = "\n".join(
|
||||||
|
f"- {fact['fact']} (First noted: {fact['timestamp']}, Last updated: {fact['last_updated']})"
|
||||||
|
for fact in user_profile.get("facts", [])
|
||||||
|
)
|
||||||
formatted_messages.append({
|
formatted_messages.append({
|
||||||
"role": "system",
|
"role": "system",
|
||||||
"content": f"Knowledge about {user_name}: {user_profile.get('summary', 'No detailed memory yet.')}"
|
"content": f"Knowledge about {user_name}:\n{facts_text or 'No detailed memory yet.'}"
|
||||||
})
|
})
|
||||||
|
|
||||||
relevant_summaries = self.select_relevant_summaries(mid_term_summaries, prompt)
|
relevant_summaries = self.select_relevant_summaries(mid_term_summaries, prompt)
|
||||||
@ -345,7 +349,7 @@ class ReginaldCog(commands.Cog):
|
|||||||
await ctx.send(status_message)
|
await ctx.send(status_message)
|
||||||
|
|
||||||
|
|
||||||
async def update_long_term_memory(self, user_id: str, fact: str, source_message: str, timestamp: str):
|
async def update_long_term_memory(self, ctx, user_id: str, fact: str, source_message: str, timestamp: str):
|
||||||
"""Ensures long-term memory updates are structured, preventing overwrites and tracking historical changes."""
|
"""Ensures long-term memory updates are structured, preventing overwrites and tracking historical changes."""
|
||||||
|
|
||||||
async with self.config.guild(ctx.guild).long_term_profiles() as long_memory:
|
async with self.config.guild(ctx.guild).long_term_profiles() as long_memory:
|
||||||
@ -354,39 +358,46 @@ class ReginaldCog(commands.Cog):
|
|||||||
|
|
||||||
user_facts = long_memory[user_id]["facts"]
|
user_facts = long_memory[user_id]["facts"]
|
||||||
|
|
||||||
# Check if similar fact already exists
|
# Check if fact already exists
|
||||||
for entry in user_facts:
|
for entry in user_facts:
|
||||||
if entry["fact"].lower() == fact.lower():
|
if entry["fact"].lower() == fact.lower():
|
||||||
# If the fact already exists, do nothing
|
# ✅ If fact exists, just update the timestamp
|
||||||
|
entry["last_updated"] = timestamp
|
||||||
return
|
return
|
||||||
|
|
||||||
# Check for conflicting facts (facts about same topic but different info)
|
# Check for conflicting facts (same topic but different details)
|
||||||
conflicting_entry = None
|
conflicting_entry = None
|
||||||
for entry in user_facts:
|
for entry in user_facts:
|
||||||
if fact.split(" ")[0].lower() in entry["fact"].lower(): # Match topic keyword
|
existing_keywords = set(entry["fact"].lower().split())
|
||||||
|
new_keywords = set(fact.lower().split())
|
||||||
|
|
||||||
|
# If there's significant overlap in keywords, assume it's a conflicting update
|
||||||
|
if len(existing_keywords & new_keywords) >= 2:
|
||||||
conflicting_entry = entry
|
conflicting_entry = entry
|
||||||
break
|
break
|
||||||
|
|
||||||
if conflicting_entry:
|
if conflicting_entry:
|
||||||
# If contradiction found, update it instead of overwriting
|
# ✅ If contradiction found, archive the previous version
|
||||||
conflicting_entry["updated"] = timestamp
|
|
||||||
conflicting_entry["previous_versions"].append({
|
conflicting_entry["previous_versions"].append({
|
||||||
"fact": conflicting_entry["fact"],
|
"fact": conflicting_entry["fact"],
|
||||||
"source": conflicting_entry["source"],
|
"source": conflicting_entry["source"],
|
||||||
"timestamp": conflicting_entry["timestamp"]
|
"timestamp": conflicting_entry["timestamp"]
|
||||||
})
|
})
|
||||||
conflicting_entry["fact"] = fact # Store latest info
|
conflicting_entry["fact"] = fact # Store the latest fact
|
||||||
conflicting_entry["source"] = source_message
|
conflicting_entry["source"] = source_message
|
||||||
conflicting_entry["timestamp"] = timestamp
|
conflicting_entry["timestamp"] = timestamp
|
||||||
|
conflicting_entry["last_updated"] = timestamp
|
||||||
else:
|
else:
|
||||||
# Otherwise, add as new fact
|
# ✅ Otherwise, add it as a new fact
|
||||||
user_facts.append({
|
user_facts.append({
|
||||||
"fact": fact,
|
"fact": fact,
|
||||||
"source": source_message,
|
"source": source_message,
|
||||||
"timestamp": timestamp,
|
"timestamp": timestamp,
|
||||||
|
"last_updated": timestamp,
|
||||||
"previous_versions": []
|
"previous_versions": []
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
@commands.command(name="reginald_recall", help="Recalls what Reginald knows about a user.")
|
@commands.command(name="reginald_recall", help="Recalls what Reginald knows about a user.")
|
||||||
async def recall_user(self, ctx, user: discord.User):
|
async def recall_user(self, ctx, user: discord.User):
|
||||||
async with self.config.guild(ctx.guild).long_term_profiles() as long_memory:
|
async with self.config.guild(ctx.guild).long_term_profiles() as long_memory:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user