From f599f41336e5f72e88cc9cf4ae50e365e8076672 Mon Sep 17 00:00:00 2001 From: takatost Date: Tue, 9 Apr 2024 17:04:48 +0800 Subject: [PATCH] fix: empty conversation list of explore chatbot (#3235) --- api/controllers/console/explore/conversation.py | 3 ++- api/controllers/service_api/app/conversation.py | 9 ++++++++- api/controllers/web/conversation.py | 4 +++- api/services/conversation_service.py | 12 +++++++----- api/services/web_conversation_service.py | 7 ++++--- 5 files changed, 24 insertions(+), 11 deletions(-) diff --git a/api/controllers/console/explore/conversation.py b/api/controllers/console/explore/conversation.py index 7892840aeb..ea0fa4e17e 100644 --- a/api/controllers/console/explore/conversation.py +++ b/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.") diff --git a/api/controllers/service_api/app/conversation.py b/api/controllers/service_api/app/conversation.py index fc60f94ec9..02158f8b56 100644 --- a/api/controllers/service_api/app/conversation.py +++ b/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.") diff --git a/api/controllers/web/conversation.py b/api/controllers/web/conversation.py index bbc57c7d61..b83ea3a525 100644 --- a/api/controllers/web/conversation.py +++ b/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.") diff --git a/api/services/conversation_service.py b/api/services/conversation_service.py index 1a0213799e..5c2fb83b72 100644 --- a/api/services/conversation_service.py +++ b/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, diff --git a/api/services/web_conversation_service.py b/api/services/web_conversation_service.py index 06e3f6fd53..cba048ccdb 100644 --- a/api/services/web_conversation_service.py +++ b/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