Merge branch 'dev' into fix/status_export
This commit is contained in:
commit
c81a386cf1
22 changed files with 577 additions and 585 deletions
4
.github/workflows/pre-release.yml
vendored
4
.github/workflows/pre-release.yml
vendored
|
|
@ -35,6 +35,10 @@ jobs:
|
||||||
with:
|
with:
|
||||||
python-version: "3.10"
|
python-version: "3.10"
|
||||||
cache: "poetry"
|
cache: "poetry"
|
||||||
|
- name: Set up Nodejs 20
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: "20"
|
||||||
- name: Check Version
|
- name: Check Version
|
||||||
id: check-version
|
id: check-version
|
||||||
run: |
|
run: |
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,6 @@ WORKDIR /app
|
||||||
COPY pyproject.toml poetry.lock README.md ./
|
COPY pyproject.toml poetry.lock README.md ./
|
||||||
COPY src/ ./src
|
COPY src/ ./src
|
||||||
COPY scripts/ ./scripts
|
COPY scripts/ ./scripts
|
||||||
|
|
||||||
RUN python -m pip install requests --user && cd ./scripts && python update_dependencies.py
|
RUN python -m pip install requests --user && cd ./scripts && python update_dependencies.py
|
||||||
RUN $POETRY_HOME/bin/poetry lock --no-update \
|
RUN $POETRY_HOME/bin/poetry lock --no-update \
|
||||||
&& $POETRY_HOME/bin/poetry install --no-interaction --no-ansi -E deploy \
|
&& $POETRY_HOME/bin/poetry install --no-interaction --no-ansi -E deploy \
|
||||||
|
|
|
||||||
1049
poetry.lock
generated
1049
poetry.lock
generated
File diff suppressed because it is too large
Load diff
|
|
@ -1,6 +1,6 @@
|
||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "langflow"
|
name = "langflow"
|
||||||
version = "1.0.0a43"
|
version = "1.0.0a47"
|
||||||
description = "A Python package with a built-in web application"
|
description = "A Python package with a built-in web application"
|
||||||
authors = ["Langflow <contact@langflow.org>"]
|
authors = ["Langflow <contact@langflow.org>"]
|
||||||
maintainers = [
|
maintainers = [
|
||||||
|
|
@ -66,7 +66,7 @@ qianfan = "0.3.5"
|
||||||
pgvector = "^0.2.3"
|
pgvector = "^0.2.3"
|
||||||
pyautogen = "^0.2.0"
|
pyautogen = "^0.2.0"
|
||||||
langchain-google-genai = "^1.0.1"
|
langchain-google-genai = "^1.0.1"
|
||||||
langchain-cohere = "^0.1.0rc1"
|
langchain-cohere = "^0.1.5"
|
||||||
elasticsearch = "^8.12.0"
|
elasticsearch = "^8.12.0"
|
||||||
pytube = "^15.0.0"
|
pytube = "^15.0.0"
|
||||||
dspy-ai = "^2.4.0"
|
dspy-ai = "^2.4.0"
|
||||||
|
|
@ -81,7 +81,7 @@ langchain-google-vertexai = "^1.0.3"
|
||||||
langchain-groq = "^0.1.3"
|
langchain-groq = "^0.1.3"
|
||||||
langchain-pinecone = "^0.1.0"
|
langchain-pinecone = "^0.1.0"
|
||||||
langchain-mistralai = "^0.1.6"
|
langchain-mistralai = "^0.1.6"
|
||||||
couchbase = "^4.2.1"
|
couchbase = { extras = ["couchbase"], version = "^4.2.1", optional = true }
|
||||||
youtube-transcript-api = "^0.6.2"
|
youtube-transcript-api = "^0.6.2"
|
||||||
markdown = "^3.6"
|
markdown = "^3.6"
|
||||||
langchain-chroma = "^0.1.1"
|
langchain-chroma = "^0.1.1"
|
||||||
|
|
@ -118,6 +118,7 @@ vulture = "^2.11"
|
||||||
|
|
||||||
[tool.poetry.extras]
|
[tool.poetry.extras]
|
||||||
deploy = ["celery", "redis", "flower"]
|
deploy = ["celery", "redis", "flower"]
|
||||||
|
couchbase = ["couchbase"]
|
||||||
local = ["llama-cpp-python", "sentence-transformers", "ctransformers"]
|
local = ["llama-cpp-python", "sentence-transformers", "ctransformers"]
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -140,7 +141,7 @@ testpaths = ["tests", "integration"]
|
||||||
console_output_style = "progress"
|
console_output_style = "progress"
|
||||||
filterwarnings = ["ignore::DeprecationWarning"]
|
filterwarnings = ["ignore::DeprecationWarning"]
|
||||||
log_cli = true
|
log_cli = true
|
||||||
markers = ["async_test"]
|
markers = ["async_test", "api_key_required"]
|
||||||
|
|
||||||
|
|
||||||
[tool.ruff]
|
[tool.ruff]
|
||||||
|
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
||||||
from .AstraDBSearch import AstraDBSearchComponent
|
|
||||||
from .ChromaSearch import ChromaSearchComponent
|
|
||||||
from .FAISSSearch import FAISSSearchComponent
|
|
||||||
from .MongoDBAtlasVectorSearch import MongoDBAtlasSearchComponent
|
|
||||||
from .PineconeSearch import PineconeSearchComponent
|
|
||||||
from .QdrantSearch import QdrantSearchComponent
|
|
||||||
from .RedisSearch import RedisSearchComponent
|
|
||||||
from .SupabaseVectorStoreSearch import SupabaseSearchComponent
|
|
||||||
from .VectaraSearch import VectaraSearchComponent
|
|
||||||
from .WeaviateSearch import WeaviateSearchVectorStore
|
|
||||||
from .pgvectorSearch import PGVectorSearchComponent
|
|
||||||
from .Couchbase import CouchbaseSearchComponent # type: ignore
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
"AstraDBSearchComponent",
|
|
||||||
"ChromaSearchComponent",
|
|
||||||
"CouchbaseSearchComponent",
|
|
||||||
"FAISSSearchComponent",
|
|
||||||
"MongoDBAtlasSearchComponent",
|
|
||||||
"PineconeSearchComponent",
|
|
||||||
"QdrantSearchComponent",
|
|
||||||
"RedisSearchComponent",
|
|
||||||
"SupabaseSearchComponent",
|
|
||||||
"VectaraSearchComponent",
|
|
||||||
"WeaviateSearchVectorStore",
|
|
||||||
"PGVectorSearchComponent",
|
|
||||||
]
|
|
||||||
12
src/backend/base/poetry.lock
generated
12
src/backend/base/poetry.lock
generated
|
|
@ -1296,13 +1296,13 @@ types-requests = ">=2.31.0.2,<3.0.0.0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "langsmith"
|
name = "langsmith"
|
||||||
version = "0.1.72"
|
version = "0.1.75"
|
||||||
description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform."
|
description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform."
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "<4.0,>=3.8.1"
|
python-versions = "<4.0,>=3.8.1"
|
||||||
files = [
|
files = [
|
||||||
{file = "langsmith-0.1.72-py3-none-any.whl", hash = "sha256:a4456707669521bd75b7431b9205a6b99579fb9ff01bd338f52d29df11a7662d"},
|
{file = "langsmith-0.1.75-py3-none-any.whl", hash = "sha256:d08b08dd6b3fa4da170377f95123d77122ef4c52999d10fff4ae08ff70d07aed"},
|
||||||
{file = "langsmith-0.1.72.tar.gz", hash = "sha256:262ae9e8aceaba50f3a0f5b6eb559d6110886f0afc6b0ed5270e7d3d3f1fd8d6"},
|
{file = "langsmith-0.1.75.tar.gz", hash = "sha256:61274e144ea94c297dd78ce03e6dfae18459fe9bd8ab5094d61a0c4816561279"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
|
|
@ -1600,13 +1600,13 @@ files = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "marshmallow"
|
name = "marshmallow"
|
||||||
version = "3.21.2"
|
version = "3.21.3"
|
||||||
description = "A lightweight library for converting complex datatypes to and from native Python datatypes."
|
description = "A lightweight library for converting complex datatypes to and from native Python datatypes."
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
{file = "marshmallow-3.21.2-py3-none-any.whl", hash = "sha256:70b54a6282f4704d12c0a41599682c5c5450e843b9ec406308653b47c59648a1"},
|
{file = "marshmallow-3.21.3-py3-none-any.whl", hash = "sha256:86ce7fb914aa865001a4b2092c4c2872d13bc347f3d42673272cabfdbad386f1"},
|
||||||
{file = "marshmallow-3.21.2.tar.gz", hash = "sha256:82408deadd8b33d56338d2182d455db632c6313aa2af61916672146bb32edc56"},
|
{file = "marshmallow-3.21.3.tar.gz", hash = "sha256:4f57c5e050a54d66361e826f94fba213eb10b67b2fdb02c3e0343ce207ba1662"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "langflow-base"
|
name = "langflow-base"
|
||||||
version = "0.0.57"
|
version = "0.0.58"
|
||||||
description = "A Python package with a built-in web application"
|
description = "A Python package with a built-in web application"
|
||||||
authors = ["Langflow <contact@langflow.org>"]
|
authors = ["Langflow <contact@langflow.org>"]
|
||||||
maintainers = [
|
maintainers = [
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { cloneDeep } from "lodash";
|
|
||||||
import emojiRegex from "emoji-regex";
|
import emojiRegex from "emoji-regex";
|
||||||
|
import { cloneDeep } from "lodash";
|
||||||
import { useCallback, useEffect, useMemo, useState } from "react";
|
import { useCallback, useEffect, useMemo, useState } from "react";
|
||||||
import { NodeToolbar, useUpdateNodeInternals } from "reactflow";
|
import { NodeToolbar, useUpdateNodeInternals } from "reactflow";
|
||||||
import IconComponent from "../../components/genericIconComponent";
|
import IconComponent from "../../components/genericIconComponent";
|
||||||
|
|
@ -133,7 +133,7 @@ export default function ChatView({
|
||||||
function updateChat(
|
function updateChat(
|
||||||
chat: ChatMessageType,
|
chat: ChatMessageType,
|
||||||
message: string,
|
message: string,
|
||||||
stream_url?: string
|
stream_url?: string,
|
||||||
) {
|
) {
|
||||||
// if (message === "") return;
|
// if (message === "") return;
|
||||||
chat.message = message;
|
chat.message = message;
|
||||||
|
|
@ -165,14 +165,12 @@ export default function ChatView({
|
||||||
className="flex gap-1"
|
className="flex gap-1"
|
||||||
size="none"
|
size="none"
|
||||||
variant="none"
|
variant="none"
|
||||||
|
disabled={lockChat}
|
||||||
onClick={() => handleSelectChange("builds")}
|
onClick={() => handleSelectChange("builds")}
|
||||||
>
|
>
|
||||||
<IconComponent
|
<IconComponent
|
||||||
name="Eraser"
|
name="Eraser"
|
||||||
className={classNames(
|
className={classNames("h-5 w-5 text-primary")}
|
||||||
"h-5 w-5 transition-all duration-100",
|
|
||||||
lockChat ? "animate-pulse text-primary" : "text-primary"
|
|
||||||
)}
|
|
||||||
aria-hidden="true"
|
aria-hidden="true"
|
||||||
/>
|
/>
|
||||||
</Button>
|
</Button>
|
||||||
|
|
|
||||||
|
|
@ -44,17 +44,17 @@ export const switchCaseModalSize = (size: string) => {
|
||||||
break;
|
break;
|
||||||
case "large-thin":
|
case "large-thin":
|
||||||
minWidth = "min-w-[65vw]";
|
minWidth = "min-w-[65vw]";
|
||||||
height = "h-[80vh]";
|
height = "h-[90vh]";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "md-thin":
|
case "md-thin":
|
||||||
minWidth = "min-w-[85vw]";
|
minWidth = "min-w-[85vw]";
|
||||||
height = "h-[70vh]";
|
height = "h-[90vh]";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "sm-thin":
|
case "sm-thin":
|
||||||
minWidth = "min-w-[65vw]";
|
minWidth = "min-w-[65vw]";
|
||||||
height = "h-[70vh]";
|
height = "h-[90vh]";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "large-h-full":
|
case "large-h-full":
|
||||||
|
|
|
||||||
|
|
@ -103,7 +103,7 @@ interface BaseModalProps {
|
||||||
React.ReactElement<ContentProps>,
|
React.ReactElement<ContentProps>,
|
||||||
React.ReactElement<HeaderProps>,
|
React.ReactElement<HeaderProps>,
|
||||||
React.ReactElement<TriggerProps>?,
|
React.ReactElement<TriggerProps>?,
|
||||||
React.ReactElement<FooterProps>?
|
React.ReactElement<FooterProps>?,
|
||||||
];
|
];
|
||||||
open?: boolean;
|
open?: boolean;
|
||||||
setOpen?: (open: boolean) => void;
|
setOpen?: (open: boolean) => void;
|
||||||
|
|
@ -138,16 +138,16 @@ function BaseModal({
|
||||||
onSubmit,
|
onSubmit,
|
||||||
}: BaseModalProps) {
|
}: BaseModalProps) {
|
||||||
const headerChild = React.Children.toArray(children).find(
|
const headerChild = React.Children.toArray(children).find(
|
||||||
(child) => (child as React.ReactElement).type === Header
|
(child) => (child as React.ReactElement).type === Header,
|
||||||
);
|
);
|
||||||
const triggerChild = React.Children.toArray(children).find(
|
const triggerChild = React.Children.toArray(children).find(
|
||||||
(child) => (child as React.ReactElement).type === Trigger
|
(child) => (child as React.ReactElement).type === Trigger,
|
||||||
);
|
);
|
||||||
const ContentChild = React.Children.toArray(children).find(
|
const ContentChild = React.Children.toArray(children).find(
|
||||||
(child) => (child as React.ReactElement).type === Content
|
(child) => (child as React.ReactElement).type === Content,
|
||||||
);
|
);
|
||||||
const ContentFooter = React.Children.toArray(children).find(
|
const ContentFooter = React.Children.toArray(children).find(
|
||||||
(child) => (child as React.ReactElement).type === Footer
|
(child) => (child as React.ReactElement).type === Footer,
|
||||||
);
|
);
|
||||||
|
|
||||||
let { minWidth, height } = switchCaseModalSize(size);
|
let { minWidth, height } = switchCaseModalSize(size);
|
||||||
|
|
@ -164,17 +164,21 @@ function BaseModal({
|
||||||
{type === "modal" ? (
|
{type === "modal" ? (
|
||||||
<Modal open={open} onOpenChange={setOpen}>
|
<Modal open={open} onOpenChange={setOpen}>
|
||||||
{triggerChild}
|
{triggerChild}
|
||||||
<ModalContent className={cn(minWidth, "duration-300")}>
|
<ModalContent
|
||||||
<div className="truncate-doubleline word-break-break-word">
|
className={cn(minWidth, height, "flex flex-col duration-300")}
|
||||||
|
>
|
||||||
|
<div className="flex-shrink-0 truncate-doubleline word-break-break-word">
|
||||||
{headerChild}
|
{headerChild}
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
className={`flex flex-col ${height} w-full transition-all duration-300`}
|
className={`flex w-full flex-1 flex-col transition-all duration-300`}
|
||||||
>
|
>
|
||||||
{ContentChild}
|
{ContentChild}
|
||||||
</div>
|
</div>
|
||||||
{ContentFooter && (
|
{ContentFooter && (
|
||||||
<div className="flex flex-row-reverse">{ContentFooter}</div>
|
<div className="flex flex-shrink-0 flex-row-reverse">
|
||||||
|
{ContentFooter}
|
||||||
|
</div>
|
||||||
)}
|
)}
|
||||||
</ModalContent>
|
</ModalContent>
|
||||||
</Modal>
|
</Modal>
|
||||||
|
|
@ -184,7 +188,7 @@ function BaseModal({
|
||||||
<DialogContent
|
<DialogContent
|
||||||
className={cn(minWidth, height, "flex flex-col duration-300")}
|
className={cn(minWidth, height, "flex flex-col duration-300")}
|
||||||
>
|
>
|
||||||
<div className="truncate-doubleline word-break-break-word">
|
<div className="flex-shrink-0 truncate-doubleline word-break-break-word">
|
||||||
{headerChild}
|
{headerChild}
|
||||||
</div>
|
</div>
|
||||||
{onSubmit ? (
|
{onSubmit ? (
|
||||||
|
|
@ -193,26 +197,30 @@ function BaseModal({
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
onSubmit();
|
onSubmit();
|
||||||
}}
|
}}
|
||||||
className="flex flex-1 flex-col gap-6"
|
className="flex min-h-0 flex-1 flex-col gap-6"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
className={`flex w-full flex-1 flex-col transition-all duration-300`}
|
className={`flex w-full flex-1 flex-col overflow-hidden transition-all duration-300`}
|
||||||
>
|
>
|
||||||
{ContentChild}
|
{ContentChild}
|
||||||
</div>
|
</div>
|
||||||
{ContentFooter && (
|
{ContentFooter && (
|
||||||
<div className="flex flex-row-reverse">{ContentFooter}</div>
|
<div className="flex flex-shrink-0 flex-row-reverse">
|
||||||
|
{ContentFooter}
|
||||||
|
</div>
|
||||||
)}
|
)}
|
||||||
</Form.Root>
|
</Form.Root>
|
||||||
) : (
|
) : (
|
||||||
<>
|
<>
|
||||||
<div
|
<div
|
||||||
className={`flex w-full flex-1 flex-col transition-all duration-300`}
|
className={`flex min-h-0 w-full flex-1 flex-col transition-all duration-300`}
|
||||||
>
|
>
|
||||||
{ContentChild}
|
{ContentChild}
|
||||||
</div>
|
</div>
|
||||||
{ContentFooter && (
|
{ContentFooter && (
|
||||||
<div className="flex flex-row-reverse">{ContentFooter}</div>
|
<div className="flex flex-shrink-0 flex-row-reverse">
|
||||||
|
{ContentFooter}
|
||||||
|
</div>
|
||||||
)}
|
)}
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
|
|
||||||
|
|
@ -11,13 +11,13 @@ import ReactFlow, {
|
||||||
SelectionDragHandler,
|
SelectionDragHandler,
|
||||||
updateEdge,
|
updateEdge,
|
||||||
} from "reactflow";
|
} from "reactflow";
|
||||||
|
import GenericNode from "../../../../CustomNodes/GenericNode";
|
||||||
import {
|
import {
|
||||||
INVALID_SELECTION_ERROR_ALERT,
|
INVALID_SELECTION_ERROR_ALERT,
|
||||||
UPLOAD_ALERT_LIST,
|
UPLOAD_ALERT_LIST,
|
||||||
UPLOAD_ERROR_ALERT,
|
UPLOAD_ERROR_ALERT,
|
||||||
WRONG_FILE_ERROR_ALERT,
|
WRONG_FILE_ERROR_ALERT,
|
||||||
} from "../../../../constants/alerts_constants";
|
} from "../../../../constants/alerts_constants";
|
||||||
import GenericNode from "../../../../customNodes/genericNode";
|
|
||||||
import useAlertStore from "../../../../stores/alertStore";
|
import useAlertStore from "../../../../stores/alertStore";
|
||||||
import useFlowStore from "../../../../stores/flowStore";
|
import useFlowStore from "../../../../stores/flowStore";
|
||||||
import useFlowsManagerStore from "../../../../stores/flowsManagerStore";
|
import useFlowsManagerStore from "../../../../stores/flowsManagerStore";
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import {
|
||||||
XYPosition,
|
XYPosition,
|
||||||
} from "reactflow";
|
} from "reactflow";
|
||||||
import ShortUniqueId from "short-unique-id";
|
import ShortUniqueId from "short-unique-id";
|
||||||
|
import getFieldTitle from "../CustomNodes/utils/get-field-title";
|
||||||
import {
|
import {
|
||||||
INPUT_TYPES,
|
INPUT_TYPES,
|
||||||
LANGFLOW_SUPPORTED_TYPES,
|
LANGFLOW_SUPPORTED_TYPES,
|
||||||
|
|
@ -16,7 +17,6 @@ import {
|
||||||
specialCharsRegex,
|
specialCharsRegex,
|
||||||
} from "../constants/constants";
|
} from "../constants/constants";
|
||||||
import { downloadFlowsFromDatabase } from "../controllers/API";
|
import { downloadFlowsFromDatabase } from "../controllers/API";
|
||||||
import getFieldTitle from "../customNodes/utils/get-field-title";
|
|
||||||
import { DESCRIPTIONS } from "../flow_constants";
|
import { DESCRIPTIONS } from "../flow_constants";
|
||||||
import {
|
import {
|
||||||
APIClassType,
|
APIClassType,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue