parent
							
								
									51dea6ba75
								
							
						
					
					
						commit
						8665c249d0
					
				
											
												
													File diff suppressed because one or more lines are too long
												
											
										
									
								| @ -0,0 +1,198 @@ | ||||
| """ | ||||
| A module that contains all the types used in this project | ||||
| """ | ||||
| 
 | ||||
| import os | ||||
| import platform | ||||
| from enum import Enum | ||||
| from typing import Union | ||||
| 
 | ||||
| 
 | ||||
| python_version = list(platform.python_version_tuple()) | ||||
| SUPPORT_ADD_NOTES = int(python_version[0]) >= 3 and int(python_version[1]) >= 11 | ||||
| 
 | ||||
| 
 | ||||
| class ChatbotError(Exception): | ||||
|     """ | ||||
|     Base class for all Chatbot errors in this Project | ||||
|     """ | ||||
| 
 | ||||
|     def __init__(self, *args: object) -> None: | ||||
|         if SUPPORT_ADD_NOTES: | ||||
|             super().add_note( | ||||
|                 "Please check that the input is correct, or you can resolve this issue by filing an issue", | ||||
|             ) | ||||
|             super().add_note("Project URL: https://github.com/acheong08/ChatGPT") | ||||
|         super().__init__(*args) | ||||
| 
 | ||||
| 
 | ||||
| class ActionError(ChatbotError): | ||||
|     """ | ||||
|     Subclass of ChatbotError | ||||
| 
 | ||||
|     An object that throws an error because the execution of an operation is blocked | ||||
|     """ | ||||
| 
 | ||||
|     def __init__(self, *args: object) -> None: | ||||
|         if SUPPORT_ADD_NOTES: | ||||
|             super().add_note( | ||||
|                 "The current operation is not allowed, which may be intentional", | ||||
|             ) | ||||
|         super().__init__(*args) | ||||
| 
 | ||||
| 
 | ||||
| class ActionNotAllowedError(ActionError): | ||||
|     """ | ||||
|     Subclass of ActionError | ||||
| 
 | ||||
|     An object that throws an error because the execution of an unalloyed operation is blocked | ||||
|     """ | ||||
| 
 | ||||
| 
 | ||||
| class ActionRefuseError(ActionError): | ||||
|     """ | ||||
|     Subclass of ActionError | ||||
| 
 | ||||
|     An object that throws an error because the execution of a refused operation is blocked. | ||||
|     """ | ||||
| 
 | ||||
| 
 | ||||
| class CLIError(ChatbotError): | ||||
|     """ | ||||
|     Subclass of ChatbotError | ||||
| 
 | ||||
|     The error caused by a CLI program error | ||||
|     """ | ||||
| 
 | ||||
| 
 | ||||
| class ErrorType(Enum): | ||||
|     """ | ||||
|     Enumeration class for different types of errors. | ||||
|     """ | ||||
| 
 | ||||
|     USER_ERROR = -1 | ||||
|     UNKNOWN_ERROR = 0 | ||||
|     SERVER_ERROR = 1 | ||||
|     RATE_LIMIT_ERROR = 2 | ||||
|     INVALID_REQUEST_ERROR = 3 | ||||
|     EXPIRED_ACCESS_TOKEN_ERROR = 4 | ||||
|     INVALID_ACCESS_TOKEN_ERROR = 5 | ||||
|     PROHIBITED_CONCURRENT_QUERY_ERROR = 6 | ||||
|     AUTHENTICATION_ERROR = 7 | ||||
|     CLOUDFLARE_ERROR = 8 | ||||
| 
 | ||||
| 
 | ||||
| class Error(ChatbotError): | ||||
|     """ | ||||
|     Base class for exceptions in V1 module. | ||||
|     """ | ||||
| 
 | ||||
|     def __init__( | ||||
|         self, | ||||
|         source: str, | ||||
|         message: str, | ||||
|         *args: object, | ||||
|         code: Union[ErrorType, int] = ErrorType.UNKNOWN_ERROR, | ||||
|     ) -> None: | ||||
|         self.source: str = source | ||||
|         self.message: str = message | ||||
|         self.code: ErrorType | int = code | ||||
|         super().__init__(*args) | ||||
| 
 | ||||
|     def __str__(self) -> str: | ||||
|         return f"{self.source}: {self.message} (code: {self.code})" | ||||
| 
 | ||||
|     def __repr__(self) -> str: | ||||
|         return f"{self.source}: {self.message} (code: {self.code})" | ||||
| 
 | ||||
| 
 | ||||
| class AuthenticationError(ChatbotError): | ||||
|     """ | ||||
|     Subclass of ChatbotError | ||||
| 
 | ||||
|     The object of the error thrown by a validation failure or exception | ||||
|     """ | ||||
| 
 | ||||
|     def __init__(self, *args: object) -> None: | ||||
|         if SUPPORT_ADD_NOTES: | ||||
|             super().add_note( | ||||
|                 "Please check if your key is correct, maybe it may not be valid", | ||||
|             ) | ||||
|         super().__init__(*args) | ||||
| 
 | ||||
| 
 | ||||
| class APIConnectionError(ChatbotError): | ||||
|     """ | ||||
|     Subclass of ChatbotError | ||||
| 
 | ||||
|     An exception object thrown when an API connection fails or fails to connect due to network or | ||||
|     other miscellaneous reasons | ||||
|     """ | ||||
| 
 | ||||
|     def __init__(self, *args: object) -> None: | ||||
|         if SUPPORT_ADD_NOTES: | ||||
|             super().add_note( | ||||
|                 "Please check if there is a problem with your network connection", | ||||
|             ) | ||||
|         super().__init__(*args) | ||||
| 
 | ||||
| 
 | ||||
| class NotAllowRunning(ActionNotAllowedError): | ||||
|     """ | ||||
|     Subclass of ActionNotAllowedError | ||||
| 
 | ||||
|     Direct startup is not allowed for some reason | ||||
|     """ | ||||
| 
 | ||||
| 
 | ||||
| class ResponseError(APIConnectionError): | ||||
|     """ | ||||
|     Subclass of APIConnectionError | ||||
| 
 | ||||
|     Error objects caused by API request errors due to network or other miscellaneous reasons | ||||
|     """ | ||||
| 
 | ||||
| 
 | ||||
| class OpenAIError(APIConnectionError): | ||||
|     """ | ||||
|     Subclass of APIConnectionError | ||||
| 
 | ||||
|     Error objects caused by OpenAI's own server errors | ||||
|     """ | ||||
| 
 | ||||
| 
 | ||||
| class RequestError(APIConnectionError): | ||||
|     """ | ||||
|     Subclass of APIConnectionError | ||||
| 
 | ||||
|     There is a problem with the API response due to network or other miscellaneous reasons, or there | ||||
|     is no reply to the object that caused the error at all | ||||
|     """ | ||||
| 
 | ||||
| 
 | ||||
| class Colors: | ||||
|     """ | ||||
|     Colors for printing | ||||
|     """ | ||||
| 
 | ||||
|     HEADER = "\033[95m" | ||||
|     OKBLUE = "\033[94m" | ||||
|     OKCYAN = "\033[96m" | ||||
|     OKGREEN = "\033[92m" | ||||
|     WARNING = "\033[93m" | ||||
|     FAIL = "\033[91m" | ||||
|     ENDC = "\033[0m" | ||||
|     BOLD = "\033[1m" | ||||
|     UNDERLINE = "\033[4m" | ||||
| 
 | ||||
|     def __init__(self) -> None: | ||||
|         if os.getenv("NO_COLOR"): | ||||
|             Colors.HEADER = "" | ||||
|             Colors.OKBLUE = "" | ||||
|             Colors.OKCYAN = "" | ||||
|             Colors.OKGREEN = "" | ||||
|             Colors.WARNING = "" | ||||
|             Colors.FAIL = "" | ||||
|             Colors.ENDC = "" | ||||
|             Colors.BOLD = "" | ||||
|             Colors.UNDERLINE = "" | ||||
											
												
													File diff suppressed because it is too large
													Load Diff
												
											
										
									
								
					Loading…
					
					
				
		Reference in new issue