Browse Source

chore: use ConversationService.get_conversation instead of AgentChatA… (#16136)

Co-authored-by: 刘江波 <jiangbo721@163.com>
jiangbo721 1 month ago
parent
commit
97eadb867c

+ 2 - 1
api/core/app/apps/advanced_chat/app_generator.py

@@ -29,6 +29,7 @@ from factories import file_factory
 from models.account import Account
 from models.account import Account
 from models.model import App, Conversation, EndUser, Message
 from models.model import App, Conversation, EndUser, Message
 from models.workflow import Workflow
 from models.workflow import Workflow
+from services.conversation_service import ConversationService
 from services.errors.message import MessageNotExistsError
 from services.errors.message import MessageNotExistsError
 
 
 logger = logging.getLogger(__name__)
 logger = logging.getLogger(__name__)
@@ -105,7 +106,7 @@ class AdvancedChatAppGenerator(MessageBasedAppGenerator):
         conversation = None
         conversation = None
         conversation_id = args.get("conversation_id")
         conversation_id = args.get("conversation_id")
         if conversation_id:
         if conversation_id:
-            conversation = self._get_conversation_by_user(
+            conversation = ConversationService.get_conversation(
                 app_model=app_model, conversation_id=conversation_id, user=user
                 app_model=app_model, conversation_id=conversation_id, user=user
             )
             )
 
 

+ 6 - 3
api/core/app/apps/agent_chat/app_generator.py

@@ -24,6 +24,7 @@ from core.ops.ops_trace_manager import TraceQueueManager
 from extensions.ext_database import db
 from extensions.ext_database import db
 from factories import file_factory
 from factories import file_factory
 from models import Account, App, EndUser
 from models import Account, App, EndUser
+from services.conversation_service import ConversationService
 from services.errors.message import MessageNotExistsError
 from services.errors.message import MessageNotExistsError
 
 
 logger = logging.getLogger(__name__)
 logger = logging.getLogger(__name__)
@@ -98,9 +99,11 @@ class AgentChatAppGenerator(MessageBasedAppGenerator):
 
 
         # get conversation
         # get conversation
         conversation = None
         conversation = None
-        if args.get("conversation_id"):
-            conversation = self._get_conversation_by_user(app_model, args.get("conversation_id", ""), user)
-
+        conversation_id = args.get("conversation_id")
+        if conversation_id:
+            conversation = ConversationService.get_conversation(
+                app_model=app_model, conversation_id=conversation_id, user=user
+            )
         # get app model config
         # get app model config
         app_model_config = self._get_app_model_config(app_model=app_model, conversation=conversation)
         app_model_config = self._get_app_model_config(app_model=app_model, conversation=conversation)
 
 

+ 6 - 3
api/core/app/apps/chat/app_generator.py

@@ -24,6 +24,7 @@ from extensions.ext_database import db
 from factories import file_factory
 from factories import file_factory
 from models.account import Account
 from models.account import Account
 from models.model import App, EndUser
 from models.model import App, EndUser
+from services.conversation_service import ConversationService
 from services.errors.message import MessageNotExistsError
 from services.errors.message import MessageNotExistsError
 
 
 logger = logging.getLogger(__name__)
 logger = logging.getLogger(__name__)
@@ -91,9 +92,11 @@ class ChatAppGenerator(MessageBasedAppGenerator):
 
 
         # get conversation
         # get conversation
         conversation = None
         conversation = None
-        if args.get("conversation_id"):
-            conversation = self._get_conversation_by_user(app_model, args.get("conversation_id", ""), user)
-
+        conversation_id = args.get("conversation_id")
+        if conversation_id:
+            conversation = ConversationService.get_conversation(
+                app_model=app_model, conversation_id=conversation_id, user=user
+            )
         # get app model config
         # get app model config
         app_model_config = self._get_app_model_config(app_model=app_model, conversation=conversation)
         app_model_config = self._get_app_model_config(app_model=app_model, conversation=conversation)
 
 

+ 1 - 28
api/core/app/apps/message_based_app_generator.py

@@ -4,8 +4,6 @@ from collections.abc import Generator
 from datetime import UTC, datetime
 from datetime import UTC, datetime
 from typing import Optional, Union, cast
 from typing import Optional, Union, cast
 
 
-from sqlalchemy import and_
-
 from core.app.app_config.entities import EasyUIBasedAppConfig, EasyUIBasedAppModelConfigFrom
 from core.app.app_config.entities import EasyUIBasedAppConfig, EasyUIBasedAppModelConfigFrom
 from core.app.apps.base_app_generator import BaseAppGenerator
 from core.app.apps.base_app_generator import BaseAppGenerator
 from core.app.apps.base_app_queue_manager import AppQueueManager, GenerateTaskStoppedError
 from core.app.apps.base_app_queue_manager import AppQueueManager, GenerateTaskStoppedError
@@ -30,7 +28,7 @@ from models import Account
 from models.enums import CreatedByRole
 from models.enums import CreatedByRole
 from models.model import App, AppMode, AppModelConfig, Conversation, EndUser, Message, MessageFile
 from models.model import App, AppMode, AppModelConfig, Conversation, EndUser, Message, MessageFile
 from services.errors.app_model_config import AppModelConfigBrokenError
 from services.errors.app_model_config import AppModelConfigBrokenError
-from services.errors.conversation import ConversationCompletedError, ConversationNotExistsError
+from services.errors.conversation import ConversationNotExistsError
 
 
 logger = logging.getLogger(__name__)
 logger = logging.getLogger(__name__)
 
 
@@ -81,31 +79,6 @@ class MessageBasedAppGenerator(BaseAppGenerator):
                 logger.exception(f"Failed to handle response, conversation_id: {conversation.id}")
                 logger.exception(f"Failed to handle response, conversation_id: {conversation.id}")
                 raise e
                 raise e
 
 
-    def _get_conversation_by_user(
-        self, app_model: App, conversation_id: str, user: Union[Account, EndUser]
-    ) -> Conversation:
-        conversation_filter = [
-            Conversation.id == conversation_id,
-            Conversation.app_id == app_model.id,
-            Conversation.status == "normal",
-            Conversation.is_deleted.is_(False),
-        ]
-
-        if isinstance(user, Account):
-            conversation_filter.append(Conversation.from_account_id == user.id)
-        else:
-            conversation_filter.append(Conversation.from_end_user_id == user.id if user else None)
-
-        conversation = db.session.query(Conversation).filter(and_(*conversation_filter)).first()
-
-        if not conversation:
-            raise ConversationNotExistsError()
-
-        if conversation.status != "normal":
-            raise ConversationCompletedError()
-
-        return conversation
-
     def _get_app_model_config(self, app_model: App, conversation: Optional[Conversation] = None) -> AppModelConfig:
     def _get_app_model_config(self, app_model: App, conversation: Optional[Conversation] = None) -> AppModelConfig:
         if conversation:
         if conversation:
             app_model_config = (
             app_model_config = (

+ 0 - 7
api/services/message_service.py

@@ -15,7 +15,6 @@ from libs.infinite_scroll_pagination import InfiniteScrollPagination
 from models.account import Account
 from models.account import Account
 from models.model import App, AppMode, AppModelConfig, EndUser, Message, MessageFeedback
 from models.model import App, AppMode, AppModelConfig, EndUser, Message, MessageFeedback
 from services.conversation_service import ConversationService
 from services.conversation_service import ConversationService
-from services.errors.conversation import ConversationCompletedError, ConversationNotExistsError
 from services.errors.message import (
 from services.errors.message import (
     FirstMessageNotExistsError,
     FirstMessageNotExistsError,
     LastMessageNotExistsError,
     LastMessageNotExistsError,
@@ -210,12 +209,6 @@ class MessageService:
             app_model=app_model, conversation_id=message.conversation_id, user=user
             app_model=app_model, conversation_id=message.conversation_id, user=user
         )
         )
 
 
-        if not conversation:
-            raise ConversationNotExistsError()
-
-        if conversation.status != "normal":
-            raise ConversationCompletedError()
-
         model_manager = ModelManager()
         model_manager = ModelManager()
 
 
         if app_model.mode == AppMode.ADVANCED_CHAT.value:
         if app_model.mode == AppMode.ADVANCED_CHAT.value: