o
    wMi                     @  s   d Z ddlmZ ddlmZ ddlZddlmZ ddlm	Z	m
Z
 ddlmZmZmZ ddlmZmZ dd	lmZ dddZG dd dZdS )u?   群聊话题划分：正文扁平化 + 向量 + 划分入库。    )annotations)datetimeN)	DbManager)flatten_group_message_contentgroup_message_has_user_text)AssignmentResultGroupTopicSegmenterTopicSegmenterStore)TopicSummaryServiceshould_refresh_topic_summary)Embedderreturnstrc                   C  s   t  dS )Nz%Y-%m-%d %H:%M:%S)r   nowstrftime r   r   5/home/dore/onebot/Bot_Ero/core/group_topic_service.py_now_sql   s   r   c                   @  s>   e Zd Zdddddddd$ddZed%ddZd&d"d#ZdS )'GroupTopicServiceg?   N      )similarity_thresholdmin_text_len	dbmanagersummary_servicesummary_min_messagessummary_every_nembedderr   storer	   r   floatr   intr   DbManager | Noner   TopicSummaryService | Noner   r   r   Nonec          	      C  sh   || _ t|| _t||d| _|| _t|| _t|| _|d ur%|| _	d S |d ur/t | _	d S d | _	d S )N)r   )
	_embedderr!   _min_lenr   
_segmenter
_dbmanager_summary_min_summary_every_nr
   _summary)	selfr   r   r   r   r   r   r   r   r   r   r   __init__   s   


zGroupTopicService.__init__r   c                 C  s   | t  | |dS )N)r   r   r   )r   group_topic_store)clsr   r   r   r   from_db_manager+   s
   z!GroupTopicService.from_db_managergroup_iduser_id
message_idmessage_segmentslist | tuple | str | NoneAssignmentResult | Nonec                 C  s   t |t|s	d S t|t| }t|| jk rd S | j|g}tj	|d tj
d }ttj|}|dkr>|| }t }	| jjt|||t|t||	d}
| jrm| jrmt|
j| j| jdrm| jj|
j| jd |
S )Nr   )dtypeg        )r3   r2   
created_at)min_messagesevery_n)db)r   r!   r   striplenr&   r%   embednpasarrayfloat64ravelr    linalgnormr   r'   assign_topicr+   r(   r   message_count_afterr)   r*   refresh_topic_summarytopic_id)r,   r1   r2   r3   r4   textraw_vecembntsresultr   r   r   on_group_message3   s>   		z"GroupTopicService.on_group_message)r   r   r   r	   r   r    r   r!   r   r"   r   r#   r   r!   r   r!   r   r$   )r   r   r   r   )
r1   r!   r2   r!   r3   r!   r4   r5   r   r6   )__name__
__module____qualname__r-   classmethodr0   rO   r   r   r   r   r      s    r   )r   r   )__doc__
__future__r   r   numpyr?   core.database_managerr   core.group_message_textr   r   core.group_topic_segmenterr   r   r	   core.group_topic_summaryr
   r   core.llm.embedderr   r   r   r   r   r   r   <module>   s    
