You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
5.2 KiB
143 lines
5.2 KiB
#dc
|
|
import dash
|
|
import os
|
|
import time
|
|
from loguru import logger
|
|
from urllib.parse import unquote
|
|
from flask import request, session,Response,send_from_directory,jsonify
|
|
from user_agents import parse
|
|
from config.env import AppConfig
|
|
from config.global_config import PathConfig
|
|
from llm_services import sk_data_request
|
|
|
|
|
|
app = dash.Dash(
|
|
__name__,
|
|
compress=True,
|
|
suppress_callback_exceptions=True,
|
|
update_title=None
|
|
)
|
|
|
|
server = app.server
|
|
|
|
app.title = AppConfig.app_name
|
|
|
|
# 配置密钥
|
|
app.server.secret_key = AppConfig.app_secret_key
|
|
app.server.config['COMPRESS_ALGORITHM'] = AppConfig.app_compress_algorithm
|
|
app.server.config['COMPRESS_BR_LEVEL'] = AppConfig.app_compress_br_level
|
|
|
|
log_time = time.strftime("%Y%m%d", time.localtime())
|
|
# sys_log_file_path = os.path.join(PathConfig.ABS_ROOT_PATH, 'log', 'sys_log', f'sys_request_log_{log_time}.log')
|
|
api_log_file_path = os.path.join(PathConfig.ABS_ROOT_PATH, 'log', 'api_log', f'api_request_log_{log_time}.log')
|
|
# logger.add(sys_log_file_path, filter=lambda x: '[sys]' in x['message'],
|
|
# rotation="50MB", encoding="utf-8", enqueue=True, compression="zip")
|
|
logger.add(api_log_file_path, filter=lambda x: '[api]' in x['message'],
|
|
rotation="50MB", encoding="utf-8", enqueue=True, compression="zip")
|
|
|
|
|
|
# 获取用户浏览器信息
|
|
# @server.before_request
|
|
# def get_user_agent_info():
|
|
# request_addr = request.headers.get("X-Forwarded-For") if AppConfig.app_env == 'prod' else request.remote_addr
|
|
# user_string = str(request.user_agent)
|
|
# user_agent = parse(user_string)
|
|
# bw = user_agent.browser.family
|
|
# if user_agent.browser.version != ():
|
|
# bw_version = user_agent.browser.version[0]
|
|
# print ("bw_version",bw_version)
|
|
# if bw == 'IE':
|
|
# logger.warning("[sys]请求人:{}||请求IP:{}||请求方法:{}||请求Data:{}",
|
|
# session.get('name'), request_addr, request.method, '用户使用IE内核')
|
|
# return "<h1 style='color: red'>请不要使用IE浏览器或360浏览器兼容模式</h1>"
|
|
# # if bw_version < 71:
|
|
# if bw_version < -1:
|
|
|
|
# logger.warning("[sys]请求人:{}||请求IP:{}||请求方法:{}||请求Data:{}",
|
|
# session.get('name'), request_addr, request.method, '用户Chrome内核版本太低')
|
|
# return "<h1 style='color: red'>Chrome内核版本号太低,请升级浏览器</h1>" \
|
|
# "<h1 style='color: red'><a href='https://www.google.cn/chrome/'>点击此处</a>可下载最新版Chrome浏览器</h1>"
|
|
|
|
|
|
# 配置系统日志
|
|
# @server.after_request
|
|
# def get_callbacks_log(response):
|
|
# logger.info("[sys]请求人:{}||请求IP:{}||请求方法:{}||请求Data:{}",
|
|
# session.get('name'), request.remote_addr, request.method, request.data.decode("utf-8"))
|
|
#
|
|
# return response
|
|
|
|
|
|
|
|
@app.server.route("/data-chat")
|
|
def stream_chat():
|
|
"""统一处理示例流式接口,及内置支持的各类大模型对话服务流式数据返回"""
|
|
print("已进入ai接口调用1")
|
|
|
|
# 获取问题内容
|
|
question = request.args.get("question", "")
|
|
# 获取模型厂商名称
|
|
model_name = request.args.get("model_name")
|
|
# 获取具体子模型名称
|
|
sub_model_name = request.args.get("sub_model_name")
|
|
# 获取temperature参数
|
|
temperature = request.args.get("temperature") and float(
|
|
request.args.get("temperature")
|
|
)
|
|
# 获取max_tokens参数
|
|
max_tokens = request.args.get("max_tokens") and int(request.args.get("max_tokens"))
|
|
# 获取对话id
|
|
conversation_id = request.args.get("conversation_id")
|
|
# 获取消息id
|
|
message_id = request.args.get("message_id")
|
|
|
|
# 处理问题内容两侧空白字符
|
|
question = unquote(question).strip()
|
|
|
|
# 若问题为空,则输出“无效问题提示”
|
|
if not question:
|
|
return Response(
|
|
"data: %s\n\n"
|
|
% json.dumps(
|
|
dict(
|
|
type="<无效问题>",
|
|
timestamp=time.time(),
|
|
content="您输入的问题经系统判定无效,请重新输入。",
|
|
)
|
|
),
|
|
# mimetype="text/event-stream",
|
|
)
|
|
print("已进入ai接口调用2")
|
|
response_data = sk_data_request(
|
|
question=question,
|
|
model_name=model_name,
|
|
sub_model_name=sub_model_name,
|
|
temperature=temperature,
|
|
max_tokens=max_tokens,
|
|
conversation_id=conversation_id,
|
|
message_id=message_id,
|
|
)
|
|
return jsonify(response_data)
|
|
|
|
@app.server.route("/upload", methods=["POST"])
|
|
def upload():
|
|
uploadId = request.values.get("uploadId")
|
|
filename = request.files["file"].filename
|
|
|
|
try:
|
|
os.mkdir(os.path.join("caches", uploadId))
|
|
except FileExistsError:
|
|
pass
|
|
with open(os.path.join("caches", uploadId, filename), "wb") as f:
|
|
for chunk in iter(lambda: request.files["file"].read(1024 * 1024 * 10), b""):
|
|
f.write(chunk)
|
|
|
|
return {"filename": filename}
|
|
|
|
|
|
@app.server.route("/download")
|
|
def download():
|
|
path = request.args.get("path")
|
|
filename = request.args.get("filename")
|
|
|
|
return send_from_directory(path, filename)
|