| @@ -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.") | |||
| @@ -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.") | |||
| @@ -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.") | |||
| @@ -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, | |||
| @@ -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 | |||