Team Ai
Apppublic

Underground-Digital/Workflow-Engine

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
conversation.py125 linesDownload Raw Back to web
1from flask_restful import marshal_with, reqparse2from flask_restful.inputs import int_range3from werkzeug.exceptions import NotFound4 5from controllers.web import api6from controllers.web.error import NotChatAppError7from controllers.web.wraps import WebApiResource8from core.app.entities.app_invoke_entities import InvokeFrom9from fields.conversation_fields import conversation_infinite_scroll_pagination_fields, simple_conversation_fields10from libs.helper import uuid_value11from models.model import AppMode12from services.conversation_service import ConversationService13from services.errors.conversation import ConversationNotExistsError, LastConversationNotExistsError14from services.web_conversation_service import WebConversationService15 16 17class ConversationListApi(WebApiResource):18    @marshal_with(conversation_infinite_scroll_pagination_fields)19    def get(self, app_model, end_user):20        app_mode = AppMode.value_of(app_model.mode)21        if app_mode not in {AppMode.CHAT, AppMode.AGENT_CHAT, AppMode.ADVANCED_CHAT}:22            raise NotChatAppError()23 24        parser = reqparse.RequestParser()25        parser.add_argument("last_id", type=uuid_value, location="args")26        parser.add_argument("limit", type=int_range(1, 100), required=False, default=20, location="args")27        parser.add_argument("pinned", type=str, choices=["true", "false", None], location="args")28        parser.add_argument(29            "sort_by",30            type=str,31            choices=["created_at", "-created_at", "updated_at", "-updated_at"],32            required=False,33            default="-updated_at",34            location="args",35        )36        args = parser.parse_args()37 38        pinned = None39        if "pinned" in args and args["pinned"] is not None:40            pinned = True if args["pinned"] == "true" else False41 42        try:43            return WebConversationService.pagination_by_last_id(44                app_model=app_model,45                user=end_user,46                last_id=args["last_id"],47                limit=args["limit"],48                invoke_from=InvokeFrom.WEB_APP,49                pinned=pinned,50                sort_by=args["sort_by"],51            )52        except LastConversationNotExistsError:53            raise NotFound("Last Conversation Not Exists.")54 55 56class ConversationApi(WebApiResource):57    def delete(self, app_model, end_user, c_id):58        app_mode = AppMode.value_of(app_model.mode)59        if app_mode not in {AppMode.CHAT, AppMode.AGENT_CHAT, AppMode.ADVANCED_CHAT}:60            raise NotChatAppError()61 62        conversation_id = str(c_id)63        try:64            ConversationService.delete(app_model, conversation_id, end_user)65        except ConversationNotExistsError:66            raise NotFound("Conversation Not Exists.")67        WebConversationService.unpin(app_model, conversation_id, end_user)68 69        return {"result": "success"}, 20470 71 72class ConversationRenameApi(WebApiResource):73    @marshal_with(simple_conversation_fields)74    def post(self, app_model, end_user, c_id):75        app_mode = AppMode.value_of(app_model.mode)76        if app_mode not in {AppMode.CHAT, AppMode.AGENT_CHAT, AppMode.ADVANCED_CHAT}:77            raise NotChatAppError()78 79        conversation_id = str(c_id)80 81        parser = reqparse.RequestParser()82        parser.add_argument("name", type=str, required=False, location="json")83        parser.add_argument("auto_generate", type=bool, required=False, default=False, location="json")84        args = parser.parse_args()85 86        try:87            return ConversationService.rename(app_model, conversation_id, end_user, args["name"], args["auto_generate"])88        except ConversationNotExistsError:89            raise NotFound("Conversation Not Exists.")90 91 92class ConversationPinApi(WebApiResource):93    def patch(self, app_model, end_user, c_id):94        app_mode = AppMode.value_of(app_model.mode)95        if app_mode not in {AppMode.CHAT, AppMode.AGENT_CHAT, AppMode.ADVANCED_CHAT}:96            raise NotChatAppError()97 98        conversation_id = str(c_id)99 100        try:101            WebConversationService.pin(app_model, conversation_id, end_user)102        except ConversationNotExistsError:103            raise NotFound("Conversation Not Exists.")104 105        return {"result": "success"}106 107 108class ConversationUnPinApi(WebApiResource):109    def patch(self, app_model, end_user, c_id):110        app_mode = AppMode.value_of(app_model.mode)111        if app_mode not in {AppMode.CHAT, AppMode.AGENT_CHAT, AppMode.ADVANCED_CHAT}:112            raise NotChatAppError()113 114        conversation_id = str(c_id)115        WebConversationService.unpin(app_model, conversation_id, end_user)116 117        return {"result": "success"}118 119 120api.add_resource(ConversationRenameApi, "/conversations/<uuid:c_id>/name", endpoint="web_conversation_name")121api.add_resource(ConversationListApi, "/conversations")122api.add_resource(ConversationApi, "/conversations/<uuid:c_id>")123api.add_resource(ConversationPinApi, "/conversations/<uuid:c_id>/pin")124api.add_resource(ConversationUnPinApi, "/conversations/<uuid:c_id>/unpin")125