Update variable names and properties related to pinning to use "frozen" instead.
This commit is contained in:
parent
698fa6bf90
commit
3d70849341
13 changed files with 51 additions and 35 deletions
|
|
@ -114,7 +114,7 @@ async def build_vertex(
|
||||||
|
|
||||||
vertex = graph.get_vertex(vertex_id)
|
vertex = graph.get_vertex(vertex_id)
|
||||||
try:
|
try:
|
||||||
if not vertex.pinned or not vertex._built:
|
if not vertex.frozen or not vertex._built:
|
||||||
inputs_dict = inputs.model_dump() if inputs else {}
|
inputs_dict = inputs.model_dump() if inputs else {}
|
||||||
await vertex.build(user_id=current_user.id, inputs=inputs_dict)
|
await vertex.build(user_id=current_user.id, inputs=inputs_dict)
|
||||||
|
|
||||||
|
|
@ -233,7 +233,7 @@ async def build_vertex_stream(
|
||||||
)
|
)
|
||||||
yield str(stream_data)
|
yield str(stream_data)
|
||||||
|
|
||||||
elif not vertex.pinned or not vertex._built:
|
elif not vertex.frozen or not vertex._built:
|
||||||
logger.debug(f"Streaming vertex {vertex_id}")
|
logger.debug(f"Streaming vertex {vertex_id}")
|
||||||
stream_data = StreamData(
|
stream_data = StreamData(
|
||||||
event="message",
|
event="message",
|
||||||
|
|
|
||||||
|
|
@ -337,9 +337,9 @@ class Graph:
|
||||||
vertex.params = {}
|
vertex.params = {}
|
||||||
vertex._build_params()
|
vertex._build_params()
|
||||||
vertex.graph = self
|
vertex.graph = self
|
||||||
# If the vertex is pinned, we don't want
|
# If the vertex is frozen, we don't want
|
||||||
# to reset the results nor the _built attribute
|
# to reset the results nor the _built attribute
|
||||||
if not vertex.pinned:
|
if not vertex.frozen:
|
||||||
vertex._built = False
|
vertex._built = False
|
||||||
vertex.result = None
|
vertex.result = None
|
||||||
vertex.artifacts = {}
|
vertex.artifacts = {}
|
||||||
|
|
@ -352,7 +352,7 @@ class Graph:
|
||||||
for vid in [edge.source_id, edge.target_id]:
|
for vid in [edge.source_id, edge.target_id]:
|
||||||
if vid in self.vertex_map:
|
if vid in self.vertex_map:
|
||||||
_vertex = self.vertex_map[vid]
|
_vertex = self.vertex_map[vid]
|
||||||
if not _vertex.pinned:
|
if not _vertex.frozen:
|
||||||
_vertex._build_params()
|
_vertex._build_params()
|
||||||
|
|
||||||
def _add_vertex(self, vertex: Vertex) -> None:
|
def _add_vertex(self, vertex: Vertex) -> None:
|
||||||
|
|
|
||||||
|
|
@ -193,7 +193,7 @@ class Vertex:
|
||||||
self.base_type = state["base_type"]
|
self.base_type = state["base_type"]
|
||||||
self.is_task = state["is_task"]
|
self.is_task = state["is_task"]
|
||||||
self.id = state["id"]
|
self.id = state["id"]
|
||||||
self.pinned = state.get("pinned", False)
|
self.frozen = state.get("frozen", False)
|
||||||
self._parse_data()
|
self._parse_data()
|
||||||
if "_built_object" in state:
|
if "_built_object" in state:
|
||||||
self._built_object = state["_built_object"]
|
self._built_object = state["_built_object"]
|
||||||
|
|
@ -219,7 +219,7 @@ class Vertex:
|
||||||
self.data = self._data["data"]
|
self.data = self._data["data"]
|
||||||
self.output = self.data["node"]["base_classes"]
|
self.output = self.data["node"]["base_classes"]
|
||||||
self.display_name = self.data["node"].get("display_name", self.id.split("-")[0])
|
self.display_name = self.data["node"].get("display_name", self.id.split("-")[0])
|
||||||
self.pinned = self.data["node"].get("pinned", False)
|
self.frozen = self.data["node"].get("frozen", False)
|
||||||
self.selected_output_type = self.data["node"].get("selected_output_type")
|
self.selected_output_type = self.data["node"].get("selected_output_type")
|
||||||
self.is_input = self.data["node"].get("is_input") or self.is_input
|
self.is_input = self.data["node"].get("is_input") or self.is_input
|
||||||
self.is_output = self.data["node"].get("is_output") or self.is_output
|
self.is_output = self.data["node"].get("is_output") or self.is_output
|
||||||
|
|
@ -670,7 +670,7 @@ class Vertex:
|
||||||
self.build_inactive()
|
self.build_inactive()
|
||||||
return
|
return
|
||||||
|
|
||||||
if self.pinned and self._built:
|
if self.frozen and self._built:
|
||||||
return self.get_requester_result(requester)
|
return self.get_requester_result(requester)
|
||||||
self._reset()
|
self._reset()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
import ast
|
import ast
|
||||||
import json
|
import json
|
||||||
from typing import (AsyncIterator, Callable, Dict, Iterator, List, Optional,
|
from typing import AsyncIterator, Callable, Dict, Iterator, List, Optional, Union
|
||||||
Union)
|
|
||||||
|
|
||||||
import yaml
|
import yaml
|
||||||
from langchain_core.messages import AIMessage
|
from langchain_core.messages import AIMessage
|
||||||
|
|
@ -224,7 +223,7 @@ class ChainVertex(StatelessVertex):
|
||||||
if isinstance(value, PromptVertex):
|
if isinstance(value, PromptVertex):
|
||||||
# Build the PromptVertex, passing the tools if available
|
# Build the PromptVertex, passing the tools if available
|
||||||
tools = kwargs.get("tools", None)
|
tools = kwargs.get("tools", None)
|
||||||
self.params[key] = value.build(tools=tools, pinned=force)
|
self.params[key] = value.build(tools=tools, frozen=force)
|
||||||
|
|
||||||
await self._build(user_id=user_id)
|
await self._build(user_id=user_id)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ ATTR_FUNC_MAPPING: dict[str, Callable] = {
|
||||||
"beta": getattr_return_bool,
|
"beta": getattr_return_bool,
|
||||||
"documentation": getattr_return_str,
|
"documentation": getattr_return_str,
|
||||||
"icon": validate_icon,
|
"icon": validate_icon,
|
||||||
"pinned": getattr_return_bool,
|
"frozen": getattr_return_bool,
|
||||||
"is_input": getattr_return_bool,
|
"is_input": getattr_return_bool,
|
||||||
"is_output": getattr_return_bool,
|
"is_output": getattr_return_bool,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -59,8 +59,8 @@ class CustomComponent(Component):
|
||||||
"""The field configuration of the component. Defaults to an empty dictionary."""
|
"""The field configuration of the component. Defaults to an empty dictionary."""
|
||||||
field_order: Optional[List[str]] = None
|
field_order: Optional[List[str]] = None
|
||||||
"""The field order of the component. Defaults to an empty list."""
|
"""The field order of the component. Defaults to an empty list."""
|
||||||
pinned: Optional[bool] = False
|
frozen: Optional[bool] = False
|
||||||
"""The default pinned state of the component. Defaults to False."""
|
"""The default frozen state of the component. Defaults to False."""
|
||||||
build_parameters: Optional[dict] = None
|
build_parameters: Optional[dict] = None
|
||||||
"""The build parameters of the component. Defaults to None."""
|
"""The build parameters of the component. Defaults to None."""
|
||||||
selected_output_type: Optional[str] = None
|
selected_output_type: Optional[str] = None
|
||||||
|
|
|
||||||
|
|
@ -71,8 +71,8 @@ class FrontendNode(BaseModel):
|
||||||
"""Full path of the frontend node."""
|
"""Full path of the frontend node."""
|
||||||
field_formatters: FieldFormatters = Field(default_factory=FieldFormatters)
|
field_formatters: FieldFormatters = Field(default_factory=FieldFormatters)
|
||||||
"""Field formatters for the frontend node."""
|
"""Field formatters for the frontend node."""
|
||||||
pinned: bool = False
|
frozen: bool = False
|
||||||
"""Whether the frontend node is pinned."""
|
"""Whether the frontend node is frozen."""
|
||||||
|
|
||||||
beta: bool = False
|
beta: bool = False
|
||||||
error: Optional[str] = None
|
error: Optional[str] = None
|
||||||
|
|
@ -171,7 +171,9 @@ class FrontendNode(BaseModel):
|
||||||
return _type
|
return _type
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def handle_special_field(field, key: str, _type: str, SPECIAL_FIELD_HANDLERS) -> str:
|
def handle_special_field(
|
||||||
|
field, key: str, _type: str, SPECIAL_FIELD_HANDLERS
|
||||||
|
) -> str:
|
||||||
"""Handles special field by using the respective handler if present."""
|
"""Handles special field by using the respective handler if present."""
|
||||||
handler = SPECIAL_FIELD_HANDLERS.get(key)
|
handler = SPECIAL_FIELD_HANDLERS.get(key)
|
||||||
return handler(field) if handler else _type
|
return handler(field) if handler else _type
|
||||||
|
|
@ -182,7 +184,11 @@ class FrontendNode(BaseModel):
|
||||||
if "dict" in _type.lower() and field.name == "dict_":
|
if "dict" in _type.lower() and field.name == "dict_":
|
||||||
field.field_type = "file"
|
field.field_type = "file"
|
||||||
field.file_types = [".json", ".yaml", ".yml"]
|
field.file_types = [".json", ".yaml", ".yml"]
|
||||||
elif _type.startswith("Dict") or _type.startswith("Mapping") or _type.startswith("dict"):
|
elif (
|
||||||
|
_type.startswith("Dict")
|
||||||
|
or _type.startswith("Mapping")
|
||||||
|
or _type.startswith("dict")
|
||||||
|
):
|
||||||
field.field_type = "dict"
|
field.field_type = "dict"
|
||||||
return _type
|
return _type
|
||||||
|
|
||||||
|
|
@ -193,7 +199,9 @@ class FrontendNode(BaseModel):
|
||||||
field.value = value["default"]
|
field.value = value["default"]
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def handle_specific_field_values(field: TemplateField, key: str, name: Optional[str] = None) -> None:
|
def handle_specific_field_values(
|
||||||
|
field: TemplateField, key: str, name: Optional[str] = None
|
||||||
|
) -> None:
|
||||||
"""Handles specific field values for certain fields."""
|
"""Handles specific field values for certain fields."""
|
||||||
if key == "headers":
|
if key == "headers":
|
||||||
field.value = """{"Authorization": "Bearer <token>"}"""
|
field.value = """{"Authorization": "Bearer <token>"}"""
|
||||||
|
|
@ -201,7 +209,9 @@ class FrontendNode(BaseModel):
|
||||||
FrontendNode._handle_api_key_specific_field_values(field, key, name)
|
FrontendNode._handle_api_key_specific_field_values(field, key, name)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _handle_model_specific_field_values(field: TemplateField, key: str, name: Optional[str] = None) -> None:
|
def _handle_model_specific_field_values(
|
||||||
|
field: TemplateField, key: str, name: Optional[str] = None
|
||||||
|
) -> None:
|
||||||
"""Handles specific field values related to models."""
|
"""Handles specific field values related to models."""
|
||||||
model_dict = {
|
model_dict = {
|
||||||
"OpenAI": constants.OPENAI_MODELS,
|
"OpenAI": constants.OPENAI_MODELS,
|
||||||
|
|
@ -214,7 +224,9 @@ class FrontendNode(BaseModel):
|
||||||
field.is_list = True
|
field.is_list = True
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _handle_api_key_specific_field_values(field: TemplateField, key: str, name: Optional[str] = None) -> None:
|
def _handle_api_key_specific_field_values(
|
||||||
|
field: TemplateField, key: str, name: Optional[str] = None
|
||||||
|
) -> None:
|
||||||
"""Handles specific field values related to API keys."""
|
"""Handles specific field values related to API keys."""
|
||||||
if "api_key" in key and "OpenAI" in str(name):
|
if "api_key" in key and "OpenAI" in str(name):
|
||||||
field.display_name = "OpenAI API Key"
|
field.display_name = "OpenAI API Key"
|
||||||
|
|
@ -254,7 +266,10 @@ class FrontendNode(BaseModel):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def should_be_password(key: str, show: bool) -> bool:
|
def should_be_password(key: str, show: bool) -> bool:
|
||||||
"""Determines whether the field should be a password field."""
|
"""Determines whether the field should be a password field."""
|
||||||
return any(text in key.lower() for text in {"password", "token", "api", "key"}) and show
|
return (
|
||||||
|
any(text in key.lower() for text in {"password", "token", "api", "key"})
|
||||||
|
and show
|
||||||
|
)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def should_be_multiline(key: str) -> bool:
|
def should_be_multiline(key: str) -> bool:
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ from langflow.template.template.base import Template
|
||||||
|
|
||||||
|
|
||||||
class MemoryFrontendNode(FrontendNode):
|
class MemoryFrontendNode(FrontendNode):
|
||||||
pinned: bool = True
|
frozen: bool = True
|
||||||
|
|
||||||
def add_extra_fields(self) -> None:
|
def add_extra_fields(self) -> None:
|
||||||
# chat history should have another way to add common field?
|
# chat history should have another way to add common field?
|
||||||
|
|
@ -80,7 +80,9 @@ class MemoryFrontendNode(FrontendNode):
|
||||||
field.show = True
|
field.show = True
|
||||||
field.advanced = False
|
field.advanced = False
|
||||||
field.value = ""
|
field.value = ""
|
||||||
field.info = INPUT_KEY_INFO if field.name == "input_key" else OUTPUT_KEY_INFO
|
field.info = (
|
||||||
|
INPUT_KEY_INFO if field.name == "input_key" else OUTPUT_KEY_INFO
|
||||||
|
)
|
||||||
|
|
||||||
if field.name == "memory_key":
|
if field.name == "memory_key":
|
||||||
field.value = "chat_history"
|
field.value = "chat_history"
|
||||||
|
|
|
||||||
|
|
@ -359,19 +359,19 @@ export default function ParameterComponent({
|
||||||
(info !== "" ? " flex items-center" : "")
|
(info !== "" ? " flex items-center" : "")
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
{!left && data.node?.pinned && (
|
{!left && data.node?.frozen && (
|
||||||
<div>
|
<div>
|
||||||
<IconComponent className="h-5 w-5 text-ice" name={"Snowflake"} />
|
<IconComponent className="h-5 w-5 text-ice" name={"Snowflake"} />
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
{proxy ? (
|
{proxy ? (
|
||||||
<ShadTooltip content={<span>{proxy.id}</span>}>
|
<ShadTooltip content={<span>{proxy.id}</span>}>
|
||||||
<span className={!left && data.node?.pinned ? " text-ice" : ""}>
|
<span className={!left && data.node?.frozen ? " text-ice" : ""}>
|
||||||
{title}
|
{title}
|
||||||
</span>
|
</span>
|
||||||
</ShadTooltip>
|
</ShadTooltip>
|
||||||
) : (
|
) : (
|
||||||
<span className={!left && data.node?.pinned ? " text-ice" : ""}>
|
<span className={!left && data.node?.frozen ? " text-ice" : ""}>
|
||||||
{title}
|
{title}
|
||||||
</span>
|
</span>
|
||||||
)}
|
)}
|
||||||
|
|
|
||||||
|
|
@ -109,7 +109,7 @@ export default function Page({
|
||||||
...old.data,
|
...old.data,
|
||||||
node: {
|
node: {
|
||||||
...old.data.node,
|
...old.data.node,
|
||||||
pinned: old.data?.node?.pinned ? false : true,
|
frozen: old.data?.node?.frozen ? false : true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
|
@ -491,4 +491,4 @@ export default function Page({
|
||||||
</main>
|
</main>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ export default function NodeToolbarComponent({
|
||||||
const isMinimal = numberOfHandles <= 1;
|
const isMinimal = numberOfHandles <= 1;
|
||||||
const isGroup = data.node?.flow ? true : false;
|
const isGroup = data.node?.flow ? true : false;
|
||||||
|
|
||||||
const pinned = data.node?.pinned ?? false;
|
const frozen = data.node?.frozen ?? false;
|
||||||
const paste = useFlowStore((state) => state.paste);
|
const paste = useFlowStore((state) => state.paste);
|
||||||
const nodes = useFlowStore((state) => state.nodes);
|
const nodes = useFlowStore((state) => state.nodes);
|
||||||
const edges = useFlowStore((state) => state.edges);
|
const edges = useFlowStore((state) => state.edges);
|
||||||
|
|
@ -280,7 +280,7 @@ export default function NodeToolbarComponent({
|
||||||
...old.data,
|
...old.data,
|
||||||
node: {
|
node: {
|
||||||
...old.data.node,
|
...old.data.node,
|
||||||
pinned: old.data?.node?.pinned ? false : true,
|
frozen: old.data?.node?.frozen ? false : true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
|
@ -291,7 +291,7 @@ export default function NodeToolbarComponent({
|
||||||
className={cn(
|
className={cn(
|
||||||
"h-4 w-4 transition-all",
|
"h-4 w-4 transition-all",
|
||||||
// TODO UPDATE THIS COLOR TO BE A VARIABLE
|
// TODO UPDATE THIS COLOR TO BE A VARIABLE
|
||||||
pinned ? "animate-wiggle text-ice" : ""
|
frozen ? "animate-wiggle text-ice" : ""
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
</button>
|
</button>
|
||||||
|
|
|
||||||
|
|
@ -190,8 +190,8 @@ const useFlowStore = create<FlowStoreType>((set, get) => ({
|
||||||
get().setNodes((oldNodes) =>
|
get().setNodes((oldNodes) =>
|
||||||
oldNodes.map((node) => {
|
oldNodes.map((node) => {
|
||||||
if (node.id === id) {
|
if (node.id === id) {
|
||||||
if((node.data as NodeDataType).node?.pinned){
|
if ((node.data as NodeDataType).node?.frozen) {
|
||||||
(newChange.data as NodeDataType).node!.pinned = false;
|
(newChange.data as NodeDataType).node!.frozen = false;
|
||||||
}
|
}
|
||||||
return newChange;
|
return newChange;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ export type APIClassType = {
|
||||||
documentation: string;
|
documentation: string;
|
||||||
error?: string;
|
error?: string;
|
||||||
official?: boolean;
|
official?: boolean;
|
||||||
pinned?: boolean;
|
frozen?: boolean;
|
||||||
flow?: FlowType;
|
flow?: FlowType;
|
||||||
[key: string]:
|
[key: string]:
|
||||||
| Array<string>
|
| Array<string>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue