#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 "

请不要使用IE浏览器或360浏览器兼容模式

" # # if bw_version < 71: # if bw_version < -1: # logger.warning("[sys]请求人:{}||请求IP:{}||请求方法:{}||请求Data:{}", # session.get('name'), request_addr, request.method, '用户Chrome内核版本太低') # return "

Chrome内核版本号太低,请升级浏览器

" \ # "

点击此处可下载最新版Chrome浏览器

" # 配置系统日志 # @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)