New fields

This commit is contained in:
Dita Aji Pratama 2026-07-13 17:07:55 +07:00
parent 2da4fe26c4
commit 96993adaee
4 changed files with 20 additions and 7 deletions

View File

@ -1,15 +1,14 @@
import requests, gc, lancedb, pyarrow, uuid import requests, gc, lancedb, pyarrow, uuid
from datetime import datetime from datetime import datetime
# ─── Table Schemas ────────────────────────────────────────────────────────────
def _schema_user(vector_size): def _schema_user(vector_size):
return pyarrow.schema([ return pyarrow.schema([
pyarrow.field('id', pyarrow.uuid(), metadata={'description': 'Unique identifier (UUID)'}), pyarrow.field('id', pyarrow.uuid(), metadata={'description': 'Unique identifier (UUID)'}),
pyarrow.field('timestamp', pyarrow.timestamp('ms'), metadata={'description': 'When record created'}), pyarrow.field('timestamp', pyarrow.timestamp('ms'), metadata={'description': 'When record created'}),
pyarrow.field('character', pyarrow.string(), nullable=True, metadata={'description': 'Active Character'}),
pyarrow.field('fullname', pyarrow.string(), metadata={'description': 'Fullname'}), pyarrow.field('fullname', pyarrow.string(), metadata={'description': 'Fullname'}),
pyarrow.field('nickname', pyarrow.string(), metadata={'description': 'Nickname'}), pyarrow.field('nickname', pyarrow.string(), metadata={'description': 'Nickname'}),
pyarrow.field('familyname', pyarrow.string(), nullable=True, metadata={'description': 'Family/clan name'}),
pyarrow.field('alias', pyarrow.string(), nullable=True, metadata={'description': 'Another call name'}), pyarrow.field('alias', pyarrow.string(), nullable=True, metadata={'description': 'Another call name'}),
pyarrow.field('salutation', pyarrow.string(), nullable=True, metadata={'description': 'Salutation/greeting for the user'}), pyarrow.field('salutation', pyarrow.string(), nullable=True, metadata={'description': 'Salutation/greeting for the user'}),
pyarrow.field('persona', pyarrow.string(), nullable=True, metadata={'description': 'Persona'}), pyarrow.field('persona', pyarrow.string(), nullable=True, metadata={'description': 'Persona'}),
@ -133,7 +132,7 @@ def embed_text(url, model, text):
data = response.json() data = response.json()
return data["embeddings"][0] return data["embeddings"][0]
def users_store(db_path, model_url, model_name, fullname, nickname, alias, salutation, persona, telegram_id, telegram_username, xampp_username): def users_store(db_path, model_url, model_name, fullname, nickname, alias, salutation, persona, telegram_id, telegram_username, xampp_username, familyname=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")
@ -141,8 +140,10 @@ def users_store(db_path, model_url, model_name, fullname, nickname, alias, salut
record = { record = {
"id": uuid.uuid4(), "id": uuid.uuid4(),
"timestamp": datetime.now(), "timestamp": datetime.now(),
"character": character,
"fullname": fullname, "fullname": fullname,
"nickname": nickname, "nickname": nickname,
"familyname": familyname,
"alias": alias, "alias": alias,
"salutation": salutation, "salutation": salutation,
"persona": persona, "persona": persona,
@ -171,7 +172,7 @@ def users_filter(db_path, query_name=None, unique_id=None, persona_keyword=None,
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 query_name: if query_name:
filters.append(f"(fullname = '{query_name}' OR nickname = '{query_name}' OR alias = '{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:
filters.append(f"persona LIKE '%{persona_keyword}%'") filters.append(f"persona LIKE '%{persona_keyword}%'")

View File

@ -202,6 +202,8 @@ class TelegramClient:
f'[User Context]\n' f'[User Context]\n'
f'ID: {u["id"]}\n' f'ID: {u["id"]}\n'
f'Nama: {u["fullname"]} ({u["nickname"]})\n' f'Nama: {u["fullname"]} ({u["nickname"]})\n'
f'Family: {u.get("familyname", "-") or "-"}\n'
f'Character: {u.get("character", "-") or "-"}\n'
f'Alias: {u.get("alias", "-") or "-"}\n' f'Alias: {u.get("alias", "-") or "-"}\n'
f'Salutation: {u.get("salutation", "-") or "-"}\n' f'Salutation: {u.get("salutation", "-") or "-"}\n'
f'Persona: {u.get("persona", "-") or "-"}\n' f'Persona: {u.get("persona", "-") or "-"}\n'

View File

@ -306,6 +306,8 @@ class XMPPClient(ClientXMPP):
f'[User Context]\n' f'[User Context]\n'
f'ID: {u["id"]}\n' f'ID: {u["id"]}\n'
f'Nama: {u["fullname"]} ({u["nickname"]})\n' f'Nama: {u["fullname"]} ({u["nickname"]})\n'
f'Family: {u.get("familyname", "-") or "-"}\n'
f'Character: {u.get("character", "-") or "-"}\n'
f'Alias: {u.get("alias", "-") or "-"}\n' f'Alias: {u.get("alias", "-") or "-"}\n'
f'Salutation: {u.get("salutation", "-") or "-"}\n' f'Salutation: {u.get("salutation", "-") or "-"}\n'
f'Persona: {u.get("persona", "-") or "-"}\n' f'Persona: {u.get("persona", "-") or "-"}\n'

View File

@ -32,8 +32,10 @@ schema_users_store = {
"properties": { "properties": {
"fullname": {"type": "string", "description": "Full name of the user"}, "fullname": {"type": "string", "description": "Full name of the user"},
"nickname": {"type": "string", "description": "Nickname of the user"}, "nickname": {"type": "string", "description": "Nickname of the user"},
"familyname": {"type": "string", "description": "Family/clan name"},
"alias": {"type": "string", "description": "Alias of the user"}, "alias": {"type": "string", "description": "Alias of the user"},
"salutation": {"type": "string", "description": "How to address/greet the user (e.g., Mas, Mbak, Kak)"}, "salutation": {"type": "string", "description": "How to address/greet the user (e.g., Mas, Mbak, Kak)"},
"character": {"type": "string", "description": "Active character interacting with this user"},
"persona": {"type": "string", "description": "Detailed persona or description of the user"}, "persona": {"type": "string", "description": "Detailed persona or description of the user"},
"telegram_id": {"type": "string", "description": "Telegram user ID"}, "telegram_id": {"type": "string", "description": "Telegram user ID"},
"telegram_username": {"type": "string", "description": "Telegram username"}, "telegram_username": {"type": "string", "description": "Telegram username"},
@ -72,8 +74,10 @@ schema_users_update = {
"user_id": {"type": "string", "description": "The unique UUID of the user to update"}, "user_id": {"type": "string", "description": "The unique UUID of the user to update"},
"fullname": {"type": "string", "description": "Updated full name"}, "fullname": {"type": "string", "description": "Updated full name"},
"nickname": {"type": "string", "description": "Updated nickname"}, "nickname": {"type": "string", "description": "Updated nickname"},
"familyname": {"type": "string", "description": "Updated family/clan name"},
"alias": {"type": "string", "description": "Updated alias"}, "alias": {"type": "string", "description": "Updated alias"},
"salutation": {"type": "string", "description": "Updated salutation"}, "salutation": {"type": "string", "description": "Updated salutation"},
"character": {"type": "string", "description": "Updated active character"},
"persona": {"type": "string", "description": "Updated persona description"}, "persona": {"type": "string", "description": "Updated persona description"},
"telegram_id": {"type": "string", "description": "Updated telegram ID"}, "telegram_id": {"type": "string", "description": "Updated telegram ID"},
"telegram_username": {"type": "string", "description": "Updated telegram username"}, "telegram_username": {"type": "string", "description": "Updated telegram username"},
@ -633,7 +637,7 @@ def memories_delete(memory_id):
except Exception as e: except Exception as e:
return f"Error while deleting memory: {str(e)}" return f"Error while deleting memory: {str(e)}"
def users_store(fullname, nickname, alias=None, salutation=None, persona=None, telegram_id=None, telegram_username=None, xampp_username=None): def users_store(fullname, nickname, alias=None, salutation=None, persona=None, telegram_id=None, telegram_username=None, xampp_username=None, familyname=None, character=None):
try: try:
success = ragroleplay_lib.users_store( success = ragroleplay_lib.users_store(
config.ragroleplay_db_path, config.ragroleplay_db_path,
@ -646,7 +650,9 @@ def users_store(fullname, nickname, alias=None, salutation=None, persona=None, t
persona, persona,
telegram_id, telegram_id,
telegram_username, telegram_username,
xampp_username xampp_username,
familyname,
character
) )
if success: if success:
return "Berhasil menyimpan profil user baru." return "Berhasil menyimpan profil user baru."
@ -668,6 +674,8 @@ def users_filter(query_name=None, unique_id=None, persona_keyword=None, user_id=
f"User #{i}\n" f"User #{i}\n"
f"ID: {row['id']}\n" f"ID: {row['id']}\n"
f"Nama: {row['fullname']} ({row['nickname']})\n" f"Nama: {row['fullname']} ({row['nickname']})\n"
f"Family: {row.get('familyname', '-') or '-'}\n"
f"Character: {row.get('character', '-') or '-'}\n"
f"Salutation: {row.get('salutation', '-') or '-'}\n" f"Salutation: {row.get('salutation', '-') or '-'}\n"
f"Persona: {row['persona']}\n" f"Persona: {row['persona']}\n"
) )