Merge branch 'dev' into update_components
This commit is contained in:
commit
6d21750b4c
6 changed files with 90 additions and 18 deletions
14
scripts/aws/package-lock.json
generated
14
scripts/aws/package-lock.json
generated
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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):
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
|
|
@ -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.")
|
||||||
|
|
|
||||||
33
src/backend/base/langflow/services/tracing/base.py
Normal file
33
src/backend/base/langflow/services/tracing/base.py
Normal 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
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
34
src/backend/base/langflow/services/tracing/utils.py
Normal file
34
src/backend/base/langflow/services/tracing/utils.py
Normal 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
|
||||||
Loading…
Add table
Add a link
Reference in a new issue