File size: 3,952 Bytes
f35f208
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
class ModelNotFoundError(Exception):
    """Error raised when a model cannot be found or accessed"""
    def __init__(self, model_name: str, original_error: Exception = None):
        self.model_name = model_name
        self.original_error = original_error

        message = (
            f"Could not find or access model: '{model_name}'\n\n"
            f"This could be because:\n"
            f"1. The model name is misspelled - double check the name\n"
            f"2. The model requires authentication - you need to:\n"
            f"   - Log in to Hugging Face (huggingface.co)\n"
            f"   - Accept the model's terms of use on its page\n"
            f"   - Create an access token in your HF account settings\n"
            f"   - Set the token as an environment variable: export HUGGING_FACE_HUB_TOKEN=your_token\n\n"
            f"Original error: {str(original_error)}"
        )
        super().__init__(message)

class ModelLoadError(Exception):
    """Error raised when a model fails to load"""
    def __init__(self, model_name: str, load_type: str, original_error: Exception = None):
        self.model_name = model_name
        self.load_type = load_type
        self.original_error = original_error

        message = (
            f"Failed to load model: '{model_name}' using {load_type} precision\n\n"
            f"Common reasons:\n"
            f"1. Not enough GPU memory - This model requires more VRAM than available\n"
            f"   - Try using 8-bit quantization (load_in_8bit=True)\n"
            f"   - Try using 4-bit quantization (load_in_4bit=True)\n"
            f"   - Or use a smaller model\n"
            f"2. Incorrect model parameters - Check the model card for correct loading parameters\n"
            f"3. Corrupted model files - Try removing the model folder and downloading again\n\n"
            f"Original error: {str(original_error)}"
        )
        super().__init__(message)

class InvalidConfigurationError(Exception):
    """Error raised when configuration is invalid"""
    def __init__(self, param_name: str, current_value: any, expected_value: str, original_error: Exception = None):
        self.param_name = param_name
        self.current_value = current_value
        self.expected_value = expected_value
        self.original_error = original_error

        message = (
            f"Invalid configuration parameter: '{param_name}'\n\n"
            f"Current value: {current_value}\n"
            f"Expected value: {expected_value}\n\n"
            f"Please update your config.yaml file with the correct value\n"
            f"Original error: {str(original_error)}"
        )
        super().__init__(message)

class GenerationError(Exception):
    """Error raised when text generation fails"""
    def __init__(self, stage: str, original_error: Exception = None):
        self.stage = stage
        self.original_error = original_error

        message = (
            f"Text generation failed during {stage}\n\n"
            f"This could be because:\n"
            f"1. The model ran out of memory during generation\n"
            f"   - Try reducing max_new_tokens\n"
            f"   - Try reducing the input text length\n"
            f"2. The input prompt might be too complex or long\n"
            f"3. The model might be in an inconsistent state\n"
            f"   - Try reinitializing the model\n\n"
            f"Original error: {str(original_error)}"
        )
        super().__init__(message)

# Usage examples:
"""
# When model not found:
raise ModelNotFoundError("mistralai/Mistral-7B-v0.1", original_error=e)

# When model fails to load:
raise ModelLoadError("mistralai/Mistral-7B-v0.1", "8-bit quantization", original_error=e)

# When config is invalid:
raise InvalidConfigurationError(
    "temperature", 
    2.5, 
    "a value between 0.0 and 2.0",
    original_error=e
)

# When generation fails:
raise GenerationError("token generation", original_error=e)
"""