diff --git a/.gitignore b/.gitignore index 04712f508..c81ff34d3 100644 --- a/.gitignore +++ b/.gitignore @@ -267,4 +267,6 @@ src/frontend/playwright-report/index.html *.bak prof/* -src/frontend/temp \ No newline at end of file +src/frontend/temp +*.db-shm +*.db-wal \ No newline at end of file diff --git a/docs/docs/administration/chat-widget.mdx b/docs/docs/administration/chat-widget.mdx index e73804673..0a6669cdd 100644 --- a/docs/docs/administration/chat-widget.mdx +++ b/docs/docs/administration/chat-widget.mdx @@ -181,9 +181,8 @@ Use the widget API to customize your Chat Widget: format {"key":"value"}. - | Prop | Type | Required | Description | -|-----------------------|---------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| --------------------- | ------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | | bot_message_style | JSON | No | Applies custom formatting to bot messages. | | chat_input_field | String | Yes | Defines the type of the input field for chat messages. | | chat_inputs | JSON | Yes | Determines the chat input elements and their respective values. | @@ -207,4 +206,3 @@ Use the widget API to customize your Chat Widget: | user_message_style | JSON | No | Determines the formatting for user messages in the chat window. | | width | Number | No | Sets the width of the chat window in pixels. | | window_title | String | No | Sets the title displayed in the chat window's header or title bar. | - diff --git a/docs/docs/administration/login.mdx b/docs/docs/administration/login.mdx index 20386aebb..9f3c12cf9 100644 --- a/docs/docs/administration/login.mdx +++ b/docs/docs/administration/login.mdx @@ -86,7 +86,7 @@ With _`LANGFLOW_AUTO_LOGIN`_ set to _`False`_, Langflow requires users to sign u light: useBaseUrl("img/sign-up.png"), dark: useBaseUrl("img/sign-up.png"), }} - style={{ width: "40%", margin: "20px auto" }} + style={{ width: "40%", margin: "20px auto" }} /> ## Profile settings diff --git a/docs/docs/administration/playground.mdx b/docs/docs/administration/playground.mdx index 7bc0c8db7..b0e9d8bad 100644 --- a/docs/docs/administration/playground.mdx +++ b/docs/docs/administration/playground.mdx @@ -40,14 +40,13 @@ The Playground's appearance changes depending on what components are in your can Adding or removing any of the below components modifies your Playground so you can monitor the inputs and outputs. -* Chat Input -* Text Input -* Chat Output -* Text Output -* Records Output -* Inspect Memory +- Chat Input +- Text Input +- Chat Output +- Text Output +- Records Output +- Inspect Memory You can also select **Options** > **Logs** to see your flow's logs. For more information, see [Inputs and Outputs](../components/inputs-and-outputs.mdx). - diff --git a/docs/docs/components/inputs-and-outputs.mdx b/docs/docs/components/inputs-and-outputs.mdx index bd804ea5f..484afc6b9 100644 --- a/docs/docs/components/inputs-and-outputs.mdx +++ b/docs/docs/components/inputs-and-outputs.mdx @@ -48,8 +48,8 @@ One significant capability of the Chat Input component is its ability to transfo diff --git a/docs/docs/getting-started/canvas.mdx b/docs/docs/getting-started/canvas.mdx index 3d80f30fb..5fe03715b 100644 --- a/docs/docs/getting-started/canvas.mdx +++ b/docs/docs/getting-started/canvas.mdx @@ -38,7 +38,6 @@ For example, the [Basic prompting](../starter-projects/basic-prompting.mdx) flow style={{ width: "100%", maxWidth: "800px", margin: "0 auto" }} /> - In this flow, the **OpenAI LLM component** receives input (left side) and produces output (right side) - in this case, receiving input from the **Chat Input** and **Prompt** components and producing output to the **Chat Output** component. ## Component diff --git a/docs/docs/getting-started/install-langflow.mdx b/docs/docs/getting-started/install-langflow.mdx index 09a4f46dc..643938beb 100644 --- a/docs/docs/getting-started/install-langflow.mdx +++ b/docs/docs/getting-started/install-langflow.mdx @@ -86,7 +86,7 @@ You'll be presented with the following screen: light: "img/duplicate-space.png", dark: "img/duplicate-space.png", }} - style={{ width: "80%", maxWidth: "800px", margin: "0 auto" }} + style={{ width: "80%", maxWidth: "800px", margin: "0 auto" }} /> Name your Space, define the visibility (Public or Private), and click on **Duplicate Space** to start the installation process. When installation is finished, you'll be redirected to the Space's main page to start using Langflow right away! diff --git a/docs/docs/migration/possible-installation-issues.mdx b/docs/docs/migration/possible-installation-issues.mdx index feeddab48..203996f39 100644 --- a/docs/docs/migration/possible-installation-issues.mdx +++ b/docs/docs/migration/possible-installation-issues.mdx @@ -32,8 +32,9 @@ There are two possible reasons for this error: Clear the cache by deleting the contents of the cache folder. This folder can be found at: - - **Linux or WSL2 on Windows**: `home//.cache/langflow/` - - **MacOS**: `/Users//Library/Caches/langflow/` + +- **Linux or WSL2 on Windows**: `home//.cache/langflow/` +- **MacOS**: `/Users//Library/Caches/langflow/` This error can occur during Langflow upgrades when the new version can't override `langflow-pre.db` in `.cache/langflow/`. Clearing the cache removes this file but will also erase your settings. diff --git a/docs/docs/starter-projects/document-qa.mdx b/docs/docs/starter-projects/document-qa.mdx index b48e8c35d..f3c4f0a0a 100644 --- a/docs/docs/starter-projects/document-qa.mdx +++ b/docs/docs/starter-projects/document-qa.mdx @@ -33,7 +33,7 @@ Build a question-and-answer chatbot with a document loaded from local memory. light: "img/document-qa.png", dark: "img/document-qa.png", }} - style={{ width: "100%", maxWidth: "800px", margin: "0 auto" }} + style={{ width: "100%", maxWidth: "800px", margin: "0 auto" }} /> This flow creates a basic chatbot with the **Chat Input**, **Prompt**, **OpenAI**, and **Chat Output** components. diff --git a/docs/docs/tutorials/rag-with-astradb.mdx b/docs/docs/tutorials/rag-with-astradb.mdx index d8dc38a50..54c63cfa1 100644 --- a/docs/docs/tutorials/rag-with-astradb.mdx +++ b/docs/docs/tutorials/rag-with-astradb.mdx @@ -13,7 +13,8 @@ In this guide, we will use Astra DB as a vector store to store and retrieve the This guide assumes that you have Langflow up and running. If you are new to - Langflow, you can check out the [Getting Started](../getting-started/install-langflow.mdx) guide. + Langflow, you can check out the [Getting + Started](../getting-started/install-langflow.mdx) guide. TLDR; diff --git a/poetry.lock b/poetry.lock index bee5cb67c..ef442f1a9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -471,17 +471,17 @@ files = [ [[package]] name = "boto3" -version = "1.34.123" +version = "1.34.124" description = "The AWS SDK for Python" optional = false python-versions = ">=3.8" files = [ - {file = "boto3-1.34.123-py3-none-any.whl", hash = "sha256:56bec52d485d5670ce96d53ae7b2cd4ae4e8a705fb2298a21093cdd77d642331"}, - {file = "boto3-1.34.123.tar.gz", hash = "sha256:42b140fc850cf261ee4b1e8ef527fa071b1f1592a6d6a68d34b29f37cc46b4dd"}, + {file = "boto3-1.34.124-py3-none-any.whl", hash = "sha256:549d9735bbb7cf8e1a2f4b3b676be32946717c59f33c47234586835dc904d04e"}, + {file = "boto3-1.34.124.tar.gz", hash = "sha256:a91ee58fa54b170f17b2e144f038e155f92cf515f1c073ac2595e9ee45f125a8"}, ] [package.dependencies] -botocore = ">=1.34.123,<1.35.0" +botocore = ">=1.34.124,<1.35.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -490,13 +490,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.34.123" +version = "1.34.124" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">=3.8" files = [ - {file = "botocore-1.34.123-py3-none-any.whl", hash = "sha256:8c34ada2a708c82e7174bff700611643db7ce2cb18f1130c35045c24310d299d"}, - {file = "botocore-1.34.123.tar.gz", hash = "sha256:a8577f6574600c4d159b5cd103ee05744a443d77f7778304e17307940b369c4f"}, + {file = "botocore-1.34.124-py3-none-any.whl", hash = "sha256:fede092c7f8f414f78f3e7991e47cb0cf2279d90c027606ad7cba79fa370b827"}, + {file = "botocore-1.34.124.tar.gz", hash = "sha256:3f0bf79c17d656acdfdb53581224f6a38867ff2829f7428c586198f67a90ea26"}, ] [package.dependencies] @@ -2616,13 +2616,13 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] [[package]] name = "google-api-python-client" -version = "2.132.0" +version = "2.133.0" description = "Google API Client Library for Python" optional = false python-versions = ">=3.7" files = [ - {file = "google-api-python-client-2.132.0.tar.gz", hash = "sha256:d6340dc83b72d72333cee5d50f7dcfecbff66a8783164090e945f985ec4c374d"}, - {file = "google_api_python_client-2.132.0-py2.py3-none-any.whl", hash = "sha256:cde87700bd4d37f39f5e940292c1c6cd0910990b5b01f50b1332a8cea38e8595"}, + {file = "google-api-python-client-2.133.0.tar.gz", hash = "sha256:293092905b66a046d3187a99ac454e12b00cc2c70444f26eb2f1f9c1a82720b4"}, + {file = "google_api_python_client-2.133.0-py2.py3-none-any.whl", hash = "sha256:396fe676ea0dfed066654dcf9f8dea77a1342f9d9bb23bb88e45b7b81e773926"}, ] [package.dependencies] @@ -3057,13 +3057,13 @@ test = ["objgraph", "psutil"] [[package]] name = "groq" -version = "0.8.0" +version = "0.9.0" description = "The official Python library for the groq API" optional = false python-versions = ">=3.7" files = [ - {file = "groq-0.8.0-py3-none-any.whl", hash = "sha256:f5e4e892d45001241a930db451e633ca1f0007e3f749deaa5d7360062fcd61e3"}, - {file = "groq-0.8.0.tar.gz", hash = "sha256:37ceb2f706bd516d0bfcac8e89048a24b375172987a0d6bd9efb521c54f6deff"}, + {file = "groq-0.9.0-py3-none-any.whl", hash = "sha256:d0e46f4ad645504672bb09c8100af3ced3a7db0d5119dc13e4aca535fc455874"}, + {file = "groq-0.9.0.tar.gz", hash = "sha256:130ed5e35d3acfaab46b9e7a078eeaebf91052f4a9d71f86f87fb319b5fec332"}, ] [package.dependencies] @@ -4409,7 +4409,7 @@ six = "*" [[package]] name = "langflow-base" -version = "0.0.61" +version = "0.0.63" description = "A Python package with a built-in web application" optional = false python-versions = ">=3.10,<3.13" @@ -4466,13 +4466,13 @@ url = "src/backend/base" [[package]] name = "langfuse" -version = "2.35.2" +version = "2.36.1" description = "A client library for accessing langfuse" optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langfuse-2.35.2-py3-none-any.whl", hash = "sha256:d01a23842cab484594f03878aacb9732ef8fd361158eb819c7bf43f758a0954b"}, - {file = "langfuse-2.35.2.tar.gz", hash = "sha256:32b2e6c5bc71b4efdc430c6b964ab1c1e1ba1e105a4a73912c38b3959dc4502d"}, + {file = "langfuse-2.36.1-py3-none-any.whl", hash = "sha256:2cba244024bdf63aa3295bffada6b257497f9d18a3ca09026595470f46e09e5b"}, + {file = "langfuse-2.36.1.tar.gz", hash = "sha256:5117038d35d4629cfa37e8d89986132c926c52c05631cdfef4f9d54bc05591d8"}, ] [package.dependencies] @@ -6966,13 +6966,13 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" [[package]] name = "pydantic-settings" -version = "2.3.1" +version = "2.3.2" description = "Settings management using Pydantic" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_settings-2.3.1-py3-none-any.whl", hash = "sha256:acb2c213140dfff9669f4fe9f8180d43914f51626db28ab2db7308a576cce51a"}, - {file = "pydantic_settings-2.3.1.tar.gz", hash = "sha256:e34bbd649803a6bb3e2f0f58fb0edff1f0c7f556849fda106cc21bcce12c30ab"}, + {file = "pydantic_settings-2.3.2-py3-none-any.whl", hash = "sha256:ae06e44349e4c7bff8d57aff415dfd397ae75c217a098d54e9e6990ad7594ac7"}, + {file = "pydantic_settings-2.3.2.tar.gz", hash = "sha256:05d33003c74c2cd585de97b59eb17b6ed67181bc8a3ce594d74b5d24e4df7323"}, ] [package.dependencies] @@ -8662,13 +8662,13 @@ typing = ["mypy (>=1.4)", "rich", "twisted"] [[package]] name = "supabase" -version = "2.5.0" +version = "2.5.1" description = "Supabase client for Python." optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "supabase-2.5.0-py3-none-any.whl", hash = "sha256:13e5ed9e9377a1a69e70ad18ed7b82997cf13ffcd28173952f7503e4d5067771"}, - {file = "supabase-2.5.0.tar.gz", hash = "sha256:133dc832dfdd617f2f90ac5b52664df96ac8a9302ac6656ee769dc3f545812f0"}, + {file = "supabase-2.5.1-py3-none-any.whl", hash = "sha256:74a1f24f04fede1967ef084b50dea688228f7b10eb2f9d73350fe2251a865188"}, + {file = "supabase-2.5.1.tar.gz", hash = "sha256:c50e0eba5b03de3abd5ac0f887957ca43558ba44c4d17bb44e73ec454b41734c"}, ] [package.dependencies] @@ -10505,6 +10505,7 @@ test = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [extras] +cassio = ["cassio"] couchbase = ["couchbase"] deploy = ["celery", "flower", "redis"] local = ["ctransformers", "llama-cpp-python", "sentence-transformers"] @@ -10512,4 +10513,4 @@ local = ["ctransformers", "llama-cpp-python", "sentence-transformers"] [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.13" -content-hash = "07b4a3ead472c37bcbb6179ac2802907c39688c50a6e36ddb41690b1c8e09b2d" +content-hash = "6f5103d7e9f32094f0ebe8f192b1b967043382a1b2b97db42c3680cd0bc11efd" diff --git a/pyproject.toml b/pyproject.toml index bf25d3ba5..ee7630b6d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "langflow" -version = "1.0.0a50" +version = "1.0.0a52" description = "A Python package with a built-in web application" authors = ["Langflow "] maintainers = [ @@ -87,7 +87,7 @@ markdown = "^3.6" langchain-chroma = "^0.1.1" upstash-vector = "^0.4.0" gitpython = "^3.1.43" -cassio = "^0.1.7" +cassio = { extras = ["cassio"], version = "^0.1.7", optional = true } unstructured = {extras = ["docx", "md", "pptx"], version = "^0.14.4"} @@ -123,6 +123,7 @@ dictdiffer = "^0.9.0" [tool.poetry.extras] deploy = ["celery", "redis", "flower"] couchbase = ["couchbase"] +cassio = ["cassio"] local = ["llama-cpp-python", "sentence-transformers", "ctransformers"] diff --git a/src/backend/base/langflow/api/v1/flows.py b/src/backend/base/langflow/api/v1/flows.py index c1ccf68db..08957e502 100644 --- a/src/backend/base/langflow/api/v1/flows.py +++ b/src/backend/base/langflow/api/v1/flows.py @@ -31,25 +31,60 @@ def create_flow( flow: FlowCreate, current_user: User = Depends(get_current_active_user), ): - """Create a new flow.""" - if flow.user_id is None: - flow.user_id = current_user.id + try: + """Create a new flow.""" + if flow.user_id is None: + flow.user_id = current_user.id - db_flow = Flow.model_validate(flow, from_attributes=True) - db_flow.updated_at = datetime.now(timezone.utc) + # First check if the flow.name is unique + # there might be flows with name like: "MyFlow", "MyFlow (1)", "MyFlow (2)" + # so we need to check if the name is unique with `like` operator + # if we find a flow with the same name, we add a number to the end of the name + # based on the highest number found + if session.exec(select(Flow).where(Flow.name == flow.name).where(Flow.user_id == current_user.id)).first(): + flows = session.exec( + select(Flow).where(Flow.name.like(f"{flow.name} (%")).where(Flow.user_id == current_user.id) + ).all() + if flows: + numbers = [int(flow.name.split("(")[1].split(")")[0]) for flow in flows] + flow.name = f"{flow.name} ({max(numbers) + 1})" + else: + flow.name = f"{flow.name} (1)" - if db_flow.folder_id is None: - # Make sure flows always have a folder - default_folder = session.exec( - select(Folder).where(Folder.name == DEFAULT_FOLDER_NAME, Folder.user_id == current_user.id) - ).first() - if default_folder: - db_flow.folder_id = default_folder.id + db_flow = Flow.model_validate(flow, from_attributes=True) + db_flow.updated_at = datetime.now(timezone.utc) - session.add(db_flow) - session.commit() - session.refresh(db_flow) - return db_flow + if db_flow.folder_id is None: + # Make sure flows always have a folder + default_folder = session.exec( + select(Folder).where(Folder.name == DEFAULT_FOLDER_NAME, Folder.user_id == current_user.id) + ).first() + if default_folder: + db_flow.folder_id = default_folder.id + + session.add(db_flow) + session.commit() + session.refresh(db_flow) + return db_flow + except Exception as e: + # If it is a validation error, return the error message + if hasattr(e, "errors"): + raise HTTPException(status_code=400, detail=str(e)) from e + elif "UNIQUE constraint failed" in str(e): + # Get the name of the column that failed + columns = str(e).split("UNIQUE constraint failed: ")[1].split(".")[1].split("\n")[0] + # UNIQUE constraint failed: flow.user_id, flow.name + # or UNIQUE constraint failed: flow.name + # if the column has id in it, we want the other column + column = columns.split(",")[1] if "id" in columns.split(",")[0] else columns.split(",")[0] + + raise HTTPException( + status_code=400, detail=f"{column.capitalize().replace('_', ' ')} must be unique" + ) from e + elif isinstance(e, HTTPException): + raise e + else: + raise HTTPException(status_code=500, detail=str(e)) from e @router.get("/", response_model=list[FlowRead], status_code=200) diff --git a/src/backend/base/langflow/api/v1/folders.py b/src/backend/base/langflow/api/v1/folders.py index d55f9bd15..c9d2c0b31 100644 --- a/src/backend/base/langflow/api/v1/folders.py +++ b/src/backend/base/langflow/api/v1/folders.py @@ -1,7 +1,5 @@ from typing import List -from langflow.helpers.flow import generate_unique_flow_name -from langflow.helpers.folders import generate_unique_folder_name import orjson from fastapi import APIRouter, Depends, File, HTTPException, Response, UploadFile, status from sqlalchemy import or_, update @@ -9,6 +7,8 @@ from sqlmodel import Session, select from langflow.api.v1.flows import create_flows from langflow.api.v1.schemas import FlowListCreate, FlowListReadWithFolderName +from langflow.helpers.flow import generate_unique_flow_name +from langflow.helpers.folders import generate_unique_folder_name from langflow.services.auth.utils import get_current_active_user from langflow.services.database.models.flow.model import Flow, FlowCreate, FlowRead from langflow.services.database.models.folder.constants import DEFAULT_FOLDER_NAME @@ -35,17 +35,27 @@ def create_folder( try: new_folder = Folder.model_validate(folder, from_attributes=True) new_folder.user_id = current_user.id - - folder_results = session.exec( - select(Folder).where( - Folder.name.like(f"{new_folder.name}%"), # type: ignore - Folder.user_id == current_user.id, + # First check if the folder.name is unique + # there might be flows with name like: "MyFlow", "MyFlow (1)", "MyFlow (2)" + # so we need to check if the name is unique with `like` operator + # if we find a flow with the same name, we add a number to the end of the name + # based on the highest number found + if session.exec( + statement=select(Folder).where(Folder.name == new_folder.name).where(Folder.user_id == current_user.id) + ).first(): + folder_results = session.exec( + select(Folder).where( + Folder.name.like(f"{new_folder.name}%"), # type: ignore + Folder.user_id == current_user.id, + ) ) - ) - existing_folder_names = [folder.name for folder in folder_results] - - if existing_folder_names: - new_folder.name = f"{new_folder.name} ({len(existing_folder_names) + 1})" + if folder_results: + folder_names = [folder.name for folder in folder_results] + folder_numbers = [int(name.split("(")[-1].split(")")[0]) for name in folder_names if "(" in name] + if folder_numbers: + new_folder.name = f"{new_folder.name} ({max(folder_numbers) + 1})" + else: + new_folder.name = f"{new_folder.name} (1)" session.add(new_folder) session.commit() diff --git a/src/backend/base/langflow/base/io/chat.py b/src/backend/base/langflow/base/io/chat.py index d82cf4293..d2894a623 100644 --- a/src/backend/base/langflow/base/io/chat.py +++ b/src/backend/base/langflow/base/io/chat.py @@ -23,15 +23,15 @@ class ChatComponent(Component): "display_name": "Sender Type", "advanced": True, }, - "sender_name": {"display_name": "Sender Name"}, + "sender_name": {"display_name": "Sender Name", "advanced": True}, "session_id": { "display_name": "Session ID", "info": "If provided, the message will be stored in the memory.", "advanced": True, }, - "return_record": { - "display_name": "Return Record", - "info": "Return the message as a record containing the sender, sender_name, and session_id.", + "return_message": { + "display_name": "Return Message", + "info": "Return the message as a Message containing the sender, sender_name, and session_id.", "advanced": True, }, "record_template": { @@ -68,6 +68,7 @@ class ChatComponent(Component): input_value: Optional[Union[str, Record, Message]] = None, files: Optional[list[str]] = None, session_id: Optional[str] = None, + return_message: Optional[bool] = False, ) -> Message: message: Message | None = None @@ -78,7 +79,12 @@ class ChatComponent(Component): message = Message( text=input_value, sender=sender, sender_name=sender_name, files=files, session_id=session_id ) - self.status = message - if session_id and isinstance(message, Message): + if not return_message: + message_text = message.text + else: + message_text = message + + self.status = message_text + if session_id and isinstance(message, Message) and isinstance(message.text, str): self.store_message(message) - return message + return message_text diff --git a/src/backend/base/langflow/components/data/URL.py b/src/backend/base/langflow/components/data/URL.py index f9e515205..32ebc91ee 100644 --- a/src/backend/base/langflow/components/data/URL.py +++ b/src/backend/base/langflow/components/data/URL.py @@ -20,7 +20,7 @@ class URLComponent(CustomComponent): self, urls: list[str], ) -> list[Record]: - loader = WebBaseLoader(web_paths=urls) + loader = WebBaseLoader(web_paths=[url for url in urls if url]) docs = loader.load() records = self.to_records(docs) self.status = records diff --git a/src/backend/base/langflow/components/experimental/Embed.py b/src/backend/base/langflow/components/experimental/Embed.py new file mode 100644 index 000000000..88de23486 --- /dev/null +++ b/src/backend/base/langflow/components/experimental/Embed.py @@ -0,0 +1,15 @@ +from langflow.custom import CustomComponent +from langflow.schema import Record +from langflow.field_typing import Embeddings + + +class EmbedComponent(CustomComponent): + display_name = "Embed Texts" + + def build_config(self): + return {"texts": {"display_name": "Texts"}, "embbedings": {"display_name": "Embeddings"}} + + def build(self, texts: list[str], embbedings: Embeddings) -> Embeddings: + vectors = Record(vector=embbedings.embed_documents(texts)) + self.status = vectors + return vectors diff --git a/src/backend/base/langflow/components/experimental/Message.py b/src/backend/base/langflow/components/experimental/Message.py new file mode 100644 index 000000000..9fdd8a0da --- /dev/null +++ b/src/backend/base/langflow/components/experimental/Message.py @@ -0,0 +1,38 @@ +from typing import Optional + +from langflow.custom import CustomComponent +from langflow.schema.message import Message + + +class MessageComponent(CustomComponent): + display_name = "Message" + description = "Creates a Message object given a Session ID." + + def build_config(self): + return { + "sender": { + "options": ["Machine", "User"], + "display_name": "Sender Type", + }, + "sender_name": {"display_name": "Sender Name"}, + "text": {"display_name": "Text"}, + "session_id": { + "display_name": "Session ID", + "info": "Session ID of the chat history.", + "input_types": ["Text"], + }, + } + + def build( + self, + sender: str = "User", + sender_name: Optional[str] = None, + session_id: Optional[str] = None, + text: str = "", + ) -> Message: + message = Message( + text=text, sender=sender, sender_name=sender_name, flow_id=self.graph.flow_id, session_id=session_id + ) + + self.status = message + return message diff --git a/src/backend/base/langflow/components/experimental/StoreMessage.py b/src/backend/base/langflow/components/experimental/StoreMessage.py index 19be36068..5d0abfbb9 100644 --- a/src/backend/base/langflow/components/experimental/StoreMessage.py +++ b/src/backend/base/langflow/components/experimental/StoreMessage.py @@ -1,5 +1,3 @@ -from typing import List, Optional - from langflow.custom import CustomComponent from langflow.memory import get_messages, store_message from langflow.schema.message import Message @@ -7,36 +5,18 @@ from langflow.schema.message import Message class StoreMessageComponent(CustomComponent): display_name = "Store Message" - description = "Stores a chat message given a Session ID." - beta: bool = True + description = "Stores a chat message." def build_config(self): return { - "sender": { - "options": ["Machine", "User"], - "display_name": "Sender Type", - }, - "sender_name": {"display_name": "Sender Name"}, "message": {"display_name": "Message"}, - "session_id": { - "display_name": "Session ID", - "info": "Session ID of the chat history.", - "input_types": ["Text"], - }, } def build( self, - sender: str = "User", - sender_name: Optional[str] = None, - session_id: Optional[str] = None, - message: str = "", - ) -> List[Message]: - store_message( - message=Message( - text=message, sender=sender, sender_name=sender_name, flow_id=self.graph.flow_id, session_id=session_id - ) - ) + message: Message, + ) -> Message: + store_message(message, flow_id=self.graph.flow_id) + self.status = get_messages() - self.status = get_messages(session_id=session_id) - return get_messages(session_id=session_id) + return message diff --git a/src/backend/base/langflow/components/helpers/MessageHistory.py b/src/backend/base/langflow/components/helpers/MessageHistory.py index 221d90c4e..90191e7d0 100644 --- a/src/backend/base/langflow/components/helpers/MessageHistory.py +++ b/src/backend/base/langflow/components/helpers/MessageHistory.py @@ -6,25 +6,27 @@ from langflow.schema import Record class MessageHistoryComponent(CustomComponent): - display_name = "Message History" - description = "Retrieves stored chat messages given a specific Session ID." - beta: bool = True + display_name = "Memory" + description = "Retrieves stored chat messages." def build_config(self): return { "sender": { "options": ["Machine", "User", "Machine and User"], "display_name": "Sender Type", + "advanced": True, }, "sender_name": {"display_name": "Sender Name", "advanced": True}, "n_messages": { "display_name": "Number of Messages", "info": "Number of messages to retrieve.", + "advanced": True, }, "session_id": { "display_name": "Session ID", "info": "Session ID of the chat history.", "input_types": ["Text"], + "advanced": True, }, "order": { "options": ["Ascending", "Descending"], @@ -39,7 +41,7 @@ class MessageHistoryComponent(CustomComponent): sender: Optional[str] = "Machine and User", sender_name: Optional[str] = None, session_id: Optional[str] = None, - n_messages: int = 5, + n_messages: int = 100, order: Optional[str] = "Descending", ) -> List[Record]: order = "DESC" if order == "Descending" else "ASC" diff --git a/src/backend/base/langflow/components/helpers/RecordsToText.py b/src/backend/base/langflow/components/helpers/RecordsToText.py index d3e418792..049c99243 100644 --- a/src/backend/base/langflow/components/helpers/RecordsToText.py +++ b/src/backend/base/langflow/components/helpers/RecordsToText.py @@ -17,6 +17,7 @@ class RecordsToTextComponent(CustomComponent): "template": { "display_name": "Template", "info": "The template to use for formatting the records. It can contain the keys {text}, {data} or any other key in the Record.", + "multiline": True, }, } diff --git a/src/backend/base/langflow/components/prompts/Prompt.py b/src/backend/base/langflow/components/prompts/Prompt.py new file mode 100644 index 000000000..d2d9f78a0 --- /dev/null +++ b/src/backend/base/langflow/components/prompts/Prompt.py @@ -0,0 +1,24 @@ +from langflow.custom import CustomComponent +from langflow.field_typing import TemplateField +from langflow.field_typing.prompt import Prompt + + +class PromptComponent(CustomComponent): + display_name: str = "Empty Prompt" + description: str = "Create a prompt template with dynamic variables." + icon = "prompts" + + def build_config(self): + return { + "template": TemplateField(display_name="Template"), + "code": TemplateField(advanced=True), + } + + async def build( + self, + template: Prompt, + **kwargs, + ) -> Prompt: + prompt = await Prompt.from_template_and_variables(template, kwargs) # type: ignore + self.status = prompt.format_text() + return prompt diff --git a/src/backend/base/langflow/components/tools/PythonCodeStructuredTool.py b/src/backend/base/langflow/components/tools/PythonCodeStructuredTool.py index 7de988d24..84392cbdb 100644 --- a/src/backend/base/langflow/components/tools/PythonCodeStructuredTool.py +++ b/src/backend/base/langflow/components/tools/PythonCodeStructuredTool.py @@ -1,10 +1,11 @@ -from typing import Any, Dict, List, Callable import ast +from typing import Any, Dict, List, Optional + from langchain.agents import Tool from langchain.tools import StructuredTool -from langflow.interface.custom.custom_component import CustomComponent + +from langflow.custom import CustomComponent from langflow.schema.dotdict import dotdict -from langchain.pydantic_v1 import BaseModel, Field class PythonCodeStructuredTool(CustomComponent): @@ -12,8 +13,7 @@ class PythonCodeStructuredTool(CustomComponent): description = "structuredtool dataclass code to tool" documentation = "https://python.langchain.com/docs/modules/tools/custom_tools/#structuredtool-dataclass" icon = "🐍" - field_order = ["name", "description", "tool_code", - "return_direct", "tool_function", "tool_class"] + field_order = ["name", "description", "tool_code", "return_direct", "tool_function", "tool_class"] def build_config(self) -> Dict[str, Any]: return { @@ -23,6 +23,7 @@ class PythonCodeStructuredTool(CustomComponent): "placeholder": "def my_function(args):\n pass", "multiline": True, "refresh_button": True, + "field_type": "code", }, "name": { "display_name": "Tool Name", @@ -53,10 +54,8 @@ class PythonCodeStructuredTool(CustomComponent): def parse_source_name(self, code: str) -> Dict: parsed_code = ast.parse(code) - class_names = [ - node.name for node in parsed_code.body if isinstance(node, ast.ClassDef)] - function_names = [ - node.name for node in parsed_code.body if isinstance(node, ast.FunctionDef)] + class_names = [node.name for node in parsed_code.body if isinstance(node, ast.ClassDef)] + function_names = [node.name for node in parsed_code.body if isinstance(node, ast.FunctionDef)] return {"class": class_names, "function": function_names} def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None) -> dotdict: @@ -71,8 +70,16 @@ class PythonCodeStructuredTool(CustomComponent): build_config.tool_function.options = [] return build_config - async def build(self, tool_code: Code, name: str, description: str, tool_function: List[str], return_direct: bool, tool_class: List[str] = None) -> Tool: - local_namespace = {} + async def build( + self, + tool_code: str, + name: str, + description: str, + tool_function: List[str], + return_direct: bool, + tool_class: Optional[List[str]] = None, + ) -> Tool: + local_namespace = {} # type: ignore exec(tool_code, globals(), local_namespace) func = local_namespace[tool_function] @@ -82,10 +89,6 @@ class PythonCodeStructuredTool(CustomComponent): _class = local_namespace[tool_class] tool = StructuredTool.from_function( - func=func, - args_schema=_class, - name=name, - description=description, - return_direct=return_direct + func=func, args_schema=_class, name=name, description=description, return_direct=return_direct ) - return tool + return tool # type: ignore diff --git a/src/backend/base/langflow/components/vectorstores/AstraDB.py b/src/backend/base/langflow/components/vectorstores/AstraDB.py index e97b02583..cd4a06aea 100644 --- a/src/backend/base/langflow/components/vectorstores/AstraDB.py +++ b/src/backend/base/langflow/components/vectorstores/AstraDB.py @@ -1,10 +1,9 @@ from typing import List, Optional, Union -from langchain_core.retrievers import BaseRetriever - from langflow.custom import CustomComponent from langflow.field_typing import Embeddings, VectorStore from langflow.schema import Record +from langchain_core.retrievers import BaseRetriever class AstraDBVectorStoreComponent(CustomComponent): diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-01.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-01.png deleted file mode 100644 index fa4fed5d1..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-01.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-01.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-01.svg new file mode 100644 index 000000000..62f3c1d27 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-01.svg @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-02.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-02.png deleted file mode 100644 index 6519e7657..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-02.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-02.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-02.svg new file mode 100644 index 000000000..6a1e32abc --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-02.svg @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-03.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-03.png deleted file mode 100644 index 512a5b037..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-03.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-03.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-03.svg new file mode 100644 index 000000000..df4676205 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-03.svg @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-04.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-04.png deleted file mode 100644 index 6c84a0792..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-04.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-04.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-04.svg new file mode 100644 index 000000000..bd4dcdc54 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-04.svg @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-05.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-05.png deleted file mode 100644 index 8e4b22298..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-05.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-05.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-05.svg new file mode 100644 index 000000000..22fdcd454 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-05.svg @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-06.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-06.png deleted file mode 100644 index d317eb499..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-06.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-06.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-06.svg new file mode 100644 index 000000000..9d45fb848 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-06.svg @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-07.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-07.png deleted file mode 100644 index ed2ed8214..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-07.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-07.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-07.svg new file mode 100644 index 000000000..d9800b2c5 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-07.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-08.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-08.png deleted file mode 100644 index 0785f59ea..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-08.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-08.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-08.svg new file mode 100644 index 000000000..58e755d1b --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-08.svg @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-09.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-09.png deleted file mode 100644 index 8dd5b1677..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-09.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-09.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-09.svg new file mode 100644 index 000000000..a498bfb52 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-09.svg @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-10.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-10.png deleted file mode 100644 index 058dff1a8..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-10.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-10.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-10.svg new file mode 100644 index 000000000..93ced759e --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-10.svg @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-11.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-11.png deleted file mode 100644 index a517fad0d..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-11.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-11.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-11.svg new file mode 100644 index 000000000..578c2444b --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-11.svg @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-12.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-12.png deleted file mode 100644 index 508590f18..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-12.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-12.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-12.svg new file mode 100644 index 000000000..373031e99 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-12.svg @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-13.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-13.png deleted file mode 100644 index 90865a49d..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-13.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-13.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-13.svg new file mode 100644 index 000000000..0a0523ddc --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-13.svg @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-14.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-14.png deleted file mode 100644 index 269621bb2..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-14.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-14.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-14.svg new file mode 100644 index 000000000..5c0672f70 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-14.svg @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-15.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-15.png deleted file mode 100644 index da85a4e30..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-15.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-15.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-15.svg new file mode 100644 index 000000000..7c6159c5b --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-15.svg @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-16.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-16.png deleted file mode 100644 index cf30ae136..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-16.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-16.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-16.svg new file mode 100644 index 000000000..96389676f --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-16.svg @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-17.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-17.png deleted file mode 100644 index d53cd7997..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-17.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-17.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-17.svg new file mode 100644 index 000000000..dc8aa54d5 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-17.svg @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-18.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-18.png deleted file mode 100644 index e0ac43aab..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-18.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-18.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-18.svg new file mode 100644 index 000000000..33daef83b --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-18.svg @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-19.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-19.png deleted file mode 100644 index d04a96a27..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-19.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-19.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-19.svg new file mode 100644 index 000000000..f3a36ec3a --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-19.svg @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-20.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-20.png deleted file mode 100644 index e2d6e99bc..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-20.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-20.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-20.svg new file mode 100644 index 000000000..a53a56aa2 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-20.svg @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-21.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-21.png deleted file mode 100644 index 392b004e2..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-21.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-21.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-21.svg new file mode 100644 index 000000000..2cb2fcb8b --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-21.svg @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-22.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-22.png deleted file mode 100644 index 606aed15d..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-22.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-22.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-22.svg new file mode 100644 index 000000000..9c2923e21 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-22.svg @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-23.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-23.png deleted file mode 100644 index c16d96d41..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-23.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-23.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-23.svg new file mode 100644 index 000000000..111f30e4a --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-23.svg @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-24.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-24.png deleted file mode 100644 index e0dd6a1b2..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-24.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-24.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-24.svg new file mode 100644 index 000000000..fd3b0edea --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-24.svg @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-25.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-25.png deleted file mode 100644 index 08aeb61c3..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-25.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-25.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-25.svg new file mode 100644 index 000000000..f5df7a6b9 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-25.svg @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-26.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-26.png deleted file mode 100644 index 312ef035c..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-26.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-26.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-26.svg new file mode 100644 index 000000000..5d2d1d26b --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-26.svg @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-27.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-27.png deleted file mode 100644 index 95972203e..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-27.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-27.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-27.svg new file mode 100644 index 000000000..805d92ad4 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-01-27.svg @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-01.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-01.png deleted file mode 100644 index b55f875ac..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-01.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-01.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-01.svg new file mode 100644 index 000000000..6c5267009 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-01.svg @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-02.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-02.png deleted file mode 100644 index b51a3b136..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-02.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-02.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-02.svg new file mode 100644 index 000000000..812919cbb --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-02.svg @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-03.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-03.png deleted file mode 100644 index 8b386a081..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-03.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-03.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-03.svg new file mode 100644 index 000000000..c228becdd --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-03.svg @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-04.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-04.png deleted file mode 100644 index e36804f81..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-04.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-04.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-04.svg new file mode 100644 index 000000000..24467602b --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-04.svg @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-05.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-05.png deleted file mode 100644 index 7e4661821..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-05.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-05.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-05.svg new file mode 100644 index 000000000..ffe3ec4f4 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-05.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-06.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-06.png deleted file mode 100644 index 5ce14b221..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-06.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-06.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-06.svg new file mode 100644 index 000000000..48ab569d0 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-06.svg @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-07.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-07.png deleted file mode 100644 index c91f89584..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-07.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-07.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-07.svg new file mode 100644 index 000000000..4aa9f92a8 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-07.svg @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-08.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-08.png deleted file mode 100644 index 4f4c4ab2e..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-08.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-08.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-08.svg new file mode 100644 index 000000000..4cb7cba08 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-08.svg @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-09.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-09.png deleted file mode 100644 index 9c1b5b34d..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-09.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-09.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-09.svg new file mode 100644 index 000000000..927475066 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-09.svg @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-10.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-10.png deleted file mode 100644 index 6746a9cc1..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-10.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-10.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-10.svg new file mode 100644 index 000000000..5edf770b1 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-10.svg @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-11.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-11.png deleted file mode 100644 index 771ed1869..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-11.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-11.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-11.svg new file mode 100644 index 000000000..29733814e --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-11.svg @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-12.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-12.png deleted file mode 100644 index f32aa58ee..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-12.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-12.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-12.svg new file mode 100644 index 000000000..07ee18224 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-12.svg @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-13.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-13.png deleted file mode 100644 index ae8db49a6..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-13.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-13.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-13.svg new file mode 100644 index 000000000..9ab2fd502 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-13.svg @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-14.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-14.png deleted file mode 100644 index 038272194..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-14.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-14.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-14.svg new file mode 100644 index 000000000..99453cead --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-14.svg @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-15.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-15.png deleted file mode 100644 index 073b456a0..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-15.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-15.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-15.svg new file mode 100644 index 000000000..7e65d9d2a --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-15.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-16.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-16.png deleted file mode 100644 index 5369cf9af..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-16.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-16.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-16.svg new file mode 100644 index 000000000..add07c2fa --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-16.svg @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-17.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-17.png deleted file mode 100644 index 1f143bc30..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-17.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-17.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-17.svg new file mode 100644 index 000000000..d069c007f --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-17.svg @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-18.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-18.png deleted file mode 100644 index 3456bf542..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-18.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-18.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-18.svg new file mode 100644 index 000000000..8ca1898df --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-18.svg @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-19.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-19.png deleted file mode 100644 index a8f673724..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-19.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-19.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-19.svg new file mode 100644 index 000000000..1da4dd57e --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-19.svg @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-20.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-20.png deleted file mode 100644 index 5384bf7a1..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-20.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-20.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-20.svg new file mode 100644 index 000000000..f3cadd3f0 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-20.svg @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-21.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-21.png deleted file mode 100644 index 1c6a39bbf..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-21.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-21.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-21.svg new file mode 100644 index 000000000..72d24edf4 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-21.svg @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-22.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-22.png deleted file mode 100644 index 976f94dc1..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-22.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-22.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-22.svg new file mode 100644 index 000000000..31976afbc --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-22.svg @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-23.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-23.png deleted file mode 100644 index c6ca79192..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-23.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-23.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-23.svg new file mode 100644 index 000000000..8ca26c7ad --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-23.svg @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-24.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-24.png deleted file mode 100644 index 429f74046..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-24.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-24.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-24.svg new file mode 100644 index 000000000..70c5f9af7 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-24.svg @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-25.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-25.png deleted file mode 100644 index 38aeea19c..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-25.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-25.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-25.svg new file mode 100644 index 000000000..0b06acf10 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-25.svg @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-26.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-26.png deleted file mode 100644 index 65342b59d..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-26.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-26.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-26.svg new file mode 100644 index 000000000..efe31a6ae --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-26.svg @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-27.png b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-27.png deleted file mode 100644 index 1c2fc7717..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-27.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-27.svg b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-27.svg new file mode 100644 index 000000000..6be7092b0 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/People/People Avatar-02-27.svg @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/026-alien.png b/src/backend/base/langflow/initial_setup/profile_pictures/Space/026-alien.png deleted file mode 100644 index 218c03407..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/Space/026-alien.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/026-alien.svg b/src/backend/base/langflow/initial_setup/profile_pictures/Space/026-alien.svg new file mode 100644 index 000000000..a897a78b0 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/Space/026-alien.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/027-satellite.png b/src/backend/base/langflow/initial_setup/profile_pictures/Space/027-satellite.png deleted file mode 100644 index f72f22226..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/Space/027-satellite.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/027-satellite.svg b/src/backend/base/langflow/initial_setup/profile_pictures/Space/027-satellite.svg new file mode 100644 index 000000000..2b3d75526 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/Space/027-satellite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/028-alien.png b/src/backend/base/langflow/initial_setup/profile_pictures/Space/028-alien.png deleted file mode 100644 index 2e558a69d..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/Space/028-alien.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/028-alien.svg b/src/backend/base/langflow/initial_setup/profile_pictures/Space/028-alien.svg new file mode 100644 index 000000000..d9de6b169 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/Space/028-alien.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/029-telescope.png b/src/backend/base/langflow/initial_setup/profile_pictures/Space/029-telescope.png deleted file mode 100644 index 6c3622fea..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/Space/029-telescope.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/029-telescope.svg b/src/backend/base/langflow/initial_setup/profile_pictures/Space/029-telescope.svg new file mode 100644 index 000000000..9fdb0bcd5 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/Space/029-telescope.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/030-books.png b/src/backend/base/langflow/initial_setup/profile_pictures/Space/030-books.png deleted file mode 100644 index f1b5cf777..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/Space/030-books.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/030-books.svg b/src/backend/base/langflow/initial_setup/profile_pictures/Space/030-books.svg new file mode 100644 index 000000000..4cb73ec51 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/Space/030-books.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/031-planet.png b/src/backend/base/langflow/initial_setup/profile_pictures/Space/031-planet.png deleted file mode 100644 index 289a237c9..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/Space/031-planet.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/031-planet.svg b/src/backend/base/langflow/initial_setup/profile_pictures/Space/031-planet.svg new file mode 100644 index 000000000..243c6a47d --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/Space/031-planet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/032-constellation.png b/src/backend/base/langflow/initial_setup/profile_pictures/Space/032-constellation.png deleted file mode 100644 index ca09192a6..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/Space/032-constellation.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/032-constellation.svg b/src/backend/base/langflow/initial_setup/profile_pictures/Space/032-constellation.svg new file mode 100644 index 000000000..57b370a73 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/Space/032-constellation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/033-planet.png b/src/backend/base/langflow/initial_setup/profile_pictures/Space/033-planet.png deleted file mode 100644 index de3bf7548..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/Space/033-planet.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/033-planet.svg b/src/backend/base/langflow/initial_setup/profile_pictures/Space/033-planet.svg new file mode 100644 index 000000000..9b9b8c929 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/Space/033-planet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/034-alien.png b/src/backend/base/langflow/initial_setup/profile_pictures/Space/034-alien.png deleted file mode 100644 index 0ed7f3a46..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/Space/034-alien.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/034-alien.svg b/src/backend/base/langflow/initial_setup/profile_pictures/Space/034-alien.svg new file mode 100644 index 000000000..c1f232eab --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/Space/034-alien.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/035-globe.png b/src/backend/base/langflow/initial_setup/profile_pictures/Space/035-globe.png deleted file mode 100644 index b58ec3148..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/Space/035-globe.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/035-globe.svg b/src/backend/base/langflow/initial_setup/profile_pictures/Space/035-globe.svg new file mode 100644 index 000000000..de37ab082 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/Space/035-globe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/036-eclipse.png b/src/backend/base/langflow/initial_setup/profile_pictures/Space/036-eclipse.png deleted file mode 100644 index 4cb944fd2..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/Space/036-eclipse.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/036-eclipse.svg b/src/backend/base/langflow/initial_setup/profile_pictures/Space/036-eclipse.svg new file mode 100644 index 000000000..b3a217c91 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/Space/036-eclipse.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/037-meteor.png b/src/backend/base/langflow/initial_setup/profile_pictures/Space/037-meteor.png deleted file mode 100644 index f1e11b5ed..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/Space/037-meteor.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/037-meteor.svg b/src/backend/base/langflow/initial_setup/profile_pictures/Space/037-meteor.svg new file mode 100644 index 000000000..57bb86169 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/Space/037-meteor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/038-eclipse.png b/src/backend/base/langflow/initial_setup/profile_pictures/Space/038-eclipse.png deleted file mode 100644 index 63c8893ed..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/Space/038-eclipse.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/038-eclipse.svg b/src/backend/base/langflow/initial_setup/profile_pictures/Space/038-eclipse.svg new file mode 100644 index 000000000..400ecd776 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/Space/038-eclipse.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/039-Asteroid.png b/src/backend/base/langflow/initial_setup/profile_pictures/Space/039-Asteroid.png deleted file mode 100644 index 8b858f28e..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/Space/039-Asteroid.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/039-Asteroid.svg b/src/backend/base/langflow/initial_setup/profile_pictures/Space/039-Asteroid.svg new file mode 100644 index 000000000..fd894241b --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/Space/039-Asteroid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/040-mission.png b/src/backend/base/langflow/initial_setup/profile_pictures/Space/040-mission.png deleted file mode 100644 index 0befc44f1..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/Space/040-mission.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/040-mission.svg b/src/backend/base/langflow/initial_setup/profile_pictures/Space/040-mission.svg new file mode 100644 index 000000000..003e0ef03 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/Space/040-mission.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/041-spaceship.png b/src/backend/base/langflow/initial_setup/profile_pictures/Space/041-spaceship.png deleted file mode 100644 index d499c98b6..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/Space/041-spaceship.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/041-spaceship.svg b/src/backend/base/langflow/initial_setup/profile_pictures/Space/041-spaceship.svg new file mode 100644 index 000000000..d1164b166 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/Space/041-spaceship.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/042-space shuttle.png b/src/backend/base/langflow/initial_setup/profile_pictures/Space/042-space shuttle.png deleted file mode 100644 index f13df646b..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/Space/042-space shuttle.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/042-space shuttle.svg b/src/backend/base/langflow/initial_setup/profile_pictures/Space/042-space shuttle.svg new file mode 100644 index 000000000..03a589409 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/Space/042-space shuttle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/043-space shuttle.png b/src/backend/base/langflow/initial_setup/profile_pictures/Space/043-space shuttle.png deleted file mode 100644 index 136dc8031..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/Space/043-space shuttle.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/043-space shuttle.svg b/src/backend/base/langflow/initial_setup/profile_pictures/Space/043-space shuttle.svg new file mode 100644 index 000000000..841d226f3 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/Space/043-space shuttle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/044-rocket.png b/src/backend/base/langflow/initial_setup/profile_pictures/Space/044-rocket.png deleted file mode 100644 index 16d60e221..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/Space/044-rocket.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/044-rocket.svg b/src/backend/base/langflow/initial_setup/profile_pictures/Space/044-rocket.svg new file mode 100644 index 000000000..7a069e53e --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/Space/044-rocket.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/045-astronaut.png b/src/backend/base/langflow/initial_setup/profile_pictures/Space/045-astronaut.png deleted file mode 100644 index fdb107548..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/Space/045-astronaut.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/045-astronaut.svg b/src/backend/base/langflow/initial_setup/profile_pictures/Space/045-astronaut.svg new file mode 100644 index 000000000..c69214ebd --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/Space/045-astronaut.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/046-rocket.png b/src/backend/base/langflow/initial_setup/profile_pictures/Space/046-rocket.png deleted file mode 100644 index e2808eb39..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/Space/046-rocket.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/046-rocket.svg b/src/backend/base/langflow/initial_setup/profile_pictures/Space/046-rocket.svg new file mode 100644 index 000000000..65e523f31 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/Space/046-rocket.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/047-computer.png b/src/backend/base/langflow/initial_setup/profile_pictures/Space/047-computer.png deleted file mode 100644 index cc3bbf904..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/Space/047-computer.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/047-computer.svg b/src/backend/base/langflow/initial_setup/profile_pictures/Space/047-computer.svg new file mode 100644 index 000000000..912c33f73 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/Space/047-computer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/048-satellite.png b/src/backend/base/langflow/initial_setup/profile_pictures/Space/048-satellite.png deleted file mode 100644 index 0548cb820..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/Space/048-satellite.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/048-satellite.svg b/src/backend/base/langflow/initial_setup/profile_pictures/Space/048-satellite.svg new file mode 100644 index 000000000..1f0bfb9c1 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/Space/048-satellite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/049-astronaut.png b/src/backend/base/langflow/initial_setup/profile_pictures/Space/049-astronaut.png deleted file mode 100644 index 99654c52e..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/Space/049-astronaut.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/049-astronaut.svg b/src/backend/base/langflow/initial_setup/profile_pictures/Space/049-astronaut.svg new file mode 100644 index 000000000..c9c582d8e --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/Space/049-astronaut.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/050-space robot.png b/src/backend/base/langflow/initial_setup/profile_pictures/Space/050-space robot.png deleted file mode 100644 index 52c23b249..000000000 Binary files a/src/backend/base/langflow/initial_setup/profile_pictures/Space/050-space robot.png and /dev/null differ diff --git a/src/backend/base/langflow/initial_setup/profile_pictures/Space/050-space robot.svg b/src/backend/base/langflow/initial_setup/profile_pictures/Space/050-space robot.svg new file mode 100644 index 000000000..13d034c47 --- /dev/null +++ b/src/backend/base/langflow/initial_setup/profile_pictures/Space/050-space robot.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/backend/base/langflow/initial_setup/starter_projects/Langflow Blog Writter.json b/src/backend/base/langflow/initial_setup/starter_projects/Langflow Blog Writter.json index 828d4edb9..9e46f16df 100644 --- a/src/backend/base/langflow/initial_setup/starter_projects/Langflow Blog Writter.json +++ b/src/backend/base/langflow/initial_setup/starter_projects/Langflow Blog Writter.json @@ -8,19 +8,12 @@ "dataType": "URL", "id": "URL-HYPkR", "name": "record", - "output_types": [ - "Record" - ] + "output_types": ["Record"] }, "targetHandle": { "fieldName": "reference_2", "id": "Prompt-Rse03", - "inputTypes": [ - "Document", - "BaseOutputParser", - "Record", - "Text" - ], + "inputTypes": ["Document", "BaseOutputParser", "Record", "Text"], "type": "str" } }, @@ -41,16 +34,12 @@ "dataType": "OpenAIModel", "id": "OpenAIModel-gi29P", "name": "text", - "output_types": [ - "Text" - ] + "output_types": ["Text"] }, "targetHandle": { "fieldName": "input_value", "id": "ChatOutput-JPlxl", - "inputTypes": [ - "Text" - ], + "inputTypes": ["Text"], "type": "str" } }, @@ -70,19 +59,12 @@ "dataType": "URL", "id": "URL-2cX90", "name": "record", - "output_types": [ - "Record" - ] + "output_types": ["Record"] }, "targetHandle": { "fieldName": "reference_1", "id": "Prompt-Rse03", - "inputTypes": [ - "Document", - "BaseOutputParser", - "Record", - "Text" - ], + "inputTypes": ["Document", "BaseOutputParser", "Record", "Text"], "type": "str" } }, @@ -102,19 +84,12 @@ "dataType": "TextInput", "id": "TextInput-og8Or", "name": "Text", - "output_types": [ - "Text" - ] + "output_types": ["Text"] }, "targetHandle": { "fieldName": "instructions", "id": "Prompt-Rse03", - "inputTypes": [ - "Document", - "BaseOutputParser", - "Record", - "Text" - ], + "inputTypes": ["Document", "BaseOutputParser", "Record", "Text"], "type": "str" } }, @@ -134,18 +109,12 @@ "dataType": "Prompt", "id": "Prompt-Rse03", "name": "prompt", - "output_types": [ - "Prompt" - ] + "output_types": ["Prompt"] }, "targetHandle": { "fieldName": "input_value", "id": "OpenAIModel-gi29P", - "inputTypes": [ - "Text", - "Record", - "Prompt" - ], + "inputTypes": ["Text", "Record", "Prompt"], "type": "str" } }, @@ -167,18 +136,10 @@ "display_name": "Prompt", "id": "Prompt-Rse03", "node": { - "base_classes": [ - "object", - "Text", - "str" - ], + "base_classes": ["object", "Text", "str"], "beta": false, "custom_fields": { - "template": [ - "reference_1", - "reference_2", - "instructions" - ] + "template": ["reference_1", "reference_2", "instructions"] }, "description": "Create a prompt template with dynamic variables.", "display_name": "Prompt", @@ -201,9 +162,7 @@ "method": "build_prompt", "name": "prompt", "selected": "Prompt", - "types": [ - "Prompt" - ], + "types": ["Prompt"], "value": "__UNDEFINED__" }, { @@ -212,9 +171,7 @@ "method": "format_prompt", "name": "text", "selected": "Text", - "types": [ - "Text" - ], + "types": ["Text"], "value": "__UNDEFINED__" } ], @@ -323,9 +280,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -361,9 +316,7 @@ "data": { "id": "URL-HYPkR", "node": { - "base_classes": [ - "Record" - ], + "base_classes": ["Record"], "beta": false, "custom_fields": { "urls": null @@ -375,9 +328,7 @@ "field_order": [], "frozen": false, "icon": "layout-template", - "output_types": [ - "Record" - ], + "output_types": ["Record"], "outputs": [ { "cache": true, @@ -385,9 +336,7 @@ "method": null, "name": "record", "selected": "Record", - "types": [ - "Record" - ], + "types": ["Record"], "value": "__UNDEFINED__" } ], @@ -409,7 +358,7 @@ "show": true, "title_case": false, "type": "code", - "value": "from typing import Any, Dict\n\nfrom langchain_community.document_loaders.web_base import WebBaseLoader\n\nfrom langflow.custom import CustomComponent\nfrom langflow.schema import Record\n\n\nclass URLComponent(CustomComponent):\n display_name = \"URL\"\n description = \"Fetch content from one or more URLs.\"\n icon = \"layout-template\"\n\n def build_config(self) -> Dict[str, Any]:\n return {\n \"urls\": {\"display_name\": \"URL\"},\n }\n\n def build(\n self,\n urls: list[str],\n ) -> list[Record]:\n loader = WebBaseLoader(web_paths=urls)\n docs = loader.load()\n records = self.to_records(docs)\n self.status = records\n return records\n" + "value": "from typing import Any, Dict\n\nfrom langchain_community.document_loaders.web_base import WebBaseLoader\n\nfrom langflow.custom import CustomComponent\nfrom langflow.schema import Record\n\n\nclass URLComponent(CustomComponent):\n display_name = \"URL\"\n description = \"Fetch content from one or more URLs.\"\n icon = \"layout-template\"\n\n def build_config(self) -> Dict[str, Any]:\n return {\n \"urls\": {\"display_name\": \"URL\"},\n }\n\n def build(\n self,\n urls: list[str],\n ) -> list[Record]:\n loader = WebBaseLoader(web_paths=[url for url in urls if url])\n docs = loader.load()\n records = self.to_records(docs)\n self.status = records\n return records\n" }, "urls": { "advanced": false, @@ -418,9 +367,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": true, "load_from_db": false, "multiline": false, @@ -458,12 +405,7 @@ "data": { "id": "ChatOutput-JPlxl", "node": { - "base_classes": [ - "Text", - "Record", - "object", - "str" - ], + "base_classes": ["Text", "Record", "object", "str"], "beta": false, "custom_fields": { "input_value": null, @@ -488,9 +430,7 @@ "method": "text_response", "name": "text", "selected": "Text", - "types": [ - "Text" - ], + "types": ["Text"], "value": "__UNDEFINED__" }, { @@ -499,9 +439,7 @@ "method": "message_response", "name": "message", "selected": "Message", - "types": [ - "Message" - ], + "types": ["Message"], "value": "__UNDEFINED__" } ], @@ -532,9 +470,7 @@ "fileTypes": [], "file_path": "", "info": "Message to be passed as output.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": true, @@ -554,9 +490,7 @@ "fileTypes": [], "file_path": "", "info": "Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -576,17 +510,12 @@ "fileTypes": [], "file_path": "", "info": "Type of sender.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": true, "load_from_db": false, "multiline": false, "name": "sender", - "options": [ - "Machine", - "User" - ], + "options": ["Machine", "User"], "password": false, "placeholder": "", "required": false, @@ -602,9 +531,7 @@ "fileTypes": [], "file_path": "", "info": "Name of the sender.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -624,9 +551,7 @@ "fileTypes": [], "file_path": "", "info": "Session ID for the message.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -657,11 +582,7 @@ "data": { "id": "OpenAIModel-gi29P", "node": { - "base_classes": [ - "str", - "Text", - "object" - ], + "base_classes": ["str", "Text", "object"], "beta": false, "custom_fields": { "input_value": null, @@ -691,9 +612,7 @@ ], "frozen": false, "icon": "OpenAI", - "output_types": [ - "Text" - ], + "output_types": ["Text"], "outputs": [ { "cache": true, @@ -701,9 +620,7 @@ "method": null, "name": "text", "selected": "Text", - "types": [ - "Text" - ], + "types": ["Text"], "value": "__UNDEFINED__" } ], @@ -734,11 +651,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text", - "Record", - "Prompt" - ], + "input_types": ["Text", "Record", "Prompt"], "list": false, "load_from_db": false, "multiline": false, @@ -795,9 +708,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": true, "load_from_db": false, "multiline": false, @@ -824,9 +735,7 @@ "fileTypes": [], "file_path": "", "info": "The base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\n\nYou can change this to use other APIs like JinaChat, LocalAI and Prem.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -845,9 +754,7 @@ "fileTypes": [], "file_path": "", "info": "The OpenAI API Key to use for the OpenAI model.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -886,9 +793,7 @@ "fileTypes": [], "file_path": "", "info": "System message to pass to the model.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -948,9 +853,7 @@ "data": { "id": "URL-2cX90", "node": { - "base_classes": [ - "Record" - ], + "base_classes": ["Record"], "beta": false, "custom_fields": { "urls": null @@ -962,9 +865,7 @@ "field_order": [], "frozen": false, "icon": "layout-template", - "output_types": [ - "Record" - ], + "output_types": ["Record"], "outputs": [ { "cache": true, @@ -972,9 +873,7 @@ "method": null, "name": "record", "selected": "Record", - "types": [ - "Record" - ], + "types": ["Record"], "value": "__UNDEFINED__" } ], @@ -996,7 +895,7 @@ "show": true, "title_case": false, "type": "code", - "value": "from typing import Any, Dict\n\nfrom langchain_community.document_loaders.web_base import WebBaseLoader\n\nfrom langflow.custom import CustomComponent\nfrom langflow.schema import Record\n\n\nclass URLComponent(CustomComponent):\n display_name = \"URL\"\n description = \"Fetch content from one or more URLs.\"\n icon = \"layout-template\"\n\n def build_config(self) -> Dict[str, Any]:\n return {\n \"urls\": {\"display_name\": \"URL\"},\n }\n\n def build(\n self,\n urls: list[str],\n ) -> list[Record]:\n loader = WebBaseLoader(web_paths=urls)\n docs = loader.load()\n records = self.to_records(docs)\n self.status = records\n return records\n" + "value": "from typing import Any, Dict\n\nfrom langchain_community.document_loaders.web_base import WebBaseLoader\n\nfrom langflow.custom import CustomComponent\nfrom langflow.schema import Record\n\n\nclass URLComponent(CustomComponent):\n display_name = \"URL\"\n description = \"Fetch content from one or more URLs.\"\n icon = \"layout-template\"\n\n def build_config(self) -> Dict[str, Any]:\n return {\n \"urls\": {\"display_name\": \"URL\"},\n }\n\n def build(\n self,\n urls: list[str],\n ) -> list[Record]:\n loader = WebBaseLoader(web_paths=[url for url in urls if url])\n docs = loader.load()\n records = self.to_records(docs)\n self.status = records\n return records\n" }, "urls": { "advanced": false, @@ -1005,9 +904,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": true, "load_from_db": false, "multiline": false, @@ -1018,9 +915,7 @@ "show": true, "title_case": false, "type": "str", - "value": [ - "https://www.promptingguide.ai/introduction/basics" - ] + "value": ["https://www.promptingguide.ai/introduction/basics"] } } }, @@ -1045,11 +940,7 @@ "data": { "id": "TextInput-og8Or", "node": { - "base_classes": [ - "object", - "Text", - "str" - ], + "base_classes": ["object", "Text", "str"], "beta": false, "custom_fields": { "input_value": null, @@ -1062,16 +953,12 @@ "field_order": [], "frozen": false, "icon": "type", - "output_types": [ - "Text" - ], + "output_types": ["Text"], "outputs": [ { "name": "Text", "selected": "Text", - "types": [ - "Text" - ] + "types": ["Text"] } ], "template": { @@ -1101,10 +988,7 @@ "fileTypes": [], "file_path": "", "info": "Text or Record to be passed as input.", - "input_types": [ - "Record", - "Text" - ], + "input_types": ["Record", "Text"], "list": false, "load_from_db": false, "multiline": false, @@ -1124,9 +1008,7 @@ "fileTypes": [], "file_path": "", "info": "Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": true, @@ -1170,4 +1052,4 @@ "is_component": false, "last_tested_version": "1.0.0a0", "name": "Blog Writer" -} \ No newline at end of file +} diff --git a/src/backend/base/langflow/initial_setup/starter_projects/VectorStore-RAG-Flows.json b/src/backend/base/langflow/initial_setup/starter_projects/VectorStore-RAG-Flows.json index 0320b24ba..a8f577779 100644 --- a/src/backend/base/langflow/initial_setup/starter_projects/VectorStore-RAG-Flows.json +++ b/src/backend/base/langflow/initial_setup/starter_projects/VectorStore-RAG-Flows.json @@ -8,19 +8,12 @@ "dataType": "TextOutput", "id": "TextOutput-BDknO", "name": "Text", - "output_types": [ - "Text" - ] + "output_types": ["Text"] }, "targetHandle": { "fieldName": "context", "id": "Prompt-xeI6K", - "inputTypes": [ - "Document", - "Message", - "Record", - "Text" - ], + "inputTypes": ["Document", "Message", "Record", "Text"], "type": "str" } }, @@ -41,19 +34,12 @@ "dataType": "ChatInput", "id": "ChatInput-yxMKE", "name": "message", - "output_types": [ - "Message" - ] + "output_types": ["Message"] }, "targetHandle": { "fieldName": "question", "id": "Prompt-xeI6K", - "inputTypes": [ - "Document", - "Message", - "Record", - "Text" - ], + "inputTypes": ["Document", "Message", "Record", "Text"], "type": "str" } }, @@ -74,18 +60,12 @@ "dataType": "Prompt", "id": "Prompt-xeI6K", "name": "prompt", - "output_types": [ - "Prompt" - ] + "output_types": ["Prompt"] }, "targetHandle": { "fieldName": "input_value", "id": "OpenAIModel-EjXlN", - "inputTypes": [ - "Text", - "Record", - "Prompt" - ], + "inputTypes": ["Text", "Record", "Prompt"], "type": "str" } }, @@ -106,16 +86,12 @@ "dataType": "OpenAIModel", "id": "OpenAIModel-EjXlN", "name": "text", - "output_types": [ - "Text" - ] + "output_types": ["Text"] }, "targetHandle": { "fieldName": "input_value", "id": "ChatOutput-Q39I8", - "inputTypes": [ - "Text" - ], + "inputTypes": ["Text"], "type": "str" } }, @@ -136,17 +112,12 @@ "dataType": "File", "id": "File-t0a6a", "name": "record", - "output_types": [ - "Record" - ] + "output_types": ["Record"] }, "targetHandle": { "fieldName": "inputs", "id": "RecursiveCharacterTextSplitter-tR9QM", - "inputTypes": [ - "Document", - "Record" - ], + "inputTypes": ["Document", "Record"], "type": "Document" } }, @@ -167,9 +138,7 @@ "dataType": "OpenAIEmbeddings", "id": "OpenAIEmbeddings-ZlOk1", "name": "embeddings", - "output_types": [ - "Embeddings" - ] + "output_types": ["Embeddings"] }, "targetHandle": { "fieldName": "embedding", @@ -194,16 +163,12 @@ "dataType": "ChatInput", "id": "ChatInput-yxMKE", "name": "message", - "output_types": [ - "Message" - ] + "output_types": ["Message"] }, "targetHandle": { "fieldName": "input_value", "id": "AstraDBSearch-41nRz", - "inputTypes": [ - "Text" - ], + "inputTypes": ["Text"], "type": "str" } }, @@ -223,9 +188,7 @@ "dataType": "RecursiveCharacterTextSplitter", "id": "RecursiveCharacterTextSplitter-tR9QM", "name": "record", - "output_types": [ - "Record" - ] + "output_types": ["Record"] }, "targetHandle": { "fieldName": "inputs", @@ -251,9 +214,7 @@ "dataType": "OpenAIEmbeddings", "id": "OpenAIEmbeddings-9TPjc", "name": "embeddings", - "output_types": [ - "Embeddings" - ] + "output_types": ["Embeddings"] }, "targetHandle": { "fieldName": "embedding", @@ -279,17 +240,12 @@ "dataType": "AstraDBSearch", "id": "AstraDBSearch-41nRz", "name": "record", - "output_types": [ - "Record" - ] + "output_types": ["Record"] }, "targetHandle": { "fieldName": "input_value", "id": "TextOutput-BDknO", - "inputTypes": [ - "Record", - "Text" - ], + "inputTypes": ["Record", "Text"], "type": "str" } }, @@ -308,12 +264,7 @@ "data": { "id": "ChatInput-yxMKE", "node": { - "base_classes": [ - "Text", - "str", - "object", - "Record" - ], + "base_classes": ["Text", "str", "object", "Record"], "beta": false, "custom_fields": { "input_value": null, @@ -337,9 +288,7 @@ "method": "text_response", "name": "text", "selected": "Text", - "types": [ - "Text" - ], + "types": ["Text"], "value": "__UNDEFINED__" }, { @@ -348,9 +297,7 @@ "method": "message_response", "name": "message", "selected": "Message", - "types": [ - "Message" - ], + "types": ["Message"], "value": "__UNDEFINED__" } ], @@ -401,17 +348,12 @@ "fileTypes": [], "file_path": "", "info": "Type of sender.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": true, "load_from_db": false, "multiline": false, "name": "sender", - "options": [ - "Machine", - "User" - ], + "options": ["Machine", "User"], "password": false, "placeholder": "", "required": false, @@ -427,9 +369,7 @@ "fileTypes": [], "file_path": "", "info": "Name of the sender.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -449,9 +389,7 @@ "fileTypes": [], "file_path": "", "info": "Session ID for the message.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -482,11 +420,7 @@ "data": { "id": "TextOutput-BDknO", "node": { - "base_classes": [ - "object", - "Text", - "str" - ], + "base_classes": ["object", "Text", "str"], "beta": false, "custom_fields": { "input_value": null, @@ -499,16 +433,12 @@ "field_order": [], "frozen": false, "icon": "type", - "output_types": [ - "Text" - ], + "output_types": ["Text"], "outputs": [ { "name": "Text", "selected": "Text", - "types": [ - "Text" - ] + "types": ["Text"] } ], "template": { @@ -538,10 +468,7 @@ "fileTypes": [], "file_path": "", "info": "Text or Record to be passed as output.", - "input_types": [ - "Record", - "Text" - ], + "input_types": ["Record", "Text"], "list": false, "load_from_db": false, "multiline": false, @@ -561,9 +488,7 @@ "fileTypes": [], "file_path": "", "info": "Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": true, @@ -599,9 +524,7 @@ "data": { "id": "OpenAIEmbeddings-ZlOk1", "node": { - "base_classes": [ - "Embeddings" - ], + "base_classes": ["Embeddings"], "beta": false, "custom_fields": { "allowed_special": null, @@ -633,9 +556,7 @@ "field_formatters": {}, "field_order": [], "frozen": false, - "output_types": [ - "Embeddings" - ], + "output_types": ["Embeddings"], "outputs": [ { "cache": true, @@ -643,9 +564,7 @@ "method": null, "name": "embeddings", "selected": "Embeddings", - "types": [ - "Embeddings" - ], + "types": ["Embeddings"], "value": "__UNDEFINED__" } ], @@ -658,9 +577,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": true, "load_from_db": false, "multiline": false, @@ -754,9 +671,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -776,9 +691,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": true, "load_from_db": false, "multiline": false, @@ -789,9 +702,7 @@ "show": true, "title_case": false, "type": "str", - "value": [ - "all" - ] + "value": ["all"] }, "embedding_ctx_length": { "advanced": true, @@ -838,9 +749,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": true, "load_from_db": false, "multiline": false, @@ -884,9 +793,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -905,9 +812,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -927,9 +832,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -948,9 +851,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -969,9 +870,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -990,9 +889,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -1092,9 +989,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -1125,11 +1020,7 @@ "data": { "id": "OpenAIModel-EjXlN", "node": { - "base_classes": [ - "object", - "Text", - "str" - ], + "base_classes": ["object", "Text", "str"], "beta": false, "custom_fields": { "input_value": null, @@ -1159,9 +1050,7 @@ ], "frozen": false, "icon": "OpenAI", - "output_types": [ - "Text" - ], + "output_types": ["Text"], "outputs": [ { "cache": true, @@ -1169,9 +1058,7 @@ "method": null, "name": "text", "selected": "Text", - "types": [ - "Text" - ], + "types": ["Text"], "value": "__UNDEFINED__" } ], @@ -1202,11 +1089,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text", - "Record", - "Prompt" - ], + "input_types": ["Text", "Record", "Prompt"], "list": false, "load_from_db": false, "multiline": false, @@ -1263,9 +1146,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": true, "load_from_db": false, "multiline": false, @@ -1292,9 +1173,7 @@ "fileTypes": [], "file_path": "", "info": "The base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\n\nYou can change this to use other APIs like JinaChat, LocalAI and Prem.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -1313,9 +1192,7 @@ "fileTypes": [], "file_path": "", "info": "The OpenAI API Key to use for the OpenAI model.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -1354,9 +1231,7 @@ "fileTypes": [], "file_path": "", "info": "System message to pass to the model.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -1418,17 +1293,10 @@ "display_name": "Prompt", "id": "Prompt-xeI6K", "node": { - "base_classes": [ - "object", - "Text", - "str" - ], + "base_classes": ["object", "Text", "str"], "beta": false, "custom_fields": { - "template": [ - "context", - "question" - ] + "template": ["context", "question"] }, "description": "Create a prompt template with dynamic variables.", "display_name": "Prompt", @@ -1451,9 +1319,7 @@ "method": "build_prompt", "name": "prompt", "selected": "Prompt", - "types": [ - "Prompt" - ], + "types": ["Prompt"], "value": "__UNDEFINED__" }, { @@ -1462,9 +1328,7 @@ "method": "format_prompt", "name": "text", "selected": "Text", - "types": [ - "Text" - ], + "types": ["Text"], "value": "__UNDEFINED__" } ], @@ -1496,12 +1360,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Document", - "Message", - "Record", - "Text" - ], + "input_types": ["Document", "Message", "Record", "Text"], "list": false, "load_from_db": false, "multiline": true, @@ -1522,12 +1381,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Document", - "Message", - "Record", - "Text" - ], + "input_types": ["Document", "Message", "Record", "Text"], "list": false, "load_from_db": false, "multiline": true, @@ -1547,9 +1401,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -1585,12 +1437,7 @@ "data": { "id": "ChatOutput-Q39I8", "node": { - "base_classes": [ - "object", - "Text", - "Record", - "str" - ], + "base_classes": ["object", "Text", "Record", "str"], "beta": false, "custom_fields": { "input_value": null, @@ -1615,9 +1462,7 @@ "method": "text_response", "name": "text", "selected": "Text", - "types": [ - "Text" - ], + "types": ["Text"], "value": "__UNDEFINED__" }, { @@ -1626,9 +1471,7 @@ "method": "message_response", "name": "message", "selected": "Message", - "types": [ - "Message" - ], + "types": ["Message"], "value": "__UNDEFINED__" } ], @@ -1659,9 +1502,7 @@ "fileTypes": [], "file_path": "", "info": "Message to be passed as output.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": true, @@ -1681,9 +1522,7 @@ "fileTypes": [], "file_path": "", "info": "Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -1703,17 +1542,12 @@ "fileTypes": [], "file_path": "", "info": "Type of sender.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": true, "load_from_db": false, "multiline": false, "name": "sender", - "options": [ - "Machine", - "User" - ], + "options": ["Machine", "User"], "password": false, "placeholder": "", "required": false, @@ -1729,9 +1563,7 @@ "fileTypes": [], "file_path": "", "info": "Name of the sender.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -1751,9 +1583,7 @@ "fileTypes": [], "file_path": "", "info": "Session ID for the message.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -1789,9 +1619,7 @@ "data": { "id": "File-t0a6a", "node": { - "base_classes": [ - "Record" - ], + "base_classes": ["Record"], "beta": false, "custom_fields": { "path": null, @@ -1804,9 +1632,7 @@ "field_order": [], "frozen": false, "icon": "file-text", - "output_types": [ - "Record" - ], + "output_types": ["Record"], "outputs": [ { "cache": true, @@ -1814,9 +1640,7 @@ "method": null, "name": "record", "selected": "Record", - "types": [ - "Record" - ], + "types": ["Record"], "value": "__UNDEFINED__" } ], @@ -1920,9 +1744,7 @@ "data": { "id": "RecursiveCharacterTextSplitter-tR9QM", "node": { - "base_classes": [ - "Record" - ], + "base_classes": ["Record"], "beta": false, "custom_fields": { "chunk_overlap": null, @@ -1936,9 +1758,7 @@ "field_formatters": {}, "field_order": [], "frozen": false, - "output_types": [ - "Record" - ], + "output_types": ["Record"], "outputs": [ { "cache": true, @@ -1946,9 +1766,7 @@ "method": null, "name": "record", "selected": "Record", - "types": [ - "Record" - ], + "types": ["Record"], "value": "__UNDEFINED__" } ], @@ -2017,10 +1835,7 @@ "fileTypes": [], "file_path": "", "info": "The texts to split.", - "input_types": [ - "Document", - "Record" - ], + "input_types": ["Document", "Record"], "list": true, "load_from_db": false, "multiline": false, @@ -2039,9 +1854,7 @@ "fileTypes": [], "file_path": "", "info": "The characters to split on.\nIf left empty defaults to [\"\\n\\n\", \"\\n\", \" \", \"\"].", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": true, "load_from_db": false, "multiline": false, @@ -2052,9 +1865,7 @@ "show": true, "title_case": false, "type": "str", - "value": [ - "" - ] + "value": [""] } } }, @@ -2079,9 +1890,7 @@ "data": { "id": "AstraDBSearch-41nRz", "node": { - "base_classes": [ - "Record" - ], + "base_classes": ["Record"], "beta": false, "custom_fields": { "api_endpoint": null, @@ -2116,9 +1925,7 @@ ], "frozen": false, "icon": "AstraDB", - "output_types": [ - "Record" - ], + "output_types": ["Record"], "outputs": [ { "cache": true, @@ -2126,9 +1933,7 @@ "method": null, "name": "record", "selected": "Record", - "types": [ - "Record" - ], + "types": ["Record"], "value": "__UNDEFINED__" } ], @@ -2141,9 +1946,7 @@ "fileTypes": [], "file_path": "", "info": "API endpoint URL for the Astra DB service.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": true, "multiline": false, @@ -2271,9 +2074,7 @@ "fileTypes": [], "file_path": "", "info": "The name of the collection within Astra DB where the vectors will be stored.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -2311,9 +2112,7 @@ "fileTypes": [], "file_path": "", "info": "Input value to search", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -2332,9 +2131,7 @@ "fileTypes": [], "file_path": "", "info": "Optional list of metadata fields to exclude from the indexing.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": true, "load_from_db": false, "multiline": false, @@ -2353,9 +2150,7 @@ "fileTypes": [], "file_path": "", "info": "Optional list of metadata fields to include in the indexing.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": true, "load_from_db": false, "multiline": false, @@ -2374,9 +2169,7 @@ "fileTypes": [], "file_path": "", "info": "Optional distance metric for vector comparisons in the vector store.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -2395,9 +2188,7 @@ "fileTypes": [], "file_path": "", "info": "Optional namespace within Astra DB to use for the collection.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -2454,17 +2245,12 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": true, "load_from_db": false, "multiline": false, "name": "search_type", - "options": [ - "Similarity", - "MMR" - ], + "options": ["Similarity", "MMR"], "password": false, "placeholder": "", "required": false, @@ -2480,18 +2266,12 @@ "fileTypes": [], "file_path": "", "info": "Configuration mode for setting up the vector store, with options like “Sync”, “Async”, or “Off”.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": true, "load_from_db": false, "multiline": false, "name": "setup_mode", - "options": [ - "Sync", - "Async", - "Off" - ], + "options": ["Sync", "Async", "Off"], "password": false, "placeholder": "", "required": false, @@ -2507,9 +2287,7 @@ "fileTypes": [], "file_path": "", "info": "Authentication token for accessing Astra DB.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": true, "multiline": false, @@ -2545,9 +2323,7 @@ "data": { "id": "AstraDB-eUCSS", "node": { - "base_classes": [ - "VectorStore" - ], + "base_classes": ["VectorStore"], "beta": false, "custom_fields": { "api_endpoint": null, @@ -2580,10 +2356,7 @@ ], "frozen": false, "icon": "AstraDB", - "output_types": [ - "VectorStore", - "BaseRetriever" - ], + "output_types": ["VectorStore", "BaseRetriever"], "outputs": [ { "cache": true, @@ -2591,9 +2364,7 @@ "method": null, "name": "vectorstore", "selected": "VectorStore", - "types": [ - "VectorStore" - ], + "types": ["VectorStore"], "value": "__UNDEFINED__" }, { @@ -2602,9 +2373,7 @@ "method": null, "name": "baseretriever", "selected": "BaseRetriever", - "types": [ - "BaseRetriever" - ], + "types": ["BaseRetriever"], "value": "__UNDEFINED__" } ], @@ -2617,9 +2386,7 @@ "fileTypes": [], "file_path": "", "info": "API endpoint URL for the Astra DB service.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": true, "multiline": false, @@ -2720,7 +2487,7 @@ "show": true, "title_case": false, "type": "code", - "value": "from typing import List, Optional, Union\n\nfrom langchain_core.retrievers import BaseRetriever\n\nfrom langflow.custom import CustomComponent\nfrom langflow.field_typing import Embeddings, VectorStore\nfrom langflow.schema import Record\n\n\nclass AstraDBVectorStoreComponent(CustomComponent):\n display_name = \"Astra DB\"\n description = \"Builds or loads an Astra DB Vector Store.\"\n icon = \"AstraDB\"\n field_order = [\"token\", \"api_endpoint\", \"collection_name\", \"inputs\", \"embedding\"]\n\n def build_config(self):\n return {\n \"inputs\": {\n \"display_name\": \"Inputs\",\n \"info\": \"Optional list of records to be processed and stored in the vector store.\",\n },\n \"embedding\": {\"display_name\": \"Embedding\", \"info\": \"Embedding to use\"},\n \"collection_name\": {\n \"display_name\": \"Collection Name\",\n \"info\": \"The name of the collection within Astra DB where the vectors will be stored.\",\n },\n \"token\": {\n \"display_name\": \"Token\",\n \"info\": \"Authentication token for accessing Astra DB.\",\n \"password\": True,\n },\n \"api_endpoint\": {\n \"display_name\": \"API Endpoint\",\n \"info\": \"API endpoint URL for the Astra DB service.\",\n },\n \"namespace\": {\n \"display_name\": \"Namespace\",\n \"info\": \"Optional namespace within Astra DB to use for the collection.\",\n \"advanced\": True,\n },\n \"metric\": {\n \"display_name\": \"Metric\",\n \"info\": \"Optional distance metric for vector comparisons in the vector store.\",\n \"advanced\": True,\n },\n \"batch_size\": {\n \"display_name\": \"Batch Size\",\n \"info\": \"Optional number of records to process in a single batch.\",\n \"advanced\": True,\n },\n \"bulk_insert_batch_concurrency\": {\n \"display_name\": \"Bulk Insert Batch Concurrency\",\n \"info\": \"Optional concurrency level for bulk insert operations.\",\n \"advanced\": True,\n },\n \"bulk_insert_overwrite_concurrency\": {\n \"display_name\": \"Bulk Insert Overwrite Concurrency\",\n \"info\": \"Optional concurrency level for bulk insert operations that overwrite existing records.\",\n \"advanced\": True,\n },\n \"bulk_delete_concurrency\": {\n \"display_name\": \"Bulk Delete Concurrency\",\n \"info\": \"Optional concurrency level for bulk delete operations.\",\n \"advanced\": True,\n },\n \"setup_mode\": {\n \"display_name\": \"Setup Mode\",\n \"info\": \"Configuration mode for setting up the vector store, with options like “Sync”, “Async”, or “Off”.\",\n \"options\": [\"Sync\", \"Async\", \"Off\"],\n \"advanced\": True,\n },\n \"pre_delete_collection\": {\n \"display_name\": \"Pre Delete Collection\",\n \"info\": \"Boolean flag to determine whether to delete the collection before creating a new one.\",\n \"advanced\": True,\n },\n \"metadata_indexing_include\": {\n \"display_name\": \"Metadata Indexing Include\",\n \"info\": \"Optional list of metadata fields to include in the indexing.\",\n \"advanced\": True,\n },\n \"metadata_indexing_exclude\": {\n \"display_name\": \"Metadata Indexing Exclude\",\n \"info\": \"Optional list of metadata fields to exclude from the indexing.\",\n \"advanced\": True,\n },\n \"collection_indexing_policy\": {\n \"display_name\": \"Collection Indexing Policy\",\n \"info\": \"Optional dictionary defining the indexing policy for the collection.\",\n \"advanced\": True,\n },\n }\n\n def build(\n self,\n embedding: Embeddings,\n token: str,\n api_endpoint: str,\n collection_name: str,\n inputs: Optional[List[Record]] = None,\n namespace: Optional[str] = None,\n metric: Optional[str] = None,\n batch_size: Optional[int] = None,\n bulk_insert_batch_concurrency: Optional[int] = None,\n bulk_insert_overwrite_concurrency: Optional[int] = None,\n bulk_delete_concurrency: Optional[int] = None,\n setup_mode: str = \"Sync\",\n pre_delete_collection: bool = False,\n metadata_indexing_include: Optional[List[str]] = None,\n metadata_indexing_exclude: Optional[List[str]] = None,\n collection_indexing_policy: Optional[dict] = None,\n ) -> Union[VectorStore, BaseRetriever]:\n try:\n from langchain_astradb import AstraDBVectorStore\n from langchain_astradb.utils.astradb import SetupMode\n except ImportError:\n raise ImportError(\n \"Could not import langchain Astra DB integration package. \"\n \"Please install it with `pip install langchain-astradb`.\"\n )\n\n try:\n setup_mode_value = SetupMode[setup_mode.upper()]\n except KeyError:\n raise ValueError(f\"Invalid setup mode: {setup_mode}\")\n if inputs:\n documents = [_input.to_lc_document() for _input in inputs]\n\n vector_store = AstraDBVectorStore.from_documents(\n documents=documents,\n embedding=embedding,\n collection_name=collection_name,\n token=token,\n api_endpoint=api_endpoint,\n namespace=namespace,\n metric=metric,\n batch_size=batch_size,\n bulk_insert_batch_concurrency=bulk_insert_batch_concurrency,\n bulk_insert_overwrite_concurrency=bulk_insert_overwrite_concurrency,\n bulk_delete_concurrency=bulk_delete_concurrency,\n setup_mode=setup_mode_value,\n pre_delete_collection=pre_delete_collection,\n metadata_indexing_include=metadata_indexing_include,\n metadata_indexing_exclude=metadata_indexing_exclude,\n collection_indexing_policy=collection_indexing_policy,\n )\n else:\n vector_store = AstraDBVectorStore(\n embedding=embedding,\n collection_name=collection_name,\n token=token,\n api_endpoint=api_endpoint,\n namespace=namespace,\n metric=metric,\n batch_size=batch_size,\n bulk_insert_batch_concurrency=bulk_insert_batch_concurrency,\n bulk_insert_overwrite_concurrency=bulk_insert_overwrite_concurrency,\n bulk_delete_concurrency=bulk_delete_concurrency,\n setup_mode=setup_mode_value,\n pre_delete_collection=pre_delete_collection,\n metadata_indexing_include=metadata_indexing_include,\n metadata_indexing_exclude=metadata_indexing_exclude,\n collection_indexing_policy=collection_indexing_policy,\n )\n\n return vector_store\n return vector_store\n" + "value": "from typing import List, Optional, Union\n\nfrom langflow.custom import CustomComponent\nfrom langflow.field_typing import Embeddings, VectorStore\nfrom langflow.schema import Record\nfrom langchain_core.retrievers import BaseRetriever\n\n\nclass AstraDBVectorStoreComponent(CustomComponent):\n display_name = \"Astra DB\"\n description = \"Builds or loads an Astra DB Vector Store.\"\n icon = \"AstraDB\"\n field_order = [\"token\", \"api_endpoint\", \"collection_name\", \"inputs\", \"embedding\"]\n\n def build_config(self):\n return {\n \"inputs\": {\n \"display_name\": \"Inputs\",\n \"info\": \"Optional list of records to be processed and stored in the vector store.\",\n },\n \"embedding\": {\"display_name\": \"Embedding\", \"info\": \"Embedding to use\"},\n \"collection_name\": {\n \"display_name\": \"Collection Name\",\n \"info\": \"The name of the collection within Astra DB where the vectors will be stored.\",\n },\n \"token\": {\n \"display_name\": \"Token\",\n \"info\": \"Authentication token for accessing Astra DB.\",\n \"password\": True,\n },\n \"api_endpoint\": {\n \"display_name\": \"API Endpoint\",\n \"info\": \"API endpoint URL for the Astra DB service.\",\n },\n \"namespace\": {\n \"display_name\": \"Namespace\",\n \"info\": \"Optional namespace within Astra DB to use for the collection.\",\n \"advanced\": True,\n },\n \"metric\": {\n \"display_name\": \"Metric\",\n \"info\": \"Optional distance metric for vector comparisons in the vector store.\",\n \"advanced\": True,\n },\n \"batch_size\": {\n \"display_name\": \"Batch Size\",\n \"info\": \"Optional number of records to process in a single batch.\",\n \"advanced\": True,\n },\n \"bulk_insert_batch_concurrency\": {\n \"display_name\": \"Bulk Insert Batch Concurrency\",\n \"info\": \"Optional concurrency level for bulk insert operations.\",\n \"advanced\": True,\n },\n \"bulk_insert_overwrite_concurrency\": {\n \"display_name\": \"Bulk Insert Overwrite Concurrency\",\n \"info\": \"Optional concurrency level for bulk insert operations that overwrite existing records.\",\n \"advanced\": True,\n },\n \"bulk_delete_concurrency\": {\n \"display_name\": \"Bulk Delete Concurrency\",\n \"info\": \"Optional concurrency level for bulk delete operations.\",\n \"advanced\": True,\n },\n \"setup_mode\": {\n \"display_name\": \"Setup Mode\",\n \"info\": \"Configuration mode for setting up the vector store, with options like “Sync”, “Async”, or “Off”.\",\n \"options\": [\"Sync\", \"Async\", \"Off\"],\n \"advanced\": True,\n },\n \"pre_delete_collection\": {\n \"display_name\": \"Pre Delete Collection\",\n \"info\": \"Boolean flag to determine whether to delete the collection before creating a new one.\",\n \"advanced\": True,\n },\n \"metadata_indexing_include\": {\n \"display_name\": \"Metadata Indexing Include\",\n \"info\": \"Optional list of metadata fields to include in the indexing.\",\n \"advanced\": True,\n },\n \"metadata_indexing_exclude\": {\n \"display_name\": \"Metadata Indexing Exclude\",\n \"info\": \"Optional list of metadata fields to exclude from the indexing.\",\n \"advanced\": True,\n },\n \"collection_indexing_policy\": {\n \"display_name\": \"Collection Indexing Policy\",\n \"info\": \"Optional dictionary defining the indexing policy for the collection.\",\n \"advanced\": True,\n },\n }\n\n def build(\n self,\n embedding: Embeddings,\n token: str,\n api_endpoint: str,\n collection_name: str,\n inputs: Optional[List[Record]] = None,\n namespace: Optional[str] = None,\n metric: Optional[str] = None,\n batch_size: Optional[int] = None,\n bulk_insert_batch_concurrency: Optional[int] = None,\n bulk_insert_overwrite_concurrency: Optional[int] = None,\n bulk_delete_concurrency: Optional[int] = None,\n setup_mode: str = \"Sync\",\n pre_delete_collection: bool = False,\n metadata_indexing_include: Optional[List[str]] = None,\n metadata_indexing_exclude: Optional[List[str]] = None,\n collection_indexing_policy: Optional[dict] = None,\n ) -> Union[VectorStore, BaseRetriever]:\n try:\n from langchain_astradb import AstraDBVectorStore\n from langchain_astradb.utils.astradb import SetupMode\n except ImportError:\n raise ImportError(\n \"Could not import langchain Astra DB integration package. \"\n \"Please install it with `pip install langchain-astradb`.\"\n )\n\n try:\n setup_mode_value = SetupMode[setup_mode.upper()]\n except KeyError:\n raise ValueError(f\"Invalid setup mode: {setup_mode}\")\n if inputs:\n documents = [_input.to_lc_document() for _input in inputs]\n\n vector_store = AstraDBVectorStore.from_documents(\n documents=documents,\n embedding=embedding,\n collection_name=collection_name,\n token=token,\n api_endpoint=api_endpoint,\n namespace=namespace,\n metric=metric,\n batch_size=batch_size,\n bulk_insert_batch_concurrency=bulk_insert_batch_concurrency,\n bulk_insert_overwrite_concurrency=bulk_insert_overwrite_concurrency,\n bulk_delete_concurrency=bulk_delete_concurrency,\n setup_mode=setup_mode_value,\n pre_delete_collection=pre_delete_collection,\n metadata_indexing_include=metadata_indexing_include,\n metadata_indexing_exclude=metadata_indexing_exclude,\n collection_indexing_policy=collection_indexing_policy,\n )\n else:\n vector_store = AstraDBVectorStore(\n embedding=embedding,\n collection_name=collection_name,\n token=token,\n api_endpoint=api_endpoint,\n namespace=namespace,\n metric=metric,\n batch_size=batch_size,\n bulk_insert_batch_concurrency=bulk_insert_batch_concurrency,\n bulk_insert_overwrite_concurrency=bulk_insert_overwrite_concurrency,\n bulk_delete_concurrency=bulk_delete_concurrency,\n setup_mode=setup_mode_value,\n pre_delete_collection=pre_delete_collection,\n metadata_indexing_include=metadata_indexing_include,\n metadata_indexing_exclude=metadata_indexing_exclude,\n collection_indexing_policy=collection_indexing_policy,\n )\n\n return vector_store\n return vector_store\n" }, "collection_indexing_policy": { "advanced": true, @@ -2747,9 +2514,7 @@ "fileTypes": [], "file_path": "", "info": "The name of the collection within Astra DB where the vectors will be stored.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -2805,9 +2570,7 @@ "fileTypes": [], "file_path": "", "info": "Optional list of metadata fields to exclude from the indexing.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": true, "load_from_db": false, "multiline": false, @@ -2826,9 +2589,7 @@ "fileTypes": [], "file_path": "", "info": "Optional list of metadata fields to include in the indexing.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": true, "load_from_db": false, "multiline": false, @@ -2847,9 +2608,7 @@ "fileTypes": [], "file_path": "", "info": "Optional distance metric for vector comparisons in the vector store.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -2868,9 +2627,7 @@ "fileTypes": [], "file_path": "", "info": "Optional namespace within Astra DB to use for the collection.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -2908,18 +2665,12 @@ "fileTypes": [], "file_path": "", "info": "Configuration mode for setting up the vector store, with options like “Sync”, “Async”, or “Off”.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": true, "load_from_db": false, "multiline": false, "name": "setup_mode", - "options": [ - "Sync", - "Async", - "Off" - ], + "options": ["Sync", "Async", "Off"], "password": false, "placeholder": "", "required": false, @@ -2935,9 +2686,7 @@ "fileTypes": [], "file_path": "", "info": "Authentication token for accessing Astra DB.", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": true, "multiline": false, @@ -2973,9 +2722,7 @@ "data": { "id": "OpenAIEmbeddings-9TPjc", "node": { - "base_classes": [ - "Embeddings" - ], + "base_classes": ["Embeddings"], "beta": false, "custom_fields": { "allowed_special": null, @@ -3007,9 +2754,7 @@ "field_formatters": {}, "field_order": [], "frozen": false, - "output_types": [ - "Embeddings" - ], + "output_types": ["Embeddings"], "outputs": [ { "cache": true, @@ -3017,9 +2762,7 @@ "method": null, "name": "embeddings", "selected": "Embeddings", - "types": [ - "Embeddings" - ], + "types": ["Embeddings"], "value": "__UNDEFINED__" } ], @@ -3032,9 +2775,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": true, "load_from_db": false, "multiline": false, @@ -3128,9 +2869,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -3150,9 +2889,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": true, "load_from_db": false, "multiline": false, @@ -3163,9 +2900,7 @@ "show": true, "title_case": false, "type": "str", - "value": [ - "all" - ] + "value": ["all"] }, "embedding_ctx_length": { "advanced": true, @@ -3212,9 +2947,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": true, "load_from_db": false, "multiline": false, @@ -3258,9 +2991,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -3279,9 +3010,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -3301,9 +3030,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -3322,9 +3049,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -3343,9 +3068,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -3364,9 +3087,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -3466,9 +3187,7 @@ "fileTypes": [], "file_path": "", "info": "", - "input_types": [ - "Text" - ], + "input_types": ["Text"], "list": false, "load_from_db": false, "multiline": false, @@ -3511,4 +3230,4 @@ "is_component": false, "last_tested_version": "1.0.0a0", "name": "Vector Store RAG" -} \ No newline at end of file +} diff --git a/src/backend/base/langflow/memory.py b/src/backend/base/langflow/memory.py index 9a07f4bc1..e812f449c 100644 --- a/src/backend/base/langflow/memory.py +++ b/src/backend/base/langflow/memory.py @@ -46,7 +46,13 @@ def get_messages( # so we need to reverse the order messages_df = messages_df[::-1] if order == "DESC" else messages_df for row in messages_df.itertuples(): - msg = Message(text=row.text, sender=row.sender, sender_name=row.sender_name, timestamp=row.timestamp) + msg = Message( + text=row.text, + sender=row.sender, + session_id=row.session_id, + sender_name=row.sender_name, + timestamp=row.timestamp, + ) messages.append(msg) diff --git a/src/backend/base/langflow/services/database/service.py b/src/backend/base/langflow/services/database/service.py index cf3795610..db5b63c70 100644 --- a/src/backend/base/langflow/services/database/service.py +++ b/src/backend/base/langflow/services/database/service.py @@ -9,6 +9,8 @@ from alembic.config import Config from loguru import logger from sqlalchemy import inspect from sqlalchemy.exc import OperationalError +from sqlalchemy.engine import Engine +from sqlalchemy import event from sqlmodel import Session, SQLModel, create_engine, select, text from langflow.services.base import Service @@ -53,6 +55,20 @@ class DatabaseService(Service): max_overflow=self.settings_service.settings.max_overflow, ) + @event.listens_for(Engine, "connect") + def on_connection(dbapi_connection, connection_record): + from sqlite3 import Connection as sqliteConnection + + if isinstance(dbapi_connection, sqliteConnection): + logger.info("sqlite connect listener, setting pragmas") + cursor = dbapi_connection.cursor() + try: + cursor.execute("PRAGMA synchronous = NORMAL") + cursor.execute("PRAGMA journal_mode = WAL") + cursor.close() + except OperationalError as oe: + logger.warning("Failed to set PRAGMA: ", {oe}) + def __enter__(self): self._session = Session(self.engine) return self._session diff --git a/src/backend/base/langflow/services/monitor/schema.py b/src/backend/base/langflow/services/monitor/schema.py index f800f380d..363563873 100644 --- a/src/backend/base/langflow/services/monitor/schema.py +++ b/src/backend/base/langflow/services/monitor/schema.py @@ -7,7 +7,26 @@ from pydantic import BaseModel, Field, field_serializer, field_validator from langflow.schema.message import Message -class TransactionModel(BaseModel): +class DefaultModel(BaseModel): + class Config: + from_attributes = True + populate_by_name = True + json_encoders = { + datetime: lambda v: v.isoformat(), + } + + def json(self, **kwargs): + # Usa a função de serialização personalizada + return super().json(**kwargs, encoder=self.custom_encoder) + + @staticmethod + def custom_encoder(obj): + if isinstance(obj, datetime): + return obj.isoformat() + raise TypeError(f"Object of type {obj.__class__.__name__} is not JSON serializable") + + +class TransactionModel(DefaultModel): index: Optional[int] = Field(default=None) timestamp: Optional[datetime] = Field(default_factory=datetime.now, alias="timestamp") vertex_id: str @@ -18,10 +37,6 @@ class TransactionModel(BaseModel): error: Optional[str] = None flow_id: Optional[str] = Field(default=None, alias="flow_id") - class Config: - from_attributes = True - populate_by_name = True - # validate target_args in case it is a JSON @field_validator("outputs", "inputs", mode="before") def validate_target_args(cls, v): @@ -36,7 +51,7 @@ class TransactionModel(BaseModel): return v -class TransactionModelResponse(BaseModel): +class TransactionModelResponse(DefaultModel): index: Optional[int] = Field(default=None) timestamp: Optional[datetime] = Field(default_factory=datetime.now, alias="timestamp") vertex_id: str @@ -48,10 +63,6 @@ class TransactionModelResponse(BaseModel): source: Optional[str] = None target: Optional[str] = None - class Config: - from_attributes = True - populate_by_name = True - # validate target_args in case it is a JSON @field_validator("outputs", "inputs", mode="before") def validate_target_args(cls, v): @@ -69,7 +80,7 @@ class TransactionModelResponse(BaseModel): return v -class MessageModel(BaseModel): +class MessageModel(DefaultModel): index: Optional[int] = Field(default=None) flow_id: Optional[str] = Field(default=None, alias="flow_id") timestamp: datetime = Field(default_factory=datetime.now) @@ -79,10 +90,6 @@ class MessageModel(BaseModel): text: str files: list[str] = [] - class Config: - from_attributes = True - populate_by_name = True - @field_validator("files", mode="before") def validate_files(cls, v): if isinstance(v, str): @@ -125,7 +132,7 @@ class MessageModelRequest(MessageModel): session_id: str = Field(default="") -class VertexBuildModel(BaseModel): +class VertexBuildModel(DefaultModel): index: Optional[int] = Field(default=None, alias="index", exclude=True) id: Optional[str] = Field(default=None, alias="id") flow_id: str @@ -135,10 +142,6 @@ class VertexBuildModel(BaseModel): artifacts: dict timestamp: datetime = Field(default_factory=datetime.now) - class Config: - from_attributes = True - populate_by_name = True - @field_serializer("data", "artifacts") def serialize_dict(v): if isinstance(v, dict): @@ -148,7 +151,7 @@ class VertexBuildModel(BaseModel): v[key] = value.model_dump() elif isinstance(value, list) and all(isinstance(i, BaseModel) for i in value): v[key] = [i.model_dump() for i in value] - return json.dumps(v) + return json.dumps(v, default=str) elif isinstance(v, BaseModel): return v.model_dump_json() return v diff --git a/src/backend/base/poetry.lock b/src/backend/base/poetry.lock index a3e029b17..6cd0f7cca 100644 --- a/src/backend/base/poetry.lock +++ b/src/backend/base/poetry.lock @@ -2193,13 +2193,13 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" [[package]] name = "pydantic-settings" -version = "2.3.1" +version = "2.3.2" description = "Settings management using Pydantic" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_settings-2.3.1-py3-none-any.whl", hash = "sha256:acb2c213140dfff9669f4fe9f8180d43914f51626db28ab2db7308a576cce51a"}, - {file = "pydantic_settings-2.3.1.tar.gz", hash = "sha256:e34bbd649803a6bb3e2f0f58fb0edff1f0c7f556849fda106cc21bcce12c30ab"}, + {file = "pydantic_settings-2.3.2-py3-none-any.whl", hash = "sha256:ae06e44349e4c7bff8d57aff415dfd397ae75c217a098d54e9e6990ad7594ac7"}, + {file = "pydantic_settings-2.3.2.tar.gz", hash = "sha256:05d33003c74c2cd585de97b59eb17b6ed67181bc8a3ce594d74b5d24e4df7323"}, ] [package.dependencies] diff --git a/src/backend/base/pyproject.toml b/src/backend/base/pyproject.toml index 291a8133a..e84674e1d 100644 --- a/src/backend/base/pyproject.toml +++ b/src/backend/base/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "langflow-base" -version = "0.0.61" +version = "0.0.63" description = "A Python package with a built-in web application" authors = ["Langflow "] maintainers = [ diff --git a/src/frontend/package-lock.json b/src/frontend/package-lock.json index c6a901d2f..7e7c3bbba 100644 --- a/src/frontend/package-lock.json +++ b/src/frontend/package-lock.json @@ -48,7 +48,7 @@ "file-saver": "^2.0.5", "framer-motion": "^11.0.6", "lodash": "^4.17.21", - "lucide-react": "^0.331.0", + "lucide-react": "^0.394.0", "million": "^3.0.6", "moment": "^2.29.4", "openseadragon": "^4.1.1", @@ -481,7 +481,6 @@ }, "node_modules/@clack/prompts/node_modules/is-unicode-supported": { "version": "1.3.0", - "extraneous": true, "inBundle": true, "license": "MIT", "engines": { @@ -8614,9 +8613,9 @@ } }, "node_modules/lucide-react": { - "version": "0.331.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.331.0.tgz", - "integrity": "sha512-CHFJ0ve9vaZ7bB2VRAl27SlX1ELh6pfNC0jS96qGpPEEzLkLDGq4pDBFU8RhOoRMqsjXqTzLm9U6bZ1OcIHq7Q==", + "version": "0.394.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.394.0.tgz", + "integrity": "sha512-PzTbJ0bsyXRhH59k5qe7MpTd5MxlpYZUcM9kGSwvPGAfnn0J6FElDwu2EX6Vuh//F7y60rcVJiFQ7EK9DCMgfw==", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0" } diff --git a/src/frontend/package.json b/src/frontend/package.json index 0c6a7bb0c..efcdd4b43 100644 --- a/src/frontend/package.json +++ b/src/frontend/package.json @@ -6,7 +6,6 @@ "@headlessui/react": "^1.7.17", "@hookform/resolvers": "^3.3.4", "@million/lint": "^0.0.73", - "react-hotkeys-hook": "^4.5.0", "@radix-ui/react-accordion": "^1.1.2", "@radix-ui/react-checkbox": "^1.0.4", "@radix-ui/react-dialog": "^1.0.4", @@ -44,7 +43,7 @@ "file-saver": "^2.0.5", "framer-motion": "^11.0.6", "lodash": "^4.17.21", - "lucide-react": "^0.331.0", + "lucide-react": "^0.394.0", "million": "^3.0.6", "moment": "^2.29.4", "openseadragon": "^4.1.1", @@ -56,6 +55,7 @@ "react-dom": "^18.2.21", "react-error-boundary": "^4.0.11", "react-hook-form": "^7.51.4", + "react-hotkeys-hook": "^4.5.0", "react-icons": "^5.0.1", "react-laag": "^2.0.5", "react-markdown": "^8.0.7", @@ -138,4 +138,4 @@ "ua-parser-js": "^1.0.37", "vite": "^4.5.2" } -} \ No newline at end of file +} diff --git a/src/frontend/src/App.css b/src/frontend/src/App.css index 5a97d371e..125282e2c 100644 --- a/src/frontend/src/App.css +++ b/src/frontend/src/App.css @@ -90,31 +90,31 @@ body { } ::-webkit-scrollbar-track { - background-color: #f1f1f1 !important; + background-color: hsl(var(--muted)) !important; border-radius: 10px; } ::-webkit-scrollbar-thumb { - background-color: #ccc !important; + background-color: hsl(var(--border)) !important; border-radius: 999px !important; } ::-webkit-scrollbar-thumb:hover { - background-color: #bbb !important; + background-color: hsl(var(--ring)) !important; } .jv-indent::-webkit-scrollbar-track { - background-color: #f1f1f1 !important; + background-color: hsl(var(--muted)) !important; border-radius: 10px; } .jv-indent::-webkit-scrollbar-thumb { - background-color: #ccc !important; + background-color: hsl(var(--border)) !important; border-radius: 999px !important; } .jv-indent::-webkit-scrollbar-thumb:hover { - background-color: #bbb !important; + background-color: hsl(var(--ring)) !important; } .custom-hover { @@ -138,33 +138,6 @@ body { background-color: #bbb !important; } -.ag-body-horizontal-scroll-viewport, -.ag-body-vertical-scroll-viewport { - cursor: auto; -} - -.ag-body-horizontal-scroll-viewport::-webkit-scrollbar, -.ag-body-vertical-scroll-viewport::-webkit-scrollbar { - width: 8px; - height: 8px; -} - -.ag-body-horizontal-scroll-viewport::-webkit-scrollbar-track, -.ag-body-vertical-scroll-viewport::-webkit-scrollbar-track { - background-color: #f1f1f1; -} - -.ag-body-horizontal-scroll-viewport::-webkit-scrollbar-thumb, -.ag-body-vertical-scroll-viewport::-webkit-scrollbar-thumb { - background-color: #ccc; - border-radius: 999px; -} - -.ag-body-horizontal-scroll-viewport::-webkit-scrollbar-thumb:hover, -.ag-body-vertical-scroll-viewport::-webkit-scrollbar-thumb:hover { - background-color: #bbb; -} - /* This CSS is to not apply the border for the column having 'no-border' class */ .no-border.ag-cell:focus { border: none !important; @@ -183,3 +156,8 @@ body { .react-flow__edge .react-flow__edge-path { stroke: var(--connection) !important; } + +.ag-react-container { + width: 100%; + height: 100%; +} diff --git a/src/frontend/src/App.tsx b/src/frontend/src/App.tsx index 36f2ad9f9..4a60f453f 100644 --- a/src/frontend/src/App.tsx +++ b/src/frontend/src/App.tsx @@ -29,10 +29,10 @@ export default function App() { useTrackLastVisitedPath(); const removeFromTempNotificationList = useAlertStore( - (state) => state.removeFromTempNotificationList + (state) => state.removeFromTempNotificationList, ); const tempNotificationList = useAlertStore( - (state) => state.tempNotificationList + (state) => state.tempNotificationList, ); const [fetchError, setFetchError] = useState(false); const isLoading = useFlowsManagerStore((state) => state.isLoading); @@ -50,7 +50,7 @@ export default function App() { const refreshVersion = useDarkStore((state) => state.refreshVersion); const refreshStars = useDarkStore((state) => state.refreshStars); const setGlobalVariables = useGlobalVariablesStore( - (state) => state.setGlobalVariables + (state) => state.setGlobalVariables, ); const checkHasStore = useStoreStore((state) => state.checkHasStore); const navigate = useNavigate(); diff --git a/src/frontend/src/CustomNodes/GenericNode/components/parameterComponent/index.tsx b/src/frontend/src/CustomNodes/GenericNode/components/parameterComponent/index.tsx index 949fe4f83..05f54c7aa 100644 --- a/src/frontend/src/CustomNodes/GenericNode/components/parameterComponent/index.tsx +++ b/src/frontend/src/CustomNodes/GenericNode/components/parameterComponent/index.tsx @@ -36,15 +36,21 @@ import { scapedJSONStringfy, } from "../../../../utils/reactflowUtils"; import { nodeColors } from "../../../../utils/styleUtils"; -import { classNames, groupByFamily } from "../../../../utils/utils"; +import { + classNames, + groupByFamily, + isThereModal, +} from "../../../../utils/utils"; import useFetchDataOnMount from "../../../hooks/use-fetch-data-on-mount"; import useHandleOnNewValue from "../../../hooks/use-handle-new-value"; import useHandleNodeClass from "../../../hooks/use-handle-node-class"; import useHandleRefreshButtonPress from "../../../hooks/use-handle-refresh-buttons"; import HandleTooltips from "../HandleTooltipComponent"; import OutputComponent from "../OutputComponent"; -import OutputModal from "../outputModal"; import { TEXT_FIELD_TYPES } from "./constants"; +import OutputModal from "../outputModal"; +import { useShortcutsStore } from "../../../../stores/shortcuts"; +import { useHotkeys } from "react-hotkeys-hook"; export default function ParameterComponent({ left, @@ -62,6 +68,7 @@ export default function ParameterComponent({ showNode, index, outputName, + selected, outputProxy, }: ParameterComponentType): JSX.Element { const infoHtml = useRef(null); @@ -78,7 +85,9 @@ export default function ParameterComponent({ const [openOutputModal, setOpenOutputModal] = useState(false); const flowPool = useFlowStore((state) => state.flowPool); - const displayOutputPreview = !!flowPool[data.id]; + const displayOutputPreview = + !!flowPool[data.id] && + flowPool[data.id][flowPool[data.id].length - 1]?.valid; const unknownOutput = !!( flowPool[data.id] && @@ -86,6 +95,19 @@ export default function ParameterComponent({ "unknown" ); + const preventDefault = true; + + function handleOutputWShortcut() { + if (!displayOutputPreview || unknownOutput) return; + if (isThereModal() && !openOutputModal) return; + if (selected && !left) { + setOpenOutputModal((state) => !state); + } + } + + const output = useShortcutsStore((state) => state.output); + useHotkeys(output, handleOutputWShortcut, { preventDefault }); + const { handleOnNewValue: handleOnNewValueHook } = useHandleOnNewValue( data, name, @@ -93,7 +115,7 @@ export default function ParameterComponent({ handleUpdateValues, debouncedHandleUpdateValues, setNode, - setIsLoading + setIsLoading, ); const { handleNodeClass: handleNodeClassHook } = useHandleNodeClass( @@ -101,7 +123,7 @@ export default function ParameterComponent({ name, takeSnapshot, setNode, - updateNodeInternals + updateNodeInternals, ); const { handleRefreshButtonPress: handleRefreshButtonPressHook } = @@ -110,7 +132,7 @@ export default function ParameterComponent({ let disabled = edges.some( (edge) => - edge.targetHandle === scapedJSONStringfy(proxy ? { ...id, proxy } : id) + edge.targetHandle === scapedJSONStringfy(proxy ? { ...id, proxy } : id), ) ?? false; const handleRefreshButtonPress = async (name, data) => { @@ -121,7 +143,7 @@ export default function ParameterComponent({ const handleOnNewValue = async ( newValue: string | string[] | boolean | Object[], - skipSnapshot: boolean | undefined = false + skipSnapshot: boolean | undefined = false, ): Promise => { handleOnNewValueHook(newValue, skipSnapshot); }; @@ -208,14 +230,14 @@ export default function ParameterComponent({ className={classNames( left ? "my-12 -ml-0.5 " : " my-12 -mr-0.5 ", "h-3 w-3 rounded-full border-2 bg-background", - !showNode ? "mt-0" : "" + !showNode ? "mt-0" : "", )} style={{ borderColor: color ?? nodeColors.unknown, }} onClick={() => { setFilterEdge( - groupByFamily(myData, tooltipTitle!, left, nodes!) + groupByFamily(myData, tooltipTitle!, left, nodes!), ); }} > @@ -277,7 +299,7 @@ export default function ParameterComponent({ "h-5 w-5 rounded-md", displayOutputPreview && !unknownOutput ? " hover:bg-secondary-foreground/5 hover:text-medium-indigo" - : " cursor-not-allowed text-muted-foreground" + : " cursor-not-allowed text-muted-foreground", )} name={"ScanEye"} /> @@ -333,12 +355,12 @@ export default function ParameterComponent({ } className={classNames( left ? "-ml-0.5" : "-mr-0.5", - "h-3 w-3 rounded-full border-2 bg-background" + "h-3 w-3 rounded-full border-2 bg-background", )} style={{ borderColor: color ?? nodeColors.unknown }} onClick={() => { setFilterEdge( - groupByFamily(myData, tooltipTitle!, left, nodes!) + groupByFamily(myData, tooltipTitle!, left, nodes!), ); }} /> diff --git a/src/frontend/src/CustomNodes/GenericNode/components/tooltipRenderComponent/index.tsx b/src/frontend/src/CustomNodes/GenericNode/components/tooltipRenderComponent/index.tsx index c76bc7293..ed2760161 100644 --- a/src/frontend/src/CustomNodes/GenericNode/components/tooltipRenderComponent/index.tsx +++ b/src/frontend/src/CustomNodes/GenericNode/components/tooltipRenderComponent/index.tsx @@ -24,7 +24,7 @@ const TooltipRenderComponent = ({ item, index, left }) => { 0 ? "mt-2 flex items-center" : "mt-3 flex items-center" + index > 0 ? "mt-2 flex items-center" : "mt-3 flex items-center", )} >
state.types); const templates = useTypesStore((state) => state.templates); const deleteNode = useFlowStore((state) => state.deleteNode); @@ -64,14 +67,14 @@ export default function GenericNode({ const [nodeName, setNodeName] = useState(data.node!.display_name); const [inputDescription, setInputDescription] = useState(false); const [nodeDescription, setNodeDescription] = useState( - data.node?.description! + data.node?.description!, ); const [isOutdated, setIsOutdated] = useState(false); const buildStatus = useFlowStore( - (state) => state.flowBuildStatus[data.id]?.status + (state) => state.flowBuildStatus[data.id]?.status, ); const lastRunTime = useFlowStore( - (state) => state.flowBuildStatus[data.id]?.timestamp + (state) => state.flowBuildStatus[data.id]?.timestamp, ); const [validationStatus, setValidationStatus] = useState(null); @@ -88,7 +91,7 @@ export default function GenericNode({ data.node!, setNode, setIsOutdated, - updateNodeInternals + updateNodeInternals, ); const name = nodeIconsLucide[data.type] ? data.type : types[data.type]; @@ -108,23 +111,19 @@ export default function GenericNode({ }; const renderIconStatus = () => { - return ( -
- {iconStatus} -
- ); + return
{iconStatus}
; }; const getNodeBorderClassName = ( selected: boolean, showNode: boolean, buildStatus: BuildStatus | undefined, - validationStatus: VertexBuildTypeAPI | null + validationStatus: VertexBuildTypeAPI | null, ) => { const specificClassFromBuildStatus = getSpecificClassFromBuildStatus( buildStatus, validationStatus, - isDark + isDark, ); const baseBorderClass = getBaseBorderClass(selected); @@ -133,7 +132,7 @@ export default function GenericNode({ baseBorderClass, nodeSizeClass, "generic-node-div group/node", - specificClassFromBuildStatus + specificClassFromBuildStatus, ); return names; }; @@ -141,7 +140,9 @@ export default function GenericNode({ // const [openWDoubleCLick, setOpenWDoubleCLick] = useState(false); const getBaseBorderClass = (selected) => { - let className = selected ? "border border-ring" : "border"; + let className = selected + ? "border border-ring hover:shadow-node" + : "border hover:shadow-node"; let frozenClass = selected ? "border-ring-frozen" : "border-frozen"; return data.node?.frozen ? frozenClass : className; }; @@ -176,7 +177,7 @@ export default function GenericNode({ showNode, isEmoji, nodeIconFragment, - checkNodeIconFragment + checkNodeIconFragment, ); function countHandles(): void { @@ -234,6 +235,25 @@ export default function GenericNode({ } }; + function handleUpdateCodeWShortcut() { + if (isOutdated && selected) { + handleUpdateCode(); + } + } + + function handlePlayWShortcut() { + if (buildStatus === BuildStatus.BUILDING || isBuilding || !selected) return; + setValidationStatus(null); + console.log(data.node?.display_name); + buildFlow({ stopNodeId: data.id }); + } + + const update = useShortcutsStore((state) => state.update); + const play = useShortcutsStore((state) => state.play); + + useHotkeys(update, handleUpdateCodeWShortcut, { preventDefault }); + useHotkeys(play, handlePlayWShortcut, { preventDefault }); + const shortcuts = useShortcutsStore((state) => state.shortcuts); const memoizedNodeToolbarComponent = useMemo(() => { @@ -259,6 +279,7 @@ export default function GenericNode({ openAdvancedModal={false} onCloseAdvancedModal={() => {}} selected={selected} + updateNode={handleUpdateCode} /> ); @@ -289,7 +310,7 @@ export default function GenericNode({ selected, showNode, buildStatus, - validationStatus + validationStatus, )} > {data.node?.beta && showNode && ( @@ -346,10 +367,10 @@ export default function GenericNode({ />
) : ( -
+
{ + onDoubleClick={(event) => { if (nameEditable) { setInputName(true); } @@ -363,6 +384,22 @@ export default function GenericNode({ {data.node?.display_name}
+ {isOutdated && ( + + + + )}
)}
@@ -420,7 +457,7 @@ export default function GenericNode({ } title={getFieldTitle( data.node?.template!, - templateField + templateField, )} info={data.node?.template[templateField].info} name={templateField} @@ -448,7 +485,7 @@ export default function GenericNode({ proxy={data.node?.template[templateField].proxy} showNode={showNode} /> - ) + ), )} {/* {showNode && ( <> -
- {isOutdated && ( - - - - )} +
- + {renderIconStatus()} +
)} @@ -561,9 +590,11 @@ export default function GenericNode({ : "" } > + {/* increase height!! */}
{showNode && nameEditable && inputDescription ? (