o
    wMiR                     @  s   d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZmZmZmZ dZd	Zd
ZdZeeddddZdZG dd dZdS )u?   根据 topic 下消息预览调用 LLM 生成持久化摘要。    )annotations)datetime)	DbManager)logger)LLMTransport)ChatRequestGenerationConfigLLMMessage         i  )min_messagesevery_nmessage_countintr   r   returnboolc                C  s<   | t |k rdS | t |krdS | t |ko| t | dkS )uz   是否在写入第 ``message_count`` 条归属消息后刷新摘要（首刷在 min_messages，之后每 every_n 条）。FTr   )r   )r   r   r    r   5/home/dore/onebot/Bot_Ero/core/group_topic_summary.pyshould_refresh_topic_summary   s
   r   u   你是群聊话题分析助手。下面编号行是同一话题下多条消息的简短预览（可能含占位符）。请用 1～3 句中文概括讨论主题，不要逐条复述，不要编造未出现的内容。c                   @  s0   e Zd Z	deeedddddZdddZdS )TopicSummaryServiceN)r   preview_limitprompt_char_cap
generationllmLLMTransport | Noner   r   r   r   r   GenerationConfig | Noner   Nonec                C  sB   |pt  | _t|| _t|| _t|| _|ptdddd| _d S )Ng333333?   g?)temperature
max_tokenstop_p)r	   _llmr   _min_messages_preview_limit_prompt_char_capr   _generation)selfr   r   r   r   r   r   r   r   __init__'   s
   	


zTopicSummaryService.__init__topic_iddbr   c             
   C  s  |j t|| jd}t|| jk rd S dd t|D }d|}t|| jkr3|d | jd  d }d| }z:| j	t
tdtd	td
|d	g| jd}|jpQd }|s_td| W d S t d}	|t|||	 W d S  ty }
 ztd||
 W Y d }
~
d S d }
~
ww )N)limitc                 S  s.   g | ]\}}|p	d   r|d  d| qS )    z. )strip).0ipr   r   r   
<listcomp>:   s   . z=TopicSummaryService.refresh_topic_summary.<locals>.<listcomp>
   u   
…（已截断部分预览）u   消息预览：
system)rolecontentuser)messagesconfigr-   u/   [topic_summary] LLM 返回空摘要 topic_id=%sz%Y-%m-%d %H:%M:%Su,   [topic_summary] 生成失败 topic_id=%s: %s)list_topic_message_previewsr   r%   lenr$   	enumeratejoinr&   r#   chatr   r
   _SYSTEM_PROMPTr'   messager/   r   warningr   nowstrftimeupdate_topic_summary	Exception)r(   r*   r+   previewslinesbodyuser_contentrespsummarytsexcr   r   r   refresh_topic_summary6   s6   


	z)TopicSummaryService.refresh_topic_summary)N)r   r   r   r   r   r   r   r   r   r   r   r   )r*   r   r+   r   r   r   )__name__
__module____qualname__DEFAULT_MIN_MESSAGESDEFAULT_USER_PREVIEW_LIMITDEFAULT_PROMPT_CHAR_CAPr)   rP   r   r   r   r   r   &   s    r   N)r   r   r   r   r   r   r   r   )__doc__
__future__r   r   core.database_managerr   core.loggerr   core.llm.client_protocolr   core.llm.llmr   r   r	   r
   rT   DEFAULT_EVERY_NrU   rV   r   rA   r   r   r   r   r   <module>   s"    