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`)
|
### Manual (`!start ... !end`)
|
||||||
Jika user memperkenalkan diri dalam format `!start ... !end` (contoh: "Aku John"):
|
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.
|
2. **Jika ketemu** — Sambut natural.
|
||||||
3. **Jika tidak** — Tawarkan store, lalu simpan dengan `users_store`.
|
3. **Jika tidak** — Tawarkan store, lalu simpan dengan `users_store`.
|
||||||
|
|
||||||
### Memory Context Loading — WAJIB
|
### 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.
|
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`.
|
- **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."
|
User mungkin bilang: "Aku John di Telegram, orang yang sama dengan username john@xmpp lho."
|
||||||
|
|
||||||
Ketika user menyebutkan identitas cross-platform:
|
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
|
2. Kalau sudah ada → itu user yang sama, sambut natural
|
||||||
3. Kalau belum ada → update profile yang sudah ada via `users_update`,
|
3. Kalau belum ada → update profile yang sudah ada via `users_update`,
|
||||||
tambahkan platform ID baru ke field yang sesuai
|
tambahkan platform ID baru ke field yang sesuai
|
||||||
|
|||||||
@ -29,7 +29,7 @@ tools_definition = [
|
|||||||
|
|
||||||
# Rag Roleplay Tools
|
# Rag Roleplay Tools
|
||||||
gadget.tools_mapping( schema = ragroleplay.schema_users_store, handler = ragroleplay.users_store ),
|
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_update, handler = ragroleplay.users_update ),
|
||||||
gadget.tools_mapping( schema = ragroleplay.schema_users_delete, handler = ragroleplay.users_delete ),
|
gadget.tools_mapping( schema = ragroleplay.schema_users_delete, handler = ragroleplay.users_delete ),
|
||||||
gadget.tools_mapping( schema = ragroleplay.schema_memories_check, handler = ragroleplay.memories_check ),
|
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}")
|
print(f"Error storing user: {e}")
|
||||||
return False
|
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:
|
try:
|
||||||
db = lancedb.connect(db_path)
|
db = lancedb.connect(db_path)
|
||||||
table = db.open_table("knowledge_user")
|
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}'")
|
filters.append(f"id = X'{_uuid(user_id).hex}'")
|
||||||
if unique_id:
|
if unique_id:
|
||||||
filters.append(f"(telegram_id = '{unique_id}' OR telegram_username = '{unique_id}' OR xampp_username = '{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:
|
if query_name:
|
||||||
filters.append(f"(fullname = '{query_name}' OR nickname = '{query_name}' OR alias = '{query_name}' OR familyname = '{query_name}')")
|
filters.append(f"(fullname = '{query_name}' OR nickname = '{query_name}' OR alias = '{query_name}' OR familyname = '{query_name}')")
|
||||||
if persona_keyword:
|
if persona_keyword:
|
||||||
|
|||||||
@ -195,7 +195,7 @@ class TelegramClient:
|
|||||||
|
|
||||||
if self._skill == 'roleplayer' and chat_type == 'private':
|
if self._skill == 'roleplayer' and chat_type == 'private':
|
||||||
try:
|
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:
|
if results:
|
||||||
u = results[0]
|
u = results[0]
|
||||||
context = (
|
context = (
|
||||||
|
|||||||
@ -299,7 +299,7 @@ class XMPPClient(ClientXMPP):
|
|||||||
|
|
||||||
if self._skill == 'roleplayer':
|
if self._skill == 'roleplayer':
|
||||||
try:
|
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:
|
if results:
|
||||||
u = results[0]
|
u = results[0]
|
||||||
context = (
|
context = (
|
||||||
|
|||||||
@ -47,16 +47,17 @@ schema_users_store = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
schema_users_filter = {
|
schema_user_load = {
|
||||||
"type": "function",
|
"type": "function",
|
||||||
"function": {
|
"function": {
|
||||||
"name": "users_filter",
|
"name": "user_load",
|
||||||
"description": "Retrieve user profiles based on flexible filters like names, IDs, or persona keywords.",
|
"description": "Retrieve user profiles based on flexible filters like names, IDs, or persona keywords. Filter by character to get character-specific user data.",
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"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"},
|
"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"},
|
"persona_keyword": {"type": "string", "description": "Search for a keyword within the user's persona"},
|
||||||
"user_id": {"type": "string", "description": "Search by absolute user UUID"}
|
"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:
|
except Exception as e:
|
||||||
return f"Error while storing user: {str(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:
|
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:
|
if not results:
|
||||||
return "Tidak ada user yang sesuai dengan filter tersebut."
|
return "Tidak ada user yang sesuai dengan filter tersebut."
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user