Improve
This commit is contained in:
parent
51f4a8c9d0
commit
856362a008
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,3 +1,4 @@
|
||||
**/__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
.venv/
|
||||
|
||||
@ -1,20 +1,42 @@
|
||||
import lancedb
|
||||
import gc, sys, lancedb
|
||||
import config, embedding
|
||||
|
||||
def main():
|
||||
db = lancedb.connect(config.memories_db_path)
|
||||
table = db.open_table(config.memories_table)
|
||||
question = "cara mengecek spam di outlook"
|
||||
question = sys.argv[1]
|
||||
query_vector = embedding.embed_text(config.model_url, config.model_name, question)
|
||||
|
||||
results = (
|
||||
table.search(query_vector, vector_column_name="vector_title")
|
||||
table.search(query_vector, vector_column_name="vector_context")
|
||||
.limit(3)
|
||||
.to_list()
|
||||
)
|
||||
print("Pertanyaan:")
|
||||
print(question)
|
||||
print("Hasil paling mirip:")
|
||||
for row in results:
|
||||
|
||||
print("\n" + "=" * 60)
|
||||
print(f"Pertanyaan: {question}")
|
||||
print("=" * 60)
|
||||
print("ID:", row["id"])
|
||||
print("Title:", row["title"])
|
||||
print("Story:", row["story"])
|
||||
print("Distance:", row["_distance"])
|
||||
|
||||
if not results:
|
||||
print("Tidak ada memori yang ditemukan.")
|
||||
else:
|
||||
print(f"Ditemukan {len(results)} memori yang relevan berdasarkan KONTEKS:\n")
|
||||
for i, row in enumerate(results, 1):
|
||||
print(f"--- Memori #{i} ---")
|
||||
print(f"Kapan: {row['relative_time']}")
|
||||
print(f"Kejadian: {row['event']}")
|
||||
print(f"Detail: {row['detail']}")
|
||||
print(f"Kondisi Fisik: {row['physical']}")
|
||||
print(f"Emosi: {row['emotional']}")
|
||||
print(f"Kategori: {row['category']}")
|
||||
print(f"Skor Jarak: {row.get('_distance', 'N/A')}")
|
||||
print("-" * 30)
|
||||
|
||||
print("=" * 60)
|
||||
|
||||
del table
|
||||
del db
|
||||
gc.collect()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
@ -1,11 +1,23 @@
|
||||
import lancedb, pyarrow
|
||||
import gc, lancedb, pyarrow
|
||||
import config
|
||||
|
||||
def main():
|
||||
db = lancedb.connect(config.memories_db_path)
|
||||
schema = pyarrow.schema([
|
||||
pyarrow.field( 'id', pyarrow.string() ),
|
||||
pyarrow.field( 'title', pyarrow.string() ),
|
||||
pyarrow.field( 'story', pyarrow.string() ),
|
||||
pyarrow.field( 'vector_title', pyarrow.list_( pyarrow.float32(), config.memories_vector_size ) ),
|
||||
pyarrow.field('id', pyarrow.uuid(), metadata={'description': 'Unique identifier (UUID)'}),
|
||||
pyarrow.field('timestamp', pyarrow.timestamp('ms'), metadata={'description': 'When record created'}),
|
||||
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'}),
|
||||
pyarrow.field('physical', pyarrow.string(), metadata={'description': 'Character physical state'}),
|
||||
pyarrow.field('emotional', pyarrow.string(), metadata={'description': 'Character emotional state'}),
|
||||
pyarrow.field('vector_context', pyarrow.list_(pyarrow.float32(), config.memories_vector_size)),
|
||||
])
|
||||
db.create_table(config.memories_table, schema=schema)
|
||||
print(f'Table "{config.memories_table}" berhasil diproses.')
|
||||
del db
|
||||
gc.collect()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
151
table_modify.py
151
table_modify.py
@ -1,43 +1,138 @@
|
||||
import lancedb
|
||||
import gc, lancedb, uuid
|
||||
from datetime import datetime, timedelta
|
||||
import config, embedding
|
||||
|
||||
def main():
|
||||
db = lancedb.connect(config.memories_db_path)
|
||||
table = db.open_table(config.memories_table)
|
||||
docs = [
|
||||
now = datetime.now()
|
||||
|
||||
memories = [
|
||||
{
|
||||
"id": "wifi-001",
|
||||
"title": "Perubahan password WiFi menjadi login portal",
|
||||
"story": (
|
||||
"Password WiFi kantor telah berubah. "
|
||||
"Sekarang akses WiFi menggunakan login portal. "
|
||||
"Akun login akan diberikan melalui chat pribadi masing-masing user."
|
||||
),
|
||||
"id": uuid.uuid4(),
|
||||
"timestamp": now - timedelta(days=10),
|
||||
"relative_time": "Saat pertama kali menginjakkan kaki di Kota Perak",
|
||||
"event": "Pertemuan pertama",
|
||||
"category": "Social",
|
||||
"detail": "Bertemu dengan karakter utama di perpustakaan kota, suasana terasa canggung namun hangat.",
|
||||
"physical": "Tegak, sedikit gemetar",
|
||||
"emotional": "Gugup, Penasaran",
|
||||
},
|
||||
{
|
||||
"id": "m365-001",
|
||||
"title": "Cara cek spam pada Outlook Group",
|
||||
"story": (
|
||||
"Untuk mengecek spam pada Outlook Group, buka Outlook Web. "
|
||||
"Masuk ke menu Groups, pilih group terkait, lalu cek folder Junk Email atau Spam."
|
||||
),
|
||||
"id": uuid.uuid4(),
|
||||
"timestamp": now - timedelta(days=9),
|
||||
"relative_time": "Setelah badai pasir mereda di gurun",
|
||||
"event": "Kesepakatan awal",
|
||||
"category": "Plot",
|
||||
"detail": "Menyepakati kerjasama untuk mencari artefak kuno yang hilang di hutan terlarang.",
|
||||
"physical": "Bersalaman dengan erat",
|
||||
"emotional": "Optimis, Bertekad",
|
||||
},
|
||||
{
|
||||
"id": "printer-001",
|
||||
"title": "Printer tidak terdeteksi di komputer",
|
||||
"story": (
|
||||
"Jika printer tidak terdeteksi, cek koneksi kabel atau jaringan. "
|
||||
"Pastikan driver printer sudah terinstall, lalu coba restart service Print Spooler."
|
||||
),
|
||||
"id": uuid.uuid4(),
|
||||
"timestamp": now - timedelta(days=7),
|
||||
"relative_time": "Ketika bulan darah mencapai puncaknya",
|
||||
"event": "Serangan mendadak",
|
||||
"category": "Action",
|
||||
"detail": "Diserang oleh sekelompok goblin saat berkemah di pinggir sungai.",
|
||||
"physical": "Siaga, memegang senjata",
|
||||
"emotional": "Terkejut, Waspada",
|
||||
},
|
||||
{
|
||||
"id": uuid.uuid4(),
|
||||
"timestamp": now - timedelta(days=5),
|
||||
"relative_time": "Di tengah perdebatan panas di aula rapat",
|
||||
"event": "Diskusi moral",
|
||||
"category": "Emotional",
|
||||
"detail": "Berdebat tentang moralitas penggunaan sihir terlarang untuk menyelamatkan desa.",
|
||||
"physical": "Tangan mengepal, napas berat",
|
||||
"emotional": "Marah, Dilema",
|
||||
},
|
||||
{
|
||||
"id": uuid.uuid4(),
|
||||
"timestamp": now - timedelta(days=3),
|
||||
"relative_time": "Sesaat setelah pintu kuil terlarang terbuka",
|
||||
"event": "Penemuan petunjuk",
|
||||
"category": "Investigation",
|
||||
"detail": "Menemukan peta tua di reruntuhan kuil yang menunjukkan lokasi tepat artefak.",
|
||||
"physical": "Mata terbelalak, membungkuk melihat peta",
|
||||
"emotional": "Sangat senang, Antusias",
|
||||
},
|
||||
{
|
||||
"id": uuid.uuid4(),
|
||||
"timestamp": now - timedelta(days=2),
|
||||
"relative_time": "Saat malam sunyi di bawah pohon kehidupan",
|
||||
"event": "Momen tenang",
|
||||
"category": "Social",
|
||||
"detail": "Berbagi cerita masa lalu di depan api unggun di bawah langit berbintang.",
|
||||
"physical": "Rileks, bersandar pada pohon",
|
||||
"emotional": "Tenang, Melankolis",
|
||||
},
|
||||
{
|
||||
"id": uuid.uuid4(),
|
||||
"timestamp": now - timedelta(days=1),
|
||||
"relative_time": "Ketika topeng sang pengkhianat terbuka",
|
||||
"event": "Pengkhianatan",
|
||||
"category": "Plot",
|
||||
"detail": "Mengetahui bahwa salah satu rekan tim ternyata adalah mata-mata dari kerajaan lawan.",
|
||||
"physical": "Kaku, tatapan tajam",
|
||||
"emotional": "Terkhianati, Kecewa",
|
||||
},
|
||||
{
|
||||
"id": uuid.uuid4(),
|
||||
"timestamp": now - timedelta(hours=5),
|
||||
"relative_time": "Di lorong gelap bawah tanah kastil",
|
||||
"event": "Diskusi rahasia",
|
||||
"category": "Plot",
|
||||
"detail": "Membicarakan rencana infiltrasi ke markas musuh menggunakan terowongan bawah tanah.",
|
||||
"physical": "Membungkuk, berbisik",
|
||||
"emotional": "Waspada, Serius",
|
||||
},
|
||||
{
|
||||
"id": uuid.uuid4(),
|
||||
"timestamp": now - timedelta(hours=2),
|
||||
"relative_time": "Saat matahari baru saja terbit di ufuk timur",
|
||||
"event": "Latihan tempur",
|
||||
"category": "Training",
|
||||
"detail": "Melatih kombinasi serangan sihir dan fisik untuk meningkatkan sinkronisasi tim.",
|
||||
"physical": "Keringat bercucuran, napas terengah",
|
||||
"emotional": "Fokus, Pantang menyerah",
|
||||
},
|
||||
{
|
||||
"id": uuid.uuid4(),
|
||||
"timestamp": now,
|
||||
"relative_time": "Tepat sebelum genderang perang bertalu",
|
||||
"event": "Persiapan akhir",
|
||||
"category": "Plot",
|
||||
"detail": "Memeriksa kembali semua perlengkapan sebelum memasuki gerbang terakhir menuju artefak.",
|
||||
"physical": "Menyesuaikan pelindung lengan",
|
||||
"emotional": "Tegang, Percaya Diri",
|
||||
},
|
||||
]
|
||||
for doc in docs:
|
||||
|
||||
for mem in memories:
|
||||
context_text = f"[{mem['category']}] {mem['event']} - {mem['relative_time']}: {mem['detail']}"
|
||||
row = {
|
||||
"id" : doc["id" ],
|
||||
"title" : doc["title" ],
|
||||
"story" : doc["story" ],
|
||||
"vector_title" : embedding.embed_text(config.model_url, config.model_name, doc["title"]),
|
||||
"id": mem["id"],
|
||||
"timestamp": mem["timestamp"],
|
||||
"relative_time": mem["relative_time"],
|
||||
"event": mem["event"],
|
||||
"category": mem["category"],
|
||||
"detail": mem["detail"],
|
||||
"physical": mem["physical"],
|
||||
"emotional": mem["emotional"],
|
||||
"vector_context": embedding.embed_text(config.model_url, config.model_name, context_text),
|
||||
}
|
||||
table.add([row])
|
||||
print(f"Menambahkan record: {doc['title']}")
|
||||
print("\nTable berhasil diproses.")
|
||||
print(f"Menambahkan memori: {mem['event']}")
|
||||
|
||||
print("\nTable memori roleplaying dengan vector_context berhasil diproses.")
|
||||
print("Nama table:", config.memories_table)
|
||||
print("Jumlah row:", table.count_rows())
|
||||
|
||||
del table
|
||||
del db
|
||||
gc.collect()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user