Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feat] Error handling #13

Open
6 of 7 tasks
jieun-lim opened this issue Aug 22, 2024 · 1 comment
Open
6 of 7 tasks

[Feat] Error handling #13

jieun-lim opened this issue Aug 22, 2024 · 1 comment

Comments

@jieun-lim
Copy link
Collaborator

jieun-lim commented Aug 22, 2024

current status

에러 났을 때 json 형식으로 return

if not params: # 입력이 없을 경우 에러 메시지 출력 
        logging.error("error - No valid request")
        return jsonify({"error": "No valid request"})
  • 문제점: json 형식으로 전달 시에, Error code 200으로 정상 처리되었다고 인식.

desired status

  • Flask Error handling 방법 이용하여 에러 처리

Expected solutions

참고 사이트 :

1. error_handler.py 생성하여 error handling code 작성

Status Code Error Type 설명 예시
400 BadRequestError 설명이 여기에 들어갑니다 json에서 없는 키를 요청함
401 AuthenticationError Invalid Authentication / Incorrect API key provided / you must be a member of an organization to use the API API가 가 형식에 맞지 않을 때 (e.g. "sk-test")
403 PermissionDeniedError OpenAI API가 지원되지 않는 국가에서 API를 요청하거나, API 키가 사용 권한이 부여되어 있지 않음 테스트 하기 어려움
404 NotFoundError 요청하려는 엔티티가 없을 때 model="davinci-codex" #사용 권한이 없는 모델
422 UnprocessableEntityError 테스트 하기 어려움
429 RateLimitError 과도한 API 호출 예) 1초에 100000번 API 요청함
>=500 InternalServerError max_tokens=1000000 # 매우 높은 max_tokens 설정
N/A APIConnectionError 테스트하기 어려움
Type Error Type Error min_tokens= 1 # 잘못된 max_tokens 설정

error 핸들러 return 형식(json)

# 예시 
{
                'error': "BadRequestError", # 에러 종류
                'code': 400, # 에러 코드 
                'description': f"죄송해요. 시스템 오류가 발생했어요. 잠시 후 다시 시도해주세요.", # 사용자에게 전달할 에러 메시지 
                'error_message': str(e) # 오리지널 에러 메세지 e.g error code: 400 - {'error': {'message': \"Invalid type for 'messages': expected an array of objects, but got an integer instead.\", 'type': 'invalid_request_error', 'param': 'messages', 'code': 'invalid_type'}}",
            }

코드로 찍어본 openAI api 에러 종류

APIConnectionError
APIError
APIResponseValidationError
APIStatusError
APITimeoutError
AuthenticationError 401
BadRequestError 400
ConflictError
InternalServerError >=500
NotFoundError 404
PermissionDeniedError
RateLimitError 429
UnprocessableEntityError 422
_AmbiguousModuleClientUsageError


2. app.py 에 적용

1) request 받아올 때

문제: request body가 비어있거나 필요한 데이터 필드가 없을 때

해결 방안
  • request 바디 받아오는 부분 코드 아래와 같이 수정
params = request.get_json()
    if not params : 
        raise BadRequest("No request body")
    elif 'content' not in params and not params['content'].strip():
        raise BadRequest("No 'content' field in request body or value for 'content' is empty")
  • /conv - llm()
  • /title - make_title()
  • /test - stream_output()
2) **ChatGPT API 요청 제대로 수행하지 못했을 때 **

API 사용 3가지 상황

  • topic classification (날씨/교통/그외 주제) - cls_chatgpt로 처리
  • RAG 답변 안되었을 때
  • 기타 답변 생성

수정할 부분

  • RAG /conv
elif not response['result']:
        # RAG를 수행하지 못했을 때 - 에러 메시지 
        logging.error("error" "RAG를 요청 했으나 결과가 없음. 400")
        return jsonify({"error": "No response from RAG"}), 400 # 로깅으로 바꾸기
  • [ ]
else:
        logging.error("chat gpt failed to classify: result is None")
        return jsonify({"error": "Topic classification failed"}), 500
  • [ ]
# 날씨, 교통, 그외 주제인지 분류하기 
    topic = topic_classification(user_input)
    if topic == "WEATHER":
    ....
    else:
        logging.error("chat gpt failed to classify: result is None")
        return jsonify({"error": "Topic classification failed"}), 500
  • chatgpt()

  • [] make_title()

if title is None:
        return jsonify({"error": "죄송해요. 챗 지피티가 제목을 제대로 가져오지 못했어요."})
    title = title.strip('"') # 앞뒤의 큰 따옴표 제거
    return jsonify({"title": title})
@jieun-lim
Copy link
Collaborator Author

  • pdf_retriver.py에서 에러 발생했을 때, flask 에러 핸들러 적용 안되는 문제 해결

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant