commit
						938979ae88
					
				
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								| @ -0,0 +1,159 @@ | ||||
| # !/usr/bin/env python3 | ||||
| # -*- encoding : utf-8 -*- | ||||
| # @Filename    : __init__.py | ||||
| # @Software    : VSCode | ||||
| # @Datetime    : 2021/11/03 16:59:57 | ||||
| # @Author      : leo liu | ||||
| # @Version     : 1.0 | ||||
| # @Description : | ||||
| 
 | ||||
| import traceback | ||||
| from fastapi import FastAPI, Request, status, HTTPException | ||||
| from fastapi.encoders import jsonable_encoder | ||||
| from fastapi.responses import JSONResponse | ||||
| from fastapi.exceptions import RequestValidationError | ||||
| from fastapi.middleware.cors import CORSMiddleware | ||||
| 
 | ||||
| # from slowapi import Limiter | ||||
| # from slowapi.util import get_remote_address | ||||
| # from slowapi.middleware import SlowAPIMiddleware | ||||
| 
 | ||||
| from api.v1 import api_v1 | ||||
| from extensions import logger | ||||
| from core.settings import config | ||||
| from utils.custom_exc import PostParamsError, TokenAuthError  # 自定义异常 | ||||
| 
 | ||||
| # swigger 文档分类 https://fastapi.tiangolo.com/tutorial/metadata/ | ||||
| tags_metadata = [ | ||||
|     { | ||||
|         "name": "首页", | ||||
|         "description": "数据API", | ||||
|     }, | ||||
| ] | ||||
| 
 | ||||
| def create_app(): | ||||
|     app = FastAPI( | ||||
|         title="Chatmed", | ||||
|         description="", | ||||
|         version="0.0.1", | ||||
|         docs_url=config.DOCS_URL, | ||||
|         openapi_url=config.OPENAPI_URL, | ||||
|         redoc_url=config.REDOC_URL, | ||||
|         openapi_tags=tags_metadata | ||||
|     ) | ||||
| 
 | ||||
|     app.include_router( | ||||
|         api_v1, | ||||
|         prefix="/api/v1", | ||||
|     ) | ||||
| 
 | ||||
|     register_exception(app)  # 注册捕获异常信息 | ||||
|     register_cors(app)  # 跨域设置 | ||||
|     register_middleware(app) | ||||
| 
 | ||||
|     return app | ||||
| 
 | ||||
| def register_exception(app: FastAPI): | ||||
|     """ | ||||
|     全局异常捕获 | ||||
|     :param app: | ||||
|     :return: | ||||
|     """ | ||||
| 
 | ||||
|     # 捕获自定义异常 | ||||
|     @app.exception_handler(PostParamsError) | ||||
|     async def query_params_exception_handler(request: Request, exc: PostParamsError): | ||||
|         """ | ||||
|         捕获 自定义抛出的异常 | ||||
|         :param request: | ||||
|         :param exc: | ||||
|         :return: | ||||
|         """ | ||||
|         logger.error(f"参数查询异常\nURL:{request.url}\nHeaders:{request.headers}\n{traceback.format_exc()}") | ||||
|         return JSONResponse( | ||||
|             status_code=status.HTTP_400_BAD_REQUEST, | ||||
|             content={"code": 400, "data": {"tip": exc.err_desc}, "message": "fail"}, | ||||
|         ) | ||||
| 
 | ||||
|     @app.exception_handler(TokenAuthError) | ||||
|     async def token_exception_handler(request: Request, exc: TokenAuthError): | ||||
|         logger.error(f"参数查询异常\nURL:{request.url}\nHeaders:{request.headers}\n{traceback.format_exc()}") | ||||
|         return JSONResponse( | ||||
|             status_code=status.HTTP_400_BAD_REQUEST, | ||||
|             content={"code": 400, "data": None, "message": exc.err_desc}, | ||||
|         ) | ||||
| 
 | ||||
|     # 捕获参数 验证错误 | ||||
|     @app.exception_handler(RequestValidationError) | ||||
|     async def validation_exception_handler(request: Request, exc: RequestValidationError): | ||||
|         """ | ||||
|         捕获请求参数 验证错误 | ||||
|         :param request: | ||||
|         :param exc: | ||||
|         :return: | ||||
|         """ | ||||
|         logger.error(f"参数错误\nURL:{request.url}\nHeaders:{request.headers}\n{traceback.format_exc()}") | ||||
|         return JSONResponse( | ||||
|             status_code=status.HTTP_400_BAD_REQUEST, | ||||
|             content=jsonable_encoder({"code": 400, "data": {"tip": exc.errors()}, "body": exc.body, "message": "fail"}), | ||||
|         ) | ||||
| 
 | ||||
|     # 捕获全部异常 | ||||
|     @app.exception_handler(Exception) | ||||
|     async def all_exception_handler(request: Request, exc: Exception): | ||||
|         logger.error(f"全局异常\nURL:{request.url}\nHeaders:{request.headers}\n{traceback.format_exc()}") | ||||
|         return JSONResponse( | ||||
|             status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, | ||||
|             content={"code": 500, "data": {"tip": "服务器错误"}, "message": "fail"}, | ||||
|         ) | ||||
| 
 | ||||
|     # 捕获调用超限异常 | ||||
|     # @app.exception_handler(HTTPException) | ||||
|     # async def rate_limit_handler(request, exc): | ||||
|     #     if exc.status_code == 429: | ||||
|     #         return JSONResponse(status_code=status.HTTP_429_TOO_MANY_REQUESTS, | ||||
|     #         content={"code": 429, "data": "我还在处理您的问题,请稍后再试!", "message": "to many requests"},) | ||||
|     #     return JSONResponse( | ||||
|     #         status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, | ||||
|     #         content={"code": 500, "data": {"tip": "服务器错误"}, "message": "fail"}, | ||||
|     #     ) | ||||
| 
 | ||||
| def register_cors(app: FastAPI): | ||||
|     """ | ||||
|     支持跨域 | ||||
| 
 | ||||
|     貌似发现了一个bug | ||||
|     https://github.com/tiangolo/fastapi/issues/133 | ||||
| 
 | ||||
|     :param app: | ||||
|     :return: | ||||
|     """ | ||||
| 
 | ||||
|     app.add_middleware( | ||||
|         CORSMiddleware, | ||||
|         # allow_origins=['http://localhost:8081'],  # 有效, 但是本地vue端口一直在变化, 接口给其他人用也不一定是这个端口 | ||||
|         # allow_origins=['*'],   # 无效 bug allow_origins=['http://localhost:8081'] | ||||
|         allow_origin_regex='https?://.*',  # 改成用正则就行了 | ||||
|         allow_credentials=True, | ||||
|         allow_methods=["*"], | ||||
|         allow_headers=["*"], | ||||
|     ) | ||||
| 
 | ||||
| def register_middleware(app: FastAPI): | ||||
|     """ | ||||
|     请求响应拦截 hook | ||||
| 
 | ||||
|     https://fastapi.tiangolo.com/tutorial/middleware/ | ||||
|     :param app: | ||||
|     :return: | ||||
|     """ | ||||
| 
 | ||||
|     @app.middleware("http") | ||||
|     async def logger_request(request: Request, call_next): | ||||
|         # https://stackoverflow.com/questions/60098005/fastapi-starlette-get-client-real-ip | ||||
|         logger.info(f"访问记录:{request.method} url:{request.url}\nheaders:{request.headers.get('user-agent')}" | ||||
|                     f"\nIP:{request.client.host}") | ||||
| 
 | ||||
|         response = await call_next(request) | ||||
| 
 | ||||
|         return response | ||||
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								| @ -0,0 +1,23 @@ | ||||
| # !/usr/bin/env python3 | ||||
| # -*- encoding : utf-8 -*- | ||||
| # @Filename    : __init__.py | ||||
| # @Software    : VSCode | ||||
| # @Datetime    : 2021/11/03 17:19:33 | ||||
| # @Author      : leo liu | ||||
| # @Version     : 1.0 | ||||
| # @Description : | ||||
| 
 | ||||
| """ | ||||
| 
 | ||||
| 路由汇总 | ||||
| 
 | ||||
| """ | ||||
| 
 | ||||
| from fastapi import APIRouter | ||||
| from api.v1 import auth | ||||
| from api.v1 import chat | ||||
| 
 | ||||
| api_v1 = APIRouter() | ||||
| 
 | ||||
| api_v1.include_router(auth.router, tags=["鉴权相关"]) | ||||
| api_v1.include_router(chat.router, tags=["J-Med聊天"]) | ||||
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								| @ -0,0 +1,11 @@ | ||||
| # !/usr/bin/env python3 | ||||
| # -*- encoding : utf-8 -*- | ||||
| # @Filename    : __init__.py | ||||
| # @Software    : VSCode | ||||
| # @Datetime    : 2021/11/03 17:20:53 | ||||
| # @Author      : leo liu | ||||
| # @Version     : 1.0 | ||||
| # @Description : | ||||
| 
 | ||||
| from .views import router | ||||
| from .views import get_current_user | ||||
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								| @ -0,0 +1,9 @@ | ||||
| # !/usr/bin/env python3 | ||||
| # -*- encoding : utf-8 -*- | ||||
| # @Filename    : __init__.py | ||||
| # @Software    : VSCode | ||||
| # @Datetime    : 2021/11/04 21:24:52 | ||||
| # @Author      : leo liu | ||||
| # @Version     : 1.0 | ||||
| # @Description : | ||||
| 
 | ||||
| @ -0,0 +1,8 @@ | ||||
| # !/usr/bin/env python3 | ||||
| # -*- encoding : utf-8 -*- | ||||
| # @Filename    : __init__.py | ||||
| # @Software    : VSCode | ||||
| # @Datetime    : 2021/11/03 17:27:57 | ||||
| # @Author      : leo liu | ||||
| # @Version     : 1.0 | ||||
| # @Description : | ||||
| @ -0,0 +1,35 @@ | ||||
| # !/usr/bin/env python3 | ||||
| # -*- encoding : utf-8 -*- | ||||
| # @Filename    : menu_schema.py | ||||
| # @Software    : VSCode | ||||
| # @Datetime    : 2021/11/08 22:15:39 | ||||
| # @Author      : leo liu | ||||
| # @Version     : 1.0 | ||||
| # @Description : | ||||
| 
 | ||||
| """ | ||||
| 
 | ||||
| """ | ||||
| 
 | ||||
| from typing import Optional | ||||
| from pydantic import BaseModel | ||||
| 
 | ||||
| class MenuCreate(BaseModel): | ||||
|     path: str | ||||
|     name: str | ||||
|     super_menu: Optional[str] = None | ||||
| 
 | ||||
| class MenuUpdate(BaseModel): | ||||
|     menu_id: str | ||||
|     name: Optional[str] = None | ||||
|     path: Optional[str] = None | ||||
|     super_menu: Optional[str] = None | ||||
|     is_delete: Optional[int] = None | ||||
| 
 | ||||
| class MenuQuery(BaseModel): | ||||
|     col_val: Optional[str] = '' | ||||
|     is_delete: Optional[int] = 0 | ||||
|     page: Optional[int] = 0 | ||||
|     page_size: Optional[int] = 20 | ||||
|     order_by: Optional[str] = 'id' | ||||
|     is_desc: Optional[bool] = False | ||||
| @ -0,0 +1,35 @@ | ||||
| # !/usr/bin/env python3 | ||||
| # -*- encoding : utf-8 -*- | ||||
| # @Filename    : role_schema.py | ||||
| # @Software    : VSCode | ||||
| # @Datetime    : 2021/11/13 21:51:02 | ||||
| # @Author      : leo liu | ||||
| # @Version     : 1.0 | ||||
| # @Description : | ||||
| 
 | ||||
| """ | ||||
| 
 | ||||
| """ | ||||
| from typing import List, Optional | ||||
| from pydantic import BaseModel | ||||
| 
 | ||||
| class BaseRole(BaseModel): | ||||
|     role_id: Optional[str] = None | ||||
|     name: Optional[str] = None | ||||
|     title: Optional[str] = '' | ||||
|     is_delete: Optional[int] = 0 | ||||
| 
 | ||||
| class RoleCreate(BaseRole): | ||||
|     name: str | ||||
|     title: str | ||||
| 
 | ||||
| class RoleUpdate(BaseRole): | ||||
|     title: Optional[str] = None | ||||
|     menus: Optional[List] = None | ||||
| 
 | ||||
| class RoleQuery(BaseRole): | ||||
|     col_val: Optional[str] = '' | ||||
|     page: Optional[int] = 0 | ||||
|     page_size: Optional[int] = 20 | ||||
|     order_by: Optional[str] = 'id' | ||||
|     is_desc: Optional[bool] = False | ||||
| @ -0,0 +1,20 @@ | ||||
| #!/usr/bin/env python | ||||
| # -*- coding: utf-8 -*- | ||||
| # @Time    : 2020/7/10 17:01 | ||||
| # @Author  : CoderCharm | ||||
| # @File    : token_schema.py | ||||
| # @Software: PyCharm | ||||
| # @Desc    : | ||||
| """ | ||||
| 
 | ||||
| """ | ||||
| 
 | ||||
| from typing import Optional | ||||
| from pydantic import BaseModel | ||||
| 
 | ||||
| class Token(BaseModel): | ||||
|     token: str | ||||
| 
 | ||||
| class TokenPayload(BaseModel): | ||||
|     sub: Optional[int] = None | ||||
| 
 | ||||
| @ -0,0 +1,61 @@ | ||||
| #!/usr/bin/env python | ||||
| # -*- coding: utf-8 -*- | ||||
| # @Time    : 2020/7/7 16:23 | ||||
| # @Author  : CoderCharm | ||||
| # @File    : user_schema.py | ||||
| # @Software: PyCharm | ||||
| # @Desc    : | ||||
| """ | ||||
| 
 | ||||
| """ | ||||
| 
 | ||||
| from typing import Optional | ||||
| from pydantic import BaseModel, EmailStr, AnyHttpUrl | ||||
| 
 | ||||
| class UserBase(BaseModel): | ||||
|     username: str | ||||
|     is_active: Optional[bool] = True | ||||
|     is_delete: Optional[int] = 0 | ||||
| 
 | ||||
| class UserAuth(UserBase): | ||||
|     username: str | ||||
|     password: str | ||||
| 
 | ||||
| class UserCreate(UserBase): | ||||
|     password: str | ||||
|     nickname: Optional[str] = None | ||||
|     email: Optional[EmailStr] = None | ||||
|     phone: Optional[str] = None | ||||
|     # avatar: Optional[AnyHttpUrl] = None | ||||
|     gender: Optional[int] = 0 | ||||
|     wechat_openid: Optional[str] = None | ||||
|     country: Optional[str] = None | ||||
|     province: Optional[str] = None | ||||
|     city: Optional[str] = None | ||||
|     q_limit_day: Optional[int] = 0 | ||||
|     tokens_limit: Optional[int] = 0 | ||||
|     roles: Optional[list] = [] | ||||
| 
 | ||||
| class UserUpdate(UserBase): | ||||
|     password: Optional[str] = None | ||||
|     nickname: Optional[str] = None | ||||
|     email: Optional[EmailStr] = None | ||||
|     phone: Optional[str] = None | ||||
|     avatar: Optional[AnyHttpUrl] = None | ||||
|     gender: Optional[int] = 0 | ||||
|     wechat_openid: Optional[str] = None | ||||
|     country: Optional[str] = None | ||||
|     province: Optional[str] = None | ||||
|     city: Optional[str] = None | ||||
|     q_limit_day: Optional[int] = -1 | ||||
|     tokens_limit: Optional[int] = -1 | ||||
|     roles: Optional[list] = [] | ||||
| 
 | ||||
| class UserQuery(BaseModel): | ||||
|     col_val: Optional[str] = '' | ||||
|     is_delete: Optional[int] = 0 | ||||
|     role: Optional[str] = '' | ||||
|     page: Optional[int] = 0 | ||||
|     page_size: Optional[int] = 20 | ||||
|     order_by: Optional[str] = 'id' | ||||
|     is_desc: Optional[bool] = False | ||||
| @ -0,0 +1,322 @@ | ||||
| # !/usr/bin/env python3 | ||||
| # -*- encoding : utf-8 -*- | ||||
| # @Filename    : views.py | ||||
| # @Software    : VSCode | ||||
| # @Datetime    : 2021/11/03 17:24:24 | ||||
| # @Author      : leo liu | ||||
| # @Version     : 1.0 | ||||
| # @Description : | ||||
| 
 | ||||
| from typing import Any, List, Optional, Union | ||||
| from datetime import datetime, timedelta | ||||
| from fastapi import APIRouter, Depends, Header, Request | ||||
| from sqlalchemy.orm.session import Session | ||||
| from sqlalchemy.sql.functions import count | ||||
| 
 | ||||
| from core.settings import config | ||||
| from core import security | ||||
| from utils import response_code | ||||
| from utils.messages import msg | ||||
| from utils import custom_exc | ||||
| from db.session import get_db | ||||
| from models import User, Menu | ||||
| from extensions import logger | ||||
| 
 | ||||
| from .schemas import user_schema, role_schema, menu_schema | ||||
| from .crud.user import CRUDUser | ||||
| from .crud.role import crud_role | ||||
| from .crud.menu import crud_menu | ||||
| 
 | ||||
| router = APIRouter() | ||||
| 
 | ||||
| def get_current_user( | ||||
|     db: Session = Depends(get_db), token: Optional[str] = Header(None) | ||||
| ) -> User: | ||||
|     """ | ||||
|     根据header中token 获取当前用户 | ||||
|     :param db: | ||||
|     :param token: | ||||
|     :return: | ||||
|     """ | ||||
|     if not token: | ||||
|         raise custom_exc.TokenAuthError(err_desc='headers not found token') | ||||
| 
 | ||||
|     crud_user = CRUDUser(User) | ||||
| 
 | ||||
|     token_data = security.check_jwt_token(token) | ||||
|     user = crud_user.get(db, id=token_data.sub) | ||||
|     if not user: | ||||
|         raise custom_exc.UserNotFound(err_desc="user not found") | ||||
|     return user | ||||
| 
 | ||||
| @router.post("/auth/login", summary="登录") | ||||
| async def auth_login( | ||||
|     *, | ||||
|     db: Session = Depends(get_db), | ||||
|     user_info: user_schema.UserAuth, | ||||
|     request: Request | ||||
|     ) -> Any: | ||||
| 
 | ||||
|     crud_user = CRUDUser(User) | ||||
|     # 验证用户 | ||||
|     user = crud_user.authenticate(db, username=user_info.username, password=user_info.password, ip=request.client.host) | ||||
| 
 | ||||
|     if not user: | ||||
|         return response_code.resp_200(message=msg.MSG_WRONG_USERINFO) | ||||
|     elif not crud_user.is_active(user): | ||||
|         return response_code.resp_200(message=msg.MSG_USER_INACTIVE) | ||||
|     elif crud_user.is_delete(user): | ||||
|         return response_code.resp_200(message=msg.MSG_USER_UNSIGNUP) | ||||
| 
 | ||||
|     access_token_expires = timedelta(minutes=config.ACCESS_TOKEN_EXPIRE_MINUTES) | ||||
| 
 | ||||
|     logger.info(f"用户[{user.username}]登录成功") | ||||
|     return response_code.resp_200(data={ | ||||
|         "message": msg.MSG_USER_LOGIN_SUCCESS, | ||||
|         "token": security.create_access_token(user.id, expires_delta=access_token_expires), | ||||
|     }) | ||||
| 
 | ||||
| @router.post("/auth/userinfo", summary="个人信息") | ||||
| async def auth_info( | ||||
|     *, | ||||
|     current_user: User = Depends(get_current_user) | ||||
| ) -> Any: | ||||
|     """ | ||||
|     获取用户信息 | ||||
|     :param db: | ||||
|     :param current_user: | ||||
|     :return: | ||||
|     """ | ||||
|     menus = [] | ||||
|     roles = [] | ||||
| 
 | ||||
|     for role in current_user.roles: | ||||
|         for menu in role.menus: | ||||
|             menus.append(menu.path) | ||||
| 
 | ||||
|         roles.append(role.name) | ||||
| 
 | ||||
|     return response_code.resp_200(data={ | ||||
|         "username": current_user.username, | ||||
|         "nickname": current_user.nickname, | ||||
|         "email": current_user.email, | ||||
|         "avatar": current_user.avatar, | ||||
|         "roles": roles, | ||||
|         "menus": menus | ||||
|     }) | ||||
| 
 | ||||
| @router.post("/auth/logout", summary="登出") | ||||
| async def auth_logout( | ||||
|     *, | ||||
|     current_user: User = Depends(get_current_user) | ||||
| ): | ||||
|     """ | ||||
|     用户退出 | ||||
|     :param current_user: | ||||
|     """ | ||||
|     logger.info(f"用户[{current_user.username}]退出登录") | ||||
|     return response_code.resp_200(message="logout success") | ||||
| 
 | ||||
| @router.post("/auth/users", summary="用户列表") | ||||
| async def user_list( | ||||
|     *, | ||||
|     db: Session = Depends(get_db), | ||||
|     current_user: User = Depends(get_current_user), | ||||
|     query: user_schema.UserQuery = None | ||||
| ): | ||||
|     """ | ||||
|     用户列表 | ||||
|     """ | ||||
|     crud_user = CRUDUser(User) | ||||
| 
 | ||||
|     is_accessable = False | ||||
|     for role in current_user.roles: | ||||
|         for menu in role.menus: | ||||
|             if menu.path == "/system/auth/user": | ||||
|                 is_accessable = True | ||||
|                 break | ||||
| 
 | ||||
|     if not is_accessable: | ||||
|         logger.info(f"无权查询用户列表->用户id:{current_user.username}") | ||||
|         return response_code.resp_200(data=None) | ||||
|     else: | ||||
|         logger.info(f"查询用户列表->用户id:{current_user.username}当前页{query.page}长度{query.page_size}") | ||||
|         response_result = crud_user.query_all(db, col_val=query.col_val, is_delete=query.is_delete, role=query.role, page=query.page, page_size=query.page_size, order_by=query.order_by, is_desc=query.is_desc) | ||||
|         return response_code.resp_200(data=response_result) | ||||
| 
 | ||||
| @router.post("/auth/roles", summary="角色列表") | ||||
| async def role_list( | ||||
|     *, | ||||
|     db: Session = Depends(get_db), | ||||
|     current_user: User = Depends(get_current_user), | ||||
|     query: role_schema.RoleQuery = None | ||||
| ): | ||||
|     """ | ||||
|     角色列表 | ||||
|     """ | ||||
|     is_accessable = False | ||||
| 
 | ||||
|     for role in current_user.roles: | ||||
|         for menu in role.menus: | ||||
|             if menu.path == "/system/auth/role": | ||||
|                 is_accessable = True | ||||
|                 break | ||||
| 
 | ||||
|     if not is_accessable: | ||||
|         logger.info(f"无权查询角色列表->用户id:{current_user.username}") | ||||
|         return response_code.resp_200(data=None) | ||||
|     else: | ||||
|         logger.info(f"查询角色列表->用户id:{current_user.username}当前页{query.page}长度{query.page_size}") | ||||
|         response_result = crud_role.query_all(db, col_val=query.col_val, is_delete=query.is_delete, page=query.page, page_size=query.page_size, order_by=query.order_by, is_desc=query.is_desc) | ||||
|         return response_code.resp_200(data=response_result) | ||||
| 
 | ||||
| @router.post("/auth/newuser", summary="创建用户") | ||||
| async def new_user( | ||||
|     *, | ||||
|     db: Session = Depends(get_db), | ||||
|     # token: Optional[str] = Header(None), | ||||
|     user: user_schema.UserCreate | ||||
| ) -> Any: | ||||
|     """ | ||||
|     创建用户 | ||||
|     """ | ||||
|     # logger.info(f"创建新用户->用户id:{user.username}") | ||||
|     crud_user = CRUDUser(User) | ||||
| 
 | ||||
|     if (crud_user.is_exist(db, user_in=user)): | ||||
|         logger.info(f"创建新用户失败,用户已存在->帐号:{user.username}") | ||||
|         return response_code.resp_5010(message="user already exist") | ||||
| 
 | ||||
|     user = crud_user.create(db, obj_in=user) | ||||
| 
 | ||||
|     if (user): | ||||
|         logger.info(f"创建新用户成功->帐号:{user.username}") | ||||
|         return response_code.resp_200(data=user, message="success created user") | ||||
|     else: | ||||
|         logger.info(f"创建新用户失败->帐号:{user.username}") | ||||
|         return response_code.resp_5010(data=None, message="failed created user") | ||||
| 
 | ||||
| @router.post("/auth/updateuser", summary="修改用户/逻辑删除用户") | ||||
| async def update_user( | ||||
|     *, | ||||
|     db: Session = Depends(get_db), | ||||
|     token: Optional[str] = Header(None), | ||||
|     user: user_schema.UserUpdate | ||||
| ) -> Any: | ||||
|     """ | ||||
|     创建用户 | ||||
|     """ | ||||
|     # logger.info(f"创建新用户->用户id:{user.username}") | ||||
|     crud_user = CRUDUser(User) | ||||
| 
 | ||||
|     if (not crud_user.is_exist(db, user)): | ||||
|         logger.info(f"修改用户失败,用户不存在->用户id:{user.username}") | ||||
|         return response_code.resp_5010(message="user not exist") | ||||
| 
 | ||||
|     user = crud_user.update(db, obj_in=user) | ||||
| 
 | ||||
|     if (user): | ||||
|         logger.info(f"修改用户成功->用户id:{user.username}") | ||||
|         return response_code.resp_200(data=user, message="success updated user") | ||||
|     else: | ||||
|         logger.info(f"修改用户失败->用户id:{user.username}") | ||||
|         return response_code.resp_5010(data=None, message="failed updated user") | ||||
| 
 | ||||
| @router.post("/auth/newrole", summary="创建角色") | ||||
| async def new_role( | ||||
|     *, | ||||
|     db: Session = Depends(get_db), | ||||
|     token: Optional[str] = Header(None), | ||||
|     role: role_schema.RoleCreate | ||||
| ) -> Any: | ||||
|     """ | ||||
|     创建角色 | ||||
|     """ | ||||
| 
 | ||||
|     if (crud_role.is_exist(db, role_in=role)): | ||||
|         logger.info(f"创建新角色失败,角色已存在->角色名称:{role.name}") | ||||
|         return response_code.resp_5010(message="role already exist") | ||||
| 
 | ||||
|     role = crud_role.create(db, obj_in=role) | ||||
| 
 | ||||
|     if (role): | ||||
|         logger.info(f"创建新角色成功->角色标题:{role.title}") | ||||
|         return response_code.resp_200(data=role, message="success created role") | ||||
|     else: | ||||
|         logger.info(f"创建新角色失败->角色标题:{role.title}") | ||||
|         return response_code.resp_5010(data=None, message="failed created role") | ||||
| 
 | ||||
| @router.post("/auth/roleinfo", summary="角色信息") | ||||
| async def role_info( | ||||
|     *, | ||||
|     db: Session = Depends(get_db), | ||||
|     token: Optional[str] = Header(None), | ||||
|     query: role_schema.BaseRole | ||||
| ) -> Any: | ||||
|     """ | ||||
|     获取角色信息 | ||||
|     :param db: | ||||
|     :param token: | ||||
|     :param role_id: | ||||
|     :return: | ||||
|     """ | ||||
|     role = crud_role.get_by_id(db=db, role_id=query.role_id) | ||||
| 
 | ||||
|     if(role): | ||||
|         return response_code.resp_200(data={ | ||||
|             "role_id": query.role_id, | ||||
|             "name": role.name, | ||||
|             "title": role.title, | ||||
|             "menus": role.menus, | ||||
|             "is_delete": role.is_delete | ||||
|         }) | ||||
| 
 | ||||
|     return response_code.resp_200(data=None) | ||||
| 
 | ||||
| @router.post("/auth/updaterole", summary="修改角色/逻辑删除角色") | ||||
| async def update_role( | ||||
|     *, | ||||
|     db: Session = Depends(get_db), | ||||
|     token: Optional[str] = Header(None), | ||||
|     role: role_schema.RoleUpdate | ||||
| ) -> Any: | ||||
|     """ | ||||
|     修改角色 | ||||
|     """ | ||||
|     role = crud_role.update(db, obj_in=role) | ||||
| 
 | ||||
|     if (role): | ||||
|         logger.info(f"修改角色成功->角色名:{role.name}") | ||||
|         return response_code.resp_200(data=role, message="success updated role") | ||||
|     else: | ||||
|         logger.info(f"修改角色失败->角色名:{role.name}") | ||||
|         return response_code.resp_5010(data=None, message="failed updated role") | ||||
| 
 | ||||
| @router.post("/auth/menus", summary="菜单列表") | ||||
| async def menu_list( | ||||
|     *, | ||||
|     db: Session = Depends(get_db), | ||||
|     current_user: User = Depends(get_current_user), | ||||
|     query: menu_schema.MenuQuery = None | ||||
| ): | ||||
|     """ | ||||
|     菜单列表 | ||||
|     """ | ||||
| 
 | ||||
|     logger.info(f"查询菜单列表->用户id:{current_user.username}当前页{query.page}长度{query.page_size}") | ||||
|     response_result = crud_menu.query_all(db, col_val=query.col_val, is_delete=query.is_delete, page=query.page, page_size=query.page_size, order_by=query.order_by, is_desc=query.is_desc) | ||||
|     return response_code.resp_200(data=response_result) | ||||
| 
 | ||||
| @router.post("/auth/syncmenus", summary="同步菜单") | ||||
| async def sync_menus( | ||||
|     *, | ||||
|     db: Session = Depends(get_db), | ||||
|     token: Optional[str] = Header(None), | ||||
|     data: List = None | ||||
| ): | ||||
|     if (data and data.count): | ||||
|         crud_menu.sync_menus(db, obj_arr = data) | ||||
| 
 | ||||
|     response_result = crud_menu.query_all(db, is_delete=0) | ||||
| 
 | ||||
|     return response_code.resp_200(data=response_result) | ||||
| @ -0,0 +1,10 @@ | ||||
| # !/usr/bin/env python3 | ||||
| # -*- encoding : utf-8 -*- | ||||
| # @Filename    : __init__.py | ||||
| # @Software    : VSCode | ||||
| # @Datetime    : 2023/03/20 15:54:34 | ||||
| # @Author      : leo liu | ||||
| # @Version     : 1.0 | ||||
| # @Description : | ||||
| 
 | ||||
| from .views import router | ||||
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								| @ -0,0 +1,96 @@ | ||||
| # !/usr/bin/env python3 | ||||
| # -*- encoding : utf-8 -*- | ||||
| # @Filename    : chat.py | ||||
| # @Software    : VSCode | ||||
| # @Datetime    : 2023/03/23 11:25:10 | ||||
| # @Author      : leo liu | ||||
| # @Version     : 1.0 | ||||
| # @Description : | ||||
| 
 | ||||
| from datetime import date | ||||
| from sqlalchemy.orm import Session | ||||
| from sqlalchemy.sql.expression import and_ | ||||
| from typing import Any | ||||
| 
 | ||||
| from extensions.curd_base import CRUDBase | ||||
| from models import ChatHistory, ChatCountDay | ||||
| from ..schemas import chat_schema | ||||
| from models import User, ChatCountDay, Settings | ||||
| 
 | ||||
| class CRUDChat(CRUDBase[ChatHistory, ChatCountDay, chat_schema.Chat]): | ||||
|     ''' | ||||
|     获取openai_key | ||||
|     ''' | ||||
|     def get_openai_keys(self, db: Session) -> Any: | ||||
|         openai_keys = [] | ||||
|         settings = db.query(Settings).filter(Settings.key == 'openai_key') | ||||
| 
 | ||||
|         if settings: | ||||
|             for setting in settings: | ||||
|                 openai_keys.append(setting.value) | ||||
| 
 | ||||
|         return openai_keys | ||||
| 
 | ||||
|     ''' | ||||
|     获取默认max_tokens | ||||
|     ''' | ||||
|     def get_default_max_tokens(self, db:Session) -> int: | ||||
|         default_max_tokens = 2000 | ||||
|         setting = db.query(Settings).filter(Settings.key == 'default_max_tokens').first() | ||||
| 
 | ||||
|         if setting: | ||||
|             if (str.isdigit(setting.value)): | ||||
|                  limit = int(setting.value) | ||||
|                  if limit > 0 and limit <= 2048: | ||||
|                     default_max_tokens = limit | ||||
| 
 | ||||
|         return default_max_tokens | ||||
| 
 | ||||
|     ''' | ||||
|     获取当前用户当天的提问次数 | ||||
|     ''' | ||||
|     def get_chat_count(self, db: Session, user: User) -> int: | ||||
|         q_date = date.today() | ||||
|         chat_count_day = db.query(ChatCountDay).filter(and_(ChatCountDay.user_id == user.user_id, ChatCountDay.q_time == q_date)).first() | ||||
| 
 | ||||
|         if not chat_count_day: | ||||
|             return -1 | ||||
| 
 | ||||
|         return chat_count_day.q_times | ||||
| 
 | ||||
|     ''' | ||||
|     更新当前用户当天的提问次数 | ||||
|     ''' | ||||
|     def update_chat_count(self, db: Session, user: User): | ||||
|         q_date = date.today() | ||||
|         chat_count_day = db.query(ChatCountDay).filter(and_(ChatCountDay.user_id == user.user_id, ChatCountDay.q_time == q_date)).first() | ||||
| 
 | ||||
|         if not chat_count_day: | ||||
|             chat_count_day = ChatCountDay( | ||||
|                 user_id = user.user_id, | ||||
|                 q_time = q_date, | ||||
|                 q_times = 1 | ||||
|             ) | ||||
| 
 | ||||
|             user.chat_count_day.append(chat_count_day) | ||||
|         else: | ||||
|             chat_count_day.q_times = chat_count_day.q_times + 1 | ||||
| 
 | ||||
|         db.commit() | ||||
|         db.refresh(user) | ||||
| 
 | ||||
|     ''' | ||||
|     记录用户会话 | ||||
|     ''' | ||||
|     def new_chat(self, db: Session, user: User, q: str, a: str): | ||||
|         chat_history = ChatHistory( | ||||
|             user_id = user.user_id, | ||||
|             username = user.username, | ||||
|             q_content = q, | ||||
|             a_content = a | ||||
|         ) | ||||
| 
 | ||||
|         user.chat_history.append(chat_history) | ||||
| 
 | ||||
|         db.commit() | ||||
|         db.refresh(user) | ||||
| @ -0,0 +1,9 @@ | ||||
| # !/usr/bin/env python3 | ||||
| # -*- encoding : utf-8 -*- | ||||
| # @Filename    : __init__.py | ||||
| # @Software    : VSCode | ||||
| # @Datetime    : 2023/03/20 23:15:18 | ||||
| # @Author      : leo liu | ||||
| # @Version     : 1.0 | ||||
| # @Description : | ||||
| 
 | ||||
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								| @ -0,0 +1,17 @@ | ||||
| import openai | ||||
| 
 | ||||
| class CTRLChat(): | ||||
|     ''' | ||||
|     OpenAI api调用控制类 | ||||
|     ''' | ||||
|     def chat(self, key:str, q:str, tokens_limit:int) -> str: | ||||
|       openai.api_key = key | ||||
|       completion = openai.ChatCompletion.create( | ||||
|           model="gpt-3.5-turbo", | ||||
|           messages=[ | ||||
|             {"role": "user", "content": q} | ||||
|           ], | ||||
|           max_tokens=tokens_limit | ||||
|       ) | ||||
| 
 | ||||
|       return completion.choices[0].message.content | ||||
											
												Binary file not shown.
											
										
									
								| @ -0,0 +1,13 @@ | ||||
| # !/usr/bin/env python3 | ||||
| # -*- encoding : utf-8 -*- | ||||
| # @Filename    : chat_schema.py | ||||
| # @Software    : VSCode | ||||
| # @Datetime    : 2023/03/20 23:31:03 | ||||
| # @Author      : leo liu | ||||
| # @Version     : 1.0 | ||||
| # @Description : | ||||
| 
 | ||||
| from pydantic import BaseModel | ||||
| 
 | ||||
| class Chat(BaseModel): | ||||
|     question: str | ||||
| @ -0,0 +1,84 @@ | ||||
| # !/usr/bin/env python3 | ||||
| # -*- encoding : utf-8 -*- | ||||
| # @Filename    : views.py | ||||
| # @Software    : VSCode | ||||
| # @Datetime    : 2023/03/20 15:56:34 | ||||
| # @Author      : leo liu | ||||
| # @Version     : 1.0 | ||||
| # @Description : | ||||
| 
 | ||||
| from typing import Optional, Any | ||||
| from fastapi import APIRouter, Depends, Header | ||||
| from sqlalchemy.orm.session import Session | ||||
| 
 | ||||
| from extensions import logger | ||||
| from core import security | ||||
| from utils import response_code, custom_exc | ||||
| from db.session import get_db | ||||
| from models import User, ChatHistory | ||||
| 
 | ||||
| from .schemas import chat_schema | ||||
| from .ctrl.chat import CTRLChat | ||||
| from ..auth.crud.user import CRUDUser | ||||
| from .crud.chat import CRUDChat | ||||
| 
 | ||||
| router = APIRouter() | ||||
| 
 | ||||
| def get_current_user( | ||||
|     db: Session = Depends(get_db), token: Optional[str] = Header(None) | ||||
| ) -> User: | ||||
|     """ | ||||
|     根据header中token 获取当前用户 | ||||
|     :param db: | ||||
|     :param token: | ||||
|     :return: | ||||
|     """ | ||||
|     if not token: | ||||
|         raise custom_exc.TokenAuthError(err_desc='headers not found token') | ||||
| 
 | ||||
|     crud_user = CRUDUser(User) | ||||
| 
 | ||||
|     token_data = security.check_jwt_token(token) | ||||
|     user = crud_user.get(db, id=token_data.sub) | ||||
|     if not user: | ||||
|         raise custom_exc.UserNotFound(err_desc="user not found") | ||||
|     return user | ||||
| 
 | ||||
| @router.post("/chat/ask", summary="提问") | ||||
| async def ask( | ||||
|     *, | ||||
|     db: Session = Depends(get_db), | ||||
|     security: Optional[bool] = Depends(security.check_jwt_token), | ||||
|     current_user: User = Depends(get_current_user), | ||||
|     chat_info:chat_schema.Chat = None | ||||
| ) -> Any: | ||||
|     if not chat_info: | ||||
|         return response_code.resp_200(data="", message="no chat info") | ||||
| 
 | ||||
|     crud_chat = CRUDChat(ChatHistory) | ||||
|     ctrl_chat = CTRLChat() | ||||
| 
 | ||||
|     q_times = crud_chat.get_chat_count(db, current_user) | ||||
|     q_limit_day = current_user.q_limit_day | ||||
| 
 | ||||
|     if ((q_limit_day > 0 and q_times >= q_limit_day) or q_limit_day < 0): | ||||
|         return response_code.resp_200(data="您今天的提问次数已达到限额,欢迎您明日再来!", message="success chat with j-med") | ||||
| 
 | ||||
|     openai_keys = crud_chat.get_openai_keys(db) | ||||
|     default_max_tokens = crud_chat.get_default_max_tokens(db) | ||||
| 
 | ||||
|     if not openai_keys or len(openai_keys) <= 0: | ||||
|         return response_code.resp_200(data="", message="no openai_key defined") | ||||
| 
 | ||||
|     key = openai_keys[0] | ||||
|     tokens_limit = current_user.tokens_limit | ||||
| 
 | ||||
|     if tokens_limit == 0: | ||||
|         tokens_limit = default_max_tokens | ||||
| 
 | ||||
|     answer = ctrl_chat.chat(key, chat_info.question, tokens_limit) | ||||
| 
 | ||||
|     crud_chat.update_chat_count(db, current_user) | ||||
|     crud_chat.new_chat(db, current_user, chat_info.question, answer) | ||||
| 
 | ||||
|     return response_code.resp_200(data=answer, message="success chat with j-med") | ||||
| @ -0,0 +1,9 @@ | ||||
| # !/usr/bin/env python3 | ||||
| # -*- encoding : utf-8 -*- | ||||
| # @Filename    : __init__.py | ||||
| # @Software    : VSCode | ||||
| # @Datetime    : 2021/11/03 17:31:26 | ||||
| # @Author      : leo liu | ||||
| # @Version     : 1.0 | ||||
| # @Description : | ||||
| 
 | ||||
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								| @ -0,0 +1,71 @@ | ||||
| # !/usr/bin/env python3 | ||||
| # -*- encoding : utf-8 -*- | ||||
| # @Filename    : security.py | ||||
| # @Software    : VSCode | ||||
| # @Datetime    : 2021/11/03 17:33:20 | ||||
| # @Author      : leo liu | ||||
| # @Version     : 1.0 | ||||
| # @Description : | ||||
| 
 | ||||
| """ | ||||
| 
 | ||||
| token password 验证 | ||||
| 
 | ||||
| pip install python-jose | ||||
| 
 | ||||
| pip install passlib | ||||
| 
 | ||||
| 
 | ||||
| """ | ||||
| 
 | ||||
| from datetime import datetime, timedelta | ||||
| from typing import Any, Union, Optional | ||||
| from fastapi import Depends, Header | ||||
| from jose import jwt | ||||
| from passlib.context import CryptContext | ||||
| from pydantic import ValidationError | ||||
| 
 | ||||
| from core.settings import config | ||||
| from utils import custom_exc | ||||
| from api.v1.auth.schemas import token_schema | ||||
| 
 | ||||
| pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") | ||||
| 
 | ||||
| def create_access_token( | ||||
|     subject: Union[str, Any], expires_delta: timedelta = None | ||||
| ) -> str: | ||||
|     if expires_delta: | ||||
|         expire = datetime.utcnow() + expires_delta | ||||
|     else: | ||||
|         expire = datetime.utcnow() + timedelta( | ||||
|             minutes=config.ACCESS_TOKEN_EXPIRE_MINUTES | ||||
|         ) | ||||
|     to_encode = {"exp": expire, "sub": str(subject)} | ||||
|     encoded_jwt = jwt.encode(to_encode, config.SECRET_KEY, algorithm=config.JWT_ALGORITHM) | ||||
|     return encoded_jwt | ||||
| 
 | ||||
| 
 | ||||
| def verify_password(plain_password: str, hashed_password: str) -> bool: | ||||
|     return pwd_context.verify(plain_password, hashed_password) | ||||
| 
 | ||||
| 
 | ||||
| def get_password_hash(password: str) -> str: | ||||
|     return pwd_context.hash(password) | ||||
| 
 | ||||
| def check_jwt_token( | ||||
|      token: Optional[str] = Header(None) | ||||
| ) -> Union[str, Any]: | ||||
|     """ | ||||
|     只解析验证token | ||||
|     :param token: | ||||
|     :return: | ||||
|     """ | ||||
| 
 | ||||
|     try: | ||||
|         payload = jwt.decode( | ||||
|             token, | ||||
|             config.SECRET_KEY, algorithms=config.JWT_ALGORITHM | ||||
|         ) | ||||
|         return token_schema.TokenPayload(**payload) | ||||
|     except (jwt.JWTError, ValidationError, AttributeError): | ||||
|         raise custom_exc.TokenAuthError(err_desc="access token fail") | ||||
| @ -0,0 +1,21 @@ | ||||
| # !/usr/bin/env python3 | ||||
| # -*- encoding : utf-8 -*- | ||||
| # @Filename    : __init__.py | ||||
| # @Software    : VSCode | ||||
| # @Datetime    : 2021/11/03 17:01:05 | ||||
| # @Author      : leo liu | ||||
| # @Version     : 1.0 | ||||
| # @Description : | ||||
| 
 | ||||
| import os | ||||
| 
 | ||||
| # 获取环境变量 | ||||
| env = os.getenv("ENV", "") | ||||
| if env: | ||||
|     # 如果有虚拟环境 则是 生产环境 | ||||
|     print("----------生产环境启动------------") | ||||
|     from .production_config import config | ||||
| else: | ||||
|     # 没有则是开发环境 | ||||
|     print("----------开发环境启动------------") | ||||
|     from .development_config import config | ||||
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								| @ -0,0 +1,48 @@ | ||||
| #!/usr/bin/env python | ||||
| # -*- coding: utf-8 -*- | ||||
| # @Time    : 2020/6/9 14:47 | ||||
| # @Author  : CoderCharm | ||||
| # @File    : development_config.py | ||||
| # @Software: PyCharm | ||||
| # @Desc    : | ||||
| """ | ||||
| 
 | ||||
| 开发环境配置 | ||||
| 
 | ||||
| """ | ||||
| from typing import Optional | ||||
| from pydantic import BaseSettings | ||||
| from urllib.parse import quote_plus as urlquote | ||||
| import os | ||||
| 
 | ||||
| 
 | ||||
| class Config(BaseSettings): | ||||
|     # 文档地址 | ||||
|     DOCS_URL: str = "/api/v1/docs" | ||||
|     # # 文档关联请求数据接口 | ||||
|     OPENAPI_URL: str = "/api/v1/openapi.json" | ||||
|     # 禁用 redoc 文档 | ||||
|     REDOC_URL: Optional[str] = None | ||||
| 
 | ||||
|     ACCESS_TOKEN_EXPIRE_MINUTES: int = 60 * 24 * 8 | ||||
|     JWT_ALGORITHM: str = "HS256" | ||||
|     SECRET_KEY: str = 'koelndom' | ||||
| 
 | ||||
|     # 配置你的Mysql环境 | ||||
|     MYSQL_USERNAME: str = 'root' | ||||
|     # MYSQL_USERNAME: str = 'bireport' | ||||
|     MYSQL_PASSWORD: str = "1qazxsw2" | ||||
|     # MYSQL_PASSWORD: str = "Jiahui@0108" | ||||
|     # MYSQL_HOST: Union[AnyHttpUrl, IPvAnyAddress] = "192.168.0.112" | ||||
|     MYSQL_HOST: str = "120.55.81.57" | ||||
|     # MYSQL_HOST: str = "rm-uf6d1660v738e34f6vo.mysql.rds.aliyuncs.com" | ||||
|     MYSQL_DATABASE: str = 'jmedchat' | ||||
| 
 | ||||
|     # Mysql地址 | ||||
|     SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{MYSQL_USERNAME}:{urlquote(MYSQL_PASSWORD)}@" \ | ||||
|                               f"{MYSQL_HOST}/{MYSQL_DATABASE}?charset=utf8" | ||||
| 
 | ||||
|     os.environ["HTTP_PROXY"] = "http://127.0.0.1:7890" | ||||
|     os.environ["HTTPS_PROXY"] = "http://127.0.0.1:7890" | ||||
| 
 | ||||
| config = Config() | ||||
| @ -0,0 +1,8 @@ | ||||
| # !/usr/bin/env python3 | ||||
| # -*- encoding : utf-8 -*- | ||||
| # @Filename    : __init__.py | ||||
| # @Software    : VSCode | ||||
| # @Datetime    : 2021/11/03 21:36:56 | ||||
| # @Author      : leo liu | ||||
| # @Version     : 1.0 | ||||
| # @Description : | ||||
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								| @ -0,0 +1,47 @@ | ||||
| # !/usr/bin/env python3 | ||||
| # -*- encoding : utf-8 -*- | ||||
| # @Filename    : base_class.py | ||||
| # @Software    : VSCode | ||||
| # @Datetime    : 2021/11/04 21:27:43 | ||||
| # @Author      : leo liu | ||||
| # @Version     : 1.0 | ||||
| # @Description : | ||||
| 
 | ||||
| import uuid | ||||
| from datetime import datetime | ||||
| 
 | ||||
| from sqlalchemy import Column, Integer, DateTime | ||||
| 
 | ||||
| from sqlalchemy.sql import func | ||||
| from sqlalchemy.ext.declarative import as_declarative, declared_attr | ||||
| 
 | ||||
| @as_declarative() | ||||
| class Base: | ||||
|     # 通用的字段 | ||||
|     id = Column(Integer, unique=True, index=True, primary_key=True, autoincrement=True) | ||||
|     create_time = Column(DateTime, default=datetime.now, server_default=func.now(), comment="创建时间") | ||||
|     update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, server_default=func.now(), | ||||
|                          server_onupdate=func.now(), comment="更新时间") | ||||
|     is_delete = Column(Integer, default=0, comment="逻辑删除:0=未删除,1=删除", server_default='0') | ||||
|     __name__: str | ||||
| 
 | ||||
|     # Generate __tablename__ automatically | ||||
|     @declared_attr | ||||
|     def __tablename__(cls) -> str: | ||||
|         import re | ||||
|         # 如果没有指定__tablename__  则默认使用model类名转换表名字 | ||||
|         name_list = re.findall(r"[A-Z][a-z\d]*", cls.__name__) | ||||
|         # 表名格式替换成 下划线_格式 如 MallUser 替换成 mall_user | ||||
|         return "_".join(name_list).lower() | ||||
| 
 | ||||
|     def getAttrFromName(self, attrName): | ||||
|         if hasattr(self, attrName): | ||||
|             return getattr(self, attrName) | ||||
|         else: | ||||
|             return getattr(self, "id") | ||||
| 
 | ||||
| 
 | ||||
| def gen_uuid() -> str: | ||||
|     # 生成uuid | ||||
|     # https://stackoverflow.com/questions/183042/how-can-i-use-uuids-in-sqlalchemy?rq=1 | ||||
|     return uuid.uuid4().hex | ||||
| @ -0,0 +1,31 @@ | ||||
| # !/usr/bin/env python3 | ||||
| # -*- encoding : utf-8 -*- | ||||
| # @Filename    : session.py | ||||
| # @Software    : VSCode | ||||
| # @Datetime    : 2021/11/04 15:49:56 | ||||
| # @Author      : leo liu | ||||
| # @Version     : 1.0 | ||||
| # @Description : | ||||
| 
 | ||||
| from typing import Generator | ||||
| 
 | ||||
| from sqlalchemy import create_engine | ||||
| from sqlalchemy.ext.declarative import declarative_base | ||||
| from sqlalchemy.orm import sessionmaker | ||||
| 
 | ||||
| from core.settings import config | ||||
| 
 | ||||
| engine = create_engine( | ||||
|     config.SQLALCHEMY_DATABASE_URI | ||||
| ) | ||||
| 
 | ||||
| SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) | ||||
| 
 | ||||
| Base = declarative_base() | ||||
| 
 | ||||
| def get_db() -> Generator: | ||||
|     try: | ||||
|         db = SessionLocal() | ||||
|         yield db | ||||
|     finally: | ||||
|         db.close() | ||||
| @ -0,0 +1,17 @@ | ||||
| # !/usr/bin/env python3 | ||||
| # -*- encoding : utf-8 -*- | ||||
| # @Filename    : __init__.py | ||||
| # @Software    : VSCode | ||||
| # @Datetime    : 2021/11/03 17:17:10 | ||||
| # @Author      : leo liu | ||||
| # @Version     : 1.0 | ||||
| # @Description : | ||||
| 
 | ||||
| """ | ||||
| 
 | ||||
| 其他扩展文件全局对象 | ||||
| 
 | ||||
| """ | ||||
| 
 | ||||
| 
 | ||||
| from .logger import logger | ||||
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								| @ -0,0 +1,78 @@ | ||||
| #!/usr/bin/env python | ||||
| # -*- coding: utf-8 -*- | ||||
| # @Time    : 2020/7/7 14:08 | ||||
| # @Author  : CoderCharm | ||||
| # @File    : curd_base.py | ||||
| # @Software: PyCharm | ||||
| # @Desc    : | ||||
| """ | ||||
| 
 | ||||
| """ | ||||
| 
 | ||||
| from typing import Any, Dict, Generic, List, Optional, Type, TypeVar, Union | ||||
| 
 | ||||
| from fastapi.encoders import jsonable_encoder | ||||
| from pydantic import BaseModel | ||||
| from sqlalchemy.orm import Session | ||||
| 
 | ||||
| from db.base_class import Base | ||||
| 
 | ||||
| ModelType = TypeVar("ModelType", bound=Base) | ||||
| CreateSchemaType = TypeVar("CreateSchemaType", bound=BaseModel) | ||||
| UpdateSchemaType = TypeVar("UpdateSchemaType", bound=BaseModel) | ||||
| 
 | ||||
| 
 | ||||
| class CRUDBase(Generic[ModelType, CreateSchemaType, UpdateSchemaType]): | ||||
|     def __init__(self, model: Type[ModelType]): | ||||
|         """ | ||||
|         CRUD object with default methods to Create, Read, Update, Delete (CRUD). | ||||
| 
 | ||||
|         **Parameters** | ||||
| 
 | ||||
|         * `model`: A SQLAlchemy model class | ||||
|         * `schema`: A Pydantic model (schema) class | ||||
|         """ | ||||
|         self.model = model | ||||
| 
 | ||||
|     def get(self, db: Session, id: Any) -> Optional[ModelType]: | ||||
|         return db.query(self.model).filter(self.model.id == id, self.model.is_delete == 0).first() | ||||
| 
 | ||||
|     def get_multi( | ||||
|         self, db: Session, *, page: int = 0, page_size: int = 100 | ||||
|     ) -> List[ModelType]: | ||||
|         temp_page = (page - 1) * page_size | ||||
|         return db.query(self.model).filter(self.model.is_delete == 0).offset(temp_page).limit(page_size).all() | ||||
| 
 | ||||
|     def create(self, db: Session, *, obj_in: CreateSchemaType) -> ModelType: | ||||
|         obj_in_data = jsonable_encoder(obj_in) | ||||
|         db_obj = self.model(**obj_in_data)  # type: ignore | ||||
|         db.add(db_obj) | ||||
|         db.commit() | ||||
|         db.refresh(db_obj) | ||||
|         return db_obj | ||||
| 
 | ||||
|     def update( | ||||
|         self, | ||||
|         db: Session, | ||||
|         *, | ||||
|         db_obj: ModelType, | ||||
|         obj_in: Union[UpdateSchemaType, Dict[str, Any]] | ||||
|     ) -> ModelType: | ||||
|         obj_data = jsonable_encoder(db_obj) | ||||
|         if isinstance(obj_in, dict): | ||||
|             update_data = obj_in | ||||
|         else: | ||||
|             update_data = obj_in.dict(exclude_unset=True) | ||||
|         for field in obj_data: | ||||
|             if field in update_data: | ||||
|                 setattr(db_obj, field, update_data[field]) | ||||
|         db.add(db_obj) | ||||
|         db.commit() | ||||
|         db.refresh(db_obj) | ||||
|         return db_obj | ||||
| 
 | ||||
|     def remove(self, db: Session, *, id: int) -> ModelType: | ||||
|         obj = db.query(self.model).filter(self.model.id == id).update({self.model.is_delete: 1}) | ||||
|         # db.delete(obj) | ||||
|         db.commit() | ||||
|         return obj | ||||
											
												
													File diff suppressed because it is too large
													Load Diff
												
											
										
									
								| @ -0,0 +1,118 @@ | ||||
| 2023-03-21 23:49:19.295 | INFO     | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/docs | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-21 23:49:32.470 | INFO     | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/openapi.json | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-21 23:49:49.064 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/auth/login | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-21 23:49:49.439 | INFO     | api.v1.auth.views:auth_login:69 - 用户[13917323763]登录成功 | ||||
| 2023-03-21 23:50:07.567 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-21 23:50:07.640 | ERROR    | api:all_exception_handler:100 - 全局异常 | ||||
| URL:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '26', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAxMDQ5ODksInN1YiI6IjIifQ.Klb_gwMvZ4vHMLhs7VgS5K_fvg55h3DMkyfF7SdO4lM', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'}) | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connection.py", line 174, in _new_conn | ||||
|     conn = connection.create_connection( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/util/connection.py", line 95, in create_connection | ||||
|     raise err | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/util/connection.py", line 85, in create_connection | ||||
|     sock.connect(sa) | ||||
| ConnectionRefusedError: [Errno 111] Connection refused | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 700, in urlopen | ||||
|     self._prepare_proxy(conn) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 996, in _prepare_proxy | ||||
|     conn.connect() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connection.py", line 363, in connect | ||||
|     self.sock = conn = self._new_conn() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connection.py", line 186, in _new_conn | ||||
|     raise NewConnectionError( | ||||
| urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPSConnection object at 0x7fdaf75f40a0>: Failed to establish a new connection: [Errno 111] Connection refused | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/requests/adapters.py", line 489, in send | ||||
|     resp = conn.urlopen( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 815, in urlopen | ||||
|     return self.urlopen( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 815, in urlopen | ||||
|     return self.urlopen( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 787, in urlopen | ||||
|     retries = retries.increment( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/util/retry.py", line 592, in increment | ||||
|     raise MaxRetryError(_pool, url, error or ResponseError(cause)) | ||||
| urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/chat/completions (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7fdaf75f40a0>: Failed to establish a new connection: [Errno 111] Connection refused'))) | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_requestor.py", line 516, in request_raw | ||||
|     result = _thread_context.session.request( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/requests/sessions.py", line 587, in request | ||||
|     resp = self.send(prep, **send_kwargs) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/requests/sessions.py", line 701, in send | ||||
|     r = adapter.send(request, **kwargs) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/requests/adapters.py", line 559, in send | ||||
|     raise ProxyError(e, request=request) | ||||
| requests.exceptions.ProxyError: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/chat/completions (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7fdaf75f40a0>: Failed to establish a new connection: [Errno 111] Connection refused'))) | ||||
| 
 | ||||
| The above exception was the direct cause of the following exception: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__ | ||||
|     await self.app(scope, receive, _send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__ | ||||
|     response = await self.dispatch_func(request, call_next) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request | ||||
|     response = await call_next(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next | ||||
|     raise app_exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro | ||||
|     await self.app(scope, request.receive, send_stream.send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__ | ||||
|     await self.simple_response(scope, receive, send, request_headers=headers) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__ | ||||
|     raise exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__ | ||||
|     await self.app(scope, receive, sender) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__ | ||||
|     raise e | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__ | ||||
|     await route.handle(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app | ||||
|     response = await func(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app | ||||
|     raw_response = await run_endpoint_function( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function | ||||
|     return await dependant.call(**values) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 53, in ask | ||||
|     answer = chat(chat_info.question) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/ctrl/chat.py", line 5, in chat | ||||
|     completion = openai.ChatCompletion.create( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_resources/chat_completion.py", line 25, in create | ||||
|     return super().create(*args, **kwargs) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_resources/abstract/engine_api_resource.py", line 153, in create | ||||
|     response, _, api_key = requestor.request( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_requestor.py", line 216, in request | ||||
|     result = self.request_raw( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_requestor.py", line 528, in request_raw | ||||
|     raise error.APIConnectionError( | ||||
| openai.error.APIConnectionError: Error communicating with OpenAI: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/chat/completions (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7fdaf75f40a0>: Failed to establish a new connection: [Errno 111] Connection refused'))) | ||||
| 
 | ||||
| 2023-03-21 23:50:27.269 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| @ -0,0 +1,376 @@ | ||||
| 2023-03-23 10:22:36.315 | INFO     | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/docs | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 10:22:44.876 | INFO     | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/openapi.json | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 10:23:42.389 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/auth/login | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 10:23:42.608 | ERROR    | api:all_exception_handler:100 - 全局异常 | ||||
| URL:http://127.0.0.1:8010/api/v1/auth/login | ||||
| Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '57', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'}) | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1819, in _execute_context | ||||
|     self.dialect.do_execute( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 732, in do_execute | ||||
|     cursor.execute(statement, parameters) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/cursors.py", line 148, in execute | ||||
|     result = self._query(query) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/cursors.py", line 310, in _query | ||||
|     conn.query(q) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 548, in query | ||||
|     self._affected_rows = self._read_query_result(unbuffered=unbuffered) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 775, in _read_query_result | ||||
|     result.read() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 1156, in read | ||||
|     first_packet = self.connection._read_packet() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 725, in _read_packet | ||||
|     packet.raise_for_error() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/protocol.py", line 221, in raise_for_error | ||||
|     err.raise_mysql_exception(self._data) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/err.py", line 143, in raise_mysql_exception | ||||
|     raise errorclass(errno, errval) | ||||
| pymysql.err.OperationalError: (1054, "Unknown column 'nlt_user.q_limit_day' in 'field list'") | ||||
| 
 | ||||
| The above exception was the direct cause of the following exception: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__ | ||||
|     await self.app(scope, receive, _send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__ | ||||
|     response = await self.dispatch_func(request, call_next) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request | ||||
|     response = await call_next(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next | ||||
|     raise app_exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro | ||||
|     await self.app(scope, request.receive, send_stream.send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__ | ||||
|     await self.simple_response(scope, receive, send, request_headers=headers) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__ | ||||
|     raise exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__ | ||||
|     await self.app(scope, receive, sender) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__ | ||||
|     raise e | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__ | ||||
|     await route.handle(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app | ||||
|     response = await func(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app | ||||
|     raw_response = await run_endpoint_function( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function | ||||
|     return await dependant.call(**values) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/v1/auth/views.py", line 58, in auth_login | ||||
|     user = crud_user.authenticate(db, username=user_info.username, password=user_info.password) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/v1/auth/crud/user.py", line 116, in authenticate | ||||
|     user = self.get_by_username(db, username=username) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/v1/auth/crud/user.py", line 113, in get_by_username | ||||
|     return db.query(User).filter(User.username == username).first() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2819, in first | ||||
|     return self.limit(1)._iter().first() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2903, in _iter | ||||
|     result = self.session.execute( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 1696, in execute | ||||
|     result = conn._execute_20(statement, params or {}, execution_options) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1631, in _execute_20 | ||||
|     return meth(self, args_10style, kwargs_10style, execution_options) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/sql/elements.py", line 325, in _execute_on_connection | ||||
|     return connection._execute_clauseelement( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1498, in _execute_clauseelement | ||||
|     ret = self._execute_context( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1862, in _execute_context | ||||
|     self._handle_dbapi_exception( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 2043, in _handle_dbapi_exception | ||||
|     util.raise_( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 207, in raise_ | ||||
|     raise exception | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1819, in _execute_context | ||||
|     self.dialect.do_execute( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 732, in do_execute | ||||
|     cursor.execute(statement, parameters) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/cursors.py", line 148, in execute | ||||
|     result = self._query(query) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/cursors.py", line 310, in _query | ||||
|     conn.query(q) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 548, in query | ||||
|     self._affected_rows = self._read_query_result(unbuffered=unbuffered) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 775, in _read_query_result | ||||
|     result.read() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 1156, in read | ||||
|     first_packet = self.connection._read_packet() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 725, in _read_packet | ||||
|     packet.raise_for_error() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/protocol.py", line 221, in raise_for_error | ||||
|     err.raise_mysql_exception(self._data) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/err.py", line 143, in raise_mysql_exception | ||||
|     raise errorclass(errno, errval) | ||||
| sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1054, "Unknown column 'nlt_user.q_limit_day' in 'field list'") | ||||
| [SQL: SELECT nlt_user.id AS nlt_user_id, nlt_user.create_time AS nlt_user_create_time, nlt_user.update_time AS nlt_user_update_time, nlt_user.is_delete AS nlt_user_is_delete, nlt_user.user_id AS nlt_user_user_id, nlt_user.username AS nlt_user_username, nlt_user.hashed_password AS nlt_user_hashed_password, nlt_user.nickname AS nlt_user_nickname, nlt_user.email AS nlt_user_email, nlt_user.avatar AS nlt_user_avatar, nlt_user.phone AS nlt_user_phone, nlt_user.gender AS nlt_user_gender, nlt_user.register_time AS nlt_user_register_time, nlt_user.last_login_time AS nlt_user_last_login_time, nlt_user.last_login_ip AS nlt_user_last_login_ip, nlt_user.register_ip AS nlt_user_register_ip, nlt_user.wechat_openid AS nlt_user_wechat_openid, nlt_user.country AS nlt_user_country, nlt_user.province AS nlt_user_province, nlt_user.city AS nlt_user_city, nlt_user.q_limit_day AS nlt_user_q_limit_day, nlt_user.tokens_limit AS nlt_user_tokens_limit, nlt_user.is_active AS nlt_user_is_active  | ||||
| FROM nlt_user  | ||||
| WHERE nlt_user.username = %(username_1)s  | ||||
|  LIMIT %(param_1)s] | ||||
| [parameters: {'username_1': '13917323763', 'param_1': 1}] | ||||
| (Background on this error at: https://sqlalche.me/e/14/e3q8) | ||||
| 
 | ||||
| 2023-03-23 10:26:56.423 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/auth/login | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 10:26:56.947 | INFO     | api.v1.auth.views:auth_login:69 - 用户[13917323763]登录成功 | ||||
| 2023-03-23 10:56:08.175 | INFO     | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/docs | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 10:56:08.535 | INFO     | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/openapi.json | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 10:56:13.811 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/auth/login | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 10:56:13.812 | INFO     | api.v1.auth.views:auth_login:58 - 127.0.0.1 | ||||
| 2023-03-23 10:56:14.274 | INFO     | api.v1.auth.views:auth_login:72 - 用户[13917323763]登录成功 | ||||
| 2023-03-23 11:10:51.787 | INFO     | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/docs | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 11:10:51.976 | INFO     | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/openapi.json | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 11:10:57.192 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/auth/login | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 11:10:57.728 | INFO     | api.v1.auth.views:auth_login:70 - 用户[13917323763]登录成功 | ||||
| 2023-03-23 11:56:35.406 | INFO     | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/docs | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 11:56:35.576 | INFO     | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/openapi.json | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 11:56:40.287 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/auth/login | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 11:56:41.425 | INFO     | api.v1.auth.views:auth_login:70 - 用户[13917323763]登录成功 | ||||
| 2023-03-23 11:57:16.628 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 11:57:16.802 | ERROR    | api:all_exception_handler:100 - 全局异常 | ||||
| URL:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '25', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAyMzUwMDEsInN1YiI6IjIifQ.7QDklT73W35-3Sy-1ZdM1aGFiY4644NQ9q7k_PjdmwQ', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'}) | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connection.py", line 174, in _new_conn | ||||
|     conn = connection.create_connection( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/util/connection.py", line 95, in create_connection | ||||
|     raise err | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/util/connection.py", line 85, in create_connection | ||||
|     sock.connect(sa) | ||||
| ConnectionRefusedError: [Errno 111] Connection refused | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 700, in urlopen | ||||
|     self._prepare_proxy(conn) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 996, in _prepare_proxy | ||||
|     conn.connect() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connection.py", line 363, in connect | ||||
|     self.sock = conn = self._new_conn() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connection.py", line 186, in _new_conn | ||||
|     raise NewConnectionError( | ||||
| urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPSConnection object at 0x7f18b4d5b670>: Failed to establish a new connection: [Errno 111] Connection refused | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/requests/adapters.py", line 489, in send | ||||
|     resp = conn.urlopen( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 815, in urlopen | ||||
|     return self.urlopen( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 815, in urlopen | ||||
|     return self.urlopen( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 787, in urlopen | ||||
|     retries = retries.increment( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/util/retry.py", line 592, in increment | ||||
|     raise MaxRetryError(_pool, url, error or ResponseError(cause)) | ||||
| urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/chat/completions (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f18b4d5b670>: Failed to establish a new connection: [Errno 111] Connection refused'))) | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_requestor.py", line 516, in request_raw | ||||
|     result = _thread_context.session.request( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/requests/sessions.py", line 587, in request | ||||
|     resp = self.send(prep, **send_kwargs) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/requests/sessions.py", line 701, in send | ||||
|     r = adapter.send(request, **kwargs) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/requests/adapters.py", line 559, in send | ||||
|     raise ProxyError(e, request=request) | ||||
| requests.exceptions.ProxyError: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/chat/completions (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f18b4d5b670>: Failed to establish a new connection: [Errno 111] Connection refused'))) | ||||
| 
 | ||||
| The above exception was the direct cause of the following exception: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__ | ||||
|     await self.app(scope, receive, _send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__ | ||||
|     response = await self.dispatch_func(request, call_next) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request | ||||
|     response = await call_next(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next | ||||
|     raise app_exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro | ||||
|     await self.app(scope, request.receive, send_stream.send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__ | ||||
|     await self.simple_response(scope, receive, send, request_headers=headers) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__ | ||||
|     raise exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__ | ||||
|     await self.app(scope, receive, sender) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__ | ||||
|     raise e | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__ | ||||
|     await route.handle(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app | ||||
|     response = await func(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app | ||||
|     raw_response = await run_endpoint_function( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function | ||||
|     return await dependant.call(**values) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 56, in ask | ||||
|     answer = chat(chat_info.question) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/ctrl/chat.py", line 5, in chat | ||||
|     completion = openai.ChatCompletion.create( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_resources/chat_completion.py", line 25, in create | ||||
|     return super().create(*args, **kwargs) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_resources/abstract/engine_api_resource.py", line 153, in create | ||||
|     response, _, api_key = requestor.request( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_requestor.py", line 216, in request | ||||
|     result = self.request_raw( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_requestor.py", line 528, in request_raw | ||||
|     raise error.APIConnectionError( | ||||
| openai.error.APIConnectionError: Error communicating with OpenAI: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/chat/completions (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f18b4d5b670>: Failed to establish a new connection: [Errno 111] Connection refused'))) | ||||
| 
 | ||||
| 2023-03-23 11:57:40.875 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 11:57:43.645 | ERROR    | api:all_exception_handler:100 - 全局异常 | ||||
| URL:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '25', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAyMzUwMDEsInN1YiI6IjIifQ.7QDklT73W35-3Sy-1ZdM1aGFiY4644NQ9q7k_PjdmwQ', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'}) | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1819, in _execute_context | ||||
|     self.dialect.do_execute( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 732, in do_execute | ||||
|     cursor.execute(statement, parameters) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/cursors.py", line 148, in execute | ||||
|     result = self._query(query) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/cursors.py", line 310, in _query | ||||
|     conn.query(q) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 548, in query | ||||
|     self._affected_rows = self._read_query_result(unbuffered=unbuffered) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 775, in _read_query_result | ||||
|     result.read() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 1156, in read | ||||
|     first_packet = self.connection._read_packet() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 725, in _read_packet | ||||
|     packet.raise_for_error() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/protocol.py", line 221, in raise_for_error | ||||
|     err.raise_mysql_exception(self._data) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/err.py", line 143, in raise_mysql_exception | ||||
|     raise errorclass(errno, errval) | ||||
| pymysql.err.OperationalError: (1525, "Incorrect DATE value: 'DATE'") | ||||
| 
 | ||||
| The above exception was the direct cause of the following exception: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__ | ||||
|     await self.app(scope, receive, _send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__ | ||||
|     response = await self.dispatch_func(request, call_next) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request | ||||
|     response = await call_next(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next | ||||
|     raise app_exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro | ||||
|     await self.app(scope, request.receive, send_stream.send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__ | ||||
|     await self.simple_response(scope, receive, send, request_headers=headers) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__ | ||||
|     raise exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__ | ||||
|     await self.app(scope, receive, sender) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__ | ||||
|     raise e | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__ | ||||
|     await route.handle(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app | ||||
|     response = await func(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app | ||||
|     raw_response = await run_endpoint_function( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function | ||||
|     return await dependant.call(**values) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 58, in ask | ||||
|     crud_chat.update_chat_count(db, user = current_user) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/crud/chat.py", line 24, in update_chat_count | ||||
|     chat_count_day = db.query(ChatCountDay).filter(and_(ChatCountDay.user_id == user.user_id, ChatCountDay.q_time == q_date)).first() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2819, in first | ||||
|     return self.limit(1)._iter().first() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2903, in _iter | ||||
|     result = self.session.execute( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 1696, in execute | ||||
|     result = conn._execute_20(statement, params or {}, execution_options) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1631, in _execute_20 | ||||
|     return meth(self, args_10style, kwargs_10style, execution_options) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/sql/elements.py", line 325, in _execute_on_connection | ||||
|     return connection._execute_clauseelement( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1498, in _execute_clauseelement | ||||
|     ret = self._execute_context( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1862, in _execute_context | ||||
|     self._handle_dbapi_exception( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 2043, in _handle_dbapi_exception | ||||
|     util.raise_( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 207, in raise_ | ||||
|     raise exception | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1819, in _execute_context | ||||
|     self.dialect.do_execute( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 732, in do_execute | ||||
|     cursor.execute(statement, parameters) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/cursors.py", line 148, in execute | ||||
|     result = self._query(query) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/cursors.py", line 310, in _query | ||||
|     conn.query(q) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 548, in query | ||||
|     self._affected_rows = self._read_query_result(unbuffered=unbuffered) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 775, in _read_query_result | ||||
|     result.read() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 1156, in read | ||||
|     first_packet = self.connection._read_packet() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 725, in _read_packet | ||||
|     packet.raise_for_error() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/protocol.py", line 221, in raise_for_error | ||||
|     err.raise_mysql_exception(self._data) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/err.py", line 143, in raise_mysql_exception | ||||
|     raise errorclass(errno, errval) | ||||
| sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1525, "Incorrect DATE value: 'DATE'") | ||||
| [SQL: SELECT nlt_chat_count_day.id AS nlt_chat_count_day_id, nlt_chat_count_day.create_time AS nlt_chat_count_day_create_time, nlt_chat_count_day.update_time AS nlt_chat_count_day_update_time, nlt_chat_count_day.is_delete AS nlt_chat_count_day_is_delete, nlt_chat_count_day.user_id AS nlt_chat_count_day_user_id, nlt_chat_count_day.q_time AS nlt_chat_count_day_q_time, nlt_chat_count_day.q_times AS nlt_chat_count_day_q_times  | ||||
| FROM nlt_chat_count_day  | ||||
| WHERE nlt_chat_count_day.user_id = %(user_id_1)s AND nlt_chat_count_day.q_time = %(q_time_1)s  | ||||
|  LIMIT %(param_1)s] | ||||
| [parameters: {'user_id_1': '899a7ed3a88f46aaacd973ef20166ced', 'q_time_1': Date(), 'param_1': 1}] | ||||
| (Background on this error at: https://sqlalche.me/e/14/e3q8) | ||||
| 
 | ||||
| @ -0,0 +1,904 @@ | ||||
| 2023-03-23 12:16:52.924 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 12:16:55.764 | ERROR    | api:all_exception_handler:100 - 全局异常 | ||||
| URL:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '25', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAyMzUwMDEsInN1YiI6IjIifQ.7QDklT73W35-3Sy-1ZdM1aGFiY4644NQ9q7k_PjdmwQ', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'}) | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1819, in _execute_context | ||||
|     self.dialect.do_execute( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 732, in do_execute | ||||
|     cursor.execute(statement, parameters) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/cursors.py", line 148, in execute | ||||
|     result = self._query(query) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/cursors.py", line 310, in _query | ||||
|     conn.query(q) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 548, in query | ||||
|     self._affected_rows = self._read_query_result(unbuffered=unbuffered) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 775, in _read_query_result | ||||
|     result.read() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 1156, in read | ||||
|     first_packet = self.connection._read_packet() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 725, in _read_packet | ||||
|     packet.raise_for_error() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/protocol.py", line 221, in raise_for_error | ||||
|     err.raise_mysql_exception(self._data) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/err.py", line 143, in raise_mysql_exception | ||||
|     raise errorclass(errno, errval) | ||||
| pymysql.err.OperationalError: (1525, "Incorrect DATE value: 'DATE'") | ||||
| 
 | ||||
| The above exception was the direct cause of the following exception: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__ | ||||
|     await self.app(scope, receive, _send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__ | ||||
|     response = await self.dispatch_func(request, call_next) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request | ||||
|     response = await call_next(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next | ||||
|     raise app_exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro | ||||
|     await self.app(scope, request.receive, send_stream.send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__ | ||||
|     await self.simple_response(scope, receive, send, request_headers=headers) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__ | ||||
|     raise exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__ | ||||
|     await self.app(scope, receive, sender) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__ | ||||
|     raise e | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__ | ||||
|     await route.handle(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app | ||||
|     response = await func(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app | ||||
|     raw_response = await run_endpoint_function( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function | ||||
|     return await dependant.call(**values) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 58, in ask | ||||
|     crud_chat.update_chat_count(db, user = current_user) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/crud/chat.py", line 24, in update_chat_count | ||||
|     chat_count_day = db.query(ChatCountDay).filter(and_(ChatCountDay.user_id == user.user_id, ChatCountDay.q_time == q_date)).first() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2819, in first | ||||
|     return self.limit(1)._iter().first() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2903, in _iter | ||||
|     result = self.session.execute( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 1696, in execute | ||||
|     result = conn._execute_20(statement, params or {}, execution_options) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1631, in _execute_20 | ||||
|     return meth(self, args_10style, kwargs_10style, execution_options) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/sql/elements.py", line 325, in _execute_on_connection | ||||
|     return connection._execute_clauseelement( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1498, in _execute_clauseelement | ||||
|     ret = self._execute_context( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1862, in _execute_context | ||||
|     self._handle_dbapi_exception( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 2043, in _handle_dbapi_exception | ||||
|     util.raise_( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 207, in raise_ | ||||
|     raise exception | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1819, in _execute_context | ||||
|     self.dialect.do_execute( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 732, in do_execute | ||||
|     cursor.execute(statement, parameters) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/cursors.py", line 148, in execute | ||||
|     result = self._query(query) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/cursors.py", line 310, in _query | ||||
|     conn.query(q) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 548, in query | ||||
|     self._affected_rows = self._read_query_result(unbuffered=unbuffered) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 775, in _read_query_result | ||||
|     result.read() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 1156, in read | ||||
|     first_packet = self.connection._read_packet() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 725, in _read_packet | ||||
|     packet.raise_for_error() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/protocol.py", line 221, in raise_for_error | ||||
|     err.raise_mysql_exception(self._data) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/err.py", line 143, in raise_mysql_exception | ||||
|     raise errorclass(errno, errval) | ||||
| sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1525, "Incorrect DATE value: 'DATE'") | ||||
| [SQL: SELECT nlt_chat_count_day.id AS nlt_chat_count_day_id, nlt_chat_count_day.create_time AS nlt_chat_count_day_create_time, nlt_chat_count_day.update_time AS nlt_chat_count_day_update_time, nlt_chat_count_day.is_delete AS nlt_chat_count_day_is_delete, nlt_chat_count_day.user_id AS nlt_chat_count_day_user_id, nlt_chat_count_day.q_time AS nlt_chat_count_day_q_time, nlt_chat_count_day.q_times AS nlt_chat_count_day_q_times  | ||||
| FROM nlt_chat_count_day  | ||||
| WHERE nlt_chat_count_day.user_id = %(user_id_1)s AND nlt_chat_count_day.q_time = %(q_time_1)s  | ||||
|  LIMIT %(param_1)s] | ||||
| [parameters: {'user_id_1': '899a7ed3a88f46aaacd973ef20166ced', 'q_time_1': Date(), 'param_1': 1}] | ||||
| (Background on this error at: https://sqlalche.me/e/14/e3q8) | ||||
| 
 | ||||
| 2023-03-23 12:26:44.878 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 12:46:06.681 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 12:47:38.758 | INFO     | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/docs | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 12:47:39.289 | INFO     | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/openapi.json | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 12:48:10.680 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 12:48:13.346 | ERROR    | api:all_exception_handler:100 - 全局异常 | ||||
| URL:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '26', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAyMzUwMDEsInN1YiI6IjIifQ.7QDklT73W35-3Sy-1ZdM1aGFiY4644NQ9q7k_PjdmwQ', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'}) | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 81, in receive | ||||
|     return self.receive_nowait() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 76, in receive_nowait | ||||
|     raise WouldBlock | ||||
| anyio.WouldBlock | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 41, in call_next | ||||
|     message = await recv_stream.receive() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 101, in receive | ||||
|     raise EndOfStream | ||||
| anyio.EndOfStream | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__ | ||||
|     await self.app(scope, receive, _send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__ | ||||
|     response = await self.dispatch_func(request, call_next) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request | ||||
|     response = await call_next(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next | ||||
|     raise app_exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro | ||||
|     await self.app(scope, request.receive, send_stream.send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__ | ||||
|     await self.simple_response(scope, receive, send, request_headers=headers) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__ | ||||
|     raise exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__ | ||||
|     await self.app(scope, receive, sender) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__ | ||||
|     raise e | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__ | ||||
|     await route.handle(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app | ||||
|     response = await func(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app | ||||
|     raw_response = await run_endpoint_function( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function | ||||
|     return await dependant.call(**values) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 59, in ask | ||||
|     crud_chat.update_chat_count(db, user = current_user) | ||||
| TypeError: CRUDChat.update_chat_count() takes 1 positional argument but 2 positional arguments (and 1 keyword-only argument) were given | ||||
| 
 | ||||
| 2023-03-23 12:49:32.139 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 12:49:35.845 | ERROR    | api:all_exception_handler:100 - 全局异常 | ||||
| URL:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '26', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAyMzUwMDEsInN1YiI6IjIifQ.7QDklT73W35-3Sy-1ZdM1aGFiY4644NQ9q7k_PjdmwQ', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'}) | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 81, in receive | ||||
|     return self.receive_nowait() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 76, in receive_nowait | ||||
|     raise WouldBlock | ||||
| anyio.WouldBlock | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 41, in call_next | ||||
|     message = await recv_stream.receive() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 101, in receive | ||||
|     raise EndOfStream | ||||
| anyio.EndOfStream | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__ | ||||
|     await self.app(scope, receive, _send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__ | ||||
|     response = await self.dispatch_func(request, call_next) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request | ||||
|     response = await call_next(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next | ||||
|     raise app_exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro | ||||
|     await self.app(scope, request.receive, send_stream.send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__ | ||||
|     await self.simple_response(scope, receive, send, request_headers=headers) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__ | ||||
|     raise exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__ | ||||
|     await self.app(scope, receive, sender) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__ | ||||
|     raise e | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__ | ||||
|     await route.handle(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app | ||||
|     response = await func(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app | ||||
|     raw_response = await run_endpoint_function( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function | ||||
|     return await dependant.call(**values) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 59, in ask | ||||
|     crud_chat.update_chat_count(db, user = current_user) | ||||
| TypeError: CRUDChat.update_chat_count() got multiple values for argument 'user' | ||||
| 
 | ||||
| 2023-03-23 12:51:58.105 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 12:52:00.557 | ERROR    | api:all_exception_handler:100 - 全局异常 | ||||
| URL:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '26', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAyMzUwMDEsInN1YiI6IjIifQ.7QDklT73W35-3Sy-1ZdM1aGFiY4644NQ9q7k_PjdmwQ', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'}) | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 81, in receive | ||||
|     return self.receive_nowait() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 76, in receive_nowait | ||||
|     raise WouldBlock | ||||
| anyio.WouldBlock | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 41, in call_next | ||||
|     message = await recv_stream.receive() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 101, in receive | ||||
|     raise EndOfStream | ||||
| anyio.EndOfStream | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__ | ||||
|     await self.app(scope, receive, _send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__ | ||||
|     response = await self.dispatch_func(request, call_next) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request | ||||
|     response = await call_next(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next | ||||
|     raise app_exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro | ||||
|     await self.app(scope, request.receive, send_stream.send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__ | ||||
|     await self.simple_response(scope, receive, send, request_headers=headers) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__ | ||||
|     raise exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__ | ||||
|     await self.app(scope, receive, sender) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__ | ||||
|     raise e | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__ | ||||
|     await route.handle(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app | ||||
|     response = await func(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app | ||||
|     raw_response = await run_endpoint_function( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function | ||||
|     return await dependant.call(**values) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 59, in ask | ||||
|     crud_chat.update_chat_count(db, current_user) | ||||
| TypeError: CRUDChat.update_chat_count() takes 2 positional arguments but 3 were given | ||||
| 
 | ||||
| 2023-03-23 12:52:34.618 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 12:52:38.269 | ERROR    | api:all_exception_handler:100 - 全局异常 | ||||
| URL:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '26', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAyMzUwMDEsInN1YiI6IjIifQ.7QDklT73W35-3Sy-1ZdM1aGFiY4644NQ9q7k_PjdmwQ', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'}) | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 81, in receive | ||||
|     return self.receive_nowait() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 76, in receive_nowait | ||||
|     raise WouldBlock | ||||
| anyio.WouldBlock | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 41, in call_next | ||||
|     message = await recv_stream.receive() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 101, in receive | ||||
|     raise EndOfStream | ||||
| anyio.EndOfStream | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__ | ||||
|     await self.app(scope, receive, _send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__ | ||||
|     response = await self.dispatch_func(request, call_next) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request | ||||
|     response = await call_next(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next | ||||
|     raise app_exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro | ||||
|     await self.app(scope, request.receive, send_stream.send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__ | ||||
|     await self.simple_response(scope, receive, send, request_headers=headers) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__ | ||||
|     raise exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__ | ||||
|     await self.app(scope, receive, sender) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__ | ||||
|     raise e | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__ | ||||
|     await route.handle(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app | ||||
|     response = await func(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app | ||||
|     raw_response = await run_endpoint_function( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function | ||||
|     return await dependant.call(**values) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 59, in ask | ||||
|     crud_chat.update_chat_count(db, current_user) | ||||
| TypeError: CRUDChat.update_chat_count() takes 1 positional argument but 3 were given | ||||
| 
 | ||||
| 2023-03-23 12:52:53.067 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 12:53:21.738 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 12:54:03.396 | INFO     | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/docs | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 12:54:03.645 | INFO     | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/openapi.json | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 12:54:17.562 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 12:54:19.977 | ERROR    | api:all_exception_handler:100 - 全局异常 | ||||
| URL:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '26', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAyMzUwMDEsInN1YiI6IjIifQ.7QDklT73W35-3Sy-1ZdM1aGFiY4644NQ9q7k_PjdmwQ', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'}) | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 81, in receive | ||||
|     return self.receive_nowait() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 76, in receive_nowait | ||||
|     raise WouldBlock | ||||
| anyio.WouldBlock | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 41, in call_next | ||||
|     message = await recv_stream.receive() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 101, in receive | ||||
|     raise EndOfStream | ||||
| anyio.EndOfStream | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__ | ||||
|     await self.app(scope, receive, _send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__ | ||||
|     response = await self.dispatch_func(request, call_next) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request | ||||
|     response = await call_next(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next | ||||
|     raise app_exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro | ||||
|     await self.app(scope, request.receive, send_stream.send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__ | ||||
|     await self.simple_response(scope, receive, send, request_headers=headers) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__ | ||||
|     raise exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__ | ||||
|     await self.app(scope, receive, sender) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__ | ||||
|     raise e | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__ | ||||
|     await route.handle(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app | ||||
|     response = await func(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app | ||||
|     raw_response = await run_endpoint_function( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function | ||||
|     return await dependant.call(**values) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 59, in ask | ||||
|     crud_chat.update_chat_count(db, current_user) | ||||
| TypeError: CRUDChat.update_chat_count() takes 2 positional arguments but 3 were given | ||||
| 
 | ||||
| 2023-03-23 12:55:22.340 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 12:56:51.467 | INFO     | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/docs | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 12:56:51.672 | INFO     | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/openapi.json | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 12:57:00.073 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 12:57:03.113 | ERROR    | api:all_exception_handler:100 - 全局异常 | ||||
| URL:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '26', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAyMzUwMDEsInN1YiI6IjIifQ.7QDklT73W35-3Sy-1ZdM1aGFiY4644NQ9q7k_PjdmwQ', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'}) | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 81, in receive | ||||
|     return self.receive_nowait() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 76, in receive_nowait | ||||
|     raise WouldBlock | ||||
| anyio.WouldBlock | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 41, in call_next | ||||
|     message = await recv_stream.receive() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 101, in receive | ||||
|     raise EndOfStream | ||||
| anyio.EndOfStream | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__ | ||||
|     await self.app(scope, receive, _send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__ | ||||
|     response = await self.dispatch_func(request, call_next) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request | ||||
|     response = await call_next(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next | ||||
|     raise app_exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro | ||||
|     await self.app(scope, request.receive, send_stream.send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__ | ||||
|     await self.simple_response(scope, receive, send, request_headers=headers) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__ | ||||
|     raise exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__ | ||||
|     await self.app(scope, receive, sender) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__ | ||||
|     raise e | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__ | ||||
|     await route.handle(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app | ||||
|     response = await func(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app | ||||
|     raw_response = await run_endpoint_function( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function | ||||
|     return await dependant.call(**values) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 59, in ask | ||||
|     crud_chat.update_chat_count(db=db, user=current_user) | ||||
| TypeError: CRUDChat.update_chat_count() got multiple values for argument 'db' | ||||
| 
 | ||||
| 2023-03-23 12:57:24.327 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 12:57:27.473 | ERROR    | api:all_exception_handler:100 - 全局异常 | ||||
| URL:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '26', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAyMzUwMDEsInN1YiI6IjIifQ.7QDklT73W35-3Sy-1ZdM1aGFiY4644NQ9q7k_PjdmwQ', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'}) | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 81, in receive | ||||
|     return self.receive_nowait() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 76, in receive_nowait | ||||
|     raise WouldBlock | ||||
| anyio.WouldBlock | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 41, in call_next | ||||
|     message = await recv_stream.receive() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 101, in receive | ||||
|     raise EndOfStream | ||||
| anyio.EndOfStream | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__ | ||||
|     await self.app(scope, receive, _send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__ | ||||
|     response = await self.dispatch_func(request, call_next) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request | ||||
|     response = await call_next(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next | ||||
|     raise app_exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro | ||||
|     await self.app(scope, request.receive, send_stream.send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__ | ||||
|     await self.simple_response(scope, receive, send, request_headers=headers) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__ | ||||
|     raise exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__ | ||||
|     await self.app(scope, receive, sender) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__ | ||||
|     raise e | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__ | ||||
|     await route.handle(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app | ||||
|     response = await func(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app | ||||
|     raw_response = await run_endpoint_function( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function | ||||
|     return await dependant.call(**values) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 59, in ask | ||||
|     crud_chat.update_chat_count(db, user=current_user) | ||||
| TypeError: CRUDChat.update_chat_count() got multiple values for argument 'user' | ||||
| 
 | ||||
| 2023-03-23 12:57:40.478 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 12:57:44.591 | ERROR    | api:all_exception_handler:100 - 全局异常 | ||||
| URL:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '26', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAyMzUwMDEsInN1YiI6IjIifQ.7QDklT73W35-3Sy-1ZdM1aGFiY4644NQ9q7k_PjdmwQ', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'}) | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 81, in receive | ||||
|     return self.receive_nowait() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 76, in receive_nowait | ||||
|     raise WouldBlock | ||||
| anyio.WouldBlock | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 41, in call_next | ||||
|     message = await recv_stream.receive() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 101, in receive | ||||
|     raise EndOfStream | ||||
| anyio.EndOfStream | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__ | ||||
|     await self.app(scope, receive, _send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__ | ||||
|     response = await self.dispatch_func(request, call_next) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request | ||||
|     response = await call_next(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next | ||||
|     raise app_exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro | ||||
|     await self.app(scope, request.receive, send_stream.send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__ | ||||
|     await self.simple_response(scope, receive, send, request_headers=headers) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__ | ||||
|     raise exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__ | ||||
|     await self.app(scope, receive, sender) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__ | ||||
|     raise e | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__ | ||||
|     await route.handle(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app | ||||
|     response = await func(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app | ||||
|     raw_response = await run_endpoint_function( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function | ||||
|     return await dependant.call(**values) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 59, in ask | ||||
|     crud_chat.update_chat_count(db, current_user) | ||||
| TypeError: CRUDChat.update_chat_count() takes 2 positional arguments but 3 were given | ||||
| 
 | ||||
| 2023-03-23 12:59:23.358 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 13:11:52.024 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 13:11:52.480 | ERROR    | api:all_exception_handler:100 - 全局异常 | ||||
| URL:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '44', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAyMzUwMDEsInN1YiI6IjIifQ.7QDklT73W35-3Sy-1ZdM1aGFiY4644NQ9q7k_PjdmwQ', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'}) | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 81, in receive | ||||
|     return self.receive_nowait() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 76, in receive_nowait | ||||
|     raise WouldBlock | ||||
| anyio.WouldBlock | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 41, in call_next | ||||
|     message = await recv_stream.receive() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 101, in receive | ||||
|     raise EndOfStream | ||||
| anyio.EndOfStream | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__ | ||||
|     await self.app(scope, receive, _send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__ | ||||
|     response = await self.dispatch_func(request, call_next) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request | ||||
|     response = await call_next(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next | ||||
|     raise app_exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro | ||||
|     await self.app(scope, request.receive, send_stream.send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__ | ||||
|     await self.simple_response(scope, receive, send, request_headers=headers) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__ | ||||
|     raise exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__ | ||||
|     await self.app(scope, receive, sender) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__ | ||||
|     raise e | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__ | ||||
|     await route.handle(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app | ||||
|     response = await func(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app | ||||
|     raw_response = await run_endpoint_function( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function | ||||
|     return await dependant.call(**values) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 58, in ask | ||||
|     q_times = crud_chat.get_chat_count() | ||||
| TypeError: CRUDChat.get_chat_count() missing 2 required positional arguments: 'db' and 'user' | ||||
| 
 | ||||
| 2023-03-23 13:12:36.709 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 13:12:36.954 | ERROR    | api:all_exception_handler:100 - 全局异常 | ||||
| URL:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '44', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAyMzUwMDEsInN1YiI6IjIifQ.7QDklT73W35-3Sy-1ZdM1aGFiY4644NQ9q7k_PjdmwQ', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'}) | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 81, in receive | ||||
|     return self.receive_nowait() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 76, in receive_nowait | ||||
|     raise WouldBlock | ||||
| anyio.WouldBlock | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 41, in call_next | ||||
|     message = await recv_stream.receive() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 101, in receive | ||||
|     raise EndOfStream | ||||
| anyio.EndOfStream | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__ | ||||
|     await self.app(scope, receive, _send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__ | ||||
|     response = await self.dispatch_func(request, call_next) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request | ||||
|     response = await call_next(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next | ||||
|     raise app_exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro | ||||
|     await self.app(scope, request.receive, send_stream.send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__ | ||||
|     await self.simple_response(scope, receive, send, request_headers=headers) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__ | ||||
|     raise exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__ | ||||
|     await self.app(scope, receive, sender) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__ | ||||
|     raise e | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__ | ||||
|     await route.handle(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app | ||||
|     response = await func(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app | ||||
|     raw_response = await run_endpoint_function( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function | ||||
|     return await dependant.call(**values) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 61, in ask | ||||
|     if ((q_limit_day > 0 and q_times >= q_limit_day) or q_limit_day < 0): | ||||
| TypeError: '>' not supported between instances of 'NoneType' and 'int' | ||||
| 
 | ||||
| 2023-03-23 13:14:20.494 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 13:16:00.033 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 13:16:26.872 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 13:16:35.009 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 13:22:02.077 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/auth/login | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 13:22:02.697 | INFO     | api.v1.auth.views:auth_login:73 - 用户[13917323763]登录成功 | ||||
| 2023-03-23 13:22:13.849 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 13:22:39.228 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/auth/login | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 13:22:39.797 | INFO     | api.v1.auth.views:auth_login:73 - 用户[13916742981]登录成功 | ||||
| 2023-03-23 13:22:57.879 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 13:24:50.740 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/auth/login | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 13:24:51.307 | INFO     | api.v1.auth.views:auth_login:73 - 用户[13917323763]登录成功 | ||||
| 2023-03-23 13:25:03.582 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 13:31:00.457 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/auth/login | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 13:31:01.100 | INFO     | api.v1.auth.views:auth_login:73 - 用户[13917323763]登录成功 | ||||
| 2023-03-23 13:31:19.751 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 13:31:52.733 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/auth/login | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 13:31:53.259 | INFO     | api.v1.auth.views:auth_login:73 - 用户[13916742981]登录成功 | ||||
| 2023-03-23 13:32:13.247 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 14:22:14.146 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 14:25:39.347 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 14:34:06.108 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 14:34:38.505 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 14:34:39.704 | ERROR    | api:all_exception_handler:100 - 全局异常 | ||||
| URL:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '48', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAyNDA3MTMsInN1YiI6IjUifQ.XN2aGfqBllHuSaUfzwZJ-ZDHKsQ5wQ0yjr6wwNTNn2I', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'}) | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 81, in receive | ||||
|     return self.receive_nowait() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 76, in receive_nowait | ||||
|     raise WouldBlock | ||||
| anyio.WouldBlock | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 41, in call_next | ||||
|     message = await recv_stream.receive() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 101, in receive | ||||
|     raise EndOfStream | ||||
| anyio.EndOfStream | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__ | ||||
|     await self.app(scope, receive, _send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__ | ||||
|     response = await self.dispatch_func(request, call_next) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request | ||||
|     response = await call_next(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next | ||||
|     raise app_exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro | ||||
|     await self.app(scope, request.receive, send_stream.send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__ | ||||
|     await self.simple_response(scope, receive, send, request_headers=headers) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__ | ||||
|     raise exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__ | ||||
|     await self.app(scope, receive, sender) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__ | ||||
|     raise e | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__ | ||||
|     await route.handle(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app | ||||
|     response = await func(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app | ||||
|     raw_response = await run_endpoint_function( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function | ||||
|     return await dependant.call(**values) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 77, in ask | ||||
|     answer = chat(key, chat_info.question, tokens_limit) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/ctrl/chat.py", line 5, in chat | ||||
|     completion = openai.ChatCompletion.create( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_resources/chat_completion.py", line 25, in create | ||||
|     return super().create(*args, **kwargs) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_resources/abstract/engine_api_resource.py", line 153, in create | ||||
|     response, _, api_key = requestor.request( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_requestor.py", line 226, in request | ||||
|     resp, got_stream = self._interpret_response(result, stream) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_requestor.py", line 619, in _interpret_response | ||||
|     self._interpret_response_line( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_requestor.py", line 682, in _interpret_response_line | ||||
|     raise self.handle_error_response( | ||||
| openai.error.InvalidRequestError: This model's maximum context length is 4097 tokens. However, you requested 10020 tokens (20 in the messages, 10000 in the completion). Please reduce the length of the messages or completion. | ||||
| 
 | ||||
| 2023-03-23 14:37:02.244 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 14:39:50.021 | INFO     | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/docs | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 14:39:50.427 | INFO     | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/openapi.json | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 14:40:10.634 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-23 14:42:57.728 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| @ -0,0 +1,77 @@ | ||||
| 2023-03-24 11:21:33.249 | INFO     | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/docs | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 11:21:36.393 | INFO     | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/openapi.json | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 11:21:50.795 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/auth/login | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 11:21:51.682 | INFO     | api.v1.auth.views:auth_login:73 - 用户[13917323763]登录成功 | ||||
| 2023-03-24 11:22:08.783 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 11:22:09.123 | ERROR    | api:all_exception_handler:100 - 全局异常 | ||||
| URL:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '26', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAzMTkzMTEsInN1YiI6IjIifQ.Oau8jQLeXTZNd7SImtQkQztdhKjpOn6CBbHbfcpu8fE', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'}) | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 81, in receive | ||||
|     return self.receive_nowait() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 76, in receive_nowait | ||||
|     raise WouldBlock | ||||
| anyio.WouldBlock | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 41, in call_next | ||||
|     message = await recv_stream.receive() | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 101, in receive | ||||
|     raise EndOfStream | ||||
| anyio.EndOfStream | ||||
| 
 | ||||
| During handling of the above exception, another exception occurred: | ||||
| 
 | ||||
| Traceback (most recent call last): | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__ | ||||
|     await self.app(scope, receive, _send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__ | ||||
|     response = await self.dispatch_func(request, call_next) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request | ||||
|     response = await call_next(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next | ||||
|     raise app_exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro | ||||
|     await self.app(scope, request.receive, send_stream.send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__ | ||||
|     await self.simple_response(scope, receive, send, request_headers=headers) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__ | ||||
|     raise exc | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__ | ||||
|     await self.app(scope, receive, sender) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__ | ||||
|     raise e | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__ | ||||
|     await route.handle(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle | ||||
|     await self.app(scope, receive, send) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app | ||||
|     response = await func(request) | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app | ||||
|     raw_response = await run_endpoint_function( | ||||
|   File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function | ||||
|     return await dependant.call(**values) | ||||
|   File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 79, in ask | ||||
|     answer = ctrl_chat.chat(key, chat_info.question, tokens_limit) | ||||
| TypeError: CTRLChat.chat() takes 3 positional arguments but 4 were given | ||||
| 
 | ||||
| 2023-03-24 11:22:28.858 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 11:22:42.693 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| @ -0,0 +1,184 @@ | ||||
| 2023-03-24 12:53:52.918 | INFO     | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/docs | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 12:53:53.438 | INFO     | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/openapi.json | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 12:54:08.121 | INFO     | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/views/Login.html | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 12:54:08.361 | INFO     | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/favicon.ico | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:03:38.152 | INFO     | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/docs | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:03:38.360 | INFO     | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/openapi.json | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:11:15.583 | INFO     | api:logger_request:140 - 访问记录:OPTIONS url:http://127.0.0.1:8010/api/v1/auth/login | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:11:15.591 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/auth/login | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:11:20.246 | INFO     | api.v1.auth.views:auth_login:73 - 用户[13917323763]登录成功 | ||||
| 2023-03-24 13:11:27.111 | INFO     | api:logger_request:140 - 访问记录:OPTIONS url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:11:27.121 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:11:50.724 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:09.163 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:12.053 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:12.054 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:12.054 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:12.055 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:23.149 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:23.435 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:23.503 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:23.816 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:23.991 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:24.212 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:24.361 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:24.480 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:24.611 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:24.924 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:24.964 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:25.331 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:25.560 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:25.781 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:28.620 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:28.803 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:29.028 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:29.162 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:29.419 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:29.509 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:29.736 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:29.869 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:29.985 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:30.178 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:30.359 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:30.575 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:30.608 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:30.829 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:31.064 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:31.283 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:31.383 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:31.599 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:31.707 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:31.952 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:32.036 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:32.175 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:32.355 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:32.571 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:32.672 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:32.881 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:33.010 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:33.113 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:33.249 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:33.455 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| 2023-03-24 13:13:33.569 | INFO     | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask | ||||
| headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 | ||||
| IP:127.0.0.1 | ||||
| @ -0,0 +1,16 @@ | ||||
| # !/usr/bin/env python3 | ||||
| # -*- encoding : utf-8 -*- | ||||
| # @Filename    : main.py | ||||
| # @Software    : VSCode | ||||
| # @Datetime    : 2021/11/03 16:59:04 | ||||
| # @Author      : leo liu | ||||
| # @Version     : 1.0 | ||||
| # @Description : | ||||
| 
 | ||||
| from api import create_app | ||||
| 
 | ||||
| app = create_app() | ||||
| 
 | ||||
| if __name__ == "__main__": | ||||
|     import uvicorn | ||||
|     uvicorn.run(app='main:app', host="127.0.0.1", port=8010, reload=True, debug=True) | ||||
| @ -0,0 +1,18 @@ | ||||
| # !/usr/bin/env python3 | ||||
| # -*- encoding : utf-8 -*- | ||||
| # @Filename    : __init__.py | ||||
| # @Software    : VSCode | ||||
| # @Datetime    : 2021/11/04 21:30:46 | ||||
| # @Author      : leo liu | ||||
| # @Version     : 1.0 | ||||
| # @Description : | ||||
| 
 | ||||
| from db.base_class import Base | ||||
| from db.session import engine | ||||
| 
 | ||||
| from .auth import User, Role, user_role, LoginHistory | ||||
| from .menu import Menu, role_menu | ||||
| from .chat import ChatHistory, ChatCountDay | ||||
| from .settings import Settings | ||||
| 
 | ||||
| Base.metadata.create_all(engine) | ||||
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								| @ -0,0 +1,79 @@ | ||||
| # !/usr/bin/env python3 | ||||
| # -*- encoding : utf-8 -*- | ||||
| # @Filename    : user.py | ||||
| # @Software    : VSCode | ||||
| # @Datetime    : 2021/11/04 21:33:10 | ||||
| # @Author      : leo liu | ||||
| # @Version     : 1.0 | ||||
| # @Description : | ||||
| 
 | ||||
| """ | ||||
| 用户模型 | ||||
| """ | ||||
| 
 | ||||
| from datetime import datetime | ||||
| from sqlalchemy import Column, Integer, VARCHAR, SmallInteger, DateTime, ForeignKey, Table | ||||
| from sqlalchemy.orm import relationship | ||||
| from sqlalchemy.sql import func | ||||
| 
 | ||||
| from db.base_class import Base, gen_uuid | ||||
| 
 | ||||
| user_role = Table( | ||||
|     "nlt_userrole", | ||||
|     Base.metadata, | ||||
|     Column("id", Integer, unique=True, index=True, primary_key=True, autoincrement=True, comment="ID"), | ||||
|     Column("user_id", VARCHAR(32), ForeignKey("nlt_user.user_id"), nullable=False, primary_key=True, comment="用户id"), | ||||
|     Column("role_id", VARCHAR(32), ForeignKey("nlt_role.role_id"), nullable=False, primary_key=True, comment="角色id"), | ||||
|     Column("create_time", DateTime, default=datetime.now, server_default=func.now(), comment="创建时间") | ||||
| ) | ||||
| 
 | ||||
| class User(Base): | ||||
|     """ | ||||
|     用户表 | ||||
|     """ | ||||
|     __tablename__ = "nlt_user" | ||||
|     user_id = Column(VARCHAR(32), default=gen_uuid, index=True, primary_key=True, unique=True, comment="用户id") | ||||
|     username = Column(VARCHAR(128), nullable=False, unique=True, comment="用户名(不可更改)") | ||||
|     hashed_password = Column(VARCHAR(128), nullable=False, comment="密码") | ||||
|     nickname = Column(VARCHAR(128), comment="用户昵称(显示用可更改)") | ||||
|     email = Column(VARCHAR(128), unique=True, comment="邮箱") | ||||
|     avatar = Column(VARCHAR(256), nullable=True, comment="用户头像") | ||||
|     phone = Column(VARCHAR(16), unique=True, index=True, nullable=True, comment="手机号") | ||||
|     gender = Column(SmallInteger, default=0, comment="性别 0=未知 1=男 2=女", server_default="0") | ||||
|     register_time = Column(DateTime, default=datetime.now, comment="注册事件") | ||||
|     last_login_time = Column(DateTime, default=datetime.now, comment="上次登录时间") | ||||
|     last_login_ip = Column(VARCHAR(64), nullable=True, comment="上次登录IP") | ||||
|     register_ip = Column(VARCHAR(64), nullable=True, comment="注册IP") | ||||
|     wechat_openid = Column(VARCHAR(64), nullable=True, comment="微信openId") | ||||
|     country = Column(VARCHAR(64), nullable=True, comment="国家") | ||||
|     province = Column(VARCHAR(64), nullable=True, comment="省") | ||||
|     city = Column(VARCHAR(64), nullable=True, comment="市") | ||||
|     q_limit_day = Column(Integer, default=0, comment="每日问题数量限制") | ||||
|     tokens_limit = Column(Integer, default=0, comment="字数限制") | ||||
|     # role_id = Column(Integer, comment="角色") | ||||
|     # role = relationship("Role", secondary=user_role) | ||||
|     is_active = Column(Integer, default=True, comment="用户是否激活 0=未激活 1=激活", server_default="1") | ||||
|     __table_args__ = ({'comment': '用户表'}) | ||||
| 
 | ||||
| class Role(Base): | ||||
|     """ | ||||
|     角色表 | ||||
|     """ | ||||
|     __tablename__ = "nlt_role" | ||||
|     role_id = Column(VARCHAR(32), default=gen_uuid, index=True, primary_key=True, unique=True, comment="角色id") | ||||
|     name = Column(VARCHAR(128), nullable=False, comment="角色名") | ||||
|     title = Column(VARCHAR(128), comment="角色名(中文)") | ||||
|     users = relationship("User", backref="roles", secondary=user_role) | ||||
|     # menu = relationship("Menu", secondary=menu.role_menu) | ||||
|     __table_args__ = ({'comment': '角色表'}) | ||||
| 
 | ||||
| class LoginHistory(Base): | ||||
|     """ | ||||
|     登录记录 | ||||
|     """ | ||||
|     __tablename__ = "nlt_login_history" | ||||
|     user_id = Column(VARCHAR(32), ForeignKey('nlt_user.user_id')) | ||||
|     username = Column(VARCHAR(128), comment="用户名") | ||||
|     login_time = Column(DateTime, default=datetime.now, comment="登录时间") | ||||
|     login_ipv4 = Column(VARCHAR(15), comment="登录ip") | ||||
|     user = relationship("User", backref="login_histories") | ||||
| @ -0,0 +1,40 @@ | ||||
| # !/usr/bin/env python3 | ||||
| # -*- encoding : utf-8 -*- | ||||
| # @Filename    : chat.py | ||||
| # @Software    : VSCode | ||||
| # @Datetime    : 2023/03/20 21:46:54 | ||||
| # @Author      : leo liu | ||||
| # @Version     : 1.0 | ||||
| # @Description : | ||||
| 
 | ||||
| """ | ||||
| 聊天模型 | ||||
| """ | ||||
| 
 | ||||
| from datetime import datetime | ||||
| from sqlalchemy import Column, Integer, Text, Date, DateTime, ForeignKey, VARCHAR | ||||
| from sqlalchemy.orm import relationship | ||||
| 
 | ||||
| from db.base_class import Base | ||||
| 
 | ||||
| class ChatHistory(Base): | ||||
|     """ | ||||
|     聊天记录 | ||||
|     """ | ||||
|     __tablename__ = "nlt_chat_history" | ||||
|     user_id = Column(VARCHAR(32), ForeignKey('nlt_user.user_id')) | ||||
|     username = Column(VARCHAR(128), comment="用户名") | ||||
|     q_content = Column(Text, nullable=False, comment="提问内容") | ||||
|     a_content = Column(Text, nullable=False, comment="回答内容") | ||||
|     q_time = Column(DateTime, default=datetime.now, comment="提问时间") | ||||
|     user = relationship("User", backref="chat_history") | ||||
| 
 | ||||
| class ChatCountDay(Base): | ||||
|     """ | ||||
|     日聊天计数 | ||||
|     """ | ||||
|     __tablename__ = "nlt_chat_count_day" | ||||
|     user_id = Column(VARCHAR(32), ForeignKey('nlt_user.user_id')) | ||||
|     q_time = Column(Date, default=datetime.now, comment="聊天计数日期") | ||||
|     q_times = Column(Integer, default=0, comment="聊天计数") | ||||
|     user = relationship("User", backref="chat_count_day") | ||||
| @ -0,0 +1,40 @@ | ||||
| # !/usr/bin/env python3 | ||||
| # -*- encoding : utf-8 -*- | ||||
| # @Filename    : menu.py | ||||
| # @Software    : VSCode | ||||
| # @Datetime    : 2021/11/08 21:50:31 | ||||
| # @Author      : leo liu | ||||
| # @Version     : 1.0 | ||||
| # @Description : 前端菜单 | ||||
| 
 | ||||
| """ | ||||
| 菜单模型 | ||||
| """ | ||||
| 
 | ||||
| from datetime import datetime | ||||
| from sqlalchemy import Column, Integer, VARCHAR, ForeignKey, Table, DateTime | ||||
| from sqlalchemy.orm import relationship | ||||
| from sqlalchemy.sql import func | ||||
| 
 | ||||
| from db.base_class import Base, gen_uuid | ||||
| 
 | ||||
| role_menu = Table( | ||||
|     "nlt_rolemenu", | ||||
|     Base.metadata, | ||||
|     Column("id", Integer, unique=True, index=True, primary_key=True, autoincrement=True, comment="ID"), | ||||
|     Column("role_id", VARCHAR(32), ForeignKey("nlt_role.role_id"), nullable=False, primary_key=True, comment="角色id"), | ||||
|     Column("menu_id", VARCHAR(32), ForeignKey("nlt_menu.menu_id"), nullable=False, primary_key=True, comment="菜单id"), | ||||
|     Column("create_time", DateTime, default=datetime.now, server_default=func.now(), comment="创建时间") | ||||
| ) | ||||
| 
 | ||||
| class Menu(Base): | ||||
|     """ | ||||
|     菜单表 | ||||
|     """ | ||||
|     __tablename__ = "nlt_menu" | ||||
|     menu_id = Column(VARCHAR(32), default=gen_uuid, index=True, primary_key=True, unique=True, comment="菜单id") | ||||
|     path = Column(VARCHAR(64), unique=True, nullable=False, comment="菜单地址") | ||||
|     name = Column(VARCHAR(32), unique=True, nullable=False, comment="菜单名称") | ||||
|     super_menu = Column(VARCHAR(64), nullable=True, comment="上级菜单id") | ||||
|     role = relationship("Role", backref="menus", secondary=role_menu) | ||||
|     __table_args__ = ({'comment': '菜单表'}) | ||||
| @ -0,0 +1,24 @@ | ||||
| # !/usr/bin/env python3 | ||||
| # -*- encoding : utf-8 -*- | ||||
| # @Filename    : settings.py | ||||
| # @Software    : VSCode | ||||
| # @Datetime    : 2023/03/23 13:55:46 | ||||
| # @Author      : leo liu | ||||
| # @Version     : 1.0 | ||||
| # @Description : | ||||
| 
 | ||||
| ''' | ||||
| 系统配置模型 | ||||
| ''' | ||||
| 
 | ||||
| from db.base_class import Base | ||||
| from sqlalchemy import Column, VARCHAR | ||||
| 
 | ||||
| class Settings(Base): | ||||
|     """ | ||||
|     系统配置表 | ||||
|     """ | ||||
|     __tablename__ = "nlt_settings" | ||||
|     key = Column(VARCHAR(32), nullable=False, comment="配置类型") | ||||
|     value = Column(VARCHAR(64), nullable=False, comment="配置值") | ||||
|     __table_args__ = ({'comment': '系统配置表'}) | ||||
| @ -0,0 +1,16 @@ | ||||
| import sys | ||||
| sys.path.append("..") | ||||
| 
 | ||||
| from db.session import SessionLocal | ||||
| from api.v1.auth.crud.user import curd_user | ||||
| 
 | ||||
| def main() -> None: | ||||
| 
 | ||||
|     db = SessionLocal() | ||||
| 
 | ||||
|     user = curd_user.get_by_username(db, username="admin") | ||||
|     print(f"获取用户{user.nickname}成功") | ||||
|     # print("123") | ||||
| 
 | ||||
| if __name__ == "__main__": | ||||
|     main() | ||||
| @ -0,0 +1,116 @@ | ||||
| import sys | ||||
| sys.path.append("..") | ||||
| 
 | ||||
| from db.session import SessionLocal, engine | ||||
| from db.base_class import Base | ||||
| from models.auth import Role, User | ||||
| from models.menu import Menu | ||||
| from api.v1.auth.crud.user import crud_user | ||||
| 
 | ||||
| # from core.security import get_password_hash | ||||
| 
 | ||||
| def main() -> None: | ||||
| 
 | ||||
|     Base.metadata.create_all(engine) | ||||
| 
 | ||||
|     db = SessionLocal() | ||||
|     # create_user(db) | ||||
|     create_menu(db) | ||||
|     # create_auth_data(db) | ||||
| 
 | ||||
|     # get_userinfo(db) | ||||
| 
 | ||||
| def create_auth_data(db): | ||||
|     user_in_1 = User( | ||||
|             username="admin", | ||||
|             # hashed_password=get_password_hash('1qazxsw2'), | ||||
|             nickname="Leo Liu", | ||||
|             email="10200039@qq.com", | ||||
|             avatar="http://www.koelndom.top:13060/public/upload/642/5f81bd14eebb2e000d000002/images/logo/6115abbb55b35ac4c047a00b1272d475.jpg" | ||||
|     ) | ||||
| 
 | ||||
|     user_in_2 = User( | ||||
|             username="novelliou", | ||||
|             # hashed_password=get_password_hash('1qazxsw2'), | ||||
|             nickname="Leo", | ||||
|             email="leo@koelndom.cn", | ||||
|             avatar="http://www.koelndom.top:13060/public/upload/642/5f81bd14eebb2e000d000002/images/logo/6115abbb55b35ac4c047a00b1272d475.jpg" | ||||
|     ) | ||||
| 
 | ||||
|     role_in_1 = Role( | ||||
|         name="admin", | ||||
|         title="管理员" | ||||
|     ) | ||||
| 
 | ||||
|     role_in_2 = Role( | ||||
|         name="user", | ||||
|         title="用户" | ||||
|     ) | ||||
| 
 | ||||
|     menu_in_1 = Menu( | ||||
|         path = "/system", | ||||
|         name = "System" | ||||
|     ) | ||||
| 
 | ||||
|     menu_in_2 = Menu( | ||||
|         path = "/system/auth", | ||||
|         name = "Auth", | ||||
|         super_menu = "/system" | ||||
|     ) | ||||
| 
 | ||||
|     menu_in_3 = Menu( | ||||
|         path = "/system/auth/user", | ||||
|         name = "User", | ||||
|         super_menu = "/system/auth" | ||||
|     ) | ||||
| 
 | ||||
|     menu_in_4 = Menu( | ||||
|         path = "/system/auth/role", | ||||
|         name = "Role", | ||||
|         super_menu = "/system/auth" | ||||
|     ) | ||||
| 
 | ||||
|     menu_in_5 = Menu( | ||||
|         path = "/system/logs", | ||||
|         name = "Logs", | ||||
|         super_menu = "/system" | ||||
|     ) | ||||
| 
 | ||||
|     """ role_in_1.menus = [menu_in_1, menu_in_2, menu_in_3, menu_in_4, menu_in_5, menu_in_6, menu_in_7] | ||||
|     role_in_2.menus = [menu_in_1, menu_in_2, menu_in_3, menu_in_4, menu_in_5, menu_in_7] | ||||
| 
 | ||||
|     user_in_1.roles = [role_in_1] | ||||
|     user_in_2.roles = [role_in_2] """ | ||||
| 
 | ||||
|     role_in_1.menus.append(menu_in_1) | ||||
|     role_in_1.menus.append(menu_in_2) | ||||
|     role_in_1.menus.append(menu_in_3) | ||||
|     role_in_1.menus.append(menu_in_4) | ||||
|     role_in_1.menus.append(menu_in_5) | ||||
| 
 | ||||
|     user_in_1.roles.append(role_in_1) | ||||
|     user_in_2.roles.append(role_in_2) | ||||
| 
 | ||||
|     db.add(user_in_1) | ||||
|     db.add(user_in_2) | ||||
|     db.commit() | ||||
|     db.refresh(user_in_1) | ||||
| 
 | ||||
| def get_userinfo(db): | ||||
|     user = crud_user.get_by_username(db, username="novelliou") | ||||
| 
 | ||||
|     for menu in user.roles[0].menus: | ||||
|         print(menu.path) | ||||
| 
 | ||||
| def create_menu(db): | ||||
|     menu_in = Menu( | ||||
|         path = "/system/auth/menu", | ||||
|         name = "Menu", | ||||
|         super_menu = "/system/auth" | ||||
|     ) | ||||
| 
 | ||||
|     db.add(menu_in) | ||||
|     db.commit() | ||||
| 
 | ||||
| if __name__ == "__main__": | ||||
|     main() | ||||
| @ -0,0 +1,18 @@ | ||||
| import sys | ||||
| sys.path.append("..") | ||||
| 
 | ||||
| from db.session import SessionLocal | ||||
| from api.v1.auth.crud.user import curd_user | ||||
| 
 | ||||
| def main() -> None: | ||||
| 
 | ||||
|     db = SessionLocal() | ||||
| 
 | ||||
|     user = curd_user.authenticate(db, username="admin", password="1qazxsw2") | ||||
|     if (user): | ||||
|         print(f"用户{user.nickname}登录成功") | ||||
|     else: | ||||
|         print(f"登录失败") | ||||
| 
 | ||||
| if __name__ == "__main__": | ||||
|     main() | ||||
| @ -0,0 +1,14 @@ | ||||
| # !/usr/bin/env python3 | ||||
| # -*- encoding : utf-8 -*- | ||||
| # @Filename    : __init__.py | ||||
| # @Software    : VSCode | ||||
| # @Datetime    : 2021/11/03 17:15:36 | ||||
| # @Author      : leo liu | ||||
| # @Version     : 1.0 | ||||
| # @Description : | ||||
| 
 | ||||
| 
 | ||||
| """ | ||||
| 
 | ||||
| """ | ||||
| 
 | ||||
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								Some files were not shown because too many files have changed in this diff Show More
					Loading…
					
					
				
		Reference in new issue