瀏覽代碼

fix: empty conversation list of explore chatbot (#3235)

takatost 1 年之前
父節點
當前提交
f599f41336

+ 2 - 1
api/controllers/console/explore/conversation.py

@@ -6,6 +6,7 @@ from werkzeug.exceptions import NotFound
 from controllers.console import api
 from controllers.console.explore.error import NotChatAppError
 from controllers.console.explore.wraps import InstalledAppResource
+from core.app.entities.app_invoke_entities import InvokeFrom
 from fields.conversation_fields import conversation_infinite_scroll_pagination_fields, simple_conversation_fields
 from libs.helper import uuid_value
 from models.model import AppMode
@@ -39,8 +40,8 @@ class ConversationListApi(InstalledAppResource):
                 user=current_user,
                 last_id=args['last_id'],
                 limit=args['limit'],
+                invoke_from=InvokeFrom.EXPLORE,
                 pinned=pinned,
-                exclude_debug_conversation=True
             )
         except LastConversationNotExistsError:
             raise NotFound("Last Conversation Not Exists.")

+ 8 - 1
api/controllers/service_api/app/conversation.py

@@ -6,6 +6,7 @@ import services
 from controllers.service_api import api
 from controllers.service_api.app.error import NotChatAppError
 from controllers.service_api.wraps import FetchUserArg, WhereisUserArg, validate_app_token
+from core.app.entities.app_invoke_entities import InvokeFrom
 from fields.conversation_fields import conversation_infinite_scroll_pagination_fields, simple_conversation_fields
 from libs.helper import uuid_value
 from models.model import App, AppMode, EndUser
@@ -27,7 +28,13 @@ class ConversationApi(Resource):
         args = parser.parse_args()
 
         try:
-            return ConversationService.pagination_by_last_id(app_model, end_user, args['last_id'], args['limit'])
+            return ConversationService.pagination_by_last_id(
+                app_model=app_model,
+                user=end_user,
+                last_id=args['last_id'],
+                limit=args['limit'],
+                invoke_from=InvokeFrom.SERVICE_API
+            )
         except services.errors.conversation.LastConversationNotExistsError:
             raise NotFound("Last Conversation Not Exists.")
 

+ 3 - 1
api/controllers/web/conversation.py

@@ -5,6 +5,7 @@ from werkzeug.exceptions import NotFound
 from controllers.web import api
 from controllers.web.error import NotChatAppError
 from controllers.web.wraps import WebApiResource
+from core.app.entities.app_invoke_entities import InvokeFrom
 from fields.conversation_fields import conversation_infinite_scroll_pagination_fields, simple_conversation_fields
 from libs.helper import uuid_value
 from models.model import AppMode
@@ -37,7 +38,8 @@ class ConversationListApi(WebApiResource):
                 user=end_user,
                 last_id=args['last_id'],
                 limit=args['limit'],
-                pinned=pinned
+                invoke_from=InvokeFrom.WEB_APP,
+                pinned=pinned,
             )
         except LastConversationNotExistsError:
             raise NotFound("Last Conversation Not Exists.")

+ 7 - 5
api/services/conversation_service.py

@@ -1,5 +1,8 @@
 from typing import Optional, Union
 
+from sqlalchemy import or_
+
+from core.app.entities.app_invoke_entities import InvokeFrom
 from core.llm_generator.llm_generator import LLMGenerator
 from extensions.ext_database import db
 from libs.infinite_scroll_pagination import InfiniteScrollPagination
@@ -13,8 +16,9 @@ class ConversationService:
     @classmethod
     def pagination_by_last_id(cls, app_model: App, user: Optional[Union[Account, EndUser]],
                               last_id: Optional[str], limit: int,
-                              include_ids: Optional[list] = None, exclude_ids: Optional[list] = None,
-                              exclude_debug_conversation: bool = False) -> InfiniteScrollPagination:
+                              invoke_from: InvokeFrom,
+                              include_ids: Optional[list] = None,
+                              exclude_ids: Optional[list] = None) -> InfiniteScrollPagination:
         if not user:
             return InfiniteScrollPagination(data=[], limit=limit, has_more=False)
 
@@ -24,6 +28,7 @@ class ConversationService:
             Conversation.from_source == ('api' if isinstance(user, EndUser) else 'console'),
             Conversation.from_end_user_id == (user.id if isinstance(user, EndUser) else None),
             Conversation.from_account_id == (user.id if isinstance(user, Account) else None),
+            or_(Conversation.invoke_from.is_(None), Conversation.invoke_from == invoke_from.value)
         )
 
         if include_ids is not None:
@@ -32,9 +37,6 @@ class ConversationService:
         if exclude_ids is not None:
             base_query = base_query.filter(~Conversation.id.in_(exclude_ids))
 
-        if exclude_debug_conversation:
-            base_query = base_query.filter(Conversation.override_model_configs == None)
-
         if last_id:
             last_conversation = base_query.filter(
                 Conversation.id == last_id,

+ 4 - 3
api/services/web_conversation_service.py

@@ -1,5 +1,6 @@
 from typing import Optional, Union
 
+from core.app.entities.app_invoke_entities import InvokeFrom
 from extensions.ext_database import db
 from libs.infinite_scroll_pagination import InfiniteScrollPagination
 from models.account import Account
@@ -11,8 +12,8 @@ from services.conversation_service import ConversationService
 class WebConversationService:
     @classmethod
     def pagination_by_last_id(cls, app_model: App, user: Optional[Union[Account, EndUser]],
-                              last_id: Optional[str], limit: int, pinned: Optional[bool] = None,
-                              exclude_debug_conversation: bool = False) -> InfiniteScrollPagination:
+                              last_id: Optional[str], limit: int, invoke_from: InvokeFrom,
+                              pinned: Optional[bool] = None) -> InfiniteScrollPagination:
         include_ids = None
         exclude_ids = None
         if pinned is not None:
@@ -32,9 +33,9 @@ class WebConversationService:
             user=user,
             last_id=last_id,
             limit=limit,
+            invoke_from=invoke_from,
             include_ids=include_ids,
             exclude_ids=exclude_ids,
-            exclude_debug_conversation=exclude_debug_conversation
         )
 
     @classmethod