amogaddy commited on
Commit
37ffa75
Β·
verified Β·
1 Parent(s): ed3c6cc

Upload errors.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. errors.py +69 -0
errors.py ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import logging
2
+ import traceback
3
+ import sys
4
+ from enum import Enum
5
+
6
+ # ── Logging setup ─────────────────────────────────────────────────────────────
7
+
8
+ LOG_FORMAT = "[%(asctime)s] %(levelname)-8s %(name)s β€” %(message)s"
9
+ DATE_FORMAT = "%H:%M:%S"
10
+
11
+ logging.basicConfig(
12
+ level=logging.DEBUG,
13
+ format=LOG_FORMAT,
14
+ datefmt=DATE_FORMAT,
15
+ handlers=[
16
+ logging.StreamHandler(sys.stdout),
17
+ logging.FileHandler("generai.log", encoding="utf-8"),
18
+ ],
19
+ )
20
+
21
+
22
+ def get_logger(name: str) -> logging.Logger:
23
+ return logging.getLogger(name)
24
+
25
+
26
+ # ── Error categories ───────────────────────────────────────────────────────────
27
+
28
+ class ErrorCode(Enum):
29
+ # DB / Knowledge Base
30
+ KB_INIT_FAILED = "KB-001"
31
+ KB_SEARCH_FAILED = "KB-002"
32
+ KB_WRITE_FAILED = "KB-003"
33
+ KB_REINFORCE_FAILED = "KB-004"
34
+ KB_SEED_FAILED = "KB-005"
35
+ # Scraper / Web
36
+ WEB_SEARCH_FAILED = "WEB-001"
37
+ WEB_FETCH_FAILED = "WEB-002"
38
+ WEB_EXTRACT_FAILED = "WEB-003"
39
+ WEB_NO_RESULTS = "WEB-004"
40
+ # Brain
41
+ BRAIN_ASK_FAILED = "BRN-001"
42
+ BRAIN_ASYNC_FAILED = "BRN-002"
43
+ # UI
44
+ UI_INPUT_EMPTY = "UI-001"
45
+ UI_HANDLER_FAILED = "UI-002"
46
+
47
+
48
+ class GenerAIError(Exception):
49
+ """Base exception with error code and user-friendly message."""
50
+
51
+ def __init__(self, code: ErrorCode, detail: str, cause: Exception | None = None):
52
+ self.code = code
53
+ self.detail = detail
54
+ self.cause = cause
55
+ super().__init__(f"[{code.value}] {detail}")
56
+
57
+ def user_message(self) -> str:
58
+ cause_str = f"\n> Causa: `{type(self.cause).__name__}: {self.cause}`" if self.cause else ""
59
+ return f"⚠️ **Errore {self.code.value}** β€” {self.detail}{cause_str}"
60
+
61
+ def log(self, logger: logging.Logger):
62
+ logger.error("[%s] %s", self.code.value, self.detail)
63
+ if self.cause:
64
+ logger.debug("Traceback originale:\n%s", "".join(traceback.format_exception(type(self.cause), self.cause, self.cause.__traceback__)))
65
+
66
+
67
+ def fmt_exc(e: Exception) -> str:
68
+ """One-line summary of an exception for log messages."""
69
+ return f"{type(e).__name__}: {e}"