| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 | 
							- import logging
 - import time
 - 
 - import click
 - from celery import shared_task
 - from werkzeug.exceptions import NotFound
 - 
 - from core.generator.llm_generator import LLMGenerator
 - from extensions.ext_database import db
 - from models.model import Conversation, Message
 - 
 - 
 - @shared_task(queue='generation')
 - def generate_conversation_summary_task(conversation_id: str):
 -     """
 -     Async Generate conversation summary
 -     :param conversation_id:
 - 
 -     Usage: generate_conversation_summary_task.delay(conversation_id)
 -     """
 -     logging.info(click.style('Start generate conversation summary: {}'.format(conversation_id), fg='green'))
 -     start_at = time.perf_counter()
 - 
 -     conversation = db.session.query(Conversation).filter(Conversation.id == conversation_id).first()
 -     if not conversation:
 -         raise NotFound('Conversation not found')
 - 
 -     try:
 -         # get conversation messages count
 -         history_message_count = conversation.message_count
 -         if history_message_count >= 5 and not conversation.summary:
 -             app_model = conversation.app
 -             if not app_model:
 -                 return
 - 
 -             history_messages = db.session.query(Message).filter(Message.conversation_id == conversation.id) \
 -                 .order_by(Message.created_at.asc()).all()
 - 
 -             conversation.summary = LLMGenerator.generate_conversation_summary(app_model.tenant_id, history_messages)
 -             db.session.add(conversation)
 -             db.session.commit()
 - 
 -         end_at = time.perf_counter()
 -         logging.info(click.style('Conversation summary generated: {} latency: {}'.format(conversation_id, end_at - start_at), fg='green'))
 -     except Exception:
 -         logging.exception("generate conversation summary failed")
 
 
  |