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,
VerticesOrderResponse,
)
from langflow.schema.schema import Log
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.exceptions.component import ComponentBuildException
from langflow.graph.vertex.types import InterfaceVertex
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)
except Exception as exc:
tb = traceback.format_exc()
logger.exception(f"Error building Component: {exc}")
params = format_exception_message(exc)
if isinstance(exc, ComponentBuildException):
params = exc.message
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}
valid = False
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 itertools import chain
from typing import TYPE_CHECKING, Dict, Generator, List, Optional, Tuple, Type, Union
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.graph.constants import lazy_load_vertex_dict
from langflow.graph.graph.runnable_vertices_manager import RunnableVerticesManager
@ -830,7 +831,8 @@ class Graph:
log_transaction(flow_id, vertex, status="success")
return result_dict, params, valid, artifacts, vertex
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
log_transaction(flow_id, vertex, status="failure", error=str(exc))
raise exc

View file

@ -2,12 +2,14 @@ import ast
import asyncio
import inspect
import os
import traceback
import types
from enum import Enum
from typing import TYPE_CHECKING, Any, AsyncIterator, Callable, Dict, Iterator, List, Mapping, Optional
from loguru import logger
from langflow.exceptions.component import ComponentBuildException
from langflow.graph.schema import INPUT_COMPONENTS, OUTPUT_COMPONENTS, InterfaceComponentTypes, ResultData
from langflow.graph.utils import UnbuiltObject, UnbuiltResult
from langflow.interface.initialize import loading
@ -621,8 +623,9 @@ class Vertex:
self.logs = build_logs(self, result)
self._update_built_object_and_artifacts(result)
except Exception as exc:
tb = traceback.format_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):
"""