From 99d4f1d900ccda78eb18a7734d3952f556855a50 Mon Sep 17 00:00:00 2001 From: Dita Aji Pratama Date: Sat, 11 Jul 2026 05:59:55 +0700 Subject: [PATCH] Improve ragroleplay --- lib/ragroleplay.py | 40 ++++++++++++++++++++++------------------ tools/ragroleplay.py | 9 ++------- 2 files changed, 24 insertions(+), 25 deletions(-) diff --git a/lib/ragroleplay.py b/lib/ragroleplay.py index ffb7bd5..491d67b 100644 --- a/lib/ragroleplay.py +++ b/lib/ragroleplay.py @@ -23,7 +23,6 @@ def create_table(db_path, vector_size): pyarrow.field('timestamp', pyarrow.timestamp('ms'), metadata={'description': 'When record created'}), pyarrow.field('character', pyarrow.string(), metadata={'description': 'Active Character'}), pyarrow.field('user', pyarrow.string(), metadata={'description': 'Active User'}), - pyarrow.field('relative_time', pyarrow.string(), metadata={'description': 'Explaining when it happen'}), pyarrow.field('event', pyarrow.string(), metadata={'description': 'What event'}), pyarrow.field('category', pyarrow.string(), metadata={'description': 'Event category'}), pyarrow.field('detail', pyarrow.string(), metadata={'description': 'Event detail'}), @@ -146,7 +145,7 @@ def users_filter(db_path, query_name=None, unique_id=None, persona_keyword=None, filters.append(f"persona LIKE '%{persona_keyword}%'") query = " AND ".join(filters) - results = table.search().where(query).to_list() if query else table.to_list() + results = table.search().where(query).to_list() if query else table.search().to_list() del table del db @@ -191,7 +190,8 @@ def users_update(db_path, model_url, model_name, user_id, **updates): if needs_reembed: record['vector_fullname'] = embed_text(model_url, model_name, record['fullname']) - table.upsert([record]) + table.delete(f"id = X'{_uuid(record['id']).hex}'") + table.add([record]) del table del db @@ -201,12 +201,12 @@ def users_update(db_path, model_url, model_name, user_id, **updates): print(f"Error updating user: {e}") return False -def memories_store(db_path, model_url, model_name, character, user, relative_time, event, category, detail, physical, emotional): +def memories_store(db_path, model_url, model_name, character, user, event, category, detail, physical, emotional): try: db = lancedb.connect(db_path) table = db.open_table("knowledge_memories") - context_text = f"Event: {event}\nDetail: {detail}\nCategory: {category}\nTime: {relative_time}" + context_text = f"Event: {event}\nDetail: {detail}\nCategory: {category}" vector = embed_text(model_url, model_name, context_text) record = { @@ -214,7 +214,6 @@ def memories_store(db_path, model_url, model_name, character, user, relative_tim "timestamp": datetime.now(), "character": character, "user": user, - "relative_time": relative_time, "event": event, "category": category, "detail": detail, @@ -247,7 +246,7 @@ def memories_filter(db_path, category=None, character=None, user=None): if filters: query = " AND ".join(filters) - results = table.search().where(query).to_list() if query else table.to_list() + results = table.search().where(query).to_list() if query else table.search().to_list() del table del db @@ -303,7 +302,7 @@ def memories_update(db_path, model_url, model_name, memory_id, **updates): return False record = current_record[0] - affected_fields = ['event', 'detail', 'category', 'relative_time'] + affected_fields = ['event', 'detail', 'category'] needs_reembed = any(field in updates for field in affected_fields) for key, value in updates.items(): @@ -311,10 +310,11 @@ def memories_update(db_path, model_url, model_name, memory_id, **updates): record[key] = value if needs_reembed: - context_text = f"Event: {record['event']}\nDetail: {record['detail']}\nCategory: {record['category']}\nTime: {record['relative_time']}" + context_text = f"Event: {record['event']}\nDetail: {record['detail']}\nCategory: {record['category']}" record['vector_context'] = embed_text(model_url, model_name, context_text) - table.upsert([record]) + table.delete(f"id = X'{_uuid(record['id']).hex}'") + table.add([record]) del table del db gc.collect() @@ -347,7 +347,7 @@ def objects_filter(db_path, keyword=None, object_id=None): query = "" if object_id: query = f"id = X'{_uuid(object_id).hex}'" elif keyword: query = f"keyword = '{keyword}'" - results = table.search().where(query).to_list() if query else table.to_list() + results = table.search().where(query).to_list() if query else table.search().to_list() del table; del db; gc.collect() return results except Exception as e: return [] @@ -364,7 +364,8 @@ def objects_update(db_path, model_url, model_name, object_id, **updates): if k in record: record[k] = v if needs_reembed: record['vector_context'] = embed_text(model_url, model_name, f"Keyword: {record['keyword']}\nWhen: {record['when']}\nName: {record['name']}") - table.upsert([record]) + table.delete(f"id = X'{_uuid(record['id']).hex}'") + table.add([record]) del table; del db; gc.collect() return True except Exception as e: return False @@ -402,7 +403,7 @@ def outfits_filter(db_path, keyword=None, outfit_id=None): query = "" if outfit_id: query = f"id = X'{_uuid(outfit_id).hex}'" elif keyword: query = f"keyword = '{keyword}'" - results = table.search().where(query).to_list() if query else table.to_list() + results = table.search().where(query).to_list() if query else table.search().to_list() del table; del db; gc.collect() return results except Exception as e: return [] @@ -419,7 +420,8 @@ def outfits_update(db_path, model_url, model_name, outfit_id, **updates): if k in record: record[k] = v if needs_reembed: record['vector_context'] = embed_text(model_url, model_name, f"Keyword: {record['keyword']}\nWhen: {record['when']}") - table.upsert([record]) + table.delete(f"id = X'{_uuid(record['id']).hex}'") + table.add([record]) del table; del db; gc.collect() return True except Exception as e: return False @@ -457,7 +459,7 @@ def todos_filter(db_path, keyword=None, todo_id=None): query = "" if todo_id: query = f"id = X'{_uuid(todo_id).hex}'" elif keyword: query = f"keyword = '{keyword}'" - results = table.search().where(query).to_list() if query else table.to_list() + results = table.search().where(query).to_list() if query else table.search().to_list() del table; del db; gc.collect() return results except Exception as e: return [] @@ -474,7 +476,8 @@ def todos_update(db_path, model_url, model_name, todo_id, **updates): if k in record: record[k] = v if needs_reembed: record['vector_context'] = embed_text(model_url, model_name, f"Keyword: {record['keyword']}\nWhen: {record['when']}") - table.upsert([record]) + table.delete(f"id = X'{_uuid(record['id']).hex}'") + table.add([record]) del table; del db; gc.collect() return True except Exception as e: return False @@ -514,7 +517,7 @@ def worlds_filter(db_path, category=None, location=None, world_id=None): if category: filters.append(f"category = '{category}'") if location: filters.append(f"location = '{location}'") query = " AND ".join(filters) - results = table.search().where(query).to_list() if query else table.to_list() + results = table.search().where(query).to_list() if query else table.search().to_list() del table; del db; gc.collect() return results except Exception as e: return [] @@ -531,7 +534,8 @@ def worlds_update(db_path, model_url, model_name, world_id, **updates): if k in record: record[k] = v if needs_reembed: record['vector_context'] = embed_text(model_url, model_name, f"Category: {record['category']}\nLocation: {record['location']}\nDescription: {record['description']}") - table.upsert([record]) + table.delete(f"id = X'{_uuid(record['id']).hex}'") + table.add([record]) del table; del db; gc.collect() return True except Exception as e: return False diff --git a/tools/ragroleplay.py b/tools/ragroleplay.py index 4cd1e7b..efcccb4 100644 --- a/tools/ragroleplay.py +++ b/tools/ragroleplay.py @@ -110,14 +110,13 @@ schema_memories_store = { "properties": { "character": {"type": "string", "description": "The active character name"}, "user": {"type": "string", "description": "The active user name"}, - "relative_time": {"type": "string", "description": "Description of when the event happened (e.g., '2 hours ago', 'yesterday')"}, "event": {"type": "string", "description": "Brief summary of the event"}, "category": {"type": "string", "description": "Category of the memory (e.g., 'Emotional', 'Physical', 'Relationship')"}, "detail": {"type": "string", "description": "Detailed description of the event"}, "physical": {"type": "string", "description": "Physical state of the character during the event"}, "emotional": {"type": "string", "description": "Emotional state of the character during the event"} }, - "required": ["character", "user", "relative_time", "event", "category", "detail", "physical", "emotional"] + "required": ["character", "user", "event", "category", "detail", "physical", "emotional"] } } } @@ -163,7 +162,6 @@ schema_memories_update = { "type": "object", "properties": { "memory_id": {"type": "string", "description": "The unique ID of the memory to update"}, - "relative_time": {"type": "string", "description": "Updated relative time"}, "event": {"type": "string", "description": "Updated event summary"}, "category": {"type": "string", "description": "Updated category"}, "detail": {"type": "string", "description": "Updated detail"}, @@ -482,7 +480,6 @@ def memories_check(prompt_text, search_limit): for i, row in enumerate(results, 1): mem_info = ( f"Memori #{i}\n" - f"Kapan: {row['relative_time']}\n" f"Kejadian: {row['event']}\n" f"Detail: {row['detail']}\n" f"Kondisi Fisik: {row['physical']}\n" @@ -501,7 +498,7 @@ def memories_check(prompt_text, search_limit): except Exception as e: return f"Error searching memories: {str(e)}" -def memories_store(character, user, relative_time, event, category, detail, physical, emotional): +def memories_store(character, user, event, category, detail, physical, emotional): try: success = ragroleplay_lib.memories_store( config.ragroleplay_db_path, @@ -509,7 +506,6 @@ def memories_store(character, user, relative_time, event, category, detail, phys config.ragroleplay_model_name, character, user, - relative_time, event, category, detail, @@ -534,7 +530,6 @@ def memories_filter(category=None, character=None, user=None): for i, row in enumerate(results, 1): mem_info = ( f"Memori #{i}\n" - f"Kapan: {row['relative_time']}\n" f"Kejadian: {row['event']}\n" f"Detail: {row['detail']}\n" f"Kategori: {row['category']}\n"