MaxKB/apps/application/swagger_api/chat_api.py

597 lines
36 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# coding=utf-8
"""
@project: maxkb
@Author
@file chat_api.py
@date2023/11/7 17:29
@desc:
"""
from drf_yasg import openapi
from application.swagger_api.application_api import ApplicationApi
from common.mixins.api_mixin import ApiMixin
from django.utils.translation import gettext_lazy as _
class ChatClientHistoryApi(ApiMixin):
@staticmethod
def get_request_params_api():
return [openapi.Parameter(name='application_id',
in_=openapi.IN_PATH,
type=openapi.TYPE_STRING,
required=True,
description=_('Application ID'))
]
class Operate(ApiMixin):
@staticmethod
def get_request_params_api():
return [openapi.Parameter(name='application_id',
in_=openapi.IN_PATH,
type=openapi.TYPE_STRING,
required=True,
description=_('Application ID')),
openapi.Parameter(name='chat_id',
in_=openapi.IN_PATH,
type=openapi.TYPE_STRING,
required=True,
description=_('Conversation ID')),
]
class ReAbstract(ApiMixin):
@staticmethod
def get_request_body_api():
return openapi.Schema(
type=openapi.TYPE_OBJECT,
required=['abstract'],
properties={
'abstract': openapi.Schema(type=openapi.TYPE_STRING, title=_("abstract"),
description=_("abstract"))
}
)
class OpenAIChatApi(ApiMixin):
@staticmethod
def get_response_body_api():
return openapi.Responses(responses={
200: openapi.Response(description=_('response parameters'),
schema=openapi.Schema(type=openapi.TYPE_OBJECT,
required=['id',
'choices'],
properties={
'id': openapi.Schema(
type=openapi.TYPE_STRING,
title=_(
"Conversation ID")),
'choices': openapi.Schema(
type=openapi.TYPE_ARRAY,
items=openapi.Schema(
type=openapi.TYPE_OBJECT,
required=[
'message'],
properties={
'finish_reason': openapi.Schema(
type=openapi.TYPE_STRING, ),
'index': openapi.Schema(
type=openapi.TYPE_INTEGER),
'answer_list': openapi.Schema(
type=openapi.TYPE_ARRAY,
items=openapi.Schema(
type=openapi.TYPE_OBJECT,
required=[
'content'],
properties={
'content': openapi.Schema(
type=openapi.TYPE_STRING),
'view_type': openapi.Schema(
type=openapi.TYPE_STRING),
'runtime_node_id': openapi.Schema(
type=openapi.TYPE_STRING),
'chat_record_id': openapi.Schema(
type=openapi.TYPE_STRING),
'reasoning_content': openapi.Schema(
type=openapi.TYPE_STRING),
}
)),
'message': openapi.Schema(
type=openapi.TYPE_OBJECT,
required=[
'content'],
properties={
'content': openapi.Schema(
type=openapi.TYPE_STRING),
'role': openapi.Schema(
type=openapi.TYPE_STRING)
}),
}
)),
'created': openapi.Schema(
type=openapi.TYPE_INTEGER),
'model': openapi.Schema(
type=openapi.TYPE_STRING),
'object': openapi.Schema(
type=openapi.TYPE_STRING),
'usage': openapi.Schema(
type=openapi.TYPE_OBJECT,
required=[
'completion_tokens',
'prompt_tokens',
'total_tokens'],
properties={
'completion_tokens': openapi.Schema(
type=openapi.TYPE_INTEGER),
'prompt_tokens': openapi.Schema(
type=openapi.TYPE_INTEGER),
'total_tokens': openapi.Schema(
type=openapi.TYPE_INTEGER)
})
}))})
@staticmethod
def get_request_body_api():
return openapi.Schema(type=openapi.TYPE_OBJECT,
required=['message'],
properties={
'messages': openapi.Schema(type=openapi.TYPE_ARRAY, title=_("problem"),
description=_("problem"),
items=openapi.Schema(type=openapi.TYPE_OBJECT,
required=['role', 'content'],
properties={
'content': openapi.Schema(
type=openapi.TYPE_STRING,
title=_("Question content"),
default=''),
'role': openapi.Schema(
type=openapi.TYPE_STRING,
title=_('role'),
default="user")
}
)),
'chat_id': openapi.Schema(type=openapi.TYPE_STRING, title=_("Conversation ID")),
're_chat': openapi.Schema(type=openapi.TYPE_BOOLEAN, title=_("regenerate"),
default=False),
'stream': openapi.Schema(type=openapi.TYPE_BOOLEAN, title=_("Stream Output"),
default=True)
})
class ChatApi(ApiMixin):
@staticmethod
def get_request_body_api():
return openapi.Schema(
type=openapi.TYPE_OBJECT,
required=['message'],
properties={
'message': openapi.Schema(type=openapi.TYPE_STRING, title=_("problem"), description=_("problem")),
're_chat': openapi.Schema(type=openapi.TYPE_BOOLEAN, title=_("regenerate"), default=False),
'stream': openapi.Schema(type=openapi.TYPE_BOOLEAN, title=_("Is it streaming output"), default=True),
'form_data': openapi.Schema(type=openapi.TYPE_OBJECT, title=_("Form data"),
description=_("Form data"),
default={}),
'image_list': openapi.Schema(
type=openapi.TYPE_ARRAY,
title=_("Image list"),
description=_("Image list"),
items=openapi.Schema(
type=openapi.TYPE_OBJECT,
properties={
'name': openapi.Schema(type=openapi.TYPE_STRING,
title=_("Image name")),
'url': openapi.Schema(type=openapi.TYPE_STRING,
title=_("Image URL")),
'file_id': openapi.Schema(type=openapi.TYPE_STRING),
}
),
default=[]
),
'document_list': openapi.Schema(type=openapi.TYPE_ARRAY, title=_("Document list"),
description=_("Document list"),
items=openapi.Schema(
type=openapi.TYPE_OBJECT,
properties={
# 定义对象的具体属性
'name': openapi.Schema(type=openapi.TYPE_STRING,
title=_("Document name")),
'url': openapi.Schema(type=openapi.TYPE_STRING,
title=_("Document URL")),
'file_id': openapi.Schema(type=openapi.TYPE_STRING),
}
),
default=[]),
'audio_list': openapi.Schema(type=openapi.TYPE_ARRAY, title=_("Audio list"),
description=_("Audio list"),
items=openapi.Schema(
type=openapi.TYPE_OBJECT,
properties={
'name': openapi.Schema(type=openapi.TYPE_STRING,
title=_("Audio name")),
'url': openapi.Schema(type=openapi.TYPE_STRING,
title=_("Audio URL")),
'file_id': openapi.Schema(type=openapi.TYPE_STRING),
}
),
default=[]),
'runtime_node_id': openapi.Schema(type=openapi.TYPE_STRING, title=_("Runtime node id"),
description=_("Runtime node id"),
default=""),
'node_data': openapi.Schema(type=openapi.TYPE_OBJECT, title=_("Node data"),
description=_("Node data"),
default={}),
'chat_record_id': openapi.Schema(type=openapi.TYPE_STRING, title=_("Conversation record id"),
description=_("Conversation record id"),
default=""),
'child_node': openapi.Schema(type=openapi.TYPE_STRING, title=_("Child node"),
description=_("Child node"),
default={}),
}
)
@staticmethod
def get_response_body_api():
return openapi.Schema(
type=openapi.TYPE_OBJECT,
required=['id', 'application', 'abstract', 'chat_record_count', 'mark_sum', 'star_num', 'trample_num',
'update_time', 'create_time'],
properties={
'id': openapi.Schema(type=openapi.TYPE_STRING, title="id",
description="id", default="xx"),
'application_id': openapi.Schema(type=openapi.TYPE_STRING, title=_("Application ID"),
description=_("Application ID"), default=_('Application ID')),
'abstract': openapi.Schema(type=openapi.TYPE_STRING, title=_("abstract"),
description=_("abstract"), default=_('abstract')),
'chat_id': openapi.Schema(type=openapi.TYPE_STRING, title=_("Conversation ID"),
description=_("Conversation ID"), default=_("Conversation ID")),
'chat_record_count': openapi.Schema(type=openapi.TYPE_STRING, title=_("Number of dialogue questions"),
description=_("Number of dialogue questions"),
default=0),
'mark_sum': openapi.Schema(type=openapi.TYPE_STRING, title=_("Number of tags"),
description=_("Number of tags"), default=1),
'star_num': openapi.Schema(type=openapi.TYPE_STRING, title=_("Number of likes"),
description=_("Number of likes"), default=1),
'trample_num': openapi.Schema(type=openapi.TYPE_NUMBER, title=_("Number of clicks"),
description=_("Number of clicks"), default=1),
'update_time': openapi.Schema(type=openapi.TYPE_STRING, title=_("Change time"),
description=_("Change time"),
default="1970-01-01 00:00:00"),
'create_time': openapi.Schema(type=openapi.TYPE_STRING, title=_("Creation time"),
description=_("Creation time"),
default="1970-01-01 00:00:00"
)
}
)
class OpenChat(ApiMixin):
@staticmethod
def get_request_params_api():
return [openapi.Parameter(name='application_id',
in_=openapi.IN_PATH,
type=openapi.TYPE_STRING,
required=True,
description=_('Application ID')),
]
class OpenWorkFlowTemp(ApiMixin):
@staticmethod
def get_request_body_api():
return openapi.Schema(
type=openapi.TYPE_OBJECT,
required=[],
properties={
'work_flow': ApplicationApi.WorkFlow.get_request_body_api()
}
)
class OpenTempChat(ApiMixin):
@staticmethod
def get_request_body_api():
return openapi.Schema(
type=openapi.TYPE_OBJECT,
required=['model_id', 'multiple_rounds_dialogue', 'dataset_setting', 'model_setting',
'problem_optimization'],
properties={
'id': openapi.Schema(type=openapi.TYPE_STRING, title=_("Application ID"),
description=_(
"Application ID, pass when modifying, do not pass when creating")),
'model_id': openapi.Schema(type=openapi.TYPE_STRING, title=_("Model ID"),
description=_("Model ID")),
'dataset_id_list': openapi.Schema(type=openapi.TYPE_ARRAY,
items=openapi.Schema(type=openapi.TYPE_STRING),
title=_("List of associated knowledge base IDs"),
description=_("List of associated knowledge base IDs")),
'multiple_rounds_dialogue': openapi.Schema(type=openapi.TYPE_BOOLEAN,
title=_("Do you want to initiate multiple sessions"),
description=_(
"Do you want to initiate multiple sessions")),
'dataset_setting': ApplicationApi.DatasetSetting.get_request_body_api(),
'model_setting': ApplicationApi.ModelSetting.get_request_body_api(),
'problem_optimization': openapi.Schema(type=openapi.TYPE_BOOLEAN, title=_("Problem optimization"),
description=_("Do you want to enable problem optimization"),
default=True)
}
)
@staticmethod
def get_response_body_api():
return openapi.Schema(
type=openapi.TYPE_STRING,
title=_("Conversation ID"),
description=_("Conversation ID"),
default="chat_id"
)
@staticmethod
def get_request_params_api():
return [openapi.Parameter(name='application_id',
in_=openapi.IN_PATH,
type=openapi.TYPE_STRING,
required=True,
description=_('Application ID')),
openapi.Parameter(name='history_day',
in_=openapi.IN_QUERY,
type=openapi.TYPE_NUMBER,
required=True,
description=_('Historical days')),
openapi.Parameter(name='abstract', in_=openapi.IN_QUERY, type=openapi.TYPE_STRING, required=False,
description=_("abstract")),
openapi.Parameter(name='min_star', in_=openapi.IN_QUERY, type=openapi.TYPE_INTEGER, required=False,
description=_("Minimum number of likes")),
openapi.Parameter(name='min_trample', in_=openapi.IN_QUERY, type=openapi.TYPE_INTEGER, required=False,
description=_("Minimum number of clicks")),
openapi.Parameter(name='comparer', in_=openapi.IN_QUERY, type=openapi.TYPE_STRING, required=False,
description=_("or|and comparator")),
openapi.Parameter(name='start_time', in_=openapi.IN_QUERY,
type=openapi.TYPE_STRING,
required=True,
description=_('start time')),
openapi.Parameter(name='end_time', in_=openapi.IN_QUERY,
type=openapi.TYPE_STRING,
required=True,
description=_('End time')),
]
class ChatRecordApi(ApiMixin):
@staticmethod
def get_request_params_api():
return [openapi.Parameter(name='application_id',
in_=openapi.IN_PATH,
type=openapi.TYPE_STRING,
required=True,
description=_('Application ID')),
openapi.Parameter(name='chat_id',
in_=openapi.IN_PATH,
type=openapi.TYPE_STRING,
required=True,
description=_('Conversation ID')),
openapi.Parameter(name='order_asc',
in_=openapi.IN_QUERY,
type=openapi.TYPE_BOOLEAN,
required=False,
description=_('Is it ascending order')),
]
@staticmethod
def get_response_body_api():
return openapi.Schema(
type=openapi.TYPE_OBJECT,
required=['id', 'chat', 'vote_status', 'dataset', 'paragraph', 'source_id', 'source_type',
'message_tokens', 'answer_tokens',
'problem_text', 'answer_text', 'improve_paragraph_id_list'],
properties={
'id': openapi.Schema(type=openapi.TYPE_STRING, title="id",
description="id", default="xx"),
'chat': openapi.Schema(type=openapi.TYPE_STRING, title=_("Session log id"),
description=_("Conversation log id"), default=_('Conversation log id')),
'vote_status': openapi.Schema(type=openapi.TYPE_STRING, title=_("Voting Status"),
description=_("Voting Status"), default=_("Voting Status")),
'dataset': openapi.Schema(type=openapi.TYPE_STRING, title=_("Dataset id"), description=_("Dataset id"),
default=_("Dataset id")),
'paragraph': openapi.Schema(type=openapi.TYPE_STRING, title=_("Paragraph id"),
description=_("Paragraph id"), default=1),
'source_id': openapi.Schema(type=openapi.TYPE_STRING, title=_("Resource ID"),
description=_("Resource ID"), default=1),
'source_type': openapi.Schema(type=openapi.TYPE_STRING, title=_("Resource Type"),
description=_("Resource Type"), default='xxx'),
'message_tokens': openapi.Schema(type=openapi.TYPE_INTEGER,
title=_("Number of tokens consumed by the question"),
description=_("Number of tokens consumed by the question"), default=0),
'answer_tokens': openapi.Schema(type=openapi.TYPE_INTEGER,
title=_("The number of tokens consumed by the answer"),
description=_("The number of tokens consumed by the answer"),
default=0),
'improve_paragraph_id_list': openapi.Schema(type=openapi.TYPE_STRING,
title=_("Improved annotation list"),
description=_("Improved annotation list"),
default=[]),
'index': openapi.Schema(type=openapi.TYPE_STRING,
title=_("Corresponding session Corresponding subscript"),
description=_("Corresponding session id corresponding subscript"),
default=0
),
'update_time': openapi.Schema(type=openapi.TYPE_STRING, title=_("Modification time"),
description=_("Modification time"),
default="1970-01-01 00:00:00"),
'create_time': openapi.Schema(type=openapi.TYPE_STRING, title=_("Creation time"),
description=_("Creation time"),
default="1970-01-01 00:00:00"
)
}
)
class ImproveApi(ApiMixin):
@staticmethod
def get_request_params_api():
return [openapi.Parameter(name='application_id',
in_=openapi.IN_PATH,
type=openapi.TYPE_STRING,
required=True,
description=_('Application ID')),
openapi.Parameter(name='chat_id',
in_=openapi.IN_PATH,
type=openapi.TYPE_STRING,
required=True,
description=_('Conversation ID')),
openapi.Parameter(name='chat_record_id',
in_=openapi.IN_PATH,
type=openapi.TYPE_STRING,
required=True,
description=_('Conversation record id')),
openapi.Parameter(name='dataset_id',
in_=openapi.IN_PATH,
type=openapi.TYPE_STRING,
required=True,
description=_('Knowledge base id')),
openapi.Parameter(name='document_id',
in_=openapi.IN_PATH,
type=openapi.TYPE_STRING,
required=True,
description=_('Document id')),
]
@staticmethod
def get_request_body_api():
return openapi.Schema(
type=openapi.TYPE_OBJECT,
required=['content'],
properties={
'title': openapi.Schema(type=openapi.TYPE_STRING, title=_("Section title"),
description=_("Section title")),
'content': openapi.Schema(type=openapi.TYPE_STRING, title=_("Paragraph content"),
description=_("Paragraph content"))
}
)
@staticmethod
def get_request_body_api_post():
return openapi.Schema(
type=openapi.TYPE_OBJECT,
required=['dataset_id', 'document_id', 'chat_ids'],
properties={
'dataset_id': openapi.Schema(type=openapi.TYPE_STRING, title=_("Knowledge base id"),
description=_("Knowledge base id")),
'document_id': openapi.Schema(type=openapi.TYPE_STRING, title=_("Document id"),
description=_("Document id")),
'chat_ids': openapi.Schema(type=openapi.TYPE_ARRAY, title=_("Conversation id list"),
description=_("Conversation id list"),
items=openapi.Schema(type=openapi.TYPE_STRING))
}
)
@staticmethod
def get_request_params_api_post():
return [openapi.Parameter(name='application_id',
in_=openapi.IN_PATH,
type=openapi.TYPE_STRING,
required=True,
description=_('Application ID')),
openapi.Parameter(name='dataset_id',
in_=openapi.IN_PATH,
type=openapi.TYPE_STRING,
required=True,
description=_('Knowledge base id')),
]
class VoteApi(ApiMixin):
@staticmethod
def get_request_params_api():
return [openapi.Parameter(name='application_id',
in_=openapi.IN_PATH,
type=openapi.TYPE_STRING,
required=True,
description=_('Application ID')),
openapi.Parameter(name='chat_id',
in_=openapi.IN_PATH,
type=openapi.TYPE_STRING,
required=True,
description=_('Conversation ID')),
openapi.Parameter(name='chat_record_id',
in_=openapi.IN_PATH,
type=openapi.TYPE_STRING,
required=True,
description=_('Conversation record id'))
]
@staticmethod
def get_request_body_api():
return openapi.Schema(
type=openapi.TYPE_OBJECT,
required=['vote_status'],
properties={
'vote_status': openapi.Schema(type=openapi.TYPE_STRING, title=_("Voting Status"),
description=_("-1: Cancel vote | 0: Agree | 1: Oppose")),
}
)
class ChatRecordImproveApi(ApiMixin):
@staticmethod
def get_request_body_api():
return [openapi.Parameter(name='application_id',
in_=openapi.IN_PATH,
type=openapi.TYPE_STRING,
required=True,
description=_('Application ID')),
openapi.Parameter(name='chat_id',
in_=openapi.IN_PATH,
type=openapi.TYPE_STRING,
required=True,
description=_('Conversation ID')),
openapi.Parameter(name='chat_record_id',
in_=openapi.IN_PATH,
type=openapi.TYPE_STRING,
required=True,
description=_('Conversation record id'))
]
@staticmethod
def get_response_body_api():
return openapi.Schema(
type=openapi.TYPE_OBJECT,
required=['id', 'content', 'hit_num', 'star_num', 'trample_num', 'is_active', 'dataset_id',
'document_id', 'title',
'create_time', 'update_time'],
properties={
'id': openapi.Schema(type=openapi.TYPE_STRING, title="id",
description="id", default="xx"),
'content': openapi.Schema(type=openapi.TYPE_STRING, title=_("Paragraph content"),
description=_("Paragraph content"), default=_('Paragraph content')),
'title': openapi.Schema(type=openapi.TYPE_STRING, title=_("title"),
description=_("title"), default=_("Description of xxx")),
'hit_num': openapi.Schema(type=openapi.TYPE_INTEGER, title=_("Number of hits"),
description=_("Number of hits"),
default=1),
'star_num': openapi.Schema(type=openapi.TYPE_INTEGER, title=_("Number of Likes"),
description=_("Number of Likes"), default=1),
'trample_num': openapi.Schema(type=openapi.TYPE_INTEGER, title=_("Number of thumbs-downs"),
description=_("Number of thumbs-downs"), default=1),
'dataset_id': openapi.Schema(type=openapi.TYPE_STRING, title=_("Knowledge base id"),
description=_("Knowledge base id"), default='xxx'),
'document_id': openapi.Schema(type=openapi.TYPE_STRING, title=_("Document id"),
description=_("Document id"), default='xxx'),
'is_active': openapi.Schema(type=openapi.TYPE_BOOLEAN, title=_("Availability"),
description=_("Availability"), default=True),
'update_time': openapi.Schema(type=openapi.TYPE_STRING, title=_("Modification time"),
description=_("Modification time"),
default="1970-01-01 00:00:00"),
'create_time': openapi.Schema(type=openapi.TYPE_STRING, title=_("Creation time"),
description=_("Creation time"),
default="1970-01-01 00:00:00"
)
}
)