Spaces:
Sleeping
Sleeping
from typing import Optional, List, Dict, Any | |
from pydantic import BaseModel, Field, ConfigDict | |
from enum import Enum | |
class ErrorLevel(str, Enum): | |
INFO = "info" | |
WARNING = "warning" | |
ERROR = "error" | |
CRITICAL = "critical" | |
class ErrorDetail(BaseModel): | |
"""Base model for error details""" | |
code: str = Field(..., description="Error code for the specific error") | |
message: str = Field(..., description="Human readable error message") | |
level: ErrorLevel = Field(default=ErrorLevel.ERROR, description="Severity level of the error") | |
context: Optional[Dict[str, Any]] = Field(default=None, description="Additional context about the error") | |
class GitHubURLError(ErrorDetail): | |
"""Model for GitHub URL related errors""" | |
model_config = ConfigDict(json_schema_extra={ | |
"example": { | |
"code": "INVALID_GITHUB_URL", | |
"message": "The provided URL is not a valid GitHub repository URL", | |
"level": ErrorLevel.ERROR, | |
"context": {"url": "https://invalid-url.com"} | |
} | |
}) | |
class TopicAnalysisError(ErrorDetail): | |
"""Model for topic analysis related errors""" | |
model_config = ConfigDict(json_schema_extra={ | |
"example": { | |
"code": "TOPIC_GENERATION_FAILED", | |
"message": "Failed to generate topics from the content", | |
"level": ErrorLevel.ERROR, | |
"context": {"model": "deberta-v3-base", "error": "Model loading failed"} | |
} | |
}) | |
class APIResponse(BaseModel): | |
"""Model for API responses""" | |
success: bool = Field(default=True, description="Indicates if the operation was successful") | |
data: Optional[Dict[str, Any]] = Field(default=None, description="Response data when operation is successful") | |
errors: Optional[List[ErrorDetail]] = Field(default=None, description="List of errors if any occurred") | |
def model_post_init(self, __context): | |
"""Post initialization hook to update success status based on errors""" | |
if self.errors: | |
self.success = False | |
class ErrorHandler: | |
"""Handler for managing and creating error responses""" | |
def handle_github_url_error(url: str, error_message: str) -> APIResponse: | |
""" | |
Handle GitHub URL related errors | |
Args: | |
url: The problematic URL | |
error_message: Description of the error | |
Returns: | |
APIResponse with error details | |
""" | |
error = GitHubURLError( | |
code="INVALID_GITHUB_URL", | |
message=f"Invalid GitHub URL: {error_message}", | |
context={"url": url} | |
) | |
return APIResponse(success=False, errors=[error]) | |
def handle_topic_analysis_error(error_message: str, context: Dict[str, Any] = None) -> APIResponse: | |
""" | |
Handle topic analysis related errors | |
Args: | |
error_message: Description of the error | |
context: Additional context information | |
Returns: | |
APIResponse with error details | |
""" | |
error = TopicAnalysisError( | |
code="TOPIC_GENERATION_FAILED", | |
message=f"Topic generation failed: {error_message}", | |
context=context or {} | |
) | |
return APIResponse(success=False, errors=[error]) | |
def handle_file_fetch_error(file_path: str, error_message: str) -> APIResponse: | |
""" | |
Handle file fetching related errors | |
Args: | |
file_path: Path of the file that failed to fetch | |
error_message: Description of the error | |
Returns: | |
APIResponse with error details | |
""" | |
error = ErrorDetail( | |
code="FILE_FETCH_FAILED", | |
message=f"Failed to fetch file: {error_message}", | |
context={"file_path": file_path} | |
) | |
return APIResponse(success=False, errors=[error]) | |
def success_response(data: Dict[str, Any]) -> APIResponse: | |
""" | |
Create a success response | |
Args: | |
data: The response data to be returned | |
Returns: | |
APIResponse with success status and data | |
""" | |
return APIResponse(success=True, data=data) |