File size: 3,540 Bytes
8a9bced
3e47f1a
 
8a9bced
 
 
 
 
 
 
 
3e47f1a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8a9bced
 
 
3e47f1a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1265076
 
 
 
 
3e47f1a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1265076
 
 
 
 
3e47f1a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import logging
import os
from inspect import currentframe

logger = logging.getLogger(__name__)
logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
)


def _resolve_error_origin(
    file_name: str | None,
    method_name: str | None,
) -> tuple[str, str]:
    """Resolve the source location where the exception was raised."""
    if file_name and method_name:
        return file_name, method_name

    frame = currentframe()
    helper_caller = frame.f_back if frame else None
    caller_frame = helper_caller.f_back if helper_caller else None
    resolved_file = file_name or "unknown_file"
    resolved_method = method_name or "unknown_method"

    if caller_frame is not None:
        code = caller_frame.f_code
        resolved_file = file_name or os.path.basename(code.co_filename)
        resolved_method = method_name or code.co_name

    return resolved_file, resolved_method


def _build_message(message: str, file_name: str, method_name: str) -> str:
    """Create a standardized exception message with origin details."""
    return f"{message} [source: {file_name}:{method_name}]"


class ModelPipelineError(RuntimeError):
    """Exception raised for errors in the model generation pipeline."""

    def __init__(
        self,
        message: str,
        file_name: str | None = None,
        method_name: str | None = None,
    ):
        self.file_name, self.method_name = _resolve_error_origin(
            file_name,
            method_name,
        )
        full_message = _build_message(
            message,
            self.file_name,
            self.method_name,
        )
        super().__init__(full_message)
        logger.error("ModelPipelineError: %s", full_message)


class TextGenerationError(RuntimeError):
    """Exception raised for errors in text generation."""

    def __init__(
        self,
        message: str,
        file_name: str | None = None,
        method_name: str | None = None,
    ):
        self.file_name, self.method_name = _resolve_error_origin(
            file_name,
            method_name,
        )
        full_message = _build_message(
            message,
            self.file_name,
            self.method_name,
        )
        super().__init__(full_message)
        logger.error("TextGenerationError: %s", full_message)


class UnifiedGenerationError(RuntimeError):
    """Exception raised for errors in unified generation."""

    def __init__(
        self,
        message: str,
        file_name: str | None = None,
        method_name: str | None = None,
    ):
        self.file_name, self.method_name = _resolve_error_origin(
            file_name,
            method_name,
        )
        full_message = _build_message(
            message,
            self.file_name,
            self.method_name,
        )
        super().__init__(full_message)
        logger.error("UnifiedGenerationError: %s", full_message)


class ImageGenerationError(Exception):
    """Raised when live image generation fails."""

    def __init__(
        self,
        message: str,
        file_name: str | None = None,
        method_name: str | None = None,
    ):
        self.file_name, self.method_name = _resolve_error_origin(
            file_name,
            method_name,
        )
        full_message = _build_message(
            message,
            self.file_name,
            self.method_name,
        )
        super().__init__(full_message)
        logger.error("ImageGenerationError: %s", full_message)