|
@@ -26,46 +26,46 @@ from services.errors.conversation import ConversationNotExistsError
|
|
|
from services.errors.message import MessageNotExistsError
|
|
|
from services.message_service import MessageService
|
|
|
|
|
|
-
|
|
|
-class ChatMessageApi(Resource):
|
|
|
- account_fields = {
|
|
|
- 'id': fields.String,
|
|
|
- 'name': fields.String,
|
|
|
- 'email': fields.String
|
|
|
- }
|
|
|
-
|
|
|
- feedback_fields = {
|
|
|
- 'rating': fields.String,
|
|
|
- 'content': fields.String,
|
|
|
- 'from_source': fields.String,
|
|
|
- 'from_end_user_id': fields.String,
|
|
|
- 'from_account': fields.Nested(account_fields, allow_null=True),
|
|
|
- }
|
|
|
-
|
|
|
- annotation_fields = {
|
|
|
- 'content': fields.String,
|
|
|
- 'account': fields.Nested(account_fields, allow_null=True),
|
|
|
- 'created_at': TimestampField
|
|
|
- }
|
|
|
-
|
|
|
- message_detail_fields = {
|
|
|
- 'id': fields.String,
|
|
|
- 'conversation_id': fields.String,
|
|
|
- 'inputs': fields.Raw,
|
|
|
- 'query': fields.String,
|
|
|
- 'message': fields.Raw,
|
|
|
- 'message_tokens': fields.Integer,
|
|
|
- 'answer': fields.String,
|
|
|
- 'answer_tokens': fields.Integer,
|
|
|
- 'provider_response_latency': fields.Integer,
|
|
|
- 'from_source': fields.String,
|
|
|
- 'from_end_user_id': fields.String,
|
|
|
- 'from_account_id': fields.String,
|
|
|
- 'feedbacks': fields.List(fields.Nested(feedback_fields)),
|
|
|
- 'annotation': fields.Nested(annotation_fields, allow_null=True),
|
|
|
- 'created_at': TimestampField
|
|
|
- }
|
|
|
-
|
|
|
+account_fields = {
|
|
|
+ 'id': fields.String,
|
|
|
+ 'name': fields.String,
|
|
|
+ 'email': fields.String
|
|
|
+}
|
|
|
+
|
|
|
+feedback_fields = {
|
|
|
+ 'rating': fields.String,
|
|
|
+ 'content': fields.String,
|
|
|
+ 'from_source': fields.String,
|
|
|
+ 'from_end_user_id': fields.String,
|
|
|
+ 'from_account': fields.Nested(account_fields, allow_null=True),
|
|
|
+}
|
|
|
+
|
|
|
+annotation_fields = {
|
|
|
+ 'content': fields.String,
|
|
|
+ 'account': fields.Nested(account_fields, allow_null=True),
|
|
|
+ 'created_at': TimestampField
|
|
|
+}
|
|
|
+
|
|
|
+message_detail_fields = {
|
|
|
+ 'id': fields.String,
|
|
|
+ 'conversation_id': fields.String,
|
|
|
+ 'inputs': fields.Raw,
|
|
|
+ 'query': fields.String,
|
|
|
+ 'message': fields.Raw,
|
|
|
+ 'message_tokens': fields.Integer,
|
|
|
+ 'answer': fields.String,
|
|
|
+ 'answer_tokens': fields.Integer,
|
|
|
+ 'provider_response_latency': fields.Float,
|
|
|
+ 'from_source': fields.String,
|
|
|
+ 'from_end_user_id': fields.String,
|
|
|
+ 'from_account_id': fields.String,
|
|
|
+ 'feedbacks': fields.List(fields.Nested(feedback_fields)),
|
|
|
+ 'annotation': fields.Nested(annotation_fields, allow_null=True),
|
|
|
+ 'created_at': TimestampField
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+class ChatMessageListApi(Resource):
|
|
|
message_infinite_scroll_pagination_fields = {
|
|
|
'limit': fields.Integer,
|
|
|
'has_more': fields.Boolean,
|
|
@@ -253,7 +253,8 @@ class MessageMoreLikeThisApi(Resource):
|
|
|
message_id = str(message_id)
|
|
|
|
|
|
parser = reqparse.RequestParser()
|
|
|
- parser.add_argument('response_mode', type=str, required=True, choices=['blocking', 'streaming'], location='args')
|
|
|
+ parser.add_argument('response_mode', type=str, required=True, choices=['blocking', 'streaming'],
|
|
|
+ location='args')
|
|
|
args = parser.parse_args()
|
|
|
|
|
|
streaming = args['response_mode'] == 'streaming'
|
|
@@ -301,7 +302,8 @@ def compact_response(response: Union[dict | Generator]) -> Response:
|
|
|
except QuotaExceededError:
|
|
|
yield "data: " + json.dumps(api.handle_error(ProviderQuotaExceededError()).get_json()) + "\n\n"
|
|
|
except ModelCurrentlyNotSupportError:
|
|
|
- yield "data: " + json.dumps(api.handle_error(ProviderModelCurrentlyNotSupportError()).get_json()) + "\n\n"
|
|
|
+ yield "data: " + json.dumps(
|
|
|
+ api.handle_error(ProviderModelCurrentlyNotSupportError()).get_json()) + "\n\n"
|
|
|
except (LLMBadRequestError, LLMAPIConnectionError, LLMAPIUnavailableError,
|
|
|
LLMRateLimitError, LLMAuthorizationError) as e:
|
|
|
yield "data: " + json.dumps(api.handle_error(CompletionRequestError(str(e))).get_json()) + "\n\n"
|
|
@@ -353,9 +355,33 @@ class MessageSuggestedQuestionApi(Resource):
|
|
|
return {'data': questions}
|
|
|
|
|
|
|
|
|
+class MessageApi(Resource):
|
|
|
+ @setup_required
|
|
|
+ @login_required
|
|
|
+ @account_initialization_required
|
|
|
+ @marshal_with(message_detail_fields)
|
|
|
+ def get(self, app_id, message_id):
|
|
|
+ app_id = str(app_id)
|
|
|
+ message_id = str(message_id)
|
|
|
+
|
|
|
+ # get app info
|
|
|
+ app_model = _get_app(app_id, 'chat')
|
|
|
+
|
|
|
+ message = db.session.query(Message).filter(
|
|
|
+ Message.id == message_id,
|
|
|
+ Message.app_id == app_model.id
|
|
|
+ ).first()
|
|
|
+
|
|
|
+ if not message:
|
|
|
+ raise NotFound("Message Not Exists.")
|
|
|
+
|
|
|
+ return message
|
|
|
+
|
|
|
+
|
|
|
api.add_resource(MessageMoreLikeThisApi, '/apps/<uuid:app_id>/completion-messages/<uuid:message_id>/more-like-this')
|
|
|
api.add_resource(MessageSuggestedQuestionApi, '/apps/<uuid:app_id>/chat-messages/<uuid:message_id>/suggested-questions')
|
|
|
-api.add_resource(ChatMessageApi, '/apps/<uuid:app_id>/chat-messages', endpoint='chat_messages')
|
|
|
+api.add_resource(ChatMessageListApi, '/apps/<uuid:app_id>/chat-messages', endpoint='console_chat_messages')
|
|
|
api.add_resource(MessageFeedbackApi, '/apps/<uuid:app_id>/feedbacks')
|
|
|
api.add_resource(MessageAnnotationApi, '/apps/<uuid:app_id>/annotations')
|
|
|
api.add_resource(MessageAnnotationCountApi, '/apps/<uuid:app_id>/annotations/count')
|
|
|
+api.add_resource(MessageApi, '/apps/<uuid:app_id>/messages/<uuid:message_id>', endpoint='console_message')
|