Merge remote-tracking branch 'origin/dev' into zustand/io/migration

This commit is contained in:
Gabriel Luiz Freitas Almeida 2024-02-07 22:42:20 -03:00
commit 4bba0212ff
7 changed files with 36 additions and 13 deletions

View file

@ -1,6 +1,6 @@
[tool.poetry] [tool.poetry]
name = "langflow" name = "langflow"
version = "0.6.6" version = "0.6.7a1"
description = "A Python package with a built-in web application" description = "A Python package with a built-in web application"
authors = ["Logspace <contact@logspace.ai>"] authors = ["Logspace <contact@logspace.ai>"]
maintainers = [ maintainers = [

View file

@ -95,12 +95,15 @@ class OpenAIEmbeddingsComponent(CustomComponent):
tikToken_enable: bool = True, tikToken_enable: bool = True,
tiktoken_model_name: Optional[str] = None, tiktoken_model_name: Optional[str] = None,
) -> Union[OpenAIEmbeddings, Callable]: ) -> Union[OpenAIEmbeddings, Callable]:
# This is to avoid errors with Vector Stores (e.g Chroma)
if disallowed_special == ["all"]:
disallowed_special = "all"
return OpenAIEmbeddings( return OpenAIEmbeddings(
tiktoken_enabled=tikToken_enable, tiktoken_enabled=tikToken_enable,
default_headers=default_headers, default_headers=default_headers,
default_query=default_query, default_query=default_query,
allowed_special=set(allowed_special), allowed_special=set(allowed_special),
disallowed_special=set(disallowed_special), disallowed_special="all",
chunk_size=chunk_size, chunk_size=chunk_size,
client=client, client=client,
deployment=deployment, deployment=deployment,

View file

@ -1,7 +1,8 @@
from langflow import CustomComponent from typing import List
from langchain.text_splitter import CharacterTextSplitter from langchain.text_splitter import CharacterTextSplitter
from langchain_core.documents.base import Document from langchain_core.documents.base import Document
from typing import List from langflow import CustomComponent
class CharacterTextSplitterComponent(CustomComponent): class CharacterTextSplitterComponent(CustomComponent):
@ -23,8 +24,10 @@ class CharacterTextSplitterComponent(CustomComponent):
chunk_size: int = 1000, chunk_size: int = 1000,
separator: str = "\n", separator: str = "\n",
) -> List[Document]: ) -> List[Document]:
return CharacterTextSplitter( docs = CharacterTextSplitter(
chunk_overlap=chunk_overlap, chunk_overlap=chunk_overlap,
chunk_size=chunk_size, chunk_size=chunk_size,
separator=separator, separator=separator,
).split_documents(documents) ).split_documents(documents)
self.status = docs
return docs

View file

@ -29,7 +29,7 @@ class ChromaComponent(CustomComponent):
"collection_name": {"display_name": "Collection Name", "value": "langflow"}, "collection_name": {"display_name": "Collection Name", "value": "langflow"},
"persist": {"display_name": "Persist"}, "persist": {"display_name": "Persist"},
"persist_directory": {"display_name": "Persist Directory"}, "persist_directory": {"display_name": "Persist Directory"},
"code": {"show": False, "display_name": "Code"}, "code": {"advanced": True, "display_name": "Code"},
"documents": {"display_name": "Documents", "is_list": True}, "documents": {"display_name": "Documents", "is_list": True},
"embedding": {"display_name": "Embedding"}, "embedding": {"display_name": "Embedding"},
"chroma_server_cors_allow_origins": { "chroma_server_cors_allow_origins": {

View file

@ -7,20 +7,23 @@ import {
DropdownMenuTrigger, DropdownMenuTrigger,
} from "../../../ui/dropdown-menu"; } from "../../../ui/dropdown-menu";
import { useNavigate } from "react-router-dom"; import { useNavigate, useParams } from "react-router-dom";
import FlowSettingsModal from "../../../../modals/flowSettingsModal"; import FlowSettingsModal from "../../../../modals/flowSettingsModal";
import useAlertStore from "../../../../stores/alertStore"; import useAlertStore from "../../../../stores/alertStore";
import useFlowsManagerStore from "../../../../stores/flowsManagerStore"; import useFlowsManagerStore from "../../../../stores/flowsManagerStore";
import IconComponent from "../../../genericIconComponent"; import IconComponent from "../../../genericIconComponent";
import { Button } from "../../../ui/button"; import { Button } from "../../../ui/button";
import { Node } from "reactflow";
import useFlowStore from "../../../../stores/flowStore";
export const MenuBar = (): JSX.Element => { export const MenuBar = ({removeFunction}: {removeFunction: (nodes: Node[]) => void}): JSX.Element => {
const addFlow = useFlowsManagerStore((state) => state.addFlow); const addFlow = useFlowsManagerStore((state) => state.addFlow);
const currentFlow = useFlowsManagerStore((state) => state.currentFlow); const currentFlow = useFlowsManagerStore((state) => state.currentFlow);
const setErrorData = useAlertStore((state) => state.setErrorData); const setErrorData = useAlertStore((state) => state.setErrorData);
const undo = useFlowsManagerStore((state) => state.undo); const undo = useFlowsManagerStore((state) => state.undo);
const redo = useFlowsManagerStore((state) => state.redo); const redo = useFlowsManagerStore((state) => state.redo);
const [openSettings, setOpenSettings] = useState(false); const [openSettings, setOpenSettings] = useState(false);
const n = useFlowStore((state) => state.nodes);
const navigate = useNavigate(); const navigate = useNavigate();
@ -39,6 +42,7 @@ export const MenuBar = (): JSX.Element => {
<div className="round-button-div"> <div className="round-button-div">
<button <button
onClick={() => { onClick={() => {
removeFunction(n)
navigate(-1); navigate(-1);
}} }}
> >

View file

@ -1,6 +1,6 @@
import { useContext, useEffect } from "react"; import { useContext, useEffect } from "react";
import { FaDiscord, FaGithub, FaTwitter } from "react-icons/fa"; import { FaDiscord, FaGithub, FaTwitter } from "react-icons/fa";
import { Link, useLocation, useNavigate } from "react-router-dom"; import { Link, useLocation, useNavigate, useParams } from "react-router-dom";
import AlertDropdown from "../../alerts/alertDropDown"; import AlertDropdown from "../../alerts/alertDropDown";
import { USER_PROJECTS_HEADER } from "../../constants/constants"; import { USER_PROJECTS_HEADER } from "../../constants/constants";
import { AuthContext } from "../../contexts/authContext"; import { AuthContext } from "../../contexts/authContext";
@ -21,14 +21,19 @@ import {
} from "../ui/dropdown-menu"; } from "../ui/dropdown-menu";
import { Separator } from "../ui/separator"; import { Separator } from "../ui/separator";
import MenuBar from "./components/menuBar"; import MenuBar from "./components/menuBar";
import useFlowsManagerStore from "../../stores/flowsManagerStore";
import useFlowStore from "../../stores/flowStore";
import { Node } from "reactflow";
export default function Header(): JSX.Element { export default function Header(): JSX.Element {
const notificationCenter = useAlertStore((state) => state.notificationCenter); const notificationCenter = useAlertStore((state) => state.notificationCenter);
const location = useLocation(); const location = useLocation();
const { logout, autoLogin, isAdmin, userData } = useContext(AuthContext); const { logout, autoLogin, isAdmin, userData } = useContext(AuthContext);
const navigate = useNavigate(); const navigate = useNavigate();
const removeFlow = useFlowsManagerStore((store) => store.removeFlow);
const hasStore = useStoreStore((state) => state.hasStore); const hasStore = useStoreStore((state) => state.hasStore);
const {id} = useParams();
const n = useFlowStore((state) => state.nodes);
const dark = useDarkStore((state) => state.dark); const dark = useDarkStore((state) => state.dark);
const setDark = useDarkStore((state) => state.setDark); const setDark = useDarkStore((state) => state.setDark);
@ -43,13 +48,19 @@ export default function Header(): JSX.Element {
window.localStorage.setItem("isDark", dark.toString()); window.localStorage.setItem("isDark", dark.toString());
}, [dark]); }, [dark]);
async function checkForChanges(nodes: Node[]): Promise<void> {
if (nodes.length === 0) {
await removeFlow(id!)
}
}
return ( return (
<div className="header-arrangement"> <div className="header-arrangement">
<div className="header-start-display lg:w-[30%]"> <div className="header-start-display lg:w-[30%]">
<Link to="/"> <Link to="/" onClick={() => checkForChanges(n)}>
<span className="ml-4 text-2xl">⛓️</span> <span className="ml-4 text-2xl">⛓️</span>
</Link> </Link>
<MenuBar /> <MenuBar removeFunction={checkForChanges} />
</div> </div>
<div className="round-button-div"> <div className="round-button-div">
<Link to="/"> <Link to="/">
@ -62,6 +73,7 @@ export default function Header(): JSX.Element {
: "secondary" : "secondary"
} }
size="sm" size="sm"
onClick={() => {checkForChanges(n)}}
> >
<IconComponent name="Home" className="h-4 w-4" /> <IconComponent name="Home" className="h-4 w-4" />
<div className="hidden flex-1 md:block">{USER_PROJECTS_HEADER}</div> <div className="hidden flex-1 md:block">{USER_PROJECTS_HEADER}</div>
@ -85,6 +97,7 @@ export default function Header(): JSX.Element {
className="gap-2" className="gap-2"
variant={location.pathname === "/store" ? "primary" : "secondary"} variant={location.pathname === "/store" ? "primary" : "secondary"}
size="sm" size="sm"
onClick={() => {checkForChanges(n)}}
> >
<IconComponent name="Store" className="h-4 w-4" /> <IconComponent name="Store" className="h-4 w-4" />
<div className="flex-1">Store</div> <div className="flex-1">Store</div>

View file

@ -1194,7 +1194,7 @@ export const createNewFlow = (
) => { ) => {
return { return {
description: flow?.description ?? getRandomDescription(), description: flow?.description ?? getRandomDescription(),
name: flow?.name ?? getRandomName(), name: flow?.name ? flow.name : "Untitled document",
data: flowData, data: flowData,
id: "", id: "",
is_component: flow?.is_component ?? false, is_component: flow?.is_component ?? false,