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..8ddbb21a6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -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] @@ -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 = "6cfa9f164710bf283b50a8e12e9d0c91c58f5d0176bbb277b5f5d3630ec8b2cb" 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 b59944358..e7347e2c6 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/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 ca267ac2b..4491fd0c5 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 8e5a214e9..581e5e2f1 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 ? (