from flask_restful import fields from fields.member_fields import simple_account_fields from libs.helper import TimestampField from .raws import FilesContainedField class MessageTextField(fields.Raw): def format(self, value): return value[0]["text"] if value else "" feedback_fields = { "rating": fields.String, "content": fields.String, "from_source": fields.String, "from_end_user_id": fields.String, "from_account": fields.Nested(simple_account_fields, allow_null=True), } annotation_fields = { "id": fields.String, "question": fields.String, "content": fields.String, "account": fields.Nested(simple_account_fields, allow_null=True), "created_at": TimestampField, } annotation_hit_history_fields = { "annotation_id": fields.String(attribute="id"), "annotation_create_account": fields.Nested(simple_account_fields, allow_null=True), "created_at": TimestampField, } message_file_fields = { "id": fields.String, "filename": fields.String, "type": fields.String, "url": fields.String, "mime_type": fields.String, "size": fields.Integer, "transfer_method": fields.String, "belongs_to": fields.String(default="user"), } agent_thought_fields = { "id": fields.String, "chain_id": fields.String, "message_id": fields.String, "position": fields.Integer, "thought": fields.String, "tool": fields.String, "tool_labels": fields.Raw, "tool_input": fields.String, "created_at": TimestampField, "observation": fields.String, "files": fields.List(fields.String), } message_detail_fields = { "id": fields.String, "conversation_id": fields.String, "inputs": FilesContainedField, "query": fields.String, "message": fields.Raw, "message_tokens": fields.Integer, "answer": fields.String(attribute="re_sign_file_url_answer"), "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)), "workflow_run_id": fields.String, "annotation": fields.Nested(annotation_fields, allow_null=True), "annotation_hit_history": fields.Nested(annotation_hit_history_fields, allow_null=True), "created_at": TimestampField, "agent_thoughts": fields.List(fields.Nested(agent_thought_fields)), "message_files": fields.List(fields.Nested(message_file_fields)), "metadata": fields.Raw(attribute="message_metadata_dict"), "status": fields.String, "error": fields.String, "parent_message_id": fields.String, } feedback_stat_fields = {"like": fields.Integer, "dislike": fields.Integer} model_config_fields = { "opening_statement": fields.String, "suggested_questions": fields.Raw, "model": fields.Raw, "user_input_form": fields.Raw, "pre_prompt": fields.String, "agent_mode": fields.Raw, } simple_configs_fields = { "prompt_template": fields.String, } simple_model_config_fields = { "model": fields.Raw(attribute="model_dict"), "pre_prompt": fields.String, } simple_message_detail_fields = { "inputs": FilesContainedField, "query": fields.String, "message": MessageTextField, "answer": fields.String, } conversation_fields = { "id": fields.String, "status": fields.String, "from_source": fields.String, "from_end_user_id": fields.String, "from_end_user_session_id": fields.String(), "from_account_id": fields.String, "from_account_name": fields.String, "read_at": TimestampField, "created_at": TimestampField, "updated_at": TimestampField, "annotation": fields.Nested(annotation_fields, allow_null=True), "model_config": fields.Nested(simple_model_config_fields), "user_feedback_stats": fields.Nested(feedback_stat_fields), "admin_feedback_stats": fields.Nested(feedback_stat_fields), "message": fields.Nested(simple_message_detail_fields, attribute="first_message"), } conversation_pagination_fields = { "page": fields.Integer, "limit": fields.Integer(attribute="per_page"), "total": fields.Integer, "has_more": fields.Boolean(attribute="has_next"), "data": fields.List(fields.Nested(conversation_fields), attribute="items"), } conversation_message_detail_fields = { "id": fields.String, "status": fields.String, "from_source": fields.String, "from_end_user_id": fields.String, "from_account_id": fields.String, "created_at": TimestampField, "model_config": fields.Nested(model_config_fields), "message": fields.Nested(message_detail_fields, attribute="first_message"), } conversation_with_summary_fields = { "id": fields.String, "status": fields.String, "from_source": fields.String, "from_end_user_id": fields.String, "from_end_user_session_id": fields.String, "from_account_id": fields.String, "from_account_name": fields.String, "name": fields.String, "summary": fields.String(attribute="summary_or_query"), "read_at": TimestampField, "created_at": TimestampField, "updated_at": TimestampField, "annotated": fields.Boolean, "model_config": fields.Nested(simple_model_config_fields), "message_count": fields.Integer, "user_feedback_stats": fields.Nested(feedback_stat_fields), "admin_feedback_stats": fields.Nested(feedback_stat_fields), } conversation_with_summary_pagination_fields = { "page": fields.Integer, "limit": fields.Integer(attribute="per_page"), "total": fields.Integer, "has_more": fields.Boolean(attribute="has_next"), "data": fields.List(fields.Nested(conversation_with_summary_fields), attribute="items"), } conversation_detail_fields = { "id": fields.String, "status": fields.String, "from_source": fields.String, "from_end_user_id": fields.String, "from_account_id": fields.String, "created_at": TimestampField, "updated_at": TimestampField, "annotated": fields.Boolean, "introduction": fields.String, "model_config": fields.Nested(model_config_fields), "message_count": fields.Integer, "user_feedback_stats": fields.Nested(feedback_stat_fields), "admin_feedback_stats": fields.Nested(feedback_stat_fields), } simple_conversation_fields = { "id": fields.String, "name": fields.String, "inputs": FilesContainedField, "status": fields.String, "introduction": fields.String, "created_at": TimestampField, "updated_at": TimestampField, } conversation_infinite_scroll_pagination_fields = { "limit": fields.Integer, "has_more": fields.Boolean, "data": fields.List(fields.Nested(simple_conversation_fields)), } conversation_with_model_config_fields = { **simple_conversation_fields, "model_config": fields.Raw, } conversation_with_model_config_infinite_scroll_pagination_fields = { "limit": fields.Integer, "has_more": fields.Boolean, "data": fields.List(fields.Nested(conversation_with_model_config_fields)), }