| from controllers.console import api | from controllers.console import api | ||||
| from controllers.console.explore.error import NotChatAppError | from controllers.console.explore.error import NotChatAppError | ||||
| from controllers.console.explore.wraps import InstalledAppResource | 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 fields.conversation_fields import conversation_infinite_scroll_pagination_fields, simple_conversation_fields | ||||
| from libs.helper import uuid_value | from libs.helper import uuid_value | ||||
| from models.model import AppMode | from models.model import AppMode | ||||
| user=current_user, | user=current_user, | ||||
| last_id=args['last_id'], | last_id=args['last_id'], | ||||
| limit=args['limit'], | limit=args['limit'], | ||||
| invoke_from=InvokeFrom.EXPLORE, | |||||
| pinned=pinned, | pinned=pinned, | ||||
| exclude_debug_conversation=True | |||||
| ) | ) | ||||
| except LastConversationNotExistsError: | except LastConversationNotExistsError: | ||||
| raise NotFound("Last Conversation Not Exists.") | raise NotFound("Last Conversation Not Exists.") |
| from controllers.service_api import api | from controllers.service_api import api | ||||
| from controllers.service_api.app.error import NotChatAppError | from controllers.service_api.app.error import NotChatAppError | ||||
| from controllers.service_api.wraps import FetchUserArg, WhereisUserArg, validate_app_token | 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 fields.conversation_fields import conversation_infinite_scroll_pagination_fields, simple_conversation_fields | ||||
| from libs.helper import uuid_value | from libs.helper import uuid_value | ||||
| from models.model import App, AppMode, EndUser | from models.model import App, AppMode, EndUser | ||||
| args = parser.parse_args() | args = parser.parse_args() | ||||
| try: | 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: | except services.errors.conversation.LastConversationNotExistsError: | ||||
| raise NotFound("Last Conversation Not Exists.") | raise NotFound("Last Conversation Not Exists.") | ||||
| from controllers.web import api | from controllers.web import api | ||||
| from controllers.web.error import NotChatAppError | from controllers.web.error import NotChatAppError | ||||
| from controllers.web.wraps import WebApiResource | 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 fields.conversation_fields import conversation_infinite_scroll_pagination_fields, simple_conversation_fields | ||||
| from libs.helper import uuid_value | from libs.helper import uuid_value | ||||
| from models.model import AppMode | from models.model import AppMode | ||||
| user=end_user, | user=end_user, | ||||
| last_id=args['last_id'], | last_id=args['last_id'], | ||||
| limit=args['limit'], | limit=args['limit'], | ||||
| pinned=pinned | |||||
| invoke_from=InvokeFrom.WEB_APP, | |||||
| pinned=pinned, | |||||
| ) | ) | ||||
| except LastConversationNotExistsError: | except LastConversationNotExistsError: | ||||
| raise NotFound("Last Conversation Not Exists.") | raise NotFound("Last Conversation Not Exists.") |
| from typing import Optional, Union | 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 core.llm_generator.llm_generator import LLMGenerator | ||||
| from extensions.ext_database import db | from extensions.ext_database import db | ||||
| from libs.infinite_scroll_pagination import InfiniteScrollPagination | from libs.infinite_scroll_pagination import InfiniteScrollPagination | ||||
| @classmethod | @classmethod | ||||
| def pagination_by_last_id(cls, app_model: App, user: Optional[Union[Account, EndUser]], | def pagination_by_last_id(cls, app_model: App, user: Optional[Union[Account, EndUser]], | ||||
| last_id: Optional[str], limit: int, | 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: | if not user: | ||||
| return InfiniteScrollPagination(data=[], limit=limit, has_more=False) | return InfiniteScrollPagination(data=[], limit=limit, has_more=False) | ||||
| Conversation.from_source == ('api' if isinstance(user, EndUser) else 'console'), | 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_end_user_id == (user.id if isinstance(user, EndUser) else None), | ||||
| Conversation.from_account_id == (user.id if isinstance(user, Account) 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: | if include_ids is not None: | ||||
| if exclude_ids is not None: | if exclude_ids is not None: | ||||
| base_query = base_query.filter(~Conversation.id.in_(exclude_ids)) | 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: | if last_id: | ||||
| last_conversation = base_query.filter( | last_conversation = base_query.filter( | ||||
| Conversation.id == last_id, | Conversation.id == last_id, |
| from typing import Optional, Union | from typing import Optional, Union | ||||
| from core.app.entities.app_invoke_entities import InvokeFrom | |||||
| from extensions.ext_database import db | from extensions.ext_database import db | ||||
| from libs.infinite_scroll_pagination import InfiniteScrollPagination | from libs.infinite_scroll_pagination import InfiniteScrollPagination | ||||
| from models.account import Account | from models.account import Account | ||||
| class WebConversationService: | class WebConversationService: | ||||
| @classmethod | @classmethod | ||||
| def pagination_by_last_id(cls, app_model: App, user: Optional[Union[Account, EndUser]], | 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 | include_ids = None | ||||
| exclude_ids = None | exclude_ids = None | ||||
| if pinned is not None: | if pinned is not None: | ||||
| user=user, | user=user, | ||||
| last_id=last_id, | last_id=last_id, | ||||
| limit=limit, | limit=limit, | ||||
| invoke_from=invoke_from, | |||||
| include_ids=include_ids, | include_ids=include_ids, | ||||
| exclude_ids=exclude_ids, | exclude_ids=exclude_ids, | ||||
| exclude_debug_conversation=exclude_debug_conversation | |||||
| ) | ) | ||||
| @classmethod | @classmethod |