Browse Source

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

tags/0.6.1
takatost 1 year ago
parent
commit
f599f41336
No account linked to committer's email address

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

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

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

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



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

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

+ 7
- 5
api/services/conversation_service.py View File

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,

+ 4
- 3
api/services/web_conversation_service.py View File

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

Loading…
Cancel
Save