o
    )iU                     @  sJ   d Z ddlmZ ddlZddlZddlmZmZm	Z	m
Z
 G dd dZdS )u    群聊话题 SQLite 持久化。    )annotationsN)RECENT_EMBEDDING_MAXTopicRecordTopicSegmenterStoreblob_to_normalized_centroidc                   @  sF   e Zd ZdZd%dd	Zd&ddZd'ddZd(ddZ	d)d*d#d$ZdS )+GroupTopicStoreSqliteu%   与 `DbManager` 共用同一连接。connsqlite3.Connectioncursqlite3.CursorreturnNonec                 C  s   || _ || _d S N)_conn_cur)selfr   r
    r   :/home/dore/onebot/Bot_Ero/core/group_topic_store_sqlite.py__init__   s   
zGroupTopicStoreSqlite.__init__group_idintlist[TopicRecord]c                 C  s   | j dt|f g }| j  D ]X\}}}}}t|ttfs qt|}| j dt|tf g }	t| j  D ]\}
|
rMt|
ttfrM|		t
t|
 q8|	tt|t|t
|t|t|padt|	d q|S )Nz
            SELECT id, group_id, centroid, message_count, anchor_preview
            FROM group_chat_topics
            WHERE group_id = ?
            ORDER BY id ASC
            z
                SELECT msg_embedding_blob FROM group_chat_topic_messages
                WHERE topic_id = ? AND msg_embedding_blob IS NOT NULL
                ORDER BY id DESC
                LIMIT ?
                 )idr   centroidmessage_countanchor_previewrecent_embeddings)r   executer   fetchall
isinstancebytes
memoryviewr   reversedappendr   r   strtuple)r   r   outridgidblobmcapbrecent_listbbr   r   r   list_topics   s:   	
	

z!GroupTopicStoreSqlite.list_topicscentroid_blobr!   r   r   r%   
created_at
updated_atc              	   C  s8   | j dt||t||||f | j  t| j jS )Nz
            INSERT INTO group_chat_topics (
                group_id, centroid, message_count, created_at, updated_at, anchor_preview
            )
            VALUES (?, ?, ?, ?, ?, ?)
            )r   r   r   r   commit	lastrowid)r   r   r1   r   r   r2   r3   r   r   r   insert_topic@   s   	
z"GroupTopicStoreSqlite.insert_topictopic_idc              	   C  s.   | j d|t|||t|f | j  d S )Nz
            UPDATE group_chat_topics
            SET centroid = ?, message_count = ?, anchor_preview = ?, updated_at = ?
            WHERE id = ?
            r   r   r   r   r4   )r   r7   r1   r   r   r3   r   r   r   update_topic_centroid\   s
   z+GroupTopicStoreSqlite.update_topic_centroidN
message_iduser_idcontent_preview
similarityfloat | Nonemsg_embedding_blobbytes | Nonec	           	      C  s<   | j dt|t|t|t|||||f | j  d S )Na
  
            INSERT OR IGNORE INTO group_chat_topic_messages (
                topic_id, group_id, message_id, user_id, content_preview, similarity, created_at,
                msg_embedding_blob
            )
            VALUES (?, ?, ?, ?, ?, ?, ?, ?)
            r8   )	r   r7   r   r:   r;   r<   r=   r2   r?   r   r   r   insert_message_assignmentn   s   z/GroupTopicStoreSqlite.insert_message_assignment)r   r	   r
   r   r   r   )r   r   r   r   )r   r   r1   r!   r   r   r   r%   r2   r%   r3   r%   r   r   )r7   r   r1   r!   r   r   r   r%   r3   r%   r   r   r   )r7   r   r   r   r:   r   r;   r   r<   r%   r=   r>   r2   r%   r?   r@   r   r   )	__name__
__module____qualname____doc__r   r0   r6   r9   rA   r   r   r   r   r      s    


(
r   )rE   
__future__r   sqlite3numpynpcore.group_topic_segmenterr   r   r   r   r   r   r   r   r   <module>   s    