'''
对话应用管理模块api
'''
import json
from flask import jsonify, request, Response
from flask import Blueprint
from utils.auth import validate_user, validate_permissions
from utils.web_utils import get_req_para, validate_params, generate_download_file
from utils.common_utils import gen_json_response
from web_apps.llm.services.app_services import ChatAppApiService
from web_apps.llm.db_models import ChatApp, ChatAppToken
from web_apps.llm.services.llm_services import generate_prompt, chat_generate, chat_run
from web_apps import db
from models import User
chat_app_bp = Blueprint('chat_app', __name__)
@chat_app_bp.route('/app/prompt/generate', methods=['POST'])
@validate_user
def prompt_generate():
'''
prompt generate
'''
args = request.args
req_dict = args.to_dict()
content = req_dict.get('prompt', '')
return Response(generate_prompt(content), mimetype='text/event-stream')
@chat_app_bp.route('/app/debug', methods=['GET', 'POST'])
@validate_user
def debug_chat():
'''
app debug对话接口
'''
req_dict = get_req_para(request)
chat_config = req_dict.get('app', {})
message = req_dict.get('content', '')
req_data = {
'message': message,
'chatConfig': chat_config
}
return Response(chat_generate(req_data), mimetype='text/event-stream')
@chat_app_bp.route('/api/chat', methods=['GET', 'POST'])
def api_chat():
'''
llm对话接口
'''
req_dict = get_req_para(request)
api_key = req_dict.get('api_key', '')
stream = req_dict.get('responseMode', 'streaming') == 'streaming'
chat_token = db.session.query(ChatAppToken).filter(ChatAppToken.api_key == api_key).first()
if chat_token is None:
err = 'api_key错误'
if stream:
msg = {
"conversationId": '',
"data": {
"message": err
},
"event": "ERROR"
}
return Response(f"data:{json.dumps(msg, ensure_ascii=False)}\n\n", mimetype='text/event-stream')
return gen_json_response(code=500, msg=err)
chat_app = db.session.query(ChatApp).filter(ChatApp.id == chat_token.app_id).first()
if chat_app is None:
err = '未找到应用'
if stream:
msg = {
"conversationId": '',
"data": {
"message": err
},
"event": "ERROR"
}
return Response(f"data:{json.dumps(msg, ensure_ascii=False)}\n\n", mimetype='text/event-stream')
return gen_json_response(code=500, msg=err)
req_dict['chatConfig'] = json.loads(chat_app.chat_config)
user = db.session.query(User).filter(User.username == chat_token.create_by).first()
if user:
user_info = {'id': chat_token.create_by, 'user_name': chat_token.create_by}
else:
user_info = {}
if stream:
return Response(chat_generate(req_dict, user_info), mimetype='text/event-stream')
else:
return chat_run(req_dict)
@chat_app_bp.route('/release', methods=['POST'])
@validate_user
def release():
'''
app release
'''
req_dict = get_req_para(request)
id = req_dict.get('id')
release = req_dict.get('release')
chat_app = db.session.query(ChatApp).filter(ChatApp.id == id).first()
if chat_app is None:
return gen_json_response(code=500, msg='未找到数据')
chat_app.state = 1 if release else 0
db.session.add(chat_app)
db.session.commit()
return gen_json_response(msg='ok', extends={'success': True})
@chat_app_bp.route('/token/list', methods=['GET'])
@validate_user
@validate_permissions([])
def chat_app_token_list():
'''
api列表查询接口
'''
req_dict = get_req_para(request)
verify_dict = {
}
not_valid = validate_params(req_dict, verify_dict)
if not_valid:
return jsonify(gen_json_response(code=400, msg=not_valid))
res_data = ChatAppApiService.api_key_list(req_dict)
return jsonify(res_data)
@chat_app_bp.route('/token/apply', methods=['POST'])
@validate_user
@validate_permissions([])
def chat_app_token_apply():
'''
api申请
'''
req_dict = get_req_para(request)
verify_dict = {
}
not_valid = validate_params(req_dict, verify_dict)
if not_valid:
return jsonify(gen_json_response(code=400, msg=not_valid))
res_data = ChatAppApiService.apply_token(req_dict)
return jsonify(res_data)
@chat_app_bp.route('/token/status', methods=['POST'])
@validate_user
@validate_permissions([])
def chat_app_token_status():
'''
api状态修改
'''
req_dict = get_req_para(request)
verify_dict = {
}
not_valid = validate_params(req_dict, verify_dict)
if not_valid:
return jsonify(gen_json_response(code=400, msg=not_valid))
res_data = ChatAppApiService.api_key_status(req_dict)
return jsonify(res_data)
@chat_app_bp.route('/token/delete', methods=['POST'])
@validate_user
@validate_permissions([])
def chat_app_token_delete():
'''
api删除
'''
req_dict = get_req_para(request)
verify_dict = {
}
not_valid = validate_params(req_dict, verify_dict)
if not_valid:
return jsonify(gen_json_response(code=400, msg=not_valid))
res_data = ChatAppApiService.api_key_delete(req_dict)
return jsonify(res_data)
@chat_app_bp.route('/list', methods=['GET'])
@validate_user
@validate_permissions([])
def chat_app_list():
'''
列表查询接口
'''
req_dict = get_req_para(request)
verify_dict = {
}
not_valid = validate_params(req_dict, verify_dict)
if not_valid:
return jsonify(gen_json_response(code=400, msg=not_valid))
res_data = ChatAppApiService.get_obj_list(req_dict)
return jsonify(res_data)
@chat_app_bp.route('/queryAllList', methods=['GET'])
@validate_user
@validate_permissions([])
def chat_app_all_list():
'''
全量列表查询接口
'''
req_dict = get_req_para(request)
verify_dict = {
}
not_valid = validate_params(req_dict, verify_dict)
if not_valid:
return jsonify(gen_json_response(code=400, msg=not_valid))
res_data = ChatAppApiService.get_obj_all_list(req_dict)
return jsonify(res_data)
@chat_app_bp.route('/queryById', methods=['GET'])
@validate_user
@validate_permissions([])
def chat_app_detail():
'''
详情
'''
req_dict = get_req_para(request)
verify_dict = {
"id": {
"name": "id",
"required": True
}
}
not_valid = validate_params(req_dict, verify_dict)
if not_valid:
return jsonify(gen_json_response(code=400, msg=not_valid))
res_data = ChatAppApiService.get_obj_detail(req_dict)
return jsonify(res_data)
@chat_app_bp.route('/add', methods=['POST'])
@validate_user
@validate_permissions([])
def chat_app_add():
'''
添加
'''
req_dict = get_req_para(request)
verify_dict = {
}
not_valid = validate_params(req_dict, verify_dict)
if not_valid:
return jsonify(gen_json_response(code=400, msg=not_valid))
res_data = ChatAppApiService.add_obj(req_dict)
return jsonify(res_data)
@chat_app_bp.route('/edit', methods=['POST', 'PUT'])
@validate_user
@validate_permissions([])
def chat_app_edit():
'''
添加或编辑
'''
req_dict = get_req_para(request)
if 'id' in req_dict:
res_data = ChatAppApiService.edit_obj(req_dict)
else:
res_data = ChatAppApiService.add_obj(req_dict)
return jsonify(res_data)
@chat_app_bp.route('/delete', methods=['POST', 'DELETE'])
@validate_user
@validate_permissions([])
def chat_app_delete():
'''
删除
'''
req_dict = get_req_para(request)
verify_dict = {
"id": {
"name": "id",
"required": True
}
}
not_valid = validate_params(req_dict, verify_dict)
if not_valid:
return jsonify(gen_json_response(code=400, msg=not_valid))
res_data = ChatAppApiService.delete_obj(req_dict)
return jsonify(res_data)
@chat_app_bp.route('/deleteBatch', methods=['POST', 'DELETE'])
@validate_user
@validate_permissions([])
def chat_app_deleteBatch():
'''
批量删除
'''
req_dict = get_req_para(request)
verify_dict = {
"ids": {
"name": "id列表",
"required": True
}
}
not_valid = validate_params(req_dict, verify_dict)
if not_valid:
return jsonify(gen_json_response(code=400, msg=not_valid))
res_data = ChatAppApiService.delete_batch(req_dict)
return jsonify(res_data)