Merge branch 'dev' into update_components

This commit is contained in:
github-actions[bot] 2024-06-27 19:17:44 +00:00 • committed by GitHub
commit 6d21750b4c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 90 additions and 18 deletions

View file

@ -1950,12 +1950,12 @@
} }
}, },
"node_modules/braces": { "node_modules/braces": {
"version": "3.0.2", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"fill-range": "^7.0.1" "fill-range": "^7.1.1"
}, },
"engines": { "engines": {
"node": ">=8" "node": ">=8"
@ -2763,9 +2763,9 @@
} }
}, },
"node_modules/fill-range": { "node_modules/fill-range": {
"version": "7.0.1", "version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"to-regex-range": "^5.0.1" "to-regex-range": "^5.0.1"

View file

@ -83,7 +83,7 @@ class CustomComponent(BaseComponent):
_flows_data: Optional[List[Data]] = None _flows_data: Optional[List[Data]] = None
_outputs: List[OutputLog] = [] _outputs: List[OutputLog] = []
_logs: List[Log] = [] _logs: List[Log] = []
_tracing_service: "TracingService" tracing_service: Optional["TracingService"] = None
def update_state(self, name: str, value: Any): def update_state(self, name: str, value: Any):
if not self.vertex: if not self.vertex:
@ -488,14 +488,14 @@ class CustomComponent(BaseComponent):
Args: Args:
message (LoggableType | list[LoggableType]): The message to log. message (LoggableType | list[LoggableType]): The message to log.
""" """
if name is None: if name is None and self.display_name:
name = self.display_name if self.display_name else self.__class__.__name__ name = self.display_name
if hasattr(message, "model_dump") and isinstance(message, BaseModel): else:
message = message.model_dump() name = self.__class__.__name__
log = Log(message=message, type=get_artifact_type(message), name=name) log = Log(message=message, type=get_artifact_type(message), name=name)
self._logs.append(log) self._logs.append(log)
if self.vertex: if self.tracing_service and self.vertex:
self._tracing_service.add_log(trace_name=self.vertex.id, log=log) self.tracing_service.add_log(trace_name=self.vertex.id, log=log)
def post_code_processing(self, new_build_config: dict, current_build_config: dict): def post_code_processing(self, new_build_config: dict, current_build_config: dict):
""" """

View file

@ -18,8 +18,12 @@ def migrate_messages_from_monitor_service_to_database(session: Session) -> bool:
from langflow.schema.message import Message from langflow.schema.message import Message
from langflow.services.database.models.message import MessageTable from langflow.services.database.models.message import MessageTable
try:
monitor_service = get_monitor_service() monitor_service = get_monitor_service()
messages_df = monitor_service.get_messages() messages_df = monitor_service.get_messages()
except Exception as e:
logger.error(f"Error retrieving messages from monitor service: {e}")
return False
if messages_df.empty: if messages_df.empty:
logger.info("No messages to migrate.") logger.info("No messages to migrate.")

View file

@ -0,0 +1,33 @@
from abc import ABC, abstractmethod
from typing import Any, Dict
from uuid import UUID
class BaseTracer(ABC):
@abstractmethod
def __init__(self, trace_name: str, trace_type: str, project_name: str, trace_id: UUID):
raise NotImplementedError
@abstractmethod
def ready(self):
raise NotImplementedError
@abstractmethod
def add_trace(
self, trace_name: str, trace_type: str, inputs: Dict[str, Any], metadata: Dict[str, Any] | None = None
):
raise NotImplementedError
@abstractmethod
def end_trace(self, trace_name: str, outputs: Dict[str, Any] | None = None, error: str | None = None):
raise NotImplementedError
@abstractmethod
def end(
self,
inputs: dict[str, Any],
outputs: Dict[str, Any],
error: str | None = None,
metadata: dict[str, Any] | None = None,
):
raise NotImplementedError

View file

@ -12,6 +12,7 @@ from loguru import logger
from langflow.schema.data import Data from langflow.schema.data import Data
from langflow.services.base import Service from langflow.services.base import Service
from langflow.services.tracing.base import BaseTracer
from langflow.services.tracing.schema import Log from langflow.services.tracing.schema import Log
if TYPE_CHECKING: if TYPE_CHECKING:
@ -180,7 +181,7 @@ class TracingService(Service):
self.outputs_metadata[trace_name] |= output_metadata or {} self.outputs_metadata[trace_name] |= output_metadata or {}
class LangSmithTracer: class LangSmithTracer(BaseTracer):
def __init__(self, trace_name: str, trace_type: str, project_name: str, trace_id: UUID): def __init__(self, trace_name: str, trace_type: str, project_name: str, trace_id: UUID):
from langsmith.run_trees import RunTree from langsmith.run_trees import RunTree
@ -292,7 +293,7 @@ class LangSmithTracer:
inputs: dict[str, Any], inputs: dict[str, Any],
outputs: Dict[str, Any], outputs: Dict[str, Any],
error: str | None = None, error: str | None = None,
metadata: Optional[dict[str, Any]] = None, metadata: dict[str, Any] | None = None,
): ):
self._run_tree.add_metadata({"inputs": inputs, "metadata": metadata or {}}) self._run_tree.add_metadata({"inputs": inputs, "metadata": metadata or {}})
self._run_tree.end(outputs=outputs, error=error) self._run_tree.end(outputs=outputs, error=error)

View file

@ -0,0 +1,34 @@
from typing import Any, Dict
from langflow.schema.data import Data
def convert_to_langchain_type(value):
from langflow.schema.message import Message
if isinstance(value, dict):
for key, _value in value.copy().items():
_value = convert_to_langchain_type(_value)
value[key] = _value
elif isinstance(value, list):
value = [convert_to_langchain_type(v) for v in value]
elif isinstance(value, Message):
if "prompt" in value:
value = value.load_lc_prompt()
elif value.sender:
value = value.to_lc_message()
else:
value = value.to_lc_document()
elif isinstance(value, Data):
if "text" in value.data:
value = value.to_lc_document()
else:
value = value.data
return value
def convert_to_langchain_types(io_dict: Dict[str, Any]):
converted = {}
for key, value in io_dict.items():
converted[key] = convert_to_langchain_type(value)
return converted