refactor: Improve error handling in ComponentBuildException

This commit is contained in:
Gabriel Luiz Freitas Almeida 2024-06-20 16:29:27 -03:00
commit f8ef220a6e
5 changed files with 22 additions and 13 deletions

View file

@ -24,13 +24,7 @@ from langflow.api.v1.schemas import (
VertexBuildResponse, VertexBuildResponse,
VerticesOrderResponse, VerticesOrderResponse,
) )
from langflow.schema.schema import Log from langflow.exceptions.component import ComponentBuildException
from langflow.services.auth.utils import get_current_active_user
from langflow.services.chat.service import ChatService
from langflow.services.deps import get_chat_service, get_session, get_session_service
from langflow.services.monitor.utils import log_vertex_build
if TYPE_CHECKING:
from langflow.graph.vertex.types import InterfaceVertex from langflow.graph.vertex.types import InterfaceVertex
from langflow.services.session.service import SessionService from langflow.services.session.service import SessionService
@ -190,9 +184,13 @@ async def build_vertex(
result_data_response = ResultDataResponse.model_validate(result_dict, from_attributes=True) result_data_response = ResultDataResponse.model_validate(result_dict, from_attributes=True)
except Exception as exc: except Exception as exc:
tb = traceback.format_exc() if isinstance(exc, ComponentBuildException):
logger.exception(f"Error building Component: {exc}") params = exc.message
params = format_exception_message(exc) tb = exc.formatted_traceback
else:
tb = traceback.format_exc()
logger.exception(f"Error building Component: {exc}")
params = format_exception_message(exc)
message = {"errorMessage": params, "stackTrace": tb} message = {"errorMessage": params, "stackTrace": tb}
valid = False valid = False
output_label = vertex.outputs[0]["name"] if vertex.outputs else "output" output_label = vertex.outputs[0]["name"] if vertex.outputs else "output"

View file

@ -0,0 +1,6 @@
# Create an exception class that receives the message and the formatted traceback
class ComponentBuildException(Exception):
def __init__(self, message: str, formatted_traceback: str):
self.message = message
self.formatted_traceback = formatted_traceback
super().__init__(message)

View file

@ -4,9 +4,10 @@ from collections import defaultdict, deque
from functools import partial from functools import partial
from itertools import chain from itertools import chain
from typing import TYPE_CHECKING, Dict, Generator, List, Optional, Tuple, Type, Union from typing import TYPE_CHECKING, Dict, Generator, List, Optional, Tuple, Type, Union
from loguru import logger from loguru import logger
from langflow.exceptions.component import ComponentBuildException
from langflow.exceptions.component import ComponentBuildException
from langflow.graph.edge.base import ContractEdge from langflow.graph.edge.base import ContractEdge
from langflow.graph.graph.constants import lazy_load_vertex_dict from langflow.graph.graph.constants import lazy_load_vertex_dict
from langflow.graph.graph.runnable_vertices_manager import RunnableVerticesManager from langflow.graph.graph.runnable_vertices_manager import RunnableVerticesManager
@ -830,7 +831,8 @@ class Graph:
log_transaction(flow_id, vertex, status="success") log_transaction(flow_id, vertex, status="success")
return result_dict, params, valid, artifacts, vertex return result_dict, params, valid, artifacts, vertex
except Exception as exc: except Exception as exc:
logger.exception(f"Error building Component:\n\n{exc}") if not isinstance(exc, ComponentBuildException):
logger.exception(f"Error building Component:\n\n{exc}")
flow_id = self.flow_id flow_id = self.flow_id
log_transaction(flow_id, vertex, status="failure", error=str(exc)) log_transaction(flow_id, vertex, status="failure", error=str(exc))
raise exc raise exc

View file

@ -2,12 +2,14 @@ import ast
import asyncio import asyncio
import inspect import inspect
import os import os
import traceback
import types import types
from enum import Enum from enum import Enum
from typing import TYPE_CHECKING, Any, AsyncIterator, Callable, Dict, Iterator, List, Mapping, Optional from typing import TYPE_CHECKING, Any, AsyncIterator, Callable, Dict, Iterator, List, Mapping, Optional
from loguru import logger from loguru import logger
from langflow.exceptions.component import ComponentBuildException
from langflow.graph.schema import INPUT_COMPONENTS, OUTPUT_COMPONENTS, InterfaceComponentTypes, ResultData from langflow.graph.schema import INPUT_COMPONENTS, OUTPUT_COMPONENTS, InterfaceComponentTypes, ResultData
from langflow.graph.utils import UnbuiltObject, UnbuiltResult from langflow.graph.utils import UnbuiltObject, UnbuiltResult
from langflow.interface.initialize import loading from langflow.interface.initialize import loading
@ -621,8 +623,9 @@ class Vertex:
self.logs = build_logs(self, result) self.logs = build_logs(self, result)
self._update_built_object_and_artifacts(result) self._update_built_object_and_artifacts(result)
except Exception as exc: except Exception as exc:
tb = traceback.format_exc()
logger.exception(exc) logger.exception(exc)
raise ValueError(f"Error building Component {self.display_name}:\n\n{exc}") from exc raise ComponentBuildException(f"Error building Component {self.display_name}:\n\n{exc}", tb) from exc
def _update_built_object_and_artifacts(self, result): def _update_built_object_and_artifacts(self, result):
""" """