user load
This commit is contained in:
parent
b635b241c4
commit
ed23a5ceb2
@ -59,13 +59,13 @@ System otomatis ngecek database dan inject context sebelum pesan user sampai ke
|
||||
### Manual (`!start ... !end`)
|
||||
Jika user memperkenalkan diri dalam format `!start ... !end` (contoh: "Aku John"):
|
||||
|
||||
1. **Cek database** — Panggil `users_filter` dengan `query_name`.
|
||||
1. **Cek database** — Panggil `user_load` dengan `query_name`.
|
||||
2. **Jika ketemu** — Sambut natural.
|
||||
3. **Jika tidak** — Tawarkan store, lalu simpan dengan `users_store`.
|
||||
|
||||
### Memory Context Loading — WAJIB
|
||||
|
||||
**Setelah identitas user terkonfirmasi** (baik melalui `[User Context]` otomatis maupun setelah proses `users_store`/`users_filter` manual), kamu WAJIB melakukan langkah berikut. Ini adalah bagian KRITIS dari sistem memori — jika dilewatkan, akurasi memori akan rendah dan responmu akan terasa tidak personal/konsisten.
|
||||
**Setelah identitas user terkonfirmasi** (baik melalui `[User Context]` otomatis maupun setelah proses `users_store`/`user_load` manual), kamu WAJIB melakukan langkah berikut. Ini adalah bagian KRITIS dari sistem memori — jika dilewatkan, akurasi memori akan rendah dan responmu akan terasa tidak personal/konsisten.
|
||||
|
||||
1. **WAJIB Retrieve Recent History**: Panggil `memories_latest(character="<nama-karaktermu>", user_id="<user-uuid>")` untuk mengambil interaksi terbaru antara character dan user. Tentukan `limit` sesuai kebutuhan — lebih besar jika perlu mengingat detail yang lebih lama, kosongkan/0 untuk mengambil semua.
|
||||
- **Parameter Call**: Gunakan nama karaktermu sendiri (sesuai persona/identitasmu) sebagai `character` dan gunakan **ID (UUID)** user yang tertera pada `[User Context]` sebagai `user_id`.
|
||||
@ -113,7 +113,7 @@ User bisa menggunakan karakter dari multiple platform (Telegram, XMPP, dll).
|
||||
User mungkin bilang: "Aku John di Telegram, orang yang sama dengan username john@xmpp lho."
|
||||
|
||||
Ketika user menyebutkan identitas cross-platform:
|
||||
1. Cek apakah user dengan ID platform tersebut sudah ada di database (`users_filter`)
|
||||
1. Cek apakah user dengan ID platform tersebut sudah ada di database (`user_load`)
|
||||
2. Kalau sudah ada → itu user yang sama, sambut natural
|
||||
3. Kalau belum ada → update profile yang sudah ada via `users_update`,
|
||||
tambahkan platform ID baru ke field yang sesuai
|
||||
|
||||
@ -29,7 +29,7 @@ tools_definition = [
|
||||
|
||||
# Rag Roleplay Tools
|
||||
gadget.tools_mapping( schema = ragroleplay.schema_users_store, handler = ragroleplay.users_store ),
|
||||
gadget.tools_mapping( schema = ragroleplay.schema_users_filter, handler = ragroleplay.users_filter ),
|
||||
gadget.tools_mapping( schema = ragroleplay.schema_user_load, handler = ragroleplay.user_load ),
|
||||
gadget.tools_mapping( schema = ragroleplay.schema_users_update, handler = ragroleplay.users_update ),
|
||||
gadget.tools_mapping( schema = ragroleplay.schema_users_delete, handler = ragroleplay.users_delete ),
|
||||
gadget.tools_mapping( schema = ragroleplay.schema_memories_check, handler = ragroleplay.memories_check ),
|
||||
|
||||
@ -162,7 +162,7 @@ def users_store(db_path, model_url, model_name, fullname, nickname, alias, salut
|
||||
print(f"Error storing user: {e}")
|
||||
return False
|
||||
|
||||
def users_filter(db_path, query_name=None, unique_id=None, persona_keyword=None, user_id=None):
|
||||
def user_load(db_path, query_name=None, unique_id=None, persona_keyword=None, user_id=None, character=None):
|
||||
try:
|
||||
db = lancedb.connect(db_path)
|
||||
table = db.open_table("knowledge_user")
|
||||
@ -171,6 +171,8 @@ def users_filter(db_path, query_name=None, unique_id=None, persona_keyword=None,
|
||||
filters.append(f"id = X'{_uuid(user_id).hex}'")
|
||||
if unique_id:
|
||||
filters.append(f"(telegram_id = '{unique_id}' OR telegram_username = '{unique_id}' OR xampp_username = '{unique_id}')")
|
||||
if character:
|
||||
filters.append(f"character = '{character}'")
|
||||
if query_name:
|
||||
filters.append(f"(fullname = '{query_name}' OR nickname = '{query_name}' OR alias = '{query_name}' OR familyname = '{query_name}')")
|
||||
if persona_keyword:
|
||||
|
||||
@ -195,7 +195,7 @@ class TelegramClient:
|
||||
|
||||
if self._skill == 'roleplayer' and chat_type == 'private':
|
||||
try:
|
||||
results = ragroleplay.users_filter(config.ragroleplay_db_path, unique_id=str(chat_id))
|
||||
results = ragroleplay.user_load(config.ragroleplay_db_path, unique_id=str(chat_id), character=personality.PERSONALITY.name)
|
||||
if results:
|
||||
u = results[0]
|
||||
context = (
|
||||
|
||||
@ -299,7 +299,7 @@ class XMPPClient(ClientXMPP):
|
||||
|
||||
if self._skill == 'roleplayer':
|
||||
try:
|
||||
results = ragroleplay.users_filter(config.ragroleplay_db_path, unique_id=jid)
|
||||
results = ragroleplay.user_load(config.ragroleplay_db_path, unique_id=jid, character=personality.PERSONALITY.name)
|
||||
if results:
|
||||
u = results[0]
|
||||
context = (
|
||||
|
||||
@ -47,16 +47,17 @@ schema_users_store = {
|
||||
}
|
||||
}
|
||||
|
||||
schema_users_filter = {
|
||||
schema_user_load = {
|
||||
"type": "function",
|
||||
"function": {
|
||||
"name": "users_filter",
|
||||
"description": "Retrieve user profiles based on flexible filters like names, IDs, or persona keywords.",
|
||||
"name": "user_load",
|
||||
"description": "Retrieve user profiles based on flexible filters like names, IDs, or persona keywords. Filter by character to get character-specific user data.",
|
||||
"parameters": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"query_name": {"type": "string", "description": "Search by fullname, nickname, or alias"},
|
||||
"query_name": {"type": "string", "description": "Search by fullname, nickname, familyname, or alias"},
|
||||
"unique_id": {"type": "string", "description": "Search by telegram_id, telegram_username, or xampp_username"},
|
||||
"character": {"type": "string", "description": "Filter by active character name"},
|
||||
"persona_keyword": {"type": "string", "description": "Search for a keyword within the user's persona"},
|
||||
"user_id": {"type": "string", "description": "Search by absolute user UUID"}
|
||||
}
|
||||
@ -664,9 +665,9 @@ def users_store(fullname, nickname, alias=None, salutation=None, persona=None, t
|
||||
except Exception as e:
|
||||
return f"Error while storing user: {str(e)}"
|
||||
|
||||
def users_filter(query_name=None, unique_id=None, persona_keyword=None, user_id=None):
|
||||
def user_load(query_name=None, unique_id=None, persona_keyword=None, user_id=None, character=None):
|
||||
try:
|
||||
results = ragroleplay_lib.users_filter(config.ragroleplay_db_path, query_name, unique_id, persona_keyword, _uuid(user_id) if user_id else None)
|
||||
results = ragroleplay_lib.user_load(config.ragroleplay_db_path, query_name, unique_id, persona_keyword, _uuid(user_id) if user_id else None, character)
|
||||
if not results:
|
||||
return "Tidak ada user yang sesuai dengan filter tersebut."
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user