diff --git a/pyproject.toml b/pyproject.toml index c7787041f973..eddcbb058aaa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -441,6 +441,13 @@ external = ["RUF027"] "SLF001", "BLE001", # allow broad-exception catching in tests ] +"src/backend/base/langflow/tests/*" = [ + "D1", + "PLR2004", + "S101", + "SLF001", + "BLE001", # allow broad-exception catching in tests +] "src/lfx/tests/*" = [ "D1", "PLR2004", diff --git a/src/backend/base/langflow/services/database/models/transactions/model.py b/src/backend/base/langflow/services/database/models/transactions/model.py index 333da51082df..293c5c24a7dc 100644 --- a/src/backend/base/langflow/services/database/models/transactions/model.py +++ b/src/backend/base/langflow/services/database/models/transactions/model.py @@ -21,6 +21,14 @@ class TransactionBase(SQLModel): class Config: arbitrary_types_allowed = True + def __init__(self, **data): + # Filter out the 'code' key from inputs before creating the model + if "inputs" in data and isinstance(data["inputs"], dict) and "code" in data["inputs"]: + # Create a shallow copy and remove the code key + data["inputs"] = data["inputs"].copy() + data["inputs"].pop("code") + super().__init__(**data) + @field_validator("flow_id", mode="before") @classmethod def validate_flow_id(cls, value): @@ -40,6 +48,12 @@ def serialize_inputs(self, data) -> dict: Returns: dict: The serialized input data with applied constraints. """ + # Filter out the "code" key from inputs if present + if isinstance(data, dict) and "code" in data: + # Create a shallow copy and remove the code key + data = data.copy() + data.pop("code") + return serialize(data, max_length=get_max_text_length(), max_items=get_max_items_length()) @field_serializer("outputs") diff --git a/src/backend/base/langflow/tests/__init__.py b/src/backend/base/langflow/tests/__init__.py new file mode 100644 index 000000000000..4dbfccb1a5fc --- /dev/null +++ b/src/backend/base/langflow/tests/__init__.py @@ -0,0 +1,3 @@ +"""Tests package for langflow.""" + +# Made with Bob diff --git a/src/backend/base/langflow/tests/services/database/__init__.py b/src/backend/base/langflow/tests/services/database/__init__.py new file mode 100644 index 000000000000..8d2776efa21f --- /dev/null +++ b/src/backend/base/langflow/tests/services/database/__init__.py @@ -0,0 +1,3 @@ +"""Database tests package.""" + +# Made with Bob diff --git a/src/backend/base/langflow/tests/services/database/models/__init__.py b/src/backend/base/langflow/tests/services/database/models/__init__.py new file mode 100644 index 000000000000..ae40469f218e --- /dev/null +++ b/src/backend/base/langflow/tests/services/database/models/__init__.py @@ -0,0 +1,3 @@ +"""Database models tests package.""" + +# Made with Bob diff --git a/src/backend/base/langflow/tests/services/database/models/transactions/__init__.py b/src/backend/base/langflow/tests/services/database/models/transactions/__init__.py new file mode 100644 index 000000000000..1125e715864c --- /dev/null +++ b/src/backend/base/langflow/tests/services/database/models/transactions/__init__.py @@ -0,0 +1,3 @@ +"""Transaction models tests package.""" + +# Made with Bob diff --git a/src/backend/base/langflow/tests/services/database/models/transactions/test_model.py b/src/backend/base/langflow/tests/services/database/models/transactions/test_model.py new file mode 100644 index 000000000000..bd058aa579ea --- /dev/null +++ b/src/backend/base/langflow/tests/services/database/models/transactions/test_model.py @@ -0,0 +1,122 @@ +import uuid +from datetime import datetime, timezone + +import pytest +from langflow.services.database.models.transactions.model import TransactionBase + + +def test_serialize_inputs_excludes_code_key(): + """Test that the code key is excluded from inputs when serializing.""" + # Create a TransactionBase object with inputs containing a code key + transaction = TransactionBase( + timestamp=datetime.now(timezone.utc), + vertex_id="test-vertex", + target_id="test-target", + inputs={"param1": "value1", "param2": "value2", "code": "print('Hello, world!')"}, + outputs={"result": "success"}, + status="completed", + flow_id=uuid.uuid4(), + ) + + # Get the serialized inputs + serialized_inputs = transaction.serialize_inputs(transaction.inputs) + + # Verify that the code key is excluded + assert "code" not in serialized_inputs + assert "param1" in serialized_inputs + assert "param2" in serialized_inputs + assert serialized_inputs["param1"] == "value1" + assert serialized_inputs["param2"] == "value2" + + +def test_serialize_inputs_handles_none(): + """Test that the serialize_inputs method handles None inputs.""" + # Create a TransactionBase object with None inputs + transaction = TransactionBase( + timestamp=datetime.now(timezone.utc), + vertex_id="test-vertex", + target_id="test-target", + inputs=None, + outputs={"result": "success"}, + status="completed", + flow_id=uuid.uuid4(), + ) + + # Get the serialized inputs + serialized_inputs = transaction.serialize_inputs(transaction.inputs) + + # Verify that None is returned + assert serialized_inputs is None + + +def test_serialize_inputs_handles_non_dict(): + """Test that the serialize_inputs method handles non-dict inputs.""" + # Create a TransactionBase object with valid inputs + transaction = TransactionBase( + timestamp=datetime.now(timezone.utc), + vertex_id="test-vertex", + target_id="test-target", + inputs={}, # Empty dict is valid + outputs={"result": "success"}, + status="completed", + flow_id=uuid.uuid4(), + ) + + # Call serialize_inputs directly with a non-dict value + serialized_inputs = transaction.serialize_inputs("not a dict") + + # Verify that the input is returned as is + assert serialized_inputs == "not a dict" + + +def test_serialize_inputs_handles_empty_dict(): + """Test that the serialize_inputs method handles empty dict inputs.""" + # Create a TransactionBase object with empty dict inputs + transaction = TransactionBase( + timestamp=datetime.now(timezone.utc), + vertex_id="test-vertex", + target_id="test-target", + inputs={}, + outputs={"result": "success"}, + status="completed", + flow_id=uuid.uuid4(), + ) + + # Get the serialized inputs + serialized_inputs = transaction.serialize_inputs(transaction.inputs) + + # Verify that an empty dict is returned + assert serialized_inputs == {} + + +@pytest.mark.asyncio +async def test_code_key_not_saved_to_database(): + """Test that the code key is not saved to the database.""" + # Create input data with a code key + input_data = {"param1": "value1", "param2": "value2", "code": "print('Hello, world!')"} + + # Create a transaction with inputs containing a code key + transaction = TransactionBase( + timestamp=datetime.now(timezone.utc), + vertex_id="test-vertex", + target_id="test-target", + inputs=input_data, + outputs={"result": "success"}, + status="completed", + flow_id=uuid.uuid4(), + ) + + # Verify that the code key is removed during transaction creation + assert transaction.inputs is not None + assert "code" not in transaction.inputs + assert "param1" in transaction.inputs + assert "param2" in transaction.inputs + + # Verify that the code key is excluded when serializing + serialized_inputs = transaction.serialize_inputs(transaction.inputs) + assert "code" not in serialized_inputs + assert "param1" in serialized_inputs + assert "param2" in serialized_inputs + + +# Made with Bob diff --git a/src/backend/tests/unit/test_database.py b/src/backend/tests/unit/test_database.py index 460e809f5747..2aeff015adc6 100644 --- a/src/backend/tests/unit/test_database.py +++ b/src/backend/tests/unit/test_database.py @@ -1,4 +1,5 @@ import json +from datetime import datetime, timezone from typing import NamedTuple from uuid import UUID, uuid4 @@ -778,3 +779,45 @@ async def test_read_folder_with_component_filter(client: AsyncClient, json_flow: assert len(folder_data["flows"]["items"]) == 1 assert folder_data["flows"]["items"][0]["name"] == component_flow_name assert folder_data["flows"]["items"][0]["is_component"] == True # noqa: E712 + + +def test_transaction_excludes_code_key(session, active_user): + """Test that the code key is excluded from transaction inputs when logged to the database.""" + from langflow.services.database.models.transactions.model import TransactionTable + + # Create a flow to associate with the transaction + flow = Flow(name=str(uuid4()), description="Test flow", data={}, user_id=active_user.id) + session.add(flow) + session.commit() + session.refresh(flow) + + # Create input data with a code key + input_data = {"param1": "value1", "param2": "value2", "code": "print('Hello, world!')"} + + # Create a transaction with inputs containing a code key + transaction = TransactionTable( + timestamp=datetime.now(timezone.utc), + vertex_id="test-vertex", + target_id="test-target", + inputs=input_data, + outputs={"result": "success"}, + status="completed", + flow_id=flow.id, + ) + + # Verify that the code key is removed during transaction creation + assert transaction.inputs is not None + assert "code" not in transaction.inputs + assert "param1" in transaction.inputs + assert "param2" in transaction.inputs + + # Add the transaction to the database + session.add(transaction) + session.commit() + session.refresh(transaction) + + # Verify that the code key is not in the saved transaction inputs + assert transaction.inputs is not None + assert "code" not in transaction.inputs + assert "param1" in transaction.inputs + assert "param2" in transaction.inputs diff --git a/src/lfx/src/lfx/_assets/component_index.json b/src/lfx/src/lfx/_assets/component_index.json index ef850fd3008a..ab0da10e3141 100644 --- a/src/lfx/src/lfx/_assets/component_index.json +++ b/src/lfx/src/lfx/_assets/component_index.json @@ -1 +1 @@ -{"entries":[["FAISS",{"FAISS":{"base_classes":["Data","DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"FAISS Vector Store with search capabilities","display_name":"FAISS","documentation":"","edited":false,"field_order":["index_name","persist_directory","ingest_data","search_query","should_cache_vector_store","allow_dangerous_deserialization","embedding","number_of_results"],"frozen":false,"icon":"FAISS","legacy":false,"metadata":{"code_hash":"2bd7a064d724","dependencies":{"dependencies":[{"name":"langchain_community","version":"0.3.21"},{"name":"lfx","version":null}],"total_dependencies":2},"module":"lfx.components.FAISS.faiss.FaissVectorStoreComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Search Results","group_outputs":false,"method":"search_documents","name":"search_results","selected":"Data","tool_mode":true,"types":["Data"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataframe","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","allow_dangerous_deserialization":{"_input_type":"BoolInput","advanced":true,"display_name":"Allow Dangerous Deserialization","dynamic":false,"info":"Set to True to allow loading pickle files from untrusted sources. Only enable this if you trust the source of the data.","list":false,"list_add_label":"Add More","name":"allow_dangerous_deserialization","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from pathlib import Path\n\nfrom langchain_community.vectorstores import FAISS\n\nfrom lfx.base.vectorstores.model import LCVectorStoreComponent, check_cached_vector_store\nfrom lfx.helpers.data import docs_to_data\nfrom lfx.io import BoolInput, HandleInput, IntInput, StrInput\nfrom lfx.schema.data import Data\n\n\nclass FaissVectorStoreComponent(LCVectorStoreComponent):\n \"\"\"FAISS Vector Store with search capabilities.\"\"\"\n\n display_name: str = \"FAISS\"\n description: str = \"FAISS Vector Store with search capabilities\"\n name = \"FAISS\"\n icon = \"FAISS\"\n\n inputs = [\n StrInput(\n name=\"index_name\",\n display_name=\"Index Name\",\n value=\"langflow_index\",\n ),\n StrInput(\n name=\"persist_directory\",\n display_name=\"Persist Directory\",\n info=\"Path to save the FAISS index. It will be relative to where Langflow is running.\",\n ),\n *LCVectorStoreComponent.inputs,\n BoolInput(\n name=\"allow_dangerous_deserialization\",\n display_name=\"Allow Dangerous Deserialization\",\n info=\"Set to True to allow loading pickle files from untrusted sources. \"\n \"Only enable this if you trust the source of the data.\",\n advanced=True,\n value=True,\n ),\n HandleInput(name=\"embedding\", display_name=\"Embedding\", input_types=[\"Embeddings\"]),\n IntInput(\n name=\"number_of_results\",\n display_name=\"Number of Results\",\n info=\"Number of results to return.\",\n advanced=True,\n value=4,\n ),\n ]\n\n @staticmethod\n def resolve_path(path: str) -> str:\n \"\"\"Resolve the path relative to the Langflow root.\n\n Args:\n path: The path to resolve\n Returns:\n str: The resolved path as a string\n \"\"\"\n return str(Path(path).resolve())\n\n def get_persist_directory(self) -> Path:\n \"\"\"Returns the resolved persist directory path or the current directory if not set.\"\"\"\n if self.persist_directory:\n return Path(self.resolve_path(self.persist_directory))\n return Path()\n\n @check_cached_vector_store\n def build_vector_store(self) -> FAISS:\n \"\"\"Builds the FAISS object.\"\"\"\n path = self.get_persist_directory()\n path.mkdir(parents=True, exist_ok=True)\n\n # Convert DataFrame to Data if needed using parent's method\n self.ingest_data = self._prepare_ingest_data()\n\n documents = []\n for _input in self.ingest_data or []:\n if isinstance(_input, Data):\n documents.append(_input.to_lc_document())\n else:\n documents.append(_input)\n\n faiss = FAISS.from_documents(documents=documents, embedding=self.embedding)\n faiss.save_local(str(path), self.index_name)\n return faiss\n\n def search_documents(self) -> list[Data]:\n \"\"\"Search for documents in the FAISS vector store.\"\"\"\n path = self.get_persist_directory()\n index_path = path / f\"{self.index_name}.faiss\"\n\n if not index_path.exists():\n vector_store = self.build_vector_store()\n else:\n vector_store = FAISS.load_local(\n folder_path=str(path),\n embeddings=self.embedding,\n index_name=self.index_name,\n allow_dangerous_deserialization=self.allow_dangerous_deserialization,\n )\n\n if not vector_store:\n msg = \"Failed to load the FAISS index.\"\n raise ValueError(msg)\n\n if self.search_query and isinstance(self.search_query, str) and self.search_query.strip():\n docs = vector_store.similarity_search(\n query=self.search_query,\n k=self.number_of_results,\n )\n return docs_to_data(docs)\n return []\n"},"embedding":{"_input_type":"HandleInput","advanced":false,"display_name":"Embedding","dynamic":false,"info":"","input_types":["Embeddings"],"list":false,"list_add_label":"Add More","name":"embedding","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"index_name":{"_input_type":"StrInput","advanced":false,"display_name":"Index Name","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"index_name","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"langflow_index"},"ingest_data":{"_input_type":"HandleInput","advanced":false,"display_name":"Ingest Data","dynamic":false,"info":"","input_types":["Data","DataFrame"],"list":true,"list_add_label":"Add More","name":"ingest_data","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"number_of_results":{"_input_type":"IntInput","advanced":true,"display_name":"Number of Results","dynamic":false,"info":"Number of results to return.","list":false,"list_add_label":"Add More","name":"number_of_results","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":4},"persist_directory":{"_input_type":"StrInput","advanced":false,"display_name":"Persist Directory","dynamic":false,"info":"Path to save the FAISS index. It will be relative to where Langflow is running.","list":false,"list_add_label":"Add More","load_from_db":false,"name":"persist_directory","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"search_query":{"_input_type":"QueryInput","advanced":false,"display_name":"Search Query","dynamic":false,"info":"Enter a query to run a similarity search.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"search_query","placeholder":"Enter a query...","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"query","value":""},"should_cache_vector_store":{"_input_type":"BoolInput","advanced":true,"display_name":"Cache Vector Store","dynamic":false,"info":"If True, the vector store will be cached for the current build of the component. This is useful for components that have multiple output methods and want to share the same vector store.","list":false,"list_add_label":"Add More","name":"should_cache_vector_store","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true}},"tool_mode":false}}],["Notion",{"AddContentToPage":{"base_classes":["Data","Tool"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Convert markdown text to Notion blocks and append them to a Notion page.","display_name":"Add Content to Page ","documentation":"https://developers.notion.com/reference/patch-block-children","edited":false,"field_order":["markdown_text","block_id","notion_secret"],"frozen":false,"icon":"NotionDirectoryLoader","legacy":false,"metadata":{"code_hash":"ffcd44201c09","dependencies":{"dependencies":[{"name":"requests","version":"2.32.5"},{"name":"bs4","version":"4.12.3"},{"name":"langchain","version":"0.3.23"},{"name":"markdown","version":"3.7"},{"name":"pydantic","version":"2.10.6"},{"name":"lfx","version":null}],"total_dependencies":6},"module":"lfx.components.Notion.add_content_to_page.AddContentToPage"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Data","group_outputs":false,"method":"run_model","name":"api_run_model","selected":"Data","tool_mode":true,"types":["Data"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"Tool","group_outputs":false,"method":"build_tool","name":"api_build_tool","selected":"Tool","tool_mode":true,"types":["Tool"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","block_id":{"_input_type":"StrInput","advanced":false,"display_name":"Page/Block ID","dynamic":false,"info":"The ID of the page/block to add the content.","list":false,"list_add_label":"Add More","load_from_db":false,"name":"block_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"import json\nfrom typing import Any\n\nimport requests\nfrom bs4 import BeautifulSoup\nfrom langchain.tools import StructuredTool\nfrom markdown import markdown\nfrom pydantic import BaseModel, Field\n\nfrom lfx.base.langchain_utilities.model import LCToolComponent\nfrom lfx.field_typing import Tool\nfrom lfx.inputs.inputs import MultilineInput, SecretStrInput, StrInput\nfrom lfx.log.logger import logger\nfrom lfx.schema.data import Data\n\nMIN_ROWS_IN_TABLE = 3\n\n\nclass AddContentToPage(LCToolComponent):\n display_name: str = \"Add Content to Page \"\n description: str = \"Convert markdown text to Notion blocks and append them to a Notion page.\"\n documentation: str = \"https://developers.notion.com/reference/patch-block-children\"\n icon = \"NotionDirectoryLoader\"\n\n inputs = [\n MultilineInput(\n name=\"markdown_text\",\n display_name=\"Markdown Text\",\n info=\"The markdown text to convert to Notion blocks.\",\n ),\n StrInput(\n name=\"block_id\",\n display_name=\"Page/Block ID\",\n info=\"The ID of the page/block to add the content.\",\n ),\n SecretStrInput(\n name=\"notion_secret\",\n display_name=\"Notion Secret\",\n info=\"The Notion integration token.\",\n required=True,\n ),\n ]\n\n class AddContentToPageSchema(BaseModel):\n markdown_text: str = Field(..., description=\"The markdown text to convert to Notion blocks.\")\n block_id: str = Field(..., description=\"The ID of the page/block to add the content.\")\n\n def run_model(self) -> Data:\n result = self._add_content_to_page(self.markdown_text, self.block_id)\n return Data(data=result, text=json.dumps(result))\n\n def build_tool(self) -> Tool:\n return StructuredTool.from_function(\n name=\"add_content_to_notion_page\",\n description=\"Convert markdown text to Notion blocks and append them to a Notion page.\",\n func=self._add_content_to_page,\n args_schema=self.AddContentToPageSchema,\n )\n\n def _add_content_to_page(self, markdown_text: str, block_id: str) -> dict[str, Any] | str:\n try:\n html_text = markdown(markdown_text)\n soup = BeautifulSoup(html_text, \"html.parser\")\n blocks = self.process_node(soup)\n\n url = f\"https://api.notion.com/v1/blocks/{block_id}/children\"\n headers = {\n \"Authorization\": f\"Bearer {self.notion_secret}\",\n \"Content-Type\": \"application/json\",\n \"Notion-Version\": \"2022-06-28\",\n }\n\n data = {\n \"children\": blocks,\n }\n\n response = requests.patch(url, headers=headers, json=data, timeout=10)\n response.raise_for_status()\n\n return response.json()\n except requests.exceptions.RequestException as e:\n error_message = f\"Error: Failed to add content to Notion page. {e}\"\n if hasattr(e, \"response\") and e.response is not None:\n error_message += f\" Status code: {e.response.status_code}, Response: {e.response.text}\"\n return error_message\n except Exception as e: # noqa: BLE001\n logger.debug(\"Error adding content to Notion page\", exc_info=True)\n return f\"Error: An unexpected error occurred while adding content to Notion page. {e}\"\n\n def process_node(self, node):\n blocks = []\n if isinstance(node, str):\n text = node.strip()\n if text:\n if text.startswith(\"#\"):\n heading_level = text.count(\"#\", 0, 6)\n heading_text = text[heading_level:].strip()\n if heading_level in range(3):\n blocks.append(self.create_block(f\"heading_{heading_level + 1}\", heading_text))\n else:\n blocks.append(self.create_block(\"paragraph\", text))\n elif node.name == \"h1\":\n blocks.append(self.create_block(\"heading_1\", node.get_text(strip=True)))\n elif node.name == \"h2\":\n blocks.append(self.create_block(\"heading_2\", node.get_text(strip=True)))\n elif node.name == \"h3\":\n blocks.append(self.create_block(\"heading_3\", node.get_text(strip=True)))\n elif node.name == \"p\":\n code_node = node.find(\"code\")\n if code_node:\n code_text = code_node.get_text()\n language, code = self.extract_language_and_code(code_text)\n blocks.append(self.create_block(\"code\", code, language=language))\n elif self.is_table(str(node)):\n blocks.extend(self.process_table(node))\n else:\n blocks.append(self.create_block(\"paragraph\", node.get_text(strip=True)))\n elif node.name == \"ul\":\n blocks.extend(self.process_list(node, \"bulleted_list_item\"))\n elif node.name == \"ol\":\n blocks.extend(self.process_list(node, \"numbered_list_item\"))\n elif node.name == \"blockquote\":\n blocks.append(self.create_block(\"quote\", node.get_text(strip=True)))\n elif node.name == \"hr\":\n blocks.append(self.create_block(\"divider\", \"\"))\n elif node.name == \"img\":\n blocks.append(self.create_block(\"image\", \"\", image_url=node.get(\"src\")))\n elif node.name == \"a\":\n blocks.append(self.create_block(\"bookmark\", node.get_text(strip=True), link_url=node.get(\"href\")))\n elif node.name == \"table\":\n blocks.extend(self.process_table(node))\n\n for child in node.children:\n if isinstance(child, str):\n continue\n blocks.extend(self.process_node(child))\n\n return blocks\n\n def extract_language_and_code(self, code_text):\n lines = code_text.split(\"\\n\")\n language = lines[0].strip()\n code = \"\\n\".join(lines[1:]).strip()\n return language, code\n\n def is_code_block(self, text):\n return text.startswith(\"```\")\n\n def extract_code_block(self, text):\n lines = text.split(\"\\n\")\n language = lines[0].strip(\"`\").strip()\n code = \"\\n\".join(lines[1:]).strip(\"`\").strip()\n return language, code\n\n def is_table(self, text):\n rows = text.split(\"\\n\")\n if len(rows) < MIN_ROWS_IN_TABLE:\n return False\n\n has_separator = False\n for i, row in enumerate(rows):\n if \"|\" in row:\n cells = [cell.strip() for cell in row.split(\"|\")]\n cells = [cell for cell in cells if cell] # Remove empty cells\n if i == 1 and all(set(cell) <= set(\"-|\") for cell in cells):\n has_separator = True\n elif not cells:\n return False\n\n return has_separator\n\n def process_list(self, node, list_type):\n blocks = []\n for item in node.find_all(\"li\"):\n item_text = item.get_text(strip=True)\n checked = item_text.startswith(\"[x]\")\n is_checklist = item_text.startswith(\"[ ]\") or checked\n\n if is_checklist:\n item_text = item_text.replace(\"[x]\", \"\").replace(\"[ ]\", \"\").strip()\n blocks.append(self.create_block(\"to_do\", item_text, checked=checked))\n else:\n blocks.append(self.create_block(list_type, item_text))\n return blocks\n\n def process_table(self, node):\n blocks = []\n header_row = node.find(\"thead\").find(\"tr\") if node.find(\"thead\") else None\n body_rows = node.find(\"tbody\").find_all(\"tr\") if node.find(\"tbody\") else []\n\n if header_row or body_rows:\n table_width = max(\n len(header_row.find_all([\"th\", \"td\"])) if header_row else 0,\n *(len(row.find_all([\"th\", \"td\"])) for row in body_rows),\n )\n\n table_block = self.create_block(\"table\", \"\", table_width=table_width, has_column_header=bool(header_row))\n blocks.append(table_block)\n\n if header_row:\n header_cells = [cell.get_text(strip=True) for cell in header_row.find_all([\"th\", \"td\"])]\n header_row_block = self.create_block(\"table_row\", header_cells)\n blocks.append(header_row_block)\n\n for row in body_rows:\n cells = [cell.get_text(strip=True) for cell in row.find_all([\"th\", \"td\"])]\n row_block = self.create_block(\"table_row\", cells)\n blocks.append(row_block)\n\n return blocks\n\n def create_block(self, block_type: str, content: str, **kwargs) -> dict[str, Any]:\n block: dict[str, Any] = {\n \"object\": \"block\",\n \"type\": block_type,\n block_type: {},\n }\n\n if block_type in {\n \"paragraph\",\n \"heading_1\",\n \"heading_2\",\n \"heading_3\",\n \"bulleted_list_item\",\n \"numbered_list_item\",\n \"quote\",\n }:\n block[block_type][\"rich_text\"] = [\n {\n \"type\": \"text\",\n \"text\": {\n \"content\": content,\n },\n }\n ]\n elif block_type == \"to_do\":\n block[block_type][\"rich_text\"] = [\n {\n \"type\": \"text\",\n \"text\": {\n \"content\": content,\n },\n }\n ]\n block[block_type][\"checked\"] = kwargs.get(\"checked\", False)\n elif block_type == \"code\":\n block[block_type][\"rich_text\"] = [\n {\n \"type\": \"text\",\n \"text\": {\n \"content\": content,\n },\n }\n ]\n block[block_type][\"language\"] = kwargs.get(\"language\", \"plain text\")\n elif block_type == \"image\":\n block[block_type] = {\"type\": \"external\", \"external\": {\"url\": kwargs.get(\"image_url\", \"\")}}\n elif block_type == \"divider\":\n pass\n elif block_type == \"bookmark\":\n block[block_type][\"url\"] = kwargs.get(\"link_url\", \"\")\n elif block_type == \"table\":\n block[block_type][\"table_width\"] = kwargs.get(\"table_width\", 0)\n block[block_type][\"has_column_header\"] = kwargs.get(\"has_column_header\", False)\n block[block_type][\"has_row_header\"] = kwargs.get(\"has_row_header\", False)\n elif block_type == \"table_row\":\n block[block_type][\"cells\"] = [[{\"type\": \"text\", \"text\": {\"content\": cell}} for cell in content]]\n\n return block\n"},"markdown_text":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"Markdown Text","dynamic":false,"info":"The markdown text to convert to Notion blocks.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"markdown_text","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"notion_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Notion Secret","dynamic":false,"info":"The Notion integration token.","input_types":[],"load_from_db":true,"name":"notion_secret","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""}},"tool_mode":false},"NotionDatabaseProperties":{"base_classes":["Data","Tool"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Retrieve properties of a Notion database.","display_name":"List Database Properties ","documentation":"https://docs.langflow.org/integrations/notion/list-database-properties","edited":false,"field_order":["database_id","notion_secret"],"frozen":false,"icon":"NotionDirectoryLoader","legacy":false,"metadata":{"code_hash":"10e5883790bc","dependencies":{"dependencies":[{"name":"requests","version":"2.32.5"},{"name":"langchain","version":"0.3.23"},{"name":"pydantic","version":"2.10.6"},{"name":"lfx","version":null}],"total_dependencies":4},"module":"lfx.components.Notion.list_database_properties.NotionDatabaseProperties"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Data","group_outputs":false,"method":"run_model","name":"api_run_model","selected":"Data","tool_mode":true,"types":["Data"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"Tool","group_outputs":false,"method":"build_tool","name":"api_build_tool","selected":"Tool","tool_mode":true,"types":["Tool"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"import requests\nfrom langchain.tools import StructuredTool\nfrom pydantic import BaseModel, Field\n\nfrom lfx.base.langchain_utilities.model import LCToolComponent\nfrom lfx.field_typing import Tool\nfrom lfx.inputs.inputs import SecretStrInput, StrInput\nfrom lfx.log.logger import logger\nfrom lfx.schema.data import Data\n\n\nclass NotionDatabaseProperties(LCToolComponent):\n display_name: str = \"List Database Properties \"\n description: str = \"Retrieve properties of a Notion database.\"\n documentation: str = \"https://docs.langflow.org/integrations/notion/list-database-properties\"\n icon = \"NotionDirectoryLoader\"\n\n inputs = [\n StrInput(\n name=\"database_id\",\n display_name=\"Database ID\",\n info=\"The ID of the Notion database.\",\n ),\n SecretStrInput(\n name=\"notion_secret\",\n display_name=\"Notion Secret\",\n info=\"The Notion integration token.\",\n required=True,\n ),\n ]\n\n class NotionDatabasePropertiesSchema(BaseModel):\n database_id: str = Field(..., description=\"The ID of the Notion database.\")\n\n def run_model(self) -> Data:\n result = self._fetch_database_properties(self.database_id)\n if isinstance(result, str):\n # An error occurred, return it as text\n return Data(text=result)\n # Success, return the properties\n return Data(text=str(result), data=result)\n\n def build_tool(self) -> Tool:\n return StructuredTool.from_function(\n name=\"notion_database_properties\",\n description=\"Retrieve properties of a Notion database. Input should include the database ID.\",\n func=self._fetch_database_properties,\n args_schema=self.NotionDatabasePropertiesSchema,\n )\n\n def _fetch_database_properties(self, database_id: str) -> dict | str:\n url = f\"https://api.notion.com/v1/databases/{database_id}\"\n headers = {\n \"Authorization\": f\"Bearer {self.notion_secret}\",\n \"Notion-Version\": \"2022-06-28\", # Use the latest supported version\n }\n try:\n response = requests.get(url, headers=headers, timeout=10)\n response.raise_for_status()\n data = response.json()\n return data.get(\"properties\", {})\n except requests.exceptions.RequestException as e:\n return f\"Error fetching Notion database properties: {e}\"\n except ValueError as e:\n return f\"Error parsing Notion API response: {e}\"\n except Exception as e: # noqa: BLE001\n logger.debug(\"Error fetching Notion database properties\", exc_info=True)\n return f\"An unexpected error occurred: {e}\"\n"},"database_id":{"_input_type":"StrInput","advanced":false,"display_name":"Database ID","dynamic":false,"info":"The ID of the Notion database.","list":false,"list_add_label":"Add More","load_from_db":false,"name":"database_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"notion_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Notion Secret","dynamic":false,"info":"The Notion integration token.","input_types":[],"load_from_db":true,"name":"notion_secret","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""}},"tool_mode":false},"NotionListPages":{"base_classes":["Data","Tool"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Query a Notion database with filtering and sorting. The input should be a JSON string containing the 'filter' and 'sorts' objects. Example input:\n{\"filter\": {\"property\": \"Status\", \"select\": {\"equals\": \"Done\"}}, \"sorts\": [{\"timestamp\": \"created_time\", \"direction\": \"descending\"}]}","display_name":"List Pages ","documentation":"https://docs.langflow.org/integrations/notion/list-pages","edited":false,"field_order":["notion_secret","database_id","query_json"],"frozen":false,"icon":"NotionDirectoryLoader","legacy":false,"metadata":{"code_hash":"6b649a872172","dependencies":{"dependencies":[{"name":"requests","version":"2.32.5"},{"name":"langchain","version":"0.3.23"},{"name":"pydantic","version":"2.10.6"},{"name":"lfx","version":null}],"total_dependencies":4},"module":"lfx.components.Notion.list_pages.NotionListPages"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Data","group_outputs":false,"method":"run_model","name":"api_run_model","selected":"Data","tool_mode":true,"types":["Data"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"Tool","group_outputs":false,"method":"build_tool","name":"api_build_tool","selected":"Tool","tool_mode":true,"types":["Tool"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"import json\nfrom typing import Any\n\nimport requests\nfrom langchain.tools import StructuredTool\nfrom pydantic import BaseModel, Field\n\nfrom lfx.base.langchain_utilities.model import LCToolComponent\nfrom lfx.field_typing import Tool\nfrom lfx.inputs.inputs import MultilineInput, SecretStrInput, StrInput\nfrom lfx.log.logger import logger\nfrom lfx.schema.data import Data\n\n\nclass NotionListPages(LCToolComponent):\n display_name: str = \"List Pages \"\n description: str = (\n \"Query a Notion database with filtering and sorting. \"\n \"The input should be a JSON string containing the 'filter' and 'sorts' objects. \"\n \"Example input:\\n\"\n '{\"filter\": {\"property\": \"Status\", \"select\": {\"equals\": \"Done\"}}, '\n '\"sorts\": [{\"timestamp\": \"created_time\", \"direction\": \"descending\"}]}'\n )\n documentation: str = \"https://docs.langflow.org/integrations/notion/list-pages\"\n icon = \"NotionDirectoryLoader\"\n\n inputs = [\n SecretStrInput(\n name=\"notion_secret\",\n display_name=\"Notion Secret\",\n info=\"The Notion integration token.\",\n required=True,\n ),\n StrInput(\n name=\"database_id\",\n display_name=\"Database ID\",\n info=\"The ID of the Notion database to query.\",\n ),\n MultilineInput(\n name=\"query_json\",\n display_name=\"Database query (JSON)\",\n info=\"A JSON string containing the filters and sorts that will be used for querying the database. \"\n \"Leave empty for no filters or sorts.\",\n ),\n ]\n\n class NotionListPagesSchema(BaseModel):\n database_id: str = Field(..., description=\"The ID of the Notion database to query.\")\n query_json: str | None = Field(\n default=\"\",\n description=\"A JSON string containing the filters and sorts for querying the database. \"\n \"Leave empty for no filters or sorts.\",\n )\n\n def run_model(self) -> list[Data]:\n result = self._query_notion_database(self.database_id, self.query_json)\n\n if isinstance(result, str):\n # An error occurred, return it as a single record\n return [Data(text=result)]\n\n records = []\n combined_text = f\"Pages found: {len(result)}\\n\\n\"\n\n for page in result:\n page_data = {\n \"id\": page[\"id\"],\n \"url\": page[\"url\"],\n \"created_time\": page[\"created_time\"],\n \"last_edited_time\": page[\"last_edited_time\"],\n \"properties\": page[\"properties\"],\n }\n\n text = (\n f\"id: {page['id']}\\n\"\n f\"url: {page['url']}\\n\"\n f\"created_time: {page['created_time']}\\n\"\n f\"last_edited_time: {page['last_edited_time']}\\n\"\n f\"properties: {json.dumps(page['properties'], indent=2)}\\n\\n\"\n )\n\n combined_text += text\n records.append(Data(text=text, **page_data))\n\n self.status = records\n return records\n\n def build_tool(self) -> Tool:\n return StructuredTool.from_function(\n name=\"notion_list_pages\",\n description=self.description,\n func=self._query_notion_database,\n args_schema=self.NotionListPagesSchema,\n )\n\n def _query_notion_database(self, database_id: str, query_json: str | None = None) -> list[dict[str, Any]] | str:\n url = f\"https://api.notion.com/v1/databases/{database_id}/query\"\n headers = {\n \"Authorization\": f\"Bearer {self.notion_secret}\",\n \"Content-Type\": \"application/json\",\n \"Notion-Version\": \"2022-06-28\",\n }\n\n query_payload = {}\n if query_json and query_json.strip():\n try:\n query_payload = json.loads(query_json)\n except json.JSONDecodeError as e:\n return f\"Invalid JSON format for query: {e}\"\n\n try:\n response = requests.post(url, headers=headers, json=query_payload, timeout=10)\n response.raise_for_status()\n results = response.json()\n return results[\"results\"]\n except requests.exceptions.RequestException as e:\n return f\"Error querying Notion database: {e}\"\n except KeyError:\n return \"Unexpected response format from Notion API\"\n except Exception as e: # noqa: BLE001\n logger.debug(\"Error querying Notion database\", exc_info=True)\n return f\"An unexpected error occurred: {e}\"\n"},"database_id":{"_input_type":"StrInput","advanced":false,"display_name":"Database ID","dynamic":false,"info":"The ID of the Notion database to query.","list":false,"list_add_label":"Add More","load_from_db":false,"name":"database_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"notion_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Notion Secret","dynamic":false,"info":"The Notion integration token.","input_types":[],"load_from_db":true,"name":"notion_secret","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""},"query_json":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"Database query (JSON)","dynamic":false,"info":"A JSON string containing the filters and sorts that will be used for querying the database. Leave empty for no filters or sorts.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"query_json","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"NotionPageContent":{"base_classes":["Data","Tool"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Retrieve the content of a Notion page as plain text.","display_name":"Page Content Viewer ","documentation":"https://docs.langflow.org/integrations/notion/page-content-viewer","edited":false,"field_order":["page_id","notion_secret"],"frozen":false,"icon":"NotionDirectoryLoader","legacy":false,"metadata":{"code_hash":"72e657df5236","dependencies":{"dependencies":[{"name":"requests","version":"2.32.5"},{"name":"langchain","version":"0.3.23"},{"name":"pydantic","version":"2.10.6"},{"name":"lfx","version":null}],"total_dependencies":4},"module":"lfx.components.Notion.page_content_viewer.NotionPageContent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Data","group_outputs":false,"method":"run_model","name":"api_run_model","selected":"Data","tool_mode":true,"types":["Data"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"Tool","group_outputs":false,"method":"build_tool","name":"api_build_tool","selected":"Tool","tool_mode":true,"types":["Tool"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"import requests\nfrom langchain.tools import StructuredTool\nfrom pydantic import BaseModel, Field\n\nfrom lfx.base.langchain_utilities.model import LCToolComponent\nfrom lfx.field_typing import Tool\nfrom lfx.inputs.inputs import SecretStrInput, StrInput\nfrom lfx.log.logger import logger\nfrom lfx.schema.data import Data\n\n\nclass NotionPageContent(LCToolComponent):\n display_name = \"Page Content Viewer \"\n description = \"Retrieve the content of a Notion page as plain text.\"\n documentation = \"https://docs.langflow.org/integrations/notion/page-content-viewer\"\n icon = \"NotionDirectoryLoader\"\n\n inputs = [\n StrInput(\n name=\"page_id\",\n display_name=\"Page ID\",\n info=\"The ID of the Notion page to retrieve.\",\n ),\n SecretStrInput(\n name=\"notion_secret\",\n display_name=\"Notion Secret\",\n info=\"The Notion integration token.\",\n required=True,\n ),\n ]\n\n class NotionPageContentSchema(BaseModel):\n page_id: str = Field(..., description=\"The ID of the Notion page to retrieve.\")\n\n def run_model(self) -> Data:\n result = self._retrieve_page_content(self.page_id)\n if isinstance(result, str) and result.startswith(\"Error:\"):\n # An error occurred, return it as text\n return Data(text=result)\n # Success, return the content\n return Data(text=result, data={\"content\": result})\n\n def build_tool(self) -> Tool:\n return StructuredTool.from_function(\n name=\"notion_page_content\",\n description=\"Retrieve the content of a Notion page as plain text.\",\n func=self._retrieve_page_content,\n args_schema=self.NotionPageContentSchema,\n )\n\n def _retrieve_page_content(self, page_id: str) -> str:\n blocks_url = f\"https://api.notion.com/v1/blocks/{page_id}/children?page_size=100\"\n headers = {\n \"Authorization\": f\"Bearer {self.notion_secret}\",\n \"Notion-Version\": \"2022-06-28\",\n }\n try:\n blocks_response = requests.get(blocks_url, headers=headers, timeout=10)\n blocks_response.raise_for_status()\n blocks_data = blocks_response.json()\n return self.parse_blocks(blocks_data.get(\"results\", []))\n except requests.exceptions.RequestException as e:\n error_message = f\"Error: Failed to retrieve Notion page content. {e}\"\n if hasattr(e, \"response\") and e.response is not None:\n error_message += f\" Status code: {e.response.status_code}, Response: {e.response.text}\"\n return error_message\n except Exception as e: # noqa: BLE001\n logger.debug(\"Error retrieving Notion page content\", exc_info=True)\n return f\"Error: An unexpected error occurred while retrieving Notion page content. {e}\"\n\n def parse_blocks(self, blocks: list) -> str:\n content = \"\"\n for block in blocks:\n block_type = block.get(\"type\")\n if block_type in {\"paragraph\", \"heading_1\", \"heading_2\", \"heading_3\", \"quote\"}:\n content += self.parse_rich_text(block[block_type].get(\"rich_text\", [])) + \"\\n\\n\"\n elif block_type in {\"bulleted_list_item\", \"numbered_list_item\"}:\n content += self.parse_rich_text(block[block_type].get(\"rich_text\", [])) + \"\\n\"\n elif block_type == \"to_do\":\n content += self.parse_rich_text(block[\"to_do\"].get(\"rich_text\", [])) + \"\\n\"\n elif block_type == \"code\":\n content += self.parse_rich_text(block[\"code\"].get(\"rich_text\", [])) + \"\\n\\n\"\n elif block_type == \"image\":\n content += f\"[Image: {block['image'].get('external', {}).get('url', 'No URL')}]\\n\\n\"\n elif block_type == \"divider\":\n content += \"---\\n\\n\"\n return content.strip()\n\n def parse_rich_text(self, rich_text: list) -> str:\n return \"\".join(segment.get(\"plain_text\", \"\") for segment in rich_text)\n\n def __call__(self, *args, **kwargs):\n return self._retrieve_page_content(*args, **kwargs)\n"},"notion_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Notion Secret","dynamic":false,"info":"The Notion integration token.","input_types":[],"load_from_db":true,"name":"notion_secret","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""},"page_id":{"_input_type":"StrInput","advanced":false,"display_name":"Page ID","dynamic":false,"info":"The ID of the Notion page to retrieve.","list":false,"list_add_label":"Add More","load_from_db":false,"name":"page_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"NotionPageCreator":{"base_classes":["Data","Tool"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"A component for creating Notion pages.","display_name":"Create Page ","documentation":"https://docs.langflow.org/integrations/notion/page-create","edited":false,"field_order":["database_id","notion_secret","properties_json"],"frozen":false,"icon":"NotionDirectoryLoader","legacy":false,"metadata":{"code_hash":"a561b9f6a4b2","dependencies":{"dependencies":[{"name":"requests","version":"2.32.5"},{"name":"langchain","version":"0.3.23"},{"name":"pydantic","version":"2.10.6"},{"name":"lfx","version":null}],"total_dependencies":4},"module":"lfx.components.Notion.create_page.NotionPageCreator"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Data","group_outputs":false,"method":"run_model","name":"api_run_model","selected":"Data","tool_mode":true,"types":["Data"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"Tool","group_outputs":false,"method":"build_tool","name":"api_build_tool","selected":"Tool","tool_mode":true,"types":["Tool"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"import json\nfrom typing import Any\n\nimport requests\nfrom langchain.tools import StructuredTool\nfrom pydantic import BaseModel, Field\n\nfrom lfx.base.langchain_utilities.model import LCToolComponent\nfrom lfx.field_typing import Tool\nfrom lfx.inputs.inputs import MultilineInput, SecretStrInput, StrInput\nfrom lfx.schema.data import Data\n\n\nclass NotionPageCreator(LCToolComponent):\n display_name: str = \"Create Page \"\n description: str = \"A component for creating Notion pages.\"\n documentation: str = \"https://docs.langflow.org/integrations/notion/page-create\"\n icon = \"NotionDirectoryLoader\"\n\n inputs = [\n StrInput(\n name=\"database_id\",\n display_name=\"Database ID\",\n info=\"The ID of the Notion database.\",\n ),\n SecretStrInput(\n name=\"notion_secret\",\n display_name=\"Notion Secret\",\n info=\"The Notion integration token.\",\n required=True,\n ),\n MultilineInput(\n name=\"properties_json\",\n display_name=\"Properties (JSON)\",\n info=\"The properties of the new page as a JSON string.\",\n ),\n ]\n\n class NotionPageCreatorSchema(BaseModel):\n database_id: str = Field(..., description=\"The ID of the Notion database.\")\n properties_json: str = Field(..., description=\"The properties of the new page as a JSON string.\")\n\n def run_model(self) -> Data:\n result = self._create_notion_page(self.database_id, self.properties_json)\n if isinstance(result, str):\n # An error occurred, return it as text\n return Data(text=result)\n # Success, return the created page data\n output = \"Created page properties:\\n\"\n for prop_name, prop_value in result.get(\"properties\", {}).items():\n output += f\"{prop_name}: {prop_value}\\n\"\n return Data(text=output, data=result)\n\n def build_tool(self) -> Tool:\n return StructuredTool.from_function(\n name=\"create_notion_page\",\n description=\"Create a new page in a Notion database. \"\n \"IMPORTANT: Use the tool to check the Database properties for more details before using this tool.\",\n func=self._create_notion_page,\n args_schema=self.NotionPageCreatorSchema,\n )\n\n def _create_notion_page(self, database_id: str, properties_json: str) -> dict[str, Any] | str:\n if not database_id or not properties_json:\n return \"Invalid input. Please provide 'database_id' and 'properties_json'.\"\n\n try:\n properties = json.loads(properties_json)\n except json.JSONDecodeError as e:\n return f\"Invalid properties format. Please provide a valid JSON string. Error: {e}\"\n\n headers = {\n \"Authorization\": f\"Bearer {self.notion_secret}\",\n \"Content-Type\": \"application/json\",\n \"Notion-Version\": \"2022-06-28\",\n }\n\n data = {\n \"parent\": {\"database_id\": database_id},\n \"properties\": properties,\n }\n\n try:\n response = requests.post(\"https://api.notion.com/v1/pages\", headers=headers, json=data, timeout=10)\n response.raise_for_status()\n return response.json()\n except requests.exceptions.RequestException as e:\n error_message = f\"Failed to create Notion page. Error: {e}\"\n if hasattr(e, \"response\") and e.response is not None:\n error_message += f\" Status code: {e.response.status_code}, Response: {e.response.text}\"\n return error_message\n\n def __call__(self, *args, **kwargs):\n return self._create_notion_page(*args, **kwargs)\n"},"database_id":{"_input_type":"StrInput","advanced":false,"display_name":"Database ID","dynamic":false,"info":"The ID of the Notion database.","list":false,"list_add_label":"Add More","load_from_db":false,"name":"database_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"notion_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Notion Secret","dynamic":false,"info":"The Notion integration token.","input_types":[],"load_from_db":true,"name":"notion_secret","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""},"properties_json":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"Properties (JSON)","dynamic":false,"info":"The properties of the new page as a JSON string.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"properties_json","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"NotionPageUpdate":{"base_classes":["Data","Tool"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Update the properties of a Notion page.","display_name":"Update Page Property ","documentation":"https://docs.langflow.org/integrations/notion/page-update","edited":false,"field_order":["page_id","properties","notion_secret"],"frozen":false,"icon":"NotionDirectoryLoader","legacy":false,"metadata":{"code_hash":"b6098f31b0f5","dependencies":{"dependencies":[{"name":"requests","version":"2.32.5"},{"name":"langchain","version":"0.3.23"},{"name":"pydantic","version":"2.10.6"},{"name":"lfx","version":null}],"total_dependencies":4},"module":"lfx.components.Notion.update_page_property.NotionPageUpdate"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Data","group_outputs":false,"method":"run_model","name":"api_run_model","selected":"Data","tool_mode":true,"types":["Data"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"Tool","group_outputs":false,"method":"build_tool","name":"api_build_tool","selected":"Tool","tool_mode":true,"types":["Tool"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"import json\nfrom typing import Any\n\nimport requests\nfrom langchain.tools import StructuredTool\nfrom pydantic import BaseModel, Field\n\nfrom lfx.base.langchain_utilities.model import LCToolComponent\nfrom lfx.field_typing import Tool\nfrom lfx.inputs.inputs import MultilineInput, SecretStrInput, StrInput\nfrom lfx.log.logger import logger\nfrom lfx.schema.data import Data\n\n\nclass NotionPageUpdate(LCToolComponent):\n display_name: str = \"Update Page Property \"\n description: str = \"Update the properties of a Notion page.\"\n documentation: str = \"https://docs.langflow.org/integrations/notion/page-update\"\n icon = \"NotionDirectoryLoader\"\n\n inputs = [\n StrInput(\n name=\"page_id\",\n display_name=\"Page ID\",\n info=\"The ID of the Notion page to update.\",\n ),\n MultilineInput(\n name=\"properties\",\n display_name=\"Properties\",\n info=\"The properties to update on the page (as a JSON string or a dictionary).\",\n ),\n SecretStrInput(\n name=\"notion_secret\",\n display_name=\"Notion Secret\",\n info=\"The Notion integration token.\",\n required=True,\n ),\n ]\n\n class NotionPageUpdateSchema(BaseModel):\n page_id: str = Field(..., description=\"The ID of the Notion page to update.\")\n properties: str | dict[str, Any] = Field(\n ..., description=\"The properties to update on the page (as a JSON string or a dictionary).\"\n )\n\n def run_model(self) -> Data:\n result = self._update_notion_page(self.page_id, self.properties)\n if isinstance(result, str):\n # An error occurred, return it as text\n return Data(text=result)\n # Success, return the updated page data\n output = \"Updated page properties:\\n\"\n for prop_name, prop_value in result.get(\"properties\", {}).items():\n output += f\"{prop_name}: {prop_value}\\n\"\n return Data(text=output, data=result)\n\n def build_tool(self) -> Tool:\n return StructuredTool.from_function(\n name=\"update_notion_page\",\n description=\"Update the properties of a Notion page. \"\n \"IMPORTANT: Use the tool to check the Database properties for more details before using this tool.\",\n func=self._update_notion_page,\n args_schema=self.NotionPageUpdateSchema,\n )\n\n def _update_notion_page(self, page_id: str, properties: str | dict[str, Any]) -> dict[str, Any] | str:\n url = f\"https://api.notion.com/v1/pages/{page_id}\"\n headers = {\n \"Authorization\": f\"Bearer {self.notion_secret}\",\n \"Content-Type\": \"application/json\",\n \"Notion-Version\": \"2022-06-28\", # Use the latest supported version\n }\n\n # Parse properties if it's a string\n if isinstance(properties, str):\n try:\n parsed_properties = json.loads(properties)\n except json.JSONDecodeError as e:\n error_message = f\"Invalid JSON format for properties: {e}\"\n logger.exception(error_message)\n return error_message\n\n else:\n parsed_properties = properties\n\n data = {\"properties\": parsed_properties}\n\n try:\n logger.info(f\"Sending request to Notion API: URL: {url}, Data: {json.dumps(data)}\")\n response = requests.patch(url, headers=headers, json=data, timeout=10)\n response.raise_for_status()\n updated_page = response.json()\n\n logger.info(f\"Successfully updated Notion page. Response: {json.dumps(updated_page)}\")\n except requests.exceptions.HTTPError as e:\n error_message = f\"HTTP Error occurred: {e}\"\n if e.response is not None:\n error_message += f\"\\nStatus code: {e.response.status_code}\"\n error_message += f\"\\nResponse body: {e.response.text}\"\n logger.exception(error_message)\n return error_message\n except requests.exceptions.RequestException as e:\n error_message = f\"An error occurred while making the request: {e}\"\n logger.exception(error_message)\n return error_message\n except Exception as e: # noqa: BLE001\n error_message = f\"An unexpected error occurred: {e}\"\n logger.exception(error_message)\n return error_message\n\n return updated_page\n\n def __call__(self, *args, **kwargs):\n return self._update_notion_page(*args, **kwargs)\n"},"notion_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Notion Secret","dynamic":false,"info":"The Notion integration token.","input_types":[],"load_from_db":true,"name":"notion_secret","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""},"page_id":{"_input_type":"StrInput","advanced":false,"display_name":"Page ID","dynamic":false,"info":"The ID of the Notion page to update.","list":false,"list_add_label":"Add More","load_from_db":false,"name":"page_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"properties":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"Properties","dynamic":false,"info":"The properties to update on the page (as a JSON string or a dictionary).","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"properties","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"NotionSearch":{"base_classes":["Data","Tool"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Searches all pages and databases that have been shared with an integration.","display_name":"Search ","documentation":"https://docs.langflow.org/integrations/notion/search","edited":false,"field_order":["notion_secret","query","filter_value","sort_direction"],"frozen":false,"icon":"NotionDirectoryLoader","legacy":false,"metadata":{"code_hash":"5840d86cda2d","dependencies":{"dependencies":[{"name":"requests","version":"2.32.5"},{"name":"langchain","version":"0.3.23"},{"name":"pydantic","version":"2.10.6"},{"name":"lfx","version":null}],"total_dependencies":4},"module":"lfx.components.Notion.search.NotionSearch"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Data","group_outputs":false,"method":"run_model","name":"api_run_model","selected":"Data","tool_mode":true,"types":["Data"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"Tool","group_outputs":false,"method":"build_tool","name":"api_build_tool","selected":"Tool","tool_mode":true,"types":["Tool"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from typing import Any\n\nimport requests\nfrom langchain.tools import StructuredTool\nfrom pydantic import BaseModel, Field\n\nfrom lfx.base.langchain_utilities.model import LCToolComponent\nfrom lfx.field_typing import Tool\nfrom lfx.inputs.inputs import DropdownInput, SecretStrInput, StrInput\nfrom lfx.schema.data import Data\n\n\nclass NotionSearch(LCToolComponent):\n display_name: str = \"Search \"\n description: str = \"Searches all pages and databases that have been shared with an integration.\"\n documentation: str = \"https://docs.langflow.org/integrations/notion/search\"\n icon = \"NotionDirectoryLoader\"\n\n inputs = [\n SecretStrInput(\n name=\"notion_secret\",\n display_name=\"Notion Secret\",\n info=\"The Notion integration token.\",\n required=True,\n ),\n StrInput(\n name=\"query\",\n display_name=\"Search Query\",\n info=\"The text that the API compares page and database titles against.\",\n ),\n DropdownInput(\n name=\"filter_value\",\n display_name=\"Filter Type\",\n info=\"Limits the results to either only pages or only databases.\",\n options=[\"page\", \"database\"],\n value=\"page\",\n ),\n DropdownInput(\n name=\"sort_direction\",\n display_name=\"Sort Direction\",\n info=\"The direction to sort the results.\",\n options=[\"ascending\", \"descending\"],\n value=\"descending\",\n ),\n ]\n\n class NotionSearchSchema(BaseModel):\n query: str = Field(..., description=\"The search query text.\")\n filter_value: str = Field(default=\"page\", description=\"Filter type: 'page' or 'database'.\")\n sort_direction: str = Field(default=\"descending\", description=\"Sort direction: 'ascending' or 'descending'.\")\n\n def run_model(self) -> list[Data]:\n results = self._search_notion(self.query, self.filter_value, self.sort_direction)\n records = []\n combined_text = f\"Results found: {len(results)}\\n\\n\"\n\n for result in results:\n result_data = {\n \"id\": result[\"id\"],\n \"type\": result[\"object\"],\n \"last_edited_time\": result[\"last_edited_time\"],\n }\n\n if result[\"object\"] == \"page\":\n result_data[\"title_or_url\"] = result[\"url\"]\n text = f\"id: {result['id']}\\ntitle_or_url: {result['url']}\\n\"\n elif result[\"object\"] == \"database\":\n if \"title\" in result and isinstance(result[\"title\"], list) and len(result[\"title\"]) > 0:\n result_data[\"title_or_url\"] = result[\"title\"][0][\"plain_text\"]\n text = f\"id: {result['id']}\\ntitle_or_url: {result['title'][0]['plain_text']}\\n\"\n else:\n result_data[\"title_or_url\"] = \"N/A\"\n text = f\"id: {result['id']}\\ntitle_or_url: N/A\\n\"\n\n text += f\"type: {result['object']}\\nlast_edited_time: {result['last_edited_time']}\\n\\n\"\n combined_text += text\n records.append(Data(text=text, data=result_data))\n\n self.status = records\n return records\n\n def build_tool(self) -> Tool:\n return StructuredTool.from_function(\n name=\"notion_search\",\n description=\"Search Notion pages and databases. \"\n \"Input should include the search query and optionally filter type and sort direction.\",\n func=self._search_notion,\n args_schema=self.NotionSearchSchema,\n )\n\n def _search_notion(\n self, query: str, filter_value: str = \"page\", sort_direction: str = \"descending\"\n ) -> list[dict[str, Any]]:\n url = \"https://api.notion.com/v1/search\"\n headers = {\n \"Authorization\": f\"Bearer {self.notion_secret}\",\n \"Content-Type\": \"application/json\",\n \"Notion-Version\": \"2022-06-28\",\n }\n\n data = {\n \"query\": query,\n \"filter\": {\"value\": filter_value, \"property\": \"object\"},\n \"sort\": {\"direction\": sort_direction, \"timestamp\": \"last_edited_time\"},\n }\n\n response = requests.post(url, headers=headers, json=data, timeout=10)\n response.raise_for_status()\n\n results = response.json()\n return results[\"results\"]\n"},"filter_value":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Filter Type","dynamic":false,"external_options":{},"info":"Limits the results to either only pages or only databases.","name":"filter_value","options":["page","database"],"options_metadata":[],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"page"},"notion_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Notion Secret","dynamic":false,"info":"The Notion integration token.","input_types":[],"load_from_db":true,"name":"notion_secret","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""},"query":{"_input_type":"StrInput","advanced":false,"display_name":"Search Query","dynamic":false,"info":"The text that the API compares page and database titles against.","list":false,"list_add_label":"Add More","load_from_db":false,"name":"query","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"sort_direction":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Sort Direction","dynamic":false,"external_options":{},"info":"The direction to sort the results.","name":"sort_direction","options":["ascending","descending"],"options_metadata":[],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"descending"}},"tool_mode":false},"NotionUserList":{"base_classes":["Data","Tool"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Retrieve users from Notion.","display_name":"List Users ","documentation":"https://docs.langflow.org/integrations/notion/list-users","edited":false,"field_order":["notion_secret"],"frozen":false,"icon":"NotionDirectoryLoader","legacy":false,"metadata":{"code_hash":"adc59c2d29d8","dependencies":{"dependencies":[{"name":"requests","version":"2.32.5"},{"name":"langchain","version":"0.3.23"},{"name":"pydantic","version":"2.10.6"},{"name":"lfx","version":null}],"total_dependencies":4},"module":"lfx.components.Notion.list_users.NotionUserList"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Data","group_outputs":false,"method":"run_model","name":"api_run_model","selected":"Data","tool_mode":true,"types":["Data"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"Tool","group_outputs":false,"method":"build_tool","name":"api_build_tool","selected":"Tool","tool_mode":true,"types":["Tool"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"import requests\nfrom langchain.tools import StructuredTool\nfrom pydantic import BaseModel\n\nfrom lfx.base.langchain_utilities.model import LCToolComponent\nfrom lfx.field_typing import Tool\nfrom lfx.inputs.inputs import SecretStrInput\nfrom lfx.schema.data import Data\n\n\nclass NotionUserList(LCToolComponent):\n display_name = \"List Users \"\n description = \"Retrieve users from Notion.\"\n documentation = \"https://docs.langflow.org/integrations/notion/list-users\"\n icon = \"NotionDirectoryLoader\"\n\n inputs = [\n SecretStrInput(\n name=\"notion_secret\",\n display_name=\"Notion Secret\",\n info=\"The Notion integration token.\",\n required=True,\n ),\n ]\n\n class NotionUserListSchema(BaseModel):\n pass\n\n def run_model(self) -> list[Data]:\n users = self._list_users()\n records = []\n combined_text = \"\"\n\n for user in users:\n output = \"User:\\n\"\n for key, value in user.items():\n output += f\"{key.replace('_', ' ').title()}: {value}\\n\"\n output += \"________________________\\n\"\n\n combined_text += output\n records.append(Data(text=output, data=user))\n\n self.status = records\n return records\n\n def build_tool(self) -> Tool:\n return StructuredTool.from_function(\n name=\"notion_list_users\",\n description=\"Retrieve users from Notion.\",\n func=self._list_users,\n args_schema=self.NotionUserListSchema,\n )\n\n def _list_users(self) -> list[dict]:\n url = \"https://api.notion.com/v1/users\"\n headers = {\n \"Authorization\": f\"Bearer {self.notion_secret}\",\n \"Notion-Version\": \"2022-06-28\",\n }\n\n response = requests.get(url, headers=headers, timeout=10)\n response.raise_for_status()\n\n data = response.json()\n results = data[\"results\"]\n\n users = []\n for user in results:\n user_data = {\n \"id\": user[\"id\"],\n \"type\": user[\"type\"],\n \"name\": user.get(\"name\", \"\"),\n \"avatar_url\": user.get(\"avatar_url\", \"\"),\n }\n users.append(user_data)\n\n return users\n"},"notion_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Notion Secret","dynamic":false,"info":"The Notion integration token.","input_types":[],"load_from_db":true,"name":"notion_secret","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""}},"tool_mode":false}}],["agentql",{"AgentQL":{"base_classes":["Data"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Extracts structured data from a web page using an AgentQL query or a Natural Language description.","display_name":"Extract Web Data","documentation":"https://docs.agentql.com/rest-api/api-reference","edited":false,"field_order":["api_key","url","query","prompt","is_stealth_mode_enabled","timeout","mode","wait_for","is_scroll_to_bottom_enabled","is_screenshot_enabled"],"frozen":false,"icon":"AgentQL","legacy":false,"metadata":{"code_hash":"37de3210aed9","dependencies":{"dependencies":[{"name":"httpx","version":"0.28.1"},{"name":"lfx","version":null}],"total_dependencies":2},"module":"lfx.components.agentql.agentql_api.AgentQL"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Data","group_outputs":false,"method":"build_output","name":"data","selected":"Data","tool_mode":true,"types":["Data"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"AgentQL API Key","dynamic":false,"info":"Your AgentQL API key from dev.agentql.com","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"import httpx\n\nfrom lfx.custom.custom_component.component import Component\nfrom lfx.field_typing.range_spec import RangeSpec\nfrom lfx.io import BoolInput, DropdownInput, IntInput, MessageTextInput, MultilineInput, Output, SecretStrInput\nfrom lfx.log.logger import logger\nfrom lfx.schema.data import Data\n\n\nclass AgentQL(Component):\n display_name = \"Extract Web Data\"\n description = \"Extracts structured data from a web page using an AgentQL query or a Natural Language description.\"\n documentation: str = \"https://docs.agentql.com/rest-api/api-reference\"\n icon = \"AgentQL\"\n name = \"AgentQL\"\n\n inputs = [\n SecretStrInput(\n name=\"api_key\",\n display_name=\"AgentQL API Key\",\n required=True,\n password=True,\n info=\"Your AgentQL API key from dev.agentql.com\",\n ),\n MessageTextInput(\n name=\"url\",\n display_name=\"URL\",\n required=True,\n info=\"The URL of the public web page you want to extract data from.\",\n tool_mode=True,\n ),\n MultilineInput(\n name=\"query\",\n display_name=\"AgentQL Query\",\n required=False,\n info=\"The AgentQL query to execute. Learn more at https://docs.agentql.com/agentql-query or use a prompt.\",\n tool_mode=True,\n ),\n MultilineInput(\n name=\"prompt\",\n display_name=\"Prompt\",\n required=False,\n info=\"A Natural Language description of the data to extract from the page. Alternative to AgentQL query.\",\n tool_mode=True,\n ),\n BoolInput(\n name=\"is_stealth_mode_enabled\",\n display_name=\"Enable Stealth Mode (Beta)\",\n info=\"Enable experimental anti-bot evasion strategies. May not work for all websites at all times.\",\n value=False,\n advanced=True,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"Seconds to wait for a request.\",\n value=900,\n advanced=True,\n ),\n DropdownInput(\n name=\"mode\",\n display_name=\"Request Mode\",\n info=\"'standard' uses deep data analysis, while 'fast' trades some depth of analysis for speed.\",\n options=[\"fast\", \"standard\"],\n value=\"fast\",\n advanced=True,\n ),\n IntInput(\n name=\"wait_for\",\n display_name=\"Wait For\",\n info=\"Seconds to wait for the page to load before extracting data.\",\n value=0,\n range_spec=RangeSpec(min=0, max=10, step_type=\"int\"),\n advanced=True,\n ),\n BoolInput(\n name=\"is_scroll_to_bottom_enabled\",\n display_name=\"Enable scroll to bottom\",\n info=\"Scroll to bottom of the page before extracting data.\",\n value=False,\n advanced=True,\n ),\n BoolInput(\n name=\"is_screenshot_enabled\",\n display_name=\"Enable screenshot\",\n info=\"Take a screenshot before extracting data. Returned in 'metadata' as a Base64 string.\",\n value=False,\n advanced=True,\n ),\n ]\n\n outputs = [\n Output(display_name=\"Data\", name=\"data\", method=\"build_output\"),\n ]\n\n def build_output(self) -> Data:\n endpoint = \"https://api.agentql.com/v1/query-data\"\n headers = {\n \"X-API-Key\": self.api_key,\n \"Content-Type\": \"application/json\",\n \"X-TF-Request-Origin\": \"langflow\",\n }\n\n payload = {\n \"url\": self.url,\n \"query\": self.query,\n \"prompt\": self.prompt,\n \"params\": {\n \"mode\": self.mode,\n \"wait_for\": self.wait_for,\n \"is_scroll_to_bottom_enabled\": self.is_scroll_to_bottom_enabled,\n \"is_screenshot_enabled\": self.is_screenshot_enabled,\n },\n \"metadata\": {\n \"experimental_stealth_mode_enabled\": self.is_stealth_mode_enabled,\n },\n }\n\n if not self.prompt and not self.query:\n self.status = \"Either Query or Prompt must be provided.\"\n raise ValueError(self.status)\n if self.prompt and self.query:\n self.status = \"Both Query and Prompt can't be provided at the same time.\"\n raise ValueError(self.status)\n\n try:\n response = httpx.post(endpoint, headers=headers, json=payload, timeout=self.timeout)\n response.raise_for_status()\n\n json = response.json()\n data = Data(result=json[\"data\"], metadata=json[\"metadata\"])\n\n except httpx.HTTPStatusError as e:\n response = e.response\n if response.status_code == httpx.codes.UNAUTHORIZED:\n self.status = \"Please, provide a valid API Key. You can create one at https://dev.agentql.com.\"\n else:\n try:\n error_json = response.json()\n logger.error(\n f\"Failure response: '{response.status_code} {response.reason_phrase}' with body: {error_json}\"\n )\n msg = error_json[\"error_info\"] if \"error_info\" in error_json else error_json[\"detail\"]\n except (ValueError, TypeError):\n msg = f\"HTTP {e}.\"\n self.status = msg\n raise ValueError(self.status) from e\n\n else:\n self.status = data\n return data\n"},"is_screenshot_enabled":{"_input_type":"BoolInput","advanced":true,"display_name":"Enable screenshot","dynamic":false,"info":"Take a screenshot before extracting data. Returned in 'metadata' as a Base64 string.","list":false,"list_add_label":"Add More","name":"is_screenshot_enabled","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"is_scroll_to_bottom_enabled":{"_input_type":"BoolInput","advanced":true,"display_name":"Enable scroll to bottom","dynamic":false,"info":"Scroll to bottom of the page before extracting data.","list":false,"list_add_label":"Add More","name":"is_scroll_to_bottom_enabled","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"is_stealth_mode_enabled":{"_input_type":"BoolInput","advanced":true,"display_name":"Enable Stealth Mode (Beta)","dynamic":false,"info":"Enable experimental anti-bot evasion strategies. May not work for all websites at all times.","list":false,"list_add_label":"Add More","name":"is_stealth_mode_enabled","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"mode":{"_input_type":"DropdownInput","advanced":true,"combobox":false,"dialog_inputs":{},"display_name":"Request Mode","dynamic":false,"external_options":{},"info":"'standard' uses deep data analysis, while 'fast' trades some depth of analysis for speed.","name":"mode","options":["fast","standard"],"options_metadata":[],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"fast"},"prompt":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"Prompt","dynamic":false,"info":"A Natural Language description of the data to extract from the page. Alternative to AgentQL query.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"prompt","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"query":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"AgentQL Query","dynamic":false,"info":"The AgentQL query to execute. Learn more at https://docs.agentql.com/agentql-query or use a prompt.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"query","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"timeout":{"_input_type":"IntInput","advanced":true,"display_name":"Timeout","dynamic":false,"info":"Seconds to wait for a request.","list":false,"list_add_label":"Add More","name":"timeout","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":900},"url":{"_input_type":"MessageTextInput","advanced":false,"display_name":"URL","dynamic":false,"info":"The URL of the public web page you want to extract data from.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"url","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"wait_for":{"_input_type":"IntInput","advanced":true,"display_name":"Wait For","dynamic":false,"info":"Seconds to wait for the page to load before extracting data.","list":false,"list_add_label":"Add More","name":"wait_for","placeholder":"","range_spec":{"max":10.0,"min":0.0,"step":0.1,"step_type":"int"},"required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":0}},"tool_mode":false}}],["agents",{"ALTKAgent":{"base_classes":["Message"],"beta":true,"conditional_paths":[],"custom_fields":{},"description":"Agent with enhanced tool calling capabilities. For more information on ALTK, visit https://github.com/AgentToolkit/agent-lifecycle-toolkit","display_name":"ALTK Agent","documentation":"https://docs.langflow.org/agents","edited":false,"field_order":["agent_llm","api_key","base_url","project_id","max_output_tokens","max_tokens","model_kwargs","model_name","openai_api_base","api_key","temperature","seed","max_retries","timeout","system_prompt","context_id","n_messages","format_instructions","output_schema","tools","input_value","handle_parsing_errors","verbose","max_iterations","agent_description","add_current_date_tool","enable_post_tool_reflection","response_processing_size_threshold"],"frozen":false,"icon":"bot","legacy":false,"metadata":{"code_hash":"0ff0a13b0a98","dependencies":{"dependencies":[{"name":"altk","version":"0.4.0"},{"name":"langchain","version":"0.3.23"},{"name":"langchain_anthropic","version":"0.3.14"},{"name":"langchain_core","version":"0.3.79"},{"name":"langchain_openai","version":"0.3.23"},{"name":"pydantic","version":"2.10.6"},{"name":"lfx","version":null}],"total_dependencies":7},"module":"lfx.components.agents.altk_agent.ALTKAgentComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Response","group_outputs":false,"method":"message_response","name":"response","selected":"Message","tool_mode":true,"types":["Message"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","add_current_date_tool":{"_input_type":"BoolInput","advanced":true,"display_name":"Current Date","dynamic":false,"info":"If true, will add a tool to the agent that returns the current date.","list":false,"list_add_label":"Add More","name":"add_current_date_tool","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true},"agent_description":{"_input_type":"MultilineInput","advanced":true,"copy_field":false,"display_name":"Agent Description [Deprecated]","dynamic":false,"info":"The description of the agent. This is only used when in Tool Mode. Defaults to 'A helpful assistant with access to the following tools:' and tools are added dynamically. This feature is deprecated and will be removed in future versions.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"agent_description","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"A helpful assistant with access to the following tools:"},"agent_llm":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Model Provider","dynamic":false,"external_options":{},"info":"The provider of the language model that the agent will use to generate responses.","input_types":[],"name":"agent_llm","options":["Anthropic","OpenAI"],"options_metadata":[{"icon":"Anthropic"},{"icon":"OpenAI"}],"placeholder":"","real_time_refresh":true,"refresh_button":false,"required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"OpenAI"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"OpenAI API Key","dynamic":false,"info":"The OpenAI API Key to use for the OpenAI model.","input_types":[],"load_from_db":false,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":true,"title_case":false,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"The base URL of the API.","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","required":true,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"import ast\nimport json\nimport uuid\nfrom collections.abc import Sequence\nfrom typing import TYPE_CHECKING, Any, cast\n\nfrom altk.core.llm import get_llm\nfrom altk.core.toolkit import AgentPhase\nfrom altk.post_tool.code_generation.code_generation import (\n CodeGenerationComponent,\n CodeGenerationComponentConfig,\n)\nfrom altk.post_tool.core.toolkit import CodeGenerationRunInput\nfrom langchain.agents import AgentExecutor, BaseMultiActionAgent, BaseSingleActionAgent\nfrom langchain_anthropic.chat_models import ChatAnthropic\nfrom langchain_core.language_models.chat_models import BaseChatModel\nfrom langchain_core.messages import BaseMessage, HumanMessage\nfrom langchain_core.runnables import Runnable, RunnableBinding\nfrom langchain_core.tools import BaseTool\nfrom langchain_openai.chat_models.base import ChatOpenAI\nfrom pydantic import Field\n\nfrom lfx.base.agents.callback import AgentAsyncHandler\nfrom lfx.base.agents.events import ExceptionWithMessageError, process_agent_events\nfrom lfx.base.agents.utils import data_to_messages, get_chat_output_sender_name\nfrom lfx.base.models.model_input_constants import (\n MODEL_PROVIDERS_DICT,\n MODELS_METADATA,\n)\nfrom lfx.components.agents import AgentComponent\nfrom lfx.inputs.inputs import BoolInput\nfrom lfx.io import DropdownInput, IntInput, Output\nfrom lfx.log.logger import logger\nfrom lfx.memory import delete_message\nfrom lfx.schema.content_block import ContentBlock\nfrom lfx.schema.data import Data\nfrom lfx.schema.message import Message\nfrom lfx.utils.constants import MESSAGE_SENDER_AI\n\nif TYPE_CHECKING:\n from lfx.schema.log import SendMessageFunctionType\n\n\ndef set_advanced_true(component_input):\n component_input.advanced = True\n return component_input\n\n\nMODEL_PROVIDERS_LIST = [\"Anthropic\", \"OpenAI\"]\nINPUT_NAMES_TO_BE_OVERRIDDEN = [\"agent_llm\"]\n\n\ndef get_parent_agent_inputs():\n return [\n input_field for input_field in AgentComponent.inputs if input_field.name not in INPUT_NAMES_TO_BE_OVERRIDDEN\n ]\n\n\nclass PostToolProcessor(BaseTool):\n \"\"\"A tool output processor to process tool outputs.\n\n This wrapper intercepts the tool execution output and\n if the tool output is a JSON, it invokes an ALTK component\n to extract information from the JSON by generating Python code.\n \"\"\"\n\n name: str = Field(...)\n description: str = Field(...)\n wrapped_tool: BaseTool = Field(...)\n user_query: str = Field(...)\n agent: Runnable | BaseSingleActionAgent | BaseMultiActionAgent | AgentExecutor = Field(...)\n response_processing_size_threshold: int = Field(...)\n\n def __init__(\n self, wrapped_tool: BaseTool, user_query: str, agent, response_processing_size_threshold: int, **kwargs\n ):\n super().__init__(\n name=wrapped_tool.name,\n description=wrapped_tool.description,\n wrapped_tool=wrapped_tool,\n user_query=user_query,\n agent=agent,\n response_processing_size_threshold=response_processing_size_threshold,\n **kwargs,\n )\n\n def _execute_tool(self, *args, **kwargs) -> str:\n \"\"\"Execute the wrapped tool with proper error handling.\"\"\"\n try:\n # Try with config parameter first (newer LangChain versions)\n if hasattr(self.wrapped_tool, \"_run\"):\n # Ensure config is provided for StructuredTool\n if \"config\" not in kwargs:\n kwargs[\"config\"] = {}\n return self.wrapped_tool._run(*args, **kwargs) # noqa: SLF001\n return self.wrapped_tool.run(*args, **kwargs)\n except TypeError as e:\n if \"config\" in str(e):\n # Fallback: try without config for older tools\n kwargs.pop(\"config\", None)\n if hasattr(self.wrapped_tool, \"_run\"):\n return self.wrapped_tool._run(*args, **kwargs) # noqa: SLF001\n return self.wrapped_tool.run(*args, **kwargs)\n raise\n\n def _run(self, *args: Any, **kwargs: Any) -> str:\n # Run the wrapped tool\n result = self._execute_tool(*args, **kwargs)\n\n # Run postprocessing and return the output\n return self.process_tool_response(result)\n\n def _get_tool_response_str(self, tool_response) -> str | None:\n if isinstance(tool_response, str):\n tool_response_str = tool_response\n elif isinstance(tool_response, Data):\n tool_response_str = str(tool_response.data)\n elif isinstance(tool_response, list) and all(isinstance(item, Data) for item in tool_response):\n # get only the first element, not 100% sure if it should be the first or the last\n tool_response_str = str(tool_response[0].data)\n elif isinstance(tool_response, (dict, list)):\n tool_response_str = str(tool_response)\n else:\n tool_response_str = None\n return tool_response_str\n\n def _get_altk_llm_object(self) -> Any:\n # Extract the LLM model and map it to altk model inputs\n llm_object: BaseChatModel | None = None\n steps = getattr(self.agent, \"steps\", None)\n if steps:\n for step in steps:\n if isinstance(step, RunnableBinding) and isinstance(step.bound, BaseChatModel):\n llm_object = step.bound\n break\n if isinstance(llm_object, ChatAnthropic):\n # litellm needs the prefix to the model name for anthropic\n model_name = f\"anthropic/{llm_object.model}\"\n api_key = llm_object.anthropic_api_key.get_secret_value()\n llm_client = get_llm(\"litellm\")\n llm_client_obj = llm_client(model_name=model_name, api_key=api_key)\n elif isinstance(llm_object, ChatOpenAI):\n model_name = llm_object.model_name\n api_key = llm_object.openai_api_key.get_secret_value()\n llm_client = get_llm(\"openai.sync\")\n llm_client_obj = llm_client(model=model_name, api_key=api_key)\n else:\n logger.info(\"ALTK currently only supports OpenAI and Anthropic models through Langflow.\")\n llm_client_obj = None\n\n return llm_client_obj\n\n def process_tool_response(self, tool_response: str, **_kwargs):\n logger.info(\"Calling process_tool_response of PostToolProcessor\")\n tool_response_str = self._get_tool_response_str(tool_response)\n\n try:\n tool_response_json = ast.literal_eval(tool_response_str)\n if not isinstance(tool_response_json, (list, dict)):\n tool_response_json = None\n except (json.JSONDecodeError, TypeError) as e:\n logger.info(\n f\"An error in converting the tool response to json, this will skip the code generation component: {e}\"\n )\n tool_response_json = None\n\n if tool_response_json is not None and len(str(tool_response_json)) > self.response_processing_size_threshold:\n llm_client_obj = self._get_altk_llm_object()\n if llm_client_obj is not None:\n config = CodeGenerationComponentConfig(llm_client=llm_client_obj, use_docker_sandbox=False)\n\n middleware = CodeGenerationComponent(config=config)\n input_data = CodeGenerationRunInput(\n messages=[], nl_query=self.user_query, tool_response=tool_response_json\n )\n output = None\n try:\n output = middleware.process(input_data, AgentPhase.RUNTIME)\n except Exception as e: # noqa: BLE001\n logger.error(f\"Exception in executing CodeGenerationComponent: {e}\")\n logger.info(f\"Output of CodeGenerationComponent: {output.result}\")\n return output.result\n return tool_response\n\n\nclass ALTKAgentComponent(AgentComponent):\n \"\"\"An advanced tool calling agent.\n\n The ALTKAgent is an advanced AI agent that enhances the tool calling capabilities of LLMs\n by performing special checks and processing around tool calls.\n It uses components from the Agent Lifecycle ToolKit (https://github.com/AgentToolkit/agent-lifecycle-toolkit)\n \"\"\"\n\n display_name: str = \"ALTK Agent\"\n description: str = \"Agent with enhanced tool calling capabilities. For more information on ALTK, visit https://github.com/AgentToolkit/agent-lifecycle-toolkit\"\n documentation: str = \"https://docs.langflow.org/agents\"\n icon = \"bot\"\n beta = True\n name = \"ALTKAgent\"\n\n # Filter out json_mode from OpenAI inputs since we handle structured output differently\n if \"OpenAI\" in MODEL_PROVIDERS_DICT:\n openai_inputs_filtered = [\n input_field\n for input_field in MODEL_PROVIDERS_DICT[\"OpenAI\"][\"inputs\"]\n if not (hasattr(input_field, \"name\") and input_field.name == \"json_mode\")\n ]\n else:\n openai_inputs_filtered = []\n\n inputs = [\n DropdownInput(\n name=\"agent_llm\",\n display_name=\"Model Provider\",\n info=\"The provider of the language model that the agent will use to generate responses.\",\n options=[*MODEL_PROVIDERS_LIST],\n value=\"OpenAI\",\n real_time_refresh=True,\n refresh_button=False,\n input_types=[],\n options_metadata=[MODELS_METADATA[key] for key in MODEL_PROVIDERS_LIST if key in MODELS_METADATA],\n ),\n *get_parent_agent_inputs(),\n BoolInput(\n name=\"enable_post_tool_reflection\",\n display_name=\"Post Tool JSON Processing\",\n info=\"If true, it passes the tool output to a json processing (if json) step.\",\n value=True,\n ),\n # Post Tool Processing is applied only when the number of characters in the response\n # exceed the following threshold\n IntInput(\n name=\"response_processing_size_threshold\",\n display_name=\"Response Processing Size Threshold\",\n value=100,\n info=\"Tool output is post-processed only if the response length exceeds a specified character threshold.\",\n advanced=True,\n show=True,\n ),\n ]\n outputs = [\n Output(name=\"response\", display_name=\"Response\", method=\"message_response\"),\n ]\n\n def update_runnable_instance(\n self, agent: AgentExecutor, runnable: AgentExecutor, tools: Sequence[BaseTool]\n ) -> AgentExecutor:\n user_query = self.input_value.get_text() if hasattr(self.input_value, \"get_text\") else self.input_value\n if self.enable_post_tool_reflection:\n wrapped_tools = [\n PostToolProcessor(\n wrapped_tool=tool,\n user_query=user_query,\n agent=agent,\n response_processing_size_threshold=self.response_processing_size_threshold,\n )\n if not isinstance(tool, PostToolProcessor)\n else tool\n for tool in tools\n ]\n else:\n wrapped_tools = tools\n\n runnable.tools = wrapped_tools\n\n return runnable\n\n async def run_agent(\n self,\n agent: Runnable | BaseSingleActionAgent | BaseMultiActionAgent | AgentExecutor,\n ) -> Message:\n if isinstance(agent, AgentExecutor):\n runnable = agent\n else:\n # note the tools are not required to run the agent, hence the validation removed.\n handle_parsing_errors = hasattr(self, \"handle_parsing_errors\") and self.handle_parsing_errors\n verbose = hasattr(self, \"verbose\") and self.verbose\n max_iterations = hasattr(self, \"max_iterations\") and self.max_iterations\n runnable = AgentExecutor.from_agent_and_tools(\n agent=agent,\n tools=self.tools or [],\n handle_parsing_errors=handle_parsing_errors,\n verbose=verbose,\n max_iterations=max_iterations,\n )\n runnable = self.update_runnable_instance(agent, runnable, self.tools)\n\n # Convert input_value to proper format for agent\n if hasattr(self.input_value, \"to_lc_message\") and callable(self.input_value.to_lc_message):\n lc_message = self.input_value.to_lc_message()\n input_text = lc_message.content if hasattr(lc_message, \"content\") else str(lc_message)\n else:\n lc_message = None\n input_text = self.input_value\n\n input_dict: dict[str, str | list[BaseMessage]] = {}\n if hasattr(self, \"system_prompt\"):\n input_dict[\"system_prompt\"] = self.system_prompt\n if hasattr(self, \"chat_history\") and self.chat_history:\n if (\n hasattr(self.chat_history, \"to_data\")\n and callable(self.chat_history.to_data)\n and self.chat_history.__class__.__name__ == \"Data\"\n ):\n input_dict[\"chat_history\"] = data_to_messages(self.chat_history)\n # Handle both lfx.schema.message.Message and langflow.schema.message.Message types\n if all(hasattr(m, \"to_data\") and callable(m.to_data) and \"text\" in m.data for m in self.chat_history):\n input_dict[\"chat_history\"] = data_to_messages(self.chat_history)\n if all(isinstance(m, Message) for m in self.chat_history):\n input_dict[\"chat_history\"] = data_to_messages([m.to_data() for m in self.chat_history])\n if hasattr(lc_message, \"content\") and isinstance(lc_message.content, list):\n # ! Because the input has to be a string, we must pass the images in the chat_history\n\n image_dicts = [item for item in lc_message.content if item.get(\"type\") == \"image\"]\n lc_message.content = [item for item in lc_message.content if item.get(\"type\") != \"image\"]\n\n if \"chat_history\" not in input_dict:\n input_dict[\"chat_history\"] = []\n if isinstance(input_dict[\"chat_history\"], list):\n input_dict[\"chat_history\"].extend(HumanMessage(content=[image_dict]) for image_dict in image_dicts)\n else:\n input_dict[\"chat_history\"] = [HumanMessage(content=[image_dict]) for image_dict in image_dicts]\n input_dict[\"input\"] = input_text\n if hasattr(self, \"graph\"):\n session_id = self.graph.session_id\n elif hasattr(self, \"_session_id\"):\n session_id = self._session_id\n else:\n session_id = None\n\n try:\n sender_name = get_chat_output_sender_name(self)\n except AttributeError:\n sender_name = self.display_name or \"AI\"\n\n agent_message = Message(\n sender=MESSAGE_SENDER_AI,\n sender_name=sender_name,\n properties={\"icon\": \"Bot\", \"state\": \"partial\"},\n content_blocks=[ContentBlock(title=\"Agent Steps\", contents=[])],\n session_id=session_id or uuid.uuid4(),\n )\n try:\n result = await process_agent_events(\n runnable.astream_events(\n input_dict,\n config={\"callbacks\": [AgentAsyncHandler(self.log), *self.get_langchain_callbacks()]},\n version=\"v2\",\n ),\n agent_message,\n cast(\"SendMessageFunctionType\", self.send_message),\n )\n except ExceptionWithMessageError as e:\n if hasattr(e, \"agent_message\") and hasattr(e.agent_message, \"id\"):\n msg_id = e.agent_message.id\n await delete_message(id_=msg_id)\n await self._send_message_event(e.agent_message, category=\"remove_message\")\n logger.error(f\"ExceptionWithMessageError: {e}\")\n raise\n except Exception as e:\n # Log or handle any other exceptions\n logger.error(f\"Error: {e}\")\n raise\n\n self.status = result\n return result\n"},"context_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Context ID","dynamic":false,"info":"The context ID of the chat. Adds an extra layer to the local memory.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"context_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"enable_post_tool_reflection":{"_input_type":"BoolInput","advanced":false,"display_name":"Post Tool JSON Processing","dynamic":false,"info":"If true, it passes the tool output to a json processing (if json) step.","list":false,"list_add_label":"Add More","name":"enable_post_tool_reflection","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true},"format_instructions":{"_input_type":"MultilineInput","advanced":true,"copy_field":false,"display_name":"Output Format Instructions","dynamic":false,"info":"Generic Template for structured output formatting. Valid only with Structured response.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"format_instructions","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"You are an AI that extracts structured JSON objects from unstructured text. Use a predefined schema with expected types (str, int, float, bool, dict). Extract ALL relevant instances that match the schema - if multiple patterns exist, capture them all. Fill missing or ambiguous values with defaults: null for missing values. Remove exact duplicates but keep variations that have different field values. Always return valid JSON in the expected format, never throw errors. If multiple objects can be extracted, return them all in the structured format."},"handle_parsing_errors":{"_input_type":"BoolInput","advanced":true,"display_name":"Handle Parse Errors","dynamic":false,"info":"Should the Agent fix errors when reading user input for better processing?","list":false,"list_add_label":"Add More","name":"handle_parsing_errors","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true},"input_value":{"_input_type":"MessageInput","advanced":false,"display_name":"Input","dynamic":false,"info":"The input provided by the user for the agent to process.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"input_value","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"max_iterations":{"_input_type":"IntInput","advanced":true,"display_name":"Max Iterations","dynamic":false,"info":"The maximum number of attempts the agent can make to complete its task before it stops.","list":false,"list_add_label":"Add More","name":"max_iterations","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":15},"max_output_tokens":{"_input_type":"IntInput","advanced":false,"display_name":"Max Output Tokens","dynamic":false,"info":"The maximum number of tokens to generate.","list":false,"list_add_label":"Add More","name":"max_output_tokens","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":""},"max_retries":{"_input_type":"IntInput","advanced":true,"display_name":"Max Retries","dynamic":false,"info":"The maximum number of retries to make when generating.","list":false,"list_add_label":"Add More","name":"max_retries","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":5},"max_tokens":{"_input_type":"IntInput","advanced":true,"display_name":"Max Tokens","dynamic":false,"info":"The maximum number of tokens to generate. Set to 0 for unlimited tokens.","list":false,"list_add_label":"Add More","name":"max_tokens","placeholder":"","range_spec":{"max":128000.0,"min":0.0,"step":0.1,"step_type":"float"},"required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":""},"model_kwargs":{"_input_type":"DictInput","advanced":true,"display_name":"Model Kwargs","dynamic":false,"info":"Additional keyword arguments to pass to the model.","list":false,"list_add_label":"Add More","name":"model_kwargs","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"type":"dict","value":{}},"model_name":{"_input_type":"DropdownInput","advanced":false,"combobox":true,"dialog_inputs":{},"display_name":"Model Name","dynamic":false,"external_options":{},"info":"To see the model names, first choose a provider. Then, enter your API key and click the refresh button next to the model name.","name":"model_name","options":["gpt-4o-mini","gpt-4o","gpt-4.1","gpt-4.1-mini","gpt-4.1-nano","gpt-4-turbo","gpt-4-turbo-preview","gpt-4","gpt-3.5-turbo","gpt-5","gpt-5-mini","gpt-5-nano","gpt-5-chat-latest","o1","o3-mini","o3","o3-pro","o4-mini","o4-mini-high"],"options_metadata":[],"placeholder":"","real_time_refresh":false,"required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"gpt-4o-mini"},"n_messages":{"_input_type":"IntInput","advanced":true,"display_name":"Number of Chat History Messages","dynamic":false,"info":"Number of chat history messages to retrieve.","list":false,"list_add_label":"Add More","name":"n_messages","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":100},"openai_api_base":{"_input_type":"StrInput","advanced":true,"display_name":"OpenAI API Base","dynamic":false,"info":"The base URL of the OpenAI API. Defaults to https://api.openai.com/v1. You can change this to use other APIs like JinaChat, LocalAI and Prem.","list":false,"list_add_label":"Add More","load_from_db":false,"name":"openai_api_base","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"output_schema":{"_input_type":"TableInput","advanced":true,"display_name":"Output Schema","dynamic":false,"info":"Schema Validation: Define the structure and data types for structured output. No validation if no output schema.","is_list":true,"list_add_label":"Add More","name":"output_schema","placeholder":"","required":false,"show":true,"table_icon":"Table","table_schema":[{"default":"field","description":"Specify the name of the output field.","display_name":"Name","edit_mode":"inline","name":"name","type":"str"},{"default":"description of field","description":"Describe the purpose of the output field.","display_name":"Description","edit_mode":"popover","name":"description","type":"str"},{"default":"str","description":"Indicate the data type of the output field (e.g., str, int, float, bool, dict).","display_name":"Type","edit_mode":"inline","name":"type","options":["str","int","float","bool","dict"],"type":"str"},{"default":"False","description":"Set to True if this output field should be a list of the specified type.","display_name":"As List","edit_mode":"inline","name":"multiple","type":"boolean"}],"title_case":false,"tool_mode":false,"trace_as_metadata":true,"trigger_icon":"Table","trigger_text":"Open table","type":"table","value":[]},"project_id":{"_input_type":"StrInput","advanced":false,"display_name":"Project ID","dynamic":false,"info":"The project ID of the model.","list":false,"list_add_label":"Add More","load_from_db":false,"name":"project_id","placeholder":"","required":true,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"response_processing_size_threshold":{"_input_type":"IntInput","advanced":true,"display_name":"Response Processing Size Threshold","dynamic":false,"info":"Tool output is post-processed only if the response length exceeds a specified character threshold.","list":false,"list_add_label":"Add More","name":"response_processing_size_threshold","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":100},"seed":{"_input_type":"IntInput","advanced":true,"display_name":"Seed","dynamic":false,"info":"The seed controls the reproducibility of the job.","list":false,"list_add_label":"Add More","name":"seed","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":1},"system_prompt":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"Agent Instructions","dynamic":false,"info":"System Prompt: Initial instructions and context provided to guide the agent's behavior.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"system_prompt","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"You are a helpful assistant that can use tools to answer questions and perform tasks."},"temperature":{"_input_type":"SliderInput","advanced":true,"display_name":"Temperature","dynamic":false,"info":"","max_label":"","max_label_icon":"","min_label":"","min_label_icon":"","name":"temperature","placeholder":"","range_spec":{"max":1.0,"min":0.0,"step":0.01,"step_type":"float"},"required":false,"show":true,"slider_buttons":false,"slider_buttons_options":[],"slider_input":false,"title_case":false,"tool_mode":false,"type":"slider","value":0.1},"timeout":{"_input_type":"IntInput","advanced":true,"display_name":"Timeout","dynamic":false,"info":"The timeout for requests to OpenAI completion API.","list":false,"list_add_label":"Add More","name":"timeout","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":700},"tools":{"_input_type":"HandleInput","advanced":false,"display_name":"Tools","dynamic":false,"info":"These are the tools that the agent can use to help with tasks.","input_types":["Tool"],"list":true,"list_add_label":"Add More","name":"tools","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"verbose":{"_input_type":"BoolInput","advanced":true,"display_name":"Verbose","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"verbose","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true}},"tool_mode":false},"Agent":{"base_classes":["Message"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Define the agent's instructions, then enter a task to complete using tools.","display_name":"Agent","documentation":"https://docs.langflow.org/agents","edited":false,"field_order":["agent_llm","api_key","base_url","project_id","max_output_tokens","max_tokens","model_kwargs","model_name","openai_api_base","api_key","temperature","seed","max_retries","timeout","system_prompt","context_id","n_messages","format_instructions","output_schema","tools","input_value","handle_parsing_errors","verbose","max_iterations","agent_description","add_current_date_tool"],"frozen":false,"icon":"bot","legacy":false,"metadata":{"code_hash":"adf733969280","dependencies":{"dependencies":[{"name":"langchain_core","version":"0.3.79"},{"name":"pydantic","version":"2.10.6"},{"name":"lfx","version":null}],"total_dependencies":3},"module":"lfx.components.agents.agent.AgentComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Response","group_outputs":false,"method":"message_response","name":"response","selected":"Message","tool_mode":true,"types":["Message"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","add_current_date_tool":{"_input_type":"BoolInput","advanced":true,"display_name":"Current Date","dynamic":false,"info":"If true, will add a tool to the agent that returns the current date.","list":false,"list_add_label":"Add More","name":"add_current_date_tool","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true},"agent_description":{"_input_type":"MultilineInput","advanced":true,"copy_field":false,"display_name":"Agent Description [Deprecated]","dynamic":false,"info":"The description of the agent. This is only used when in Tool Mode. Defaults to 'A helpful assistant with access to the following tools:' and tools are added dynamically. This feature is deprecated and will be removed in future versions.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"agent_description","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"A helpful assistant with access to the following tools:"},"agent_llm":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Model Provider","dynamic":false,"external_options":{"fields":{"data":{"node":{"display_name":"Connect other models","icon":"CornerDownLeft","name":"connect_other_models"}}}},"info":"The provider of the language model that the agent will use to generate responses.","input_types":[],"name":"agent_llm","options":["Anthropic","Google Generative AI","OpenAI","IBM watsonx.ai","Ollama"],"options_metadata":[{"icon":"Anthropic"},{"icon":"GoogleGenerativeAI"},{"icon":"OpenAI"},{"icon":"WatsonxAI"},{"icon":"Ollama"}],"placeholder":"","real_time_refresh":true,"refresh_button":false,"required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"OpenAI"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"OpenAI API Key","dynamic":false,"info":"The OpenAI API Key to use for the OpenAI model.","input_types":[],"load_from_db":false,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":true,"title_case":false,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"The base URL of the API.","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","required":true,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"import json\nimport re\n\nfrom langchain_core.tools import StructuredTool, Tool\nfrom pydantic import ValidationError\n\nfrom lfx.base.agents.agent import LCToolsAgentComponent\nfrom lfx.base.agents.events import ExceptionWithMessageError\nfrom lfx.base.models.model_input_constants import (\n ALL_PROVIDER_FIELDS,\n MODEL_DYNAMIC_UPDATE_FIELDS,\n MODEL_PROVIDERS_DICT,\n MODEL_PROVIDERS_LIST,\n MODELS_METADATA,\n)\nfrom lfx.base.models.model_utils import get_model_name\nfrom lfx.components.helpers.current_date import CurrentDateComponent\nfrom lfx.components.helpers.memory import MemoryComponent\nfrom lfx.components.langchain_utilities.tool_calling import ToolCallingAgentComponent\nfrom lfx.custom.custom_component.component import get_component_toolkit\nfrom lfx.custom.utils import update_component_build_config\nfrom lfx.helpers.base_model import build_model_from_schema\nfrom lfx.inputs.inputs import BoolInput, SecretStrInput, StrInput\nfrom lfx.io import DropdownInput, IntInput, MessageTextInput, MultilineInput, Output, TableInput\nfrom lfx.log.logger import logger\nfrom lfx.schema.data import Data\nfrom lfx.schema.dotdict import dotdict\nfrom lfx.schema.message import Message\nfrom lfx.schema.table import EditMode\n\n\ndef set_advanced_true(component_input):\n component_input.advanced = True\n return component_input\n\n\nclass AgentComponent(ToolCallingAgentComponent):\n display_name: str = \"Agent\"\n description: str = \"Define the agent's instructions, then enter a task to complete using tools.\"\n documentation: str = \"https://docs.langflow.org/agents\"\n icon = \"bot\"\n beta = False\n name = \"Agent\"\n\n memory_inputs = [set_advanced_true(component_input) for component_input in MemoryComponent().inputs]\n\n # Filter out json_mode from OpenAI inputs since we handle structured output differently\n if \"OpenAI\" in MODEL_PROVIDERS_DICT:\n openai_inputs_filtered = [\n input_field\n for input_field in MODEL_PROVIDERS_DICT[\"OpenAI\"][\"inputs\"]\n if not (hasattr(input_field, \"name\") and input_field.name == \"json_mode\")\n ]\n else:\n openai_inputs_filtered = []\n\n inputs = [\n DropdownInput(\n name=\"agent_llm\",\n display_name=\"Model Provider\",\n info=\"The provider of the language model that the agent will use to generate responses.\",\n options=[*MODEL_PROVIDERS_LIST],\n value=\"OpenAI\",\n real_time_refresh=True,\n refresh_button=False,\n input_types=[],\n options_metadata=[MODELS_METADATA[key] for key in MODEL_PROVIDERS_LIST if key in MODELS_METADATA],\n external_options={\n \"fields\": {\n \"data\": {\n \"node\": {\n \"name\": \"connect_other_models\",\n \"display_name\": \"Connect other models\",\n \"icon\": \"CornerDownLeft\",\n }\n }\n },\n },\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"API Key\",\n info=\"The API key to use for the model.\",\n required=True,\n ),\n StrInput(\n name=\"base_url\",\n display_name=\"Base URL\",\n info=\"The base URL of the API.\",\n required=True,\n show=False,\n ),\n StrInput(\n name=\"project_id\",\n display_name=\"Project ID\",\n info=\"The project ID of the model.\",\n required=True,\n show=False,\n ),\n IntInput(\n name=\"max_output_tokens\",\n display_name=\"Max Output Tokens\",\n info=\"The maximum number of tokens to generate.\",\n show=False,\n ),\n *openai_inputs_filtered,\n MultilineInput(\n name=\"system_prompt\",\n display_name=\"Agent Instructions\",\n info=\"System Prompt: Initial instructions and context provided to guide the agent's behavior.\",\n value=\"You are a helpful assistant that can use tools to answer questions and perform tasks.\",\n advanced=False,\n ),\n MessageTextInput(\n name=\"context_id\",\n display_name=\"Context ID\",\n info=\"The context ID of the chat. Adds an extra layer to the local memory.\",\n value=\"\",\n advanced=True,\n ),\n IntInput(\n name=\"n_messages\",\n display_name=\"Number of Chat History Messages\",\n value=100,\n info=\"Number of chat history messages to retrieve.\",\n advanced=True,\n show=True,\n ),\n MultilineInput(\n name=\"format_instructions\",\n display_name=\"Output Format Instructions\",\n info=\"Generic Template for structured output formatting. Valid only with Structured response.\",\n value=(\n \"You are an AI that extracts structured JSON objects from unstructured text. \"\n \"Use a predefined schema with expected types (str, int, float, bool, dict). \"\n \"Extract ALL relevant instances that match the schema - if multiple patterns exist, capture them all. \"\n \"Fill missing or ambiguous values with defaults: null for missing values. \"\n \"Remove exact duplicates but keep variations that have different field values. \"\n \"Always return valid JSON in the expected format, never throw errors. \"\n \"If multiple objects can be extracted, return them all in the structured format.\"\n ),\n advanced=True,\n ),\n TableInput(\n name=\"output_schema\",\n display_name=\"Output Schema\",\n info=(\n \"Schema Validation: Define the structure and data types for structured output. \"\n \"No validation if no output schema.\"\n ),\n advanced=True,\n required=False,\n value=[],\n table_schema=[\n {\n \"name\": \"name\",\n \"display_name\": \"Name\",\n \"type\": \"str\",\n \"description\": \"Specify the name of the output field.\",\n \"default\": \"field\",\n \"edit_mode\": EditMode.INLINE,\n },\n {\n \"name\": \"description\",\n \"display_name\": \"Description\",\n \"type\": \"str\",\n \"description\": \"Describe the purpose of the output field.\",\n \"default\": \"description of field\",\n \"edit_mode\": EditMode.POPOVER,\n },\n {\n \"name\": \"type\",\n \"display_name\": \"Type\",\n \"type\": \"str\",\n \"edit_mode\": EditMode.INLINE,\n \"description\": (\"Indicate the data type of the output field (e.g., str, int, float, bool, dict).\"),\n \"options\": [\"str\", \"int\", \"float\", \"bool\", \"dict\"],\n \"default\": \"str\",\n },\n {\n \"name\": \"multiple\",\n \"display_name\": \"As List\",\n \"type\": \"boolean\",\n \"description\": \"Set to True if this output field should be a list of the specified type.\",\n \"default\": \"False\",\n \"edit_mode\": EditMode.INLINE,\n },\n ],\n ),\n *LCToolsAgentComponent.get_base_inputs(),\n # removed memory inputs from agent component\n # *memory_inputs,\n BoolInput(\n name=\"add_current_date_tool\",\n display_name=\"Current Date\",\n advanced=True,\n info=\"If true, will add a tool to the agent that returns the current date.\",\n value=True,\n ),\n ]\n outputs = [\n Output(name=\"response\", display_name=\"Response\", method=\"message_response\"),\n ]\n\n async def get_agent_requirements(self):\n \"\"\"Get the agent requirements for the agent.\"\"\"\n llm_model, display_name = await self.get_llm()\n if llm_model is None:\n msg = \"No language model selected. Please choose a model to proceed.\"\n raise ValueError(msg)\n self.model_name = get_model_name(llm_model, display_name=display_name)\n\n # Get memory data\n self.chat_history = await self.get_memory_data()\n await logger.adebug(f\"Retrieved {len(self.chat_history)} chat history messages\")\n if isinstance(self.chat_history, Message):\n self.chat_history = [self.chat_history]\n\n # Add current date tool if enabled\n if self.add_current_date_tool:\n if not isinstance(self.tools, list): # type: ignore[has-type]\n self.tools = []\n current_date_tool = (await CurrentDateComponent(**self.get_base_args()).to_toolkit()).pop(0)\n\n if not isinstance(current_date_tool, StructuredTool):\n msg = \"CurrentDateComponent must be converted to a StructuredTool\"\n raise TypeError(msg)\n self.tools.append(current_date_tool)\n\n # Set shared callbacks for tracing the tools used by the agent\n self.set_tools_callbacks(self.tools, self._get_shared_callbacks())\n\n return llm_model, self.chat_history, self.tools\n\n async def message_response(self) -> Message:\n try:\n llm_model, self.chat_history, self.tools = await self.get_agent_requirements()\n # Set up and run agent\n self.set(\n llm=llm_model,\n tools=self.tools or [],\n chat_history=self.chat_history,\n input_value=self.input_value,\n system_prompt=self.system_prompt,\n )\n agent = self.create_agent_runnable()\n result = await self.run_agent(agent)\n\n # Store result for potential JSON output\n self._agent_result = result\n\n except (ValueError, TypeError, KeyError) as e:\n await logger.aerror(f\"{type(e).__name__}: {e!s}\")\n raise\n except ExceptionWithMessageError as e:\n await logger.aerror(f\"ExceptionWithMessageError occurred: {e}\")\n raise\n # Avoid catching blind Exception; let truly unexpected exceptions propagate\n except Exception as e:\n await logger.aerror(f\"Unexpected error: {e!s}\")\n raise\n else:\n return result\n\n def _preprocess_schema(self, schema):\n \"\"\"Preprocess schema to ensure correct data types for build_model_from_schema.\"\"\"\n processed_schema = []\n for field in schema:\n processed_field = {\n \"name\": str(field.get(\"name\", \"field\")),\n \"type\": str(field.get(\"type\", \"str\")),\n \"description\": str(field.get(\"description\", \"\")),\n \"multiple\": field.get(\"multiple\", False),\n }\n # Ensure multiple is handled correctly\n if isinstance(processed_field[\"multiple\"], str):\n processed_field[\"multiple\"] = processed_field[\"multiple\"].lower() in [\n \"true\",\n \"1\",\n \"t\",\n \"y\",\n \"yes\",\n ]\n processed_schema.append(processed_field)\n return processed_schema\n\n async def build_structured_output_base(self, content: str):\n \"\"\"Build structured output with optional BaseModel validation.\"\"\"\n json_pattern = r\"\\{.*\\}\"\n schema_error_msg = \"Try setting an output schema\"\n\n # Try to parse content as JSON first\n json_data = None\n try:\n json_data = json.loads(content)\n except json.JSONDecodeError:\n json_match = re.search(json_pattern, content, re.DOTALL)\n if json_match:\n try:\n json_data = json.loads(json_match.group())\n except json.JSONDecodeError:\n return {\"content\": content, \"error\": schema_error_msg}\n else:\n return {\"content\": content, \"error\": schema_error_msg}\n\n # If no output schema provided, return parsed JSON without validation\n if not hasattr(self, \"output_schema\") or not self.output_schema or len(self.output_schema) == 0:\n return json_data\n\n # Use BaseModel validation with schema\n try:\n processed_schema = self._preprocess_schema(self.output_schema)\n output_model = build_model_from_schema(processed_schema)\n\n # Validate against the schema\n if isinstance(json_data, list):\n # Multiple objects\n validated_objects = []\n for item in json_data:\n try:\n validated_obj = output_model.model_validate(item)\n validated_objects.append(validated_obj.model_dump())\n except ValidationError as e:\n await logger.aerror(f\"Validation error for item: {e}\")\n # Include invalid items with error info\n validated_objects.append({\"data\": item, \"validation_error\": str(e)})\n return validated_objects\n\n # Single object\n try:\n validated_obj = output_model.model_validate(json_data)\n return [validated_obj.model_dump()] # Return as list for consistency\n except ValidationError as e:\n await logger.aerror(f\"Validation error: {e}\")\n return [{\"data\": json_data, \"validation_error\": str(e)}]\n\n except (TypeError, ValueError) as e:\n await logger.aerror(f\"Error building structured output: {e}\")\n # Fallback to parsed JSON without validation\n return json_data\n\n async def json_response(self) -> Data:\n \"\"\"Convert agent response to structured JSON Data output with schema validation.\"\"\"\n # Always use structured chat agent for JSON response mode for better JSON formatting\n try:\n system_components = []\n\n # 1. Agent Instructions (system_prompt)\n agent_instructions = getattr(self, \"system_prompt\", \"\") or \"\"\n if agent_instructions:\n system_components.append(f\"{agent_instructions}\")\n\n # 2. Format Instructions\n format_instructions = getattr(self, \"format_instructions\", \"\") or \"\"\n if format_instructions:\n system_components.append(f\"Format instructions: {format_instructions}\")\n\n # 3. Schema Information from BaseModel\n if hasattr(self, \"output_schema\") and self.output_schema and len(self.output_schema) > 0:\n try:\n processed_schema = self._preprocess_schema(self.output_schema)\n output_model = build_model_from_schema(processed_schema)\n schema_dict = output_model.model_json_schema()\n schema_info = (\n \"You are given some text that may include format instructions, \"\n \"explanations, or other content alongside a JSON schema.\\n\\n\"\n \"Your task:\\n\"\n \"- Extract only the JSON schema.\\n\"\n \"- Return it as valid JSON.\\n\"\n \"- Do not include format instructions, explanations, or extra text.\\n\\n\"\n \"Input:\\n\"\n f\"{json.dumps(schema_dict, indent=2)}\\n\\n\"\n \"Output (only JSON schema):\"\n )\n system_components.append(schema_info)\n except (ValidationError, ValueError, TypeError, KeyError) as e:\n await logger.aerror(f\"Could not build schema for prompt: {e}\", exc_info=True)\n\n # Combine all components\n combined_instructions = \"\\n\\n\".join(system_components) if system_components else \"\"\n llm_model, self.chat_history, self.tools = await self.get_agent_requirements()\n self.set(\n llm=llm_model,\n tools=self.tools or [],\n chat_history=self.chat_history,\n input_value=self.input_value,\n system_prompt=combined_instructions,\n )\n\n # Create and run structured chat agent\n try:\n structured_agent = self.create_agent_runnable()\n except (NotImplementedError, ValueError, TypeError) as e:\n await logger.aerror(f\"Error with structured chat agent: {e}\")\n raise\n try:\n result = await self.run_agent(structured_agent)\n except (\n ExceptionWithMessageError,\n ValueError,\n TypeError,\n RuntimeError,\n ) as e:\n await logger.aerror(f\"Error with structured agent result: {e}\")\n raise\n # Extract content from structured agent result\n if hasattr(result, \"content\"):\n content = result.content\n elif hasattr(result, \"text\"):\n content = result.text\n else:\n content = str(result)\n\n except (\n ExceptionWithMessageError,\n ValueError,\n TypeError,\n NotImplementedError,\n AttributeError,\n ) as e:\n await logger.aerror(f\"Error with structured chat agent: {e}\")\n # Fallback to regular agent\n content_str = \"No content returned from agent\"\n return Data(data={\"content\": content_str, \"error\": str(e)})\n\n # Process with structured output validation\n try:\n structured_output = await self.build_structured_output_base(content)\n\n # Handle different output formats\n if isinstance(structured_output, list) and structured_output:\n if len(structured_output) == 1:\n return Data(data=structured_output[0])\n return Data(data={\"results\": structured_output})\n if isinstance(structured_output, dict):\n return Data(data=structured_output)\n return Data(data={\"content\": content})\n\n except (ValueError, TypeError) as e:\n await logger.aerror(f\"Error in structured output processing: {e}\")\n return Data(data={\"content\": content, \"error\": str(e)})\n\n async def get_memory_data(self):\n # TODO: This is a temporary fix to avoid message duplication. We should develop a function for this.\n messages = (\n await MemoryComponent(**self.get_base_args())\n .set(\n session_id=self.graph.session_id,\n context_id=self.context_id,\n order=\"Ascending\",\n n_messages=self.n_messages,\n )\n .retrieve_messages()\n )\n return [\n message for message in messages if getattr(message, \"id\", None) != getattr(self.input_value, \"id\", None)\n ]\n\n async def get_llm(self):\n if not isinstance(self.agent_llm, str):\n return self.agent_llm, None\n\n try:\n provider_info = MODEL_PROVIDERS_DICT.get(self.agent_llm)\n if not provider_info:\n msg = f\"Invalid model provider: {self.agent_llm}\"\n raise ValueError(msg)\n\n component_class = provider_info.get(\"component_class\")\n display_name = component_class.display_name\n inputs = provider_info.get(\"inputs\")\n prefix = provider_info.get(\"prefix\", \"\")\n\n return self._build_llm_model(component_class, inputs, prefix), display_name\n\n except (AttributeError, ValueError, TypeError, RuntimeError) as e:\n await logger.aerror(f\"Error building {self.agent_llm} language model: {e!s}\")\n msg = f\"Failed to initialize language model: {e!s}\"\n raise ValueError(msg) from e\n\n def _build_llm_model(self, component, inputs, prefix=\"\"):\n model_kwargs = {}\n for input_ in inputs:\n if hasattr(self, f\"{prefix}{input_.name}\"):\n model_kwargs[input_.name] = getattr(self, f\"{prefix}{input_.name}\")\n return component.set(**model_kwargs).build_model()\n\n def set_component_params(self, component):\n provider_info = MODEL_PROVIDERS_DICT.get(self.agent_llm)\n if provider_info:\n inputs = provider_info.get(\"inputs\")\n prefix = provider_info.get(\"prefix\")\n # Filter out json_mode and only use attributes that exist on this component\n model_kwargs = {}\n for input_ in inputs:\n if hasattr(self, f\"{prefix}{input_.name}\"):\n model_kwargs[input_.name] = getattr(self, f\"{prefix}{input_.name}\")\n\n return component.set(**model_kwargs)\n return component\n\n def delete_fields(self, build_config: dotdict, fields: dict | list[str]) -> None:\n \"\"\"Delete specified fields from build_config.\"\"\"\n for field in fields:\n if build_config is not None and field in build_config:\n build_config.pop(field, None)\n\n def update_input_types(self, build_config: dotdict) -> dotdict:\n \"\"\"Update input types for all fields in build_config.\"\"\"\n for key, value in build_config.items():\n if isinstance(value, dict):\n if value.get(\"input_types\") is None:\n build_config[key][\"input_types\"] = []\n elif hasattr(value, \"input_types\") and value.input_types is None:\n value.input_types = []\n return build_config\n\n async def update_build_config(\n self, build_config: dotdict, field_value: str, field_name: str | None = None\n ) -> dotdict:\n # Iterate over all providers in the MODEL_PROVIDERS_DICT\n # Existing logic for updating build_config\n if field_name in (\"agent_llm\",):\n build_config[\"agent_llm\"][\"value\"] = field_value\n provider_info = MODEL_PROVIDERS_DICT.get(field_value)\n if provider_info:\n component_class = provider_info.get(\"component_class\")\n if component_class and hasattr(component_class, \"update_build_config\"):\n # Call the component class's update_build_config method\n build_config = await update_component_build_config(\n component_class, build_config, field_value, \"model_name\"\n )\n\n provider_configs: dict[str, tuple[dict, list[dict]]] = {\n provider: (\n MODEL_PROVIDERS_DICT[provider][\"fields\"],\n [\n MODEL_PROVIDERS_DICT[other_provider][\"fields\"]\n for other_provider in MODEL_PROVIDERS_DICT\n if other_provider != provider\n ],\n )\n for provider in MODEL_PROVIDERS_DICT\n }\n if field_value in provider_configs:\n fields_to_add, fields_to_delete = provider_configs[field_value]\n\n # Delete fields from other providers\n for fields in fields_to_delete:\n self.delete_fields(build_config, fields)\n\n # Add provider-specific fields\n if field_value == \"OpenAI\" and not any(field in build_config for field in fields_to_add):\n build_config.update(fields_to_add)\n else:\n build_config.update(fields_to_add)\n # Reset input types for agent_llm\n build_config[\"agent_llm\"][\"input_types\"] = []\n build_config[\"agent_llm\"][\"display_name\"] = \"Model Provider\"\n elif field_value == \"connect_other_models\":\n # Delete all provider fields\n self.delete_fields(build_config, ALL_PROVIDER_FIELDS)\n # # Update with custom component\n custom_component = DropdownInput(\n name=\"agent_llm\",\n display_name=\"Language Model\",\n info=\"The provider of the language model that the agent will use to generate responses.\",\n options=[*MODEL_PROVIDERS_LIST],\n real_time_refresh=True,\n refresh_button=False,\n input_types=[\"LanguageModel\"],\n placeholder=\"Awaiting model input.\",\n options_metadata=[MODELS_METADATA[key] for key in MODEL_PROVIDERS_LIST if key in MODELS_METADATA],\n external_options={\n \"fields\": {\n \"data\": {\n \"node\": {\n \"name\": \"connect_other_models\",\n \"display_name\": \"Connect other models\",\n \"icon\": \"CornerDownLeft\",\n },\n }\n },\n },\n )\n build_config.update({\"agent_llm\": custom_component.to_dict()})\n # Update input types for all fields\n build_config = self.update_input_types(build_config)\n\n # Validate required keys\n default_keys = [\n \"code\",\n \"_type\",\n \"agent_llm\",\n \"tools\",\n \"input_value\",\n \"add_current_date_tool\",\n \"system_prompt\",\n \"agent_description\",\n \"max_iterations\",\n \"handle_parsing_errors\",\n \"verbose\",\n ]\n missing_keys = [key for key in default_keys if key not in build_config]\n if missing_keys:\n msg = f\"Missing required keys in build_config: {missing_keys}\"\n raise ValueError(msg)\n if (\n isinstance(self.agent_llm, str)\n and self.agent_llm in MODEL_PROVIDERS_DICT\n and field_name in MODEL_DYNAMIC_UPDATE_FIELDS\n ):\n provider_info = MODEL_PROVIDERS_DICT.get(self.agent_llm)\n if provider_info:\n component_class = provider_info.get(\"component_class\")\n component_class = self.set_component_params(component_class)\n prefix = provider_info.get(\"prefix\")\n if component_class and hasattr(component_class, \"update_build_config\"):\n # Call each component class's update_build_config method\n # remove the prefix from the field_name\n if isinstance(field_name, str) and isinstance(prefix, str):\n field_name = field_name.replace(prefix, \"\")\n build_config = await update_component_build_config(\n component_class, build_config, field_value, \"model_name\"\n )\n return dotdict({k: v.to_dict() if hasattr(v, \"to_dict\") else v for k, v in build_config.items()})\n\n async def _get_tools(self) -> list[Tool]:\n component_toolkit = get_component_toolkit()\n tools_names = self._build_tools_names()\n agent_description = self.get_tool_description()\n # TODO: Agent Description Depreciated Feature to be removed\n description = f\"{agent_description}{tools_names}\"\n\n tools = component_toolkit(component=self).get_tools(\n tool_name=\"Call_Agent\",\n tool_description=description,\n # here we do not use the shared callbacks as we are exposing the agent as a tool\n callbacks=self.get_langchain_callbacks(),\n )\n if hasattr(self, \"tools_metadata\"):\n tools = component_toolkit(component=self, metadata=self.tools_metadata).update_tools_metadata(tools=tools)\n\n return tools\n"},"context_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Context ID","dynamic":false,"info":"The context ID of the chat. Adds an extra layer to the local memory.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"context_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"format_instructions":{"_input_type":"MultilineInput","advanced":true,"copy_field":false,"display_name":"Output Format Instructions","dynamic":false,"info":"Generic Template for structured output formatting. Valid only with Structured response.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"format_instructions","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"You are an AI that extracts structured JSON objects from unstructured text. Use a predefined schema with expected types (str, int, float, bool, dict). Extract ALL relevant instances that match the schema - if multiple patterns exist, capture them all. Fill missing or ambiguous values with defaults: null for missing values. Remove exact duplicates but keep variations that have different field values. Always return valid JSON in the expected format, never throw errors. If multiple objects can be extracted, return them all in the structured format."},"handle_parsing_errors":{"_input_type":"BoolInput","advanced":true,"display_name":"Handle Parse Errors","dynamic":false,"info":"Should the Agent fix errors when reading user input for better processing?","list":false,"list_add_label":"Add More","name":"handle_parsing_errors","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true},"input_value":{"_input_type":"MessageInput","advanced":false,"display_name":"Input","dynamic":false,"info":"The input provided by the user for the agent to process.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"input_value","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"max_iterations":{"_input_type":"IntInput","advanced":true,"display_name":"Max Iterations","dynamic":false,"info":"The maximum number of attempts the agent can make to complete its task before it stops.","list":false,"list_add_label":"Add More","name":"max_iterations","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":15},"max_output_tokens":{"_input_type":"IntInput","advanced":false,"display_name":"Max Output Tokens","dynamic":false,"info":"The maximum number of tokens to generate.","list":false,"list_add_label":"Add More","name":"max_output_tokens","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":""},"max_retries":{"_input_type":"IntInput","advanced":true,"display_name":"Max Retries","dynamic":false,"info":"The maximum number of retries to make when generating.","list":false,"list_add_label":"Add More","name":"max_retries","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":5},"max_tokens":{"_input_type":"IntInput","advanced":true,"display_name":"Max Tokens","dynamic":false,"info":"The maximum number of tokens to generate. Set to 0 for unlimited tokens.","list":false,"list_add_label":"Add More","name":"max_tokens","placeholder":"","range_spec":{"max":128000.0,"min":0.0,"step":0.1,"step_type":"float"},"required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":""},"model_kwargs":{"_input_type":"DictInput","advanced":true,"display_name":"Model Kwargs","dynamic":false,"info":"Additional keyword arguments to pass to the model.","list":false,"list_add_label":"Add More","name":"model_kwargs","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"type":"dict","value":{}},"model_name":{"_input_type":"DropdownInput","advanced":false,"combobox":true,"dialog_inputs":{},"display_name":"Model Name","dynamic":false,"external_options":{},"info":"To see the model names, first choose a provider. Then, enter your API key and click the refresh button next to the model name.","name":"model_name","options":["gpt-4o-mini","gpt-4o","gpt-4.1","gpt-4.1-mini","gpt-4.1-nano","gpt-4-turbo","gpt-4-turbo-preview","gpt-4","gpt-3.5-turbo","gpt-5","gpt-5-mini","gpt-5-nano","gpt-5-chat-latest","o1","o3-mini","o3","o3-pro","o4-mini","o4-mini-high"],"options_metadata":[],"placeholder":"","real_time_refresh":false,"required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"gpt-4o-mini"},"n_messages":{"_input_type":"IntInput","advanced":true,"display_name":"Number of Chat History Messages","dynamic":false,"info":"Number of chat history messages to retrieve.","list":false,"list_add_label":"Add More","name":"n_messages","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":100},"openai_api_base":{"_input_type":"StrInput","advanced":true,"display_name":"OpenAI API Base","dynamic":false,"info":"The base URL of the OpenAI API. Defaults to https://api.openai.com/v1. You can change this to use other APIs like JinaChat, LocalAI and Prem.","list":false,"list_add_label":"Add More","load_from_db":false,"name":"openai_api_base","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"output_schema":{"_input_type":"TableInput","advanced":true,"display_name":"Output Schema","dynamic":false,"info":"Schema Validation: Define the structure and data types for structured output. No validation if no output schema.","is_list":true,"list_add_label":"Add More","name":"output_schema","placeholder":"","required":false,"show":true,"table_icon":"Table","table_schema":[{"default":"field","description":"Specify the name of the output field.","display_name":"Name","edit_mode":"inline","name":"name","type":"str"},{"default":"description of field","description":"Describe the purpose of the output field.","display_name":"Description","edit_mode":"popover","name":"description","type":"str"},{"default":"str","description":"Indicate the data type of the output field (e.g., str, int, float, bool, dict).","display_name":"Type","edit_mode":"inline","name":"type","options":["str","int","float","bool","dict"],"type":"str"},{"default":"False","description":"Set to True if this output field should be a list of the specified type.","display_name":"As List","edit_mode":"inline","name":"multiple","type":"boolean"}],"title_case":false,"tool_mode":false,"trace_as_metadata":true,"trigger_icon":"Table","trigger_text":"Open table","type":"table","value":[]},"project_id":{"_input_type":"StrInput","advanced":false,"display_name":"Project ID","dynamic":false,"info":"The project ID of the model.","list":false,"list_add_label":"Add More","load_from_db":false,"name":"project_id","placeholder":"","required":true,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"seed":{"_input_type":"IntInput","advanced":true,"display_name":"Seed","dynamic":false,"info":"The seed controls the reproducibility of the job.","list":false,"list_add_label":"Add More","name":"seed","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":1},"system_prompt":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"Agent Instructions","dynamic":false,"info":"System Prompt: Initial instructions and context provided to guide the agent's behavior.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"system_prompt","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"You are a helpful assistant that can use tools to answer questions and perform tasks."},"temperature":{"_input_type":"SliderInput","advanced":true,"display_name":"Temperature","dynamic":false,"info":"","max_label":"","max_label_icon":"","min_label":"","min_label_icon":"","name":"temperature","placeholder":"","range_spec":{"max":1.0,"min":0.0,"step":0.01,"step_type":"float"},"required":false,"show":true,"slider_buttons":false,"slider_buttons_options":[],"slider_input":false,"title_case":false,"tool_mode":false,"type":"slider","value":0.1},"timeout":{"_input_type":"IntInput","advanced":true,"display_name":"Timeout","dynamic":false,"info":"The timeout for requests to OpenAI completion API.","list":false,"list_add_label":"Add More","name":"timeout","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":700},"tools":{"_input_type":"HandleInput","advanced":false,"display_name":"Tools","dynamic":false,"info":"These are the tools that the agent can use to help with tasks.","input_types":["Tool"],"list":true,"list_add_label":"Add More","name":"tools","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"verbose":{"_input_type":"BoolInput","advanced":true,"display_name":"Verbose","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"verbose","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true}},"tool_mode":false},"Cuga":{"base_classes":["Data","Message"],"beta":true,"conditional_paths":[],"custom_fields":{},"description":"Define the Cuga agent's policies, then assign it a task.","display_name":"Cuga","documentation":"https://docs.langflow.org/agents","edited":false,"field_order":["agent_llm","max_tokens","model_kwargs","model_name","openai_api_base","api_key","temperature","seed","max_retries","timeout","policies","n_messages","format_instructions","output_schema","tools","input_value","handle_parsing_errors","verbose","max_iterations","agent_description","add_current_date_tool","browser_enabled","web_apps","API"],"frozen":false,"icon":"bot","legacy":false,"metadata":{"code_hash":"24d8b832c4b3","dependencies":{"dependencies":[{"name":"langchain_core","version":"0.3.79"},{"name":"langflow","version":null},{"name":"pydantic","version":"2.10.6"},{"name":"lfx","version":null},{"name":"cuga","version":"0.1.2"}],"total_dependencies":5},"module":"lfx.components.agents.cuga_agent.CugaComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Response","group_outputs":false,"method":"message_response","name":"response","selected":"Message","tool_mode":true,"types":["Message"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"Structured Response","group_outputs":false,"method":"json_response","name":"structured_response","selected":"Data","tool_mode":false,"types":["Data"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"API":{"_input_type":"BoolInput","advanced":true,"display_name":"Enable API Sub-agent","dynamic":false,"info":"Toggle to enable a built-in sub-agent specialized for API interactions.","list":false,"list_add_label":"Add More","name":"API","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"_type":"Component","add_current_date_tool":{"_input_type":"BoolInput","advanced":true,"display_name":"Current Date","dynamic":false,"info":"If true, will add a tool to the agent that returns the current date.","list":false,"list_add_label":"Add More","name":"add_current_date_tool","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true},"agent_description":{"_input_type":"MultilineInput","advanced":true,"copy_field":false,"display_name":"Agent Description [Deprecated]","dynamic":false,"info":"The description of the agent. This is only used when in Tool Mode. Defaults to 'A helpful assistant with access to the following tools:' and tools are added dynamically. This feature is deprecated and will be removed in future versions.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"agent_description","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"A helpful assistant with access to the following tools:"},"agent_llm":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Model Provider","dynamic":false,"external_options":{},"info":"The provider of the language model that the agent will use to generate responses.","input_types":[],"name":"agent_llm","options":["OpenAI","Custom"],"options_metadata":[{"icon":"OpenAI"},{"icon":"brain"}],"placeholder":"","real_time_refresh":true,"required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"OpenAI"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"OpenAI API Key","dynamic":false,"info":"The OpenAI API Key to use for the OpenAI model.","input_types":[],"load_from_db":false,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":true,"title_case":false,"type":"str","value":""},"browser_enabled":{"_input_type":"BoolInput","advanced":false,"display_name":"Enable Browser","dynamic":false,"info":"Toggle to enable a built-in browser tool for web scraping and searching.","list":false,"list_add_label":"Add More","name":"browser_enabled","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"import asyncio\nimport json\nimport os\nimport re\nimport traceback\nimport uuid\nfrom collections.abc import AsyncIterator\nfrom typing import TYPE_CHECKING, Any, cast\n\nfrom langchain_core.agents import AgentFinish\nfrom langchain_core.messages import AIMessage, HumanMessage\nfrom langchain_core.tools import StructuredTool\nfrom langflow.field_typing import Tool\nfrom langflow.io import BoolInput, DropdownInput, IntInput, MultilineInput, Output, TableInput\n\n# from langflow.logging import logger\nfrom langflow.schema.data import Data\nfrom langflow.schema.dotdict import dotdict\nfrom langflow.schema.message import Message\nfrom langflow.schema.table import EditMode\nfrom pydantic import ValidationError\n\nfrom lfx.base.agents.events import ExceptionWithMessageError\nfrom lfx.base.models.model_input_constants import (\n ALL_PROVIDER_FIELDS,\n MODEL_DYNAMIC_UPDATE_FIELDS,\n MODEL_PROVIDERS,\n MODEL_PROVIDERS_DICT,\n MODELS_METADATA,\n)\nfrom lfx.base.models.model_utils import get_model_name\nfrom lfx.components.agents.agent import LCToolsAgentComponent\nfrom lfx.components.helpers.current_date import CurrentDateComponent\nfrom lfx.components.helpers.memory import MemoryComponent\nfrom lfx.components.langchain_utilities.tool_calling import ToolCallingAgentComponent\nfrom lfx.custom.custom_component.component import _get_component_toolkit\nfrom lfx.custom.utils import update_component_build_config\nfrom lfx.helpers.base_model import build_model_from_schema\nfrom lfx.log.logger import logger\n\nif TYPE_CHECKING:\n from langflow.schema.log import SendMessageFunctionType\n\n\ndef set_advanced_true(component_input):\n \"\"\"Set the advanced flag to True for a component input.\n\n Args:\n component_input: The component input to modify\n\n Returns:\n The modified component input with advanced=True\n \"\"\"\n component_input.advanced = True\n return component_input\n\n\nMODEL_PROVIDERS_LIST = [\"OpenAI\"]\n\n\nclass CugaComponent(ToolCallingAgentComponent):\n \"\"\"Cuga Agent Component for advanced AI task execution.\n\n The Cuga component is an advanced AI agent that can execute complex tasks using\n various tools, browser automation, and structured output generation. It supports\n custom policies, web applications, and API interactions.\n\n Attributes:\n display_name: Human-readable name for the component\n description: Brief description of the component's purpose\n documentation: URL to component documentation\n icon: Icon identifier for the UI\n beta: Whether the component is in beta status\n name: Internal component name\n \"\"\"\n\n display_name: str = \"Cuga\"\n description: str = \"Define the Cuga agent's policies, then assign it a task.\"\n documentation: str = \"https://docs.langflow.org/agents\"\n icon = \"bot\"\n beta = True\n name = \"Cuga\"\n\n memory_inputs = [set_advanced_true(component_input) for component_input in MemoryComponent().inputs]\n\n # Filter out json_mode from OpenAI inputs since we handle structured output differently\n openai_inputs_filtered = [\n input_field\n for input_field in MODEL_PROVIDERS_DICT[\"OpenAI\"][\"inputs\"]\n if not (hasattr(input_field, \"name\") and input_field.name == \"json_mode\")\n ]\n\n inputs = [\n DropdownInput(\n name=\"agent_llm\",\n display_name=\"Model Provider\",\n info=\"The provider of the language model that the agent will use to generate responses.\",\n options=[*MODEL_PROVIDERS_LIST, \"Custom\"],\n value=\"OpenAI\",\n real_time_refresh=True,\n input_types=[],\n options_metadata=[MODELS_METADATA[key] for key in MODEL_PROVIDERS_LIST] + [{\"icon\": \"brain\"}],\n ),\n *openai_inputs_filtered,\n MultilineInput(\n name=\"policies\",\n display_name=\"Policies\",\n info=(\n \"Custom instructions or policies for the agent to adhere to during its operation.\\n\"\n \"Example:\\n\"\n \"# Plan\\n\"\n \"< planning instructions e.g. which tools and when to use>\\n\"\n \"# Answer\\n\"\n \"< final answer instructions how to answer>\"\n ),\n value=\"\",\n advanced=False,\n ),\n IntInput(\n name=\"n_messages\",\n display_name=\"Number of Chat History Messages\",\n value=100,\n info=\"Number of chat history messages to retrieve.\",\n advanced=True,\n show=True,\n ),\n MultilineInput(\n name=\"format_instructions\",\n display_name=\"Output Format Instructions\",\n info=\"Generic Template for structured output formatting. Valid only with Structured response.\",\n value=(\n \"You are an AI that extracts structured JSON objects from unstructured text. \"\n \"Use a predefined schema with expected types (str, int, float, bool, dict). \"\n \"Extract ALL relevant instances that match the schema - if multiple patterns exist, capture them all. \"\n \"Fill missing or ambiguous values with defaults: null for missing values. \"\n \"Remove exact duplicates but keep variations that have different field values. \"\n \"Always return valid JSON in the expected format, never throw errors. \"\n \"If multiple objects can be extracted, return them all in the structured format.\"\n ),\n advanced=True,\n ),\n TableInput(\n name=\"output_schema\",\n display_name=\"Output Schema\",\n info=(\n \"Schema Validation: Define the structure and data types for structured output. \"\n \"No validation if no output schema.\"\n ),\n advanced=True,\n required=False,\n value=[],\n table_schema=[\n {\n \"name\": \"name\",\n \"display_name\": \"Name\",\n \"type\": \"str\",\n \"description\": \"Specify the name of the output field.\",\n \"default\": \"field\",\n \"edit_mode\": EditMode.INLINE,\n },\n {\n \"name\": \"description\",\n \"display_name\": \"Description\",\n \"type\": \"str\",\n \"description\": \"Describe the purpose of the output field.\",\n \"default\": \"description of field\",\n \"edit_mode\": EditMode.POPOVER,\n },\n {\n \"name\": \"type\",\n \"display_name\": \"Type\",\n \"type\": \"str\",\n \"edit_mode\": EditMode.INLINE,\n \"description\": (\"Indicate the data type of the output field (e.g., str, int, float, bool, dict).\"),\n \"options\": [\"str\", \"int\", \"float\", \"bool\", \"dict\"],\n \"default\": \"str\",\n },\n {\n \"name\": \"multiple\",\n \"display_name\": \"As List\",\n \"type\": \"boolean\",\n \"description\": \"Set to True if this output field should be a list of the specified type.\",\n \"default\": \"False\",\n \"edit_mode\": EditMode.INLINE,\n },\n ],\n ),\n *LCToolsAgentComponent.get_base_inputs(),\n BoolInput(\n name=\"add_current_date_tool\",\n display_name=\"Current Date\",\n advanced=True,\n info=\"If true, will add a tool to the agent that returns the current date.\",\n value=True,\n ),\n BoolInput(\n name=\"browser_enabled\",\n display_name=\"Enable Browser\",\n info=\"Toggle to enable a built-in browser tool for web scraping and searching.\",\n value=False,\n advanced=False,\n ),\n MultilineInput(\n name=\"web_apps\",\n display_name=\"Web applications\",\n info=(\n \"Define a list of web applications that cuga will open when enable browser is true. \"\n \"Currently only supports one web application. Example: https://example.com\"\n ),\n value=\"\",\n advanced=False,\n ),\n BoolInput(\n name=\"API\",\n display_name=\"Enable API Sub-agent\",\n info=\"Toggle to enable a built-in sub-agent specialized for API interactions.\",\n value=False,\n advanced=True,\n ),\n ]\n outputs = [\n Output(name=\"response\", display_name=\"Response\", method=\"message_response\"),\n Output(name=\"structured_response\", display_name=\"Structured Response\", method=\"json_response\", tool_mode=False),\n ]\n\n async def call_agent(\n self, current_input: str, tools: list[Tool], history_messages: list[Message], llm\n ) -> AsyncIterator[dict[str, Any]]:\n \"\"\"Execute the Cuga agent with the given input and tools.\n\n This method initializes and runs the Cuga agent, processing the input through\n the agent's workflow and yielding events for real-time monitoring.\n\n Args:\n current_input: The user input to process\n tools: List of available tools for the agent\n history_messages: Previous conversation history\n llm: The language model instance to use\n\n Yields:\n dict: Agent events including tool usage, thinking, and final results\n\n Raises:\n ValueError: If there's an error in agent initialization\n TypeError: If there's a type error in processing\n RuntimeError: If there's a runtime error during execution\n ConnectionError: If there's a connection issue\n \"\"\"\n yield {\n \"event\": \"on_chain_start\",\n \"run_id\": str(uuid.uuid4()),\n \"name\": \"CUGA_initializing\",\n \"data\": {\"input\": {\"input\": current_input, \"chat_history\": []}},\n }\n logger.debug(f\"LLM MODEL TYPE: {type(llm)}\")\n if current_input:\n try:\n from cuga.config import settings as cuga_settings\n\n logger.info(\"Updating cuga settings programmatically\")\n cuga_settings.set(\"advanced_features.registry\", False) # noqa: FBT003\n\n if self.browser_enabled:\n logger.info(\"browser_enabled is true, setting mode to hybrid\")\n cuga_settings.set(\"advanced_features.mode\", \"hybrid\")\n cuga_settings.set(\"advanced_features.use_vision\", False) # noqa: FBT003\n else:\n logger.info(\"browser_enabled is false, setting mode to api\")\n cuga_settings.set(\"advanced_features.mode\", \"api\")\n\n logger.info(f\"Cuga settings updated - MODE: {cuga_settings.get('advanced_features.mode')}\")\n except (ImportError, AttributeError) as e:\n logger.warning(f\"Could not update cuga settings: {e}\")\n os.environ[\"DYNACONF_ADVANCED_FEATURES__REGISTRY\"] = \"false\"\n if self.browser_enabled:\n logger.info(\"browser_enabled is true, setting env to hybrid\")\n os.environ[\"DYNACONF_ADVANCED_FEATURES__MODE\"] = \"hybrid\"\n os.environ[\"DYNACONF_ADVANCED_FEATURES__USE_VISION\"] = \"false\"\n else:\n logger.info(\"browser_enabled is false, setting env to api\")\n os.environ[\"DYNACONF_ADVANCED_FEATURES__MODE\"] = \"api\"\n\n from cuga.backend.activity_tracker.tracker import ActivityTracker\n from cuga.backend.cuga_graph.utils.agent_loop import StreamEvent\n from cuga.backend.cuga_graph.utils.controller import (\n AgentRunner as CugaAgent,\n )\n from cuga.backend.cuga_graph.utils.controller import (\n ExperimentResult as AgentResult,\n )\n from cuga.backend.llm.models import LLMManager\n from cuga.configurations.instructions_manager import InstructionsManager\n\n llm_manager = LLMManager()\n llm_manager.set_llm(llm)\n instructions_manager = InstructionsManager()\n if self.policies:\n logger.info(f\"policies are: {self.policies}\")\n instructions_manager.set_instructions_from_one_file(self.policies)\n tracker = ActivityTracker()\n tracker.set_tools(tools)\n cuga_agent = CugaAgent(browser_enabled=self.browser_enabled)\n if self.browser_enabled:\n await cuga_agent.initialize_freemode_env(start_url=self.web_apps.strip(), interface_mode=\"browser_only\")\n else:\n await cuga_agent.initialize_appworld_env()\n yield {\n \"event\": \"on_chain_start\",\n \"run_id\": str(uuid.uuid4()),\n \"name\": \"CUGA_thinking...\",\n \"data\": {\"input\": {\"input\": current_input, \"chat_history\": []}},\n }\n logger.info(f\"[CUGA] current web apps are {self.web_apps}\")\n logger.info(f\"[CUGA] Processing input: {current_input}\")\n try:\n # Convert history to LangChain format for the event\n lc_messages = []\n for msg in history_messages:\n if hasattr(msg, \"sender\") and msg.sender == \"Human\":\n lc_messages.append(HumanMessage(content=msg.text))\n else:\n lc_messages.append(AIMessage(content=msg.text))\n\n await asyncio.sleep(0.5)\n\n tools_used = []\n\n # Simulate browser tool usage\n if getattr(self, \"BROWSER\", False) and any(\n word in current_input.lower() for word in [\"search\", \"web\", \"browse\"]\n ):\n tool_run_id = str(uuid.uuid4())\n\n yield {\n \"event\": \"on_tool_start\",\n \"run_id\": tool_run_id,\n \"name\": \"BrowserTool\",\n \"data\": {\"input\": {\"query\": current_input}},\n }\n await asyncio.sleep(0.3)\n\n yield {\n \"event\": \"on_tool_end\",\n \"run_id\": tool_run_id,\n \"name\": \"BrowserTool\",\n \"data\": {\"output\": \"Simulated web search results for: \" + current_input},\n }\n tools_used.append(\"Performed web search\")\n\n # 2. Build final response\n response_parts = []\n\n response_parts.append(f\"Processed input: '{current_input}'\")\n response_parts.append(f\"Available tools: {len(tools)}\")\n # final_response = \"CUGA Agent Response:\\n\" + \"\\n\".join(response_parts)\n last_event: StreamEvent = None\n tool_run_id = None\n # 3. Chain end event with AgentFinish\n async for event in cuga_agent.run_task_generic_yield(eval_mode=False, goal=current_input):\n logger.debug(f\"recieved event {event}\")\n if last_event is not None and tool_run_id is not None:\n logger.debug(f\"last event {last_event}\")\n try:\n # TODO: Extract data\n data_dict = json.loads(last_event.data)\n except json.JSONDecodeError:\n data_dict = last_event.data\n if last_event.name == \"CodeAgent\":\n data_dict = data_dict[\"code\"]\n yield {\n \"event\": \"on_tool_end\",\n \"run_id\": tool_run_id,\n \"name\": last_event.name,\n \"data\": {\"output\": data_dict},\n }\n if isinstance(event, StreamEvent):\n tool_run_id = str(uuid.uuid4())\n last_event = StreamEvent(name=event.name, data=event.data)\n tool_event = {\n \"event\": \"on_tool_start\",\n \"run_id\": tool_run_id,\n \"name\": event.name,\n \"data\": {\"input\": {}},\n }\n logger.debug(f\"[CUGA] Yielding tool_start event: {event.name}\")\n yield tool_event\n\n if isinstance(event, AgentResult):\n task_result = event\n end_event = {\n \"event\": \"on_chain_end\",\n \"run_id\": str(uuid.uuid4()),\n \"name\": \"CugaAgent\",\n \"data\": {\"output\": AgentFinish(return_values={\"output\": task_result.answer}, log=\"\")},\n }\n answer_preview = task_result.answer[:100] if task_result.answer else \"None\"\n logger.info(f\"[CUGA] Yielding chain_end event with answer: {answer_preview}...\")\n yield end_event\n # task_result: AgentResult = await cuga_agent.run_task_generic_yield(\n # eval_mode=False, goal=current_input, on_progress=on_progress\n # )\n\n except (ValueError, TypeError, RuntimeError, ConnectionError) as e:\n logger.error(f\"An error occurred: {e!s}\")\n logger.error(f\"Traceback: {traceback.format_exc()}\")\n error_msg = f\"CUGA Agent error: {e!s}\"\n logger.error(f\"[CUGA] Error occurred: {error_msg}\")\n\n # Emit error event\n yield {\n \"event\": \"on_chain_error\",\n \"run_id\": str(uuid.uuid4()),\n \"name\": \"CugaAgent\",\n \"data\": {\"error\": error_msg},\n }\n\n async def message_response(self) -> Message:\n \"\"\"Generate a message response using the Cuga agent.\n\n This method processes the input through the Cuga agent and returns a structured\n message response. It handles agent initialization, tool setup, and event processing.\n\n Returns:\n Message: The agent's response message\n\n Raises:\n Exception: If there's an error during agent execution\n \"\"\"\n logger.info(\"[CUGA] Starting Cuga agent run for message_response.\")\n logger.info(f\"[CUGA] Agent input value: {self.input_value}\")\n\n # Validate input is not empty\n if not self.input_value or not str(self.input_value).strip():\n msg = \"Message cannot be empty. Please provide a valid message.\"\n raise ValueError(msg)\n\n try:\n llm_model, self.chat_history, self.tools = await self.get_agent_requirements()\n\n # Create agent message for event processing\n from lfx.schema.content_block import ContentBlock\n from lfx.schema.message import MESSAGE_SENDER_AI\n\n agent_message = Message(\n sender=MESSAGE_SENDER_AI,\n sender_name=\"Cuga\",\n properties={\"icon\": \"Bot\", \"state\": \"partial\"},\n content_blocks=[ContentBlock(title=\"Agent Steps\", contents=[])],\n session_id=self.graph.session_id,\n )\n\n # Get input text\n input_text = self.input_value.text if hasattr(self.input_value, \"text\") else str(self.input_value)\n\n # Create event iterator from call_agent\n event_iterator = self.call_agent(\n current_input=input_text, tools=self.tools or [], history_messages=self.chat_history, llm=llm_model\n )\n\n # Process events using the existing event processing system\n from lfx.base.agents.events import process_agent_events\n\n # Create a wrapper that forces DB updates for event handlers\n # This ensures the UI can see loading steps in real-time via polling\n async def force_db_update_send_message(message, id_=None, *, skip_db_update=False): # noqa: ARG001\n # Always persist to DB so polling-based UI shows loading steps in real-time\n content_blocks_len = len(message.content_blocks[0].contents) if message.content_blocks else 0\n logger.debug(\n f\"[CUGA] Sending message update - state: {message.properties.state}, \"\n f\"content_blocks: {content_blocks_len}\"\n )\n result = await self.send_message(message, id_=id_, skip_db_update=False)\n logger.debug(f\"[CUGA] Message saved to DB with ID: {result.id if result else 'None'}\")\n return result\n\n result = await process_agent_events(\n event_iterator, agent_message, cast(\"SendMessageFunctionType\", force_db_update_send_message)\n )\n\n logger.info(\"[CUGA] Agent run finished successfully.\")\n logger.info(f\"[CUGA] Agent output: {result}\")\n\n # Store result for potential JSON output\n self._agent_result = result\n\n except Exception as e:\n logger.error(f\"[CUGA] Error in message_response: {e}\")\n logger.error(f\"An error occurred: {e!s}\")\n logger.error(f\"Traceback: {traceback.format_exc()}\")\n\n # Check if error is related to Playwright installation\n error_str = str(e).lower()\n if \"playwright install\" in error_str:\n msg = (\n \"Playwright is not installed. Please install Playwright Chromium using: \"\n \"uv run -m playwright install chromium\"\n )\n raise ValueError(msg) from e\n\n raise\n else:\n return result\n\n async def get_agent_requirements(self):\n \"\"\"Get the agent requirements for the Cuga agent.\n\n This method retrieves and configures all necessary components for the agent\n including the language model, chat history, and tools.\n\n Returns:\n tuple: A tuple containing (llm_model, chat_history, tools)\n\n Raises:\n ValueError: If no language model is selected or if there's an error\n in model initialization\n \"\"\"\n llm_model, display_name = await self.get_llm()\n if llm_model is None:\n msg = \"No language model selected. Please choose a model to proceed.\"\n raise ValueError(msg)\n self.model_name = get_model_name(llm_model, display_name=display_name)\n\n # Get memory data\n self.chat_history = await self.get_memory_data()\n if isinstance(self.chat_history, Message):\n self.chat_history = [self.chat_history]\n\n # Add current date tool if enabled\n if self.add_current_date_tool:\n if not isinstance(self.tools, list):\n self.tools = []\n current_date_tool = (await CurrentDateComponent(**self.get_base_args()).to_toolkit()).pop(0)\n if not isinstance(current_date_tool, StructuredTool):\n msg = \"CurrentDateComponent must be converted to a StructuredTool\"\n raise TypeError(msg)\n self.tools.append(current_date_tool)\n\n # --- ADDED LOGGING START ---\n logger.info(\"[CUGA] Retrieved agent requirements: LLM, chat history, and tools.\")\n logger.info(f\"[CUGA] LLM model: {self.model_name}\")\n logger.info(f\"[CUGA] Number of chat history messages: {len(self.chat_history)}\")\n logger.info(f\"[CUGA] Tools available: {[tool.name for tool in self.tools]}\")\n logger.info(f\"[CUGA] metadata: {[tool.metadata for tool in self.tools]}\")\n # --- ADDED LOGGING END ---\n\n return llm_model, self.chat_history, self.tools\n\n def _preprocess_schema(self, schema):\n \"\"\"Preprocess schema to ensure correct data types for build_model_from_schema.\n\n This method validates and normalizes the output schema to ensure it's compatible\n with the Pydantic model building process.\n\n Args:\n schema: List of schema field definitions\n\n Returns:\n list: Processed schema with validated data types\n \"\"\"\n processed_schema = []\n for field in schema:\n processed_field = {\n \"name\": str(field.get(\"name\", \"field\")),\n \"type\": str(field.get(\"type\", \"str\")),\n \"description\": str(field.get(\"description\", \"\")),\n \"multiple\": field.get(\"multiple\", False),\n }\n # Ensure multiple is handled correctly\n if isinstance(processed_field[\"multiple\"], str):\n processed_field[\"multiple\"] = processed_field[\"multiple\"].lower() in [\"true\", \"1\", \"t\", \"y\", \"yes\"]\n processed_schema.append(processed_field)\n return processed_schema\n\n async def build_structured_output_base(self, content: str):\n \"\"\"Build structured output with optional BaseModel validation.\n\n This method parses JSON content from the agent response and optionally validates\n it against a provided schema using Pydantic models.\n\n Args:\n content: The raw content from the agent response\n\n Returns:\n dict or list: Parsed and optionally validated JSON data\n \"\"\"\n # --- ADDED LOGGING START ---\n logger.info(f\"[CUGA] Attempting to build structured output from content: {content}\")\n # --- ADDED LOGGING END ---\n\n json_pattern = r\"\\{.*\\}\"\n schema_error_msg = \"Try setting an output schema\"\n\n # Try to parse content as JSON first\n json_data = None\n try:\n json_data = json.loads(content)\n except json.JSONDecodeError:\n json_match = re.search(json_pattern, content, re.DOTALL)\n if json_match:\n try:\n json_data = json.loads(json_match.group())\n except json.JSONDecodeError:\n logger.warning(\"[CUGA] Could not parse content as JSON even with regex match.\")\n return {\"content\": content, \"error\": schema_error_msg}\n else:\n logger.warning(\"[CUGA] No JSON pattern found in the content.\")\n return {\"content\": content, \"error\": schema_error_msg}\n\n # If no output schema provided, return parsed JSON without validation\n if not hasattr(self, \"output_schema\") or not self.output_schema or len(self.output_schema) == 0:\n logger.info(\"[CUGA] No output schema provided. Returning parsed JSON without validation.\")\n return json_data\n\n # Use BaseModel validation with schema\n try:\n logger.info(\"[CUGA] Output schema detected. Validating structured output against schema.\")\n processed_schema = self._preprocess_schema(self.output_schema)\n output_model = build_model_from_schema(processed_schema)\n\n # Validate against the schema\n if isinstance(json_data, list):\n # Multiple objects\n validated_objects = []\n for item in json_data:\n try:\n validated_obj = output_model.model_validate(item)\n validated_objects.append(validated_obj.model_dump())\n except ValidationError as e:\n await logger.aerror(f\"[CUGA] Validation error for item: {e}\")\n validated_objects.append({\"data\": item, \"validation_error\": str(e)})\n return validated_objects\n\n # Single object\n try:\n validated_obj = output_model.model_validate(json_data)\n return [validated_obj.model_dump()]\n except ValidationError as e:\n await logger.aerror(f\"[CUGA] Validation error: {e}\")\n return [{\"data\": json_data, \"validation_error\": str(e)}]\n\n except (TypeError, ValueError) as e:\n await logger.aerror(f\"[CUGA] Error building structured output: {e}\")\n return json_data\n\n async def json_response(self) -> Data:\n \"\"\"Convert agent response to structured JSON Data output with schema validation.\n\n This method generates a structured JSON response by combining system instructions,\n format instructions, and schema information, then processing the agent's response\n through structured output validation.\n\n Returns:\n Data: Structured data object containing the validated JSON response\n\n Raises:\n ExceptionWithMessageError: If there's an error in structured processing\n ValueError: If there's a validation error\n TypeError: If there's a type error in processing\n \"\"\"\n # --- ADDED LOGGING START ---\n logger.info(\"[CUGA] Starting Cuga agent run for json_response.\")\n logger.info(f\"[CUGA] Agent input value: {self.input_value}\")\n # --- ADDED LOGGING END ---\n\n try:\n system_components = []\n\n # 1. Agent Instructions\n agent_instructions = getattr(self, \"instructions\", \"\") or \"\"\n if agent_instructions:\n system_components.append(f\"{agent_instructions}\")\n\n # 3. Format Instructions\n format_instructions = getattr(self, \"format_instructions\", \"\") or \"\"\n if format_instructions:\n system_components.append(f\"Format instructions: {format_instructions}\")\n\n # 4. Schema Information\n if hasattr(self, \"output_schema\") and self.output_schema and len(self.output_schema) > 0:\n try:\n processed_schema = self._preprocess_schema(self.output_schema)\n output_model = build_model_from_schema(processed_schema)\n schema_dict = output_model.model_json_schema()\n schema_info = (\n \"You are given some text that may include format instructions, \"\n \"explanations, or other content alongside a JSON schema.\\n\\n\"\n \"Your task:\\n\"\n \"- Extract only the JSON schema.\\n\"\n \"- Return it as valid JSON.\\n\"\n \"- Do not include format instructions, explanations, or extra text.\\n\\n\"\n \"Input:\\n\"\n f\"{json.dumps(schema_dict, indent=2)}\\n\\n\"\n \"Output (only JSON schema):\"\n )\n system_components.append(schema_info)\n except (ValidationError, ValueError, TypeError, KeyError) as e:\n await logger.aerror(f\"[CUGA] Could not build schema for prompt: {e}\", exc_info=True)\n\n # Combine all components\n combined_instructions = \"\\n\\n\".join(system_components) if system_components else \"\"\n\n llm_model, self.chat_history, self.tools = await self.get_agent_requirements()\n\n # Use call_agent for structured response\n input_text = self.input_value.text if hasattr(self.input_value, \"text\") else str(self.input_value)\n\n # Modify the input to include structured output requirements\n structured_input = (\n f\"{combined_instructions}\\n\\nUser Input: {input_text}\\n\\nPlease provide a structured JSON response.\"\n )\n\n logger.info(f\"[CUGA] Combined system prompt for structured agent: {combined_instructions}\")\n\n content = await self.call_agent(\n current_input=structured_input,\n tools=self.tools or [],\n history_messages=self.chat_history,\n llm=llm_model,\n )\n\n logger.info(f\"[CUGA] Structured agent result: {content}\")\n\n except (ExceptionWithMessageError, ValueError, TypeError, NotImplementedError, AttributeError) as e:\n await logger.aerror(f\"[CUGA] Error with structured agent: {e}\")\n content_str = \"No content returned from Cuga agent\"\n return Data(data={\"content\": content_str, \"error\": str(e)})\n\n # Process with structured output validation\n try:\n structured_output = await self.build_structured_output_base(content)\n\n # Handle different output formats\n if isinstance(structured_output, list) and structured_output:\n if len(structured_output) == 1:\n logger.info(\"[CUGA] Structured output is a single object in a list.\")\n logger.info(f\"[CUGA] Final structured output: {structured_output[0]}\")\n return Data(data=structured_output[0])\n logger.info(\"[CUGA] Structured output is a list of multiple objects.\")\n logger.info(f\"[CUGA] Final structured output: {structured_output}\")\n return Data(data={\"results\": structured_output})\n if isinstance(structured_output, dict):\n logger.info(\"[CUGA] Structured output is a single dictionary.\")\n logger.info(f\"[CUGA] Final structured output: {structured_output}\")\n return Data(data=structured_output)\n logger.info(\"[CUGA] Structured output is not a list or dictionary. Returning raw content.\")\n logger.info(f\"[CUGA] Final output content: {content}\")\n return Data(data={\"content\": content})\n\n except (ValueError, TypeError) as e:\n await logger.aerror(f\"[CUGA] Error in structured output processing: {e}\")\n return Data(data={\"content\": content, \"error\": str(e)})\n\n async def get_memory_data(self):\n \"\"\"Retrieve chat history messages.\n\n This method fetches the conversation history from memory, excluding the current\n input message to avoid duplication.\n\n Returns:\n list: List of Message objects representing the chat history\n \"\"\"\n logger.info(\"[CUGA] Retrieving chat history messages.\")\n messages = (\n await MemoryComponent(**self.get_base_args())\n .set(session_id=self.graph.session_id, order=\"Ascending\", n_messages=self.n_messages)\n .retrieve_messages()\n )\n return [\n message for message in messages if getattr(message, \"id\", None) != getattr(self.input_value, \"id\", None)\n ]\n\n async def get_llm(self):\n \"\"\"Get language model for the Cuga agent.\n\n This method initializes and configures the language model based on the\n selected provider and parameters.\n\n Returns:\n tuple: A tuple containing (llm_model, display_name)\n\n Raises:\n ValueError: If the model provider is invalid or model initialization fails\n \"\"\"\n logger.info(\"[CUGA] Getting language model for the agent.\")\n logger.info(f\"[CUGA] Requested LLM provider: {self.agent_llm}\")\n\n if not isinstance(self.agent_llm, str):\n logger.info(\"[CUGA] Agent LLM is already a model instance.\")\n return self.agent_llm, None\n\n try:\n provider_info = MODEL_PROVIDERS_DICT.get(self.agent_llm)\n if not provider_info:\n msg = f\"Invalid model provider: {self.agent_llm}\"\n raise ValueError(msg)\n\n component_class = provider_info.get(\"component_class\")\n display_name = component_class.display_name\n inputs = provider_info.get(\"inputs\")\n prefix = provider_info.get(\"prefix\", \"\")\n logger.info(f\"[CUGA] Successfully built LLM model from provider: {self.agent_llm}\")\n return self._build_llm_model(component_class, inputs, prefix), display_name\n\n except (AttributeError, ValueError, TypeError, RuntimeError) as e:\n await logger.aerror(f\"[CUGA] Error building {self.agent_llm} language model: {e!s}\")\n msg = f\"Failed to initialize language model: {e!s}\"\n raise ValueError(msg) from e\n\n def _build_llm_model(self, component, inputs, prefix=\"\"):\n \"\"\"Build LLM model with parameters.\n\n This method constructs a language model instance using the provided component\n class and input parameters.\n\n Args:\n component: The LLM component class to instantiate\n inputs: List of input field definitions\n prefix: Optional prefix for parameter names\n\n Returns:\n The configured LLM model instance\n \"\"\"\n model_kwargs = {}\n for input_ in inputs:\n if hasattr(self, f\"{prefix}{input_.name}\"):\n model_kwargs[input_.name] = getattr(self, f\"{prefix}{input_.name}\")\n return component.set(**model_kwargs).build_model()\n\n def set_component_params(self, component):\n \"\"\"Set component parameters based on provider.\n\n This method configures component parameters according to the selected\n model provider's requirements.\n\n Args:\n component: The component to configure\n\n Returns:\n The configured component\n \"\"\"\n provider_info = MODEL_PROVIDERS_DICT.get(self.agent_llm)\n if provider_info:\n inputs = provider_info.get(\"inputs\")\n prefix = provider_info.get(\"prefix\")\n model_kwargs = {}\n for input_ in inputs:\n if hasattr(self, f\"{prefix}{input_.name}\"):\n model_kwargs[input_.name] = getattr(self, f\"{prefix}{input_.name}\")\n return component.set(**model_kwargs)\n return component\n\n def delete_fields(self, build_config: dotdict, fields: dict | list[str]) -> None:\n \"\"\"Delete specified fields from build_config.\n\n This method removes unwanted fields from the build configuration.\n\n Args:\n build_config: The build configuration dictionary\n fields: Fields to remove (can be dict or list of strings)\n \"\"\"\n for field in fields:\n build_config.pop(field, None)\n\n def update_input_types(self, build_config: dotdict) -> dotdict:\n \"\"\"Update input types for all fields in build_config.\n\n This method ensures all fields in the build configuration have proper\n input types defined.\n\n Args:\n build_config: The build configuration to update\n\n Returns:\n dotdict: Updated build configuration with input types\n \"\"\"\n for key, value in build_config.items():\n if isinstance(value, dict):\n if value.get(\"input_types\") is None:\n build_config[key][\"input_types\"] = []\n elif hasattr(value, \"input_types\") and value.input_types is None:\n value.input_types = []\n return build_config\n\n async def update_build_config(\n self, build_config: dotdict, field_value: str, field_name: str | None = None\n ) -> dotdict:\n \"\"\"Update build configuration based on field changes.\n\n This method dynamically updates the component's build configuration when\n certain fields change, particularly the model provider selection.\n\n Args:\n build_config: The current build configuration\n field_value: The new value for the field\n field_name: The name of the field being changed\n\n Returns:\n dotdict: Updated build configuration\n\n Raises:\n ValueError: If required keys are missing from the configuration\n \"\"\"\n if field_name in (\"agent_llm\",):\n build_config[\"agent_llm\"][\"value\"] = field_value\n provider_info = MODEL_PROVIDERS_DICT.get(field_value)\n if provider_info:\n component_class = provider_info.get(\"component_class\")\n if component_class and hasattr(component_class, \"update_build_config\"):\n build_config = await update_component_build_config(\n component_class, build_config, field_value, \"model_name\"\n )\n\n provider_configs: dict[str, tuple[dict, list[dict]]] = {\n provider: (\n MODEL_PROVIDERS_DICT[provider][\"fields\"],\n [\n MODEL_PROVIDERS_DICT[other_provider][\"fields\"]\n for other_provider in MODEL_PROVIDERS_DICT\n if other_provider != provider\n ],\n )\n for provider in MODEL_PROVIDERS_DICT\n }\n if field_value in provider_configs:\n fields_to_add, fields_to_delete = provider_configs[field_value]\n\n # Delete fields from other providers\n for fields in fields_to_delete:\n self.delete_fields(build_config, fields)\n\n # Add provider-specific fields\n if field_value == \"OpenAI\" and not any(field in build_config for field in fields_to_add):\n build_config.update(fields_to_add)\n else:\n build_config.update(fields_to_add)\n build_config[\"agent_llm\"][\"input_types\"] = []\n elif field_value == \"Custom\":\n # Delete all provider fields\n self.delete_fields(build_config, ALL_PROVIDER_FIELDS)\n # Update with custom component\n custom_component = DropdownInput(\n name=\"agent_llm\",\n display_name=\"Language Model\",\n options=[*sorted(MODEL_PROVIDERS), \"Custom\"],\n value=\"Custom\",\n real_time_refresh=True,\n input_types=[\"LanguageModel\"],\n options_metadata=[MODELS_METADATA[key] for key in sorted(MODELS_METADATA.keys())]\n + [{\"icon\": \"brain\"}],\n )\n build_config.update({\"agent_llm\": custom_component.to_dict()})\n\n # Update input types for all fields\n build_config = self.update_input_types(build_config)\n\n # Validate required keys\n default_keys = [\n \"code\",\n \"_type\",\n \"agent_llm\",\n \"tools\",\n \"input_value\",\n \"add_current_date_tool\",\n \"policies\",\n \"agent_description\",\n \"max_iterations\",\n \"handle_parsing_errors\",\n \"verbose\",\n ]\n missing_keys = [key for key in default_keys if key not in build_config]\n if missing_keys:\n msg = f\"Missing required keys in build_config: {missing_keys}\"\n raise ValueError(msg)\n\n if (\n isinstance(self.agent_llm, str)\n and self.agent_llm in MODEL_PROVIDERS_DICT\n and field_name in MODEL_DYNAMIC_UPDATE_FIELDS\n ):\n provider_info = MODEL_PROVIDERS_DICT.get(self.agent_llm)\n if provider_info:\n component_class = provider_info.get(\"component_class\")\n component_class = self.set_component_params(component_class)\n prefix = provider_info.get(\"prefix\")\n if component_class and hasattr(component_class, \"update_build_config\"):\n if isinstance(field_name, str) and isinstance(prefix, str):\n field_name = field_name.replace(prefix, \"\")\n build_config = await update_component_build_config(\n component_class, build_config, field_value, \"model_name\"\n )\n return dotdict({k: v.to_dict() if hasattr(v, \"to_dict\") else v for k, v in build_config.items()})\n\n async def _get_tools(self) -> list[Tool]:\n \"\"\"Build agent tools.\n\n This method constructs the list of tools available to the Cuga agent,\n including component tools and any additional configured tools.\n\n Returns:\n list[Tool]: List of available tools for the agent\n \"\"\"\n logger.info(\"[CUGA] Building agent tools.\")\n component_toolkit = _get_component_toolkit()\n tools_names = self._build_tools_names()\n agent_description = self.get_tool_description()\n description = f\"{agent_description}{tools_names}\"\n tools = component_toolkit(component=self).get_tools(\n tool_name=\"Call_CugaAgent\", tool_description=description, callbacks=self.get_langchain_callbacks()\n )\n if hasattr(self, \"tools_metadata\"):\n tools = component_toolkit(component=self, metadata=self.tools_metadata).update_tools_metadata(tools=tools)\n logger.info(f\"[CUGA] Tools built: {[tool.name for tool in tools]}\")\n return tools\n"},"format_instructions":{"_input_type":"MultilineInput","advanced":true,"copy_field":false,"display_name":"Output Format Instructions","dynamic":false,"info":"Generic Template for structured output formatting. Valid only with Structured response.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"format_instructions","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"You are an AI that extracts structured JSON objects from unstructured text. Use a predefined schema with expected types (str, int, float, bool, dict). Extract ALL relevant instances that match the schema - if multiple patterns exist, capture them all. Fill missing or ambiguous values with defaults: null for missing values. Remove exact duplicates but keep variations that have different field values. Always return valid JSON in the expected format, never throw errors. If multiple objects can be extracted, return them all in the structured format."},"handle_parsing_errors":{"_input_type":"BoolInput","advanced":true,"display_name":"Handle Parse Errors","dynamic":false,"info":"Should the Agent fix errors when reading user input for better processing?","list":false,"list_add_label":"Add More","name":"handle_parsing_errors","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true},"input_value":{"_input_type":"MessageInput","advanced":false,"display_name":"Input","dynamic":false,"info":"The input provided by the user for the agent to process.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"input_value","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"max_iterations":{"_input_type":"IntInput","advanced":true,"display_name":"Max Iterations","dynamic":false,"info":"The maximum number of attempts the agent can make to complete its task before it stops.","list":false,"list_add_label":"Add More","name":"max_iterations","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":15},"max_retries":{"_input_type":"IntInput","advanced":true,"display_name":"Max Retries","dynamic":false,"info":"The maximum number of retries to make when generating.","list":false,"list_add_label":"Add More","name":"max_retries","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":5},"max_tokens":{"_input_type":"IntInput","advanced":true,"display_name":"Max Tokens","dynamic":false,"info":"The maximum number of tokens to generate. Set to 0 for unlimited tokens.","list":false,"list_add_label":"Add More","name":"max_tokens","placeholder":"","range_spec":{"max":128000.0,"min":0.0,"step":0.1,"step_type":"float"},"required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":""},"model_kwargs":{"_input_type":"DictInput","advanced":true,"display_name":"Model Kwargs","dynamic":false,"info":"Additional keyword arguments to pass to the model.","list":false,"list_add_label":"Add More","name":"model_kwargs","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"type":"dict","value":{}},"model_name":{"_input_type":"DropdownInput","advanced":false,"combobox":true,"dialog_inputs":{},"display_name":"Model Name","dynamic":false,"external_options":{},"info":"To see the model names, first choose a provider. Then, enter your API key and click the refresh button next to the model name.","name":"model_name","options":["gpt-4o-mini","gpt-4o","gpt-4.1","gpt-4.1-mini","gpt-4.1-nano","gpt-4-turbo","gpt-4-turbo-preview","gpt-4","gpt-3.5-turbo","gpt-5","gpt-5-mini","gpt-5-nano","gpt-5-chat-latest","o1","o3-mini","o3","o3-pro","o4-mini","o4-mini-high"],"options_metadata":[],"placeholder":"","real_time_refresh":false,"required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"gpt-4o-mini"},"n_messages":{"_input_type":"IntInput","advanced":true,"display_name":"Number of Chat History Messages","dynamic":false,"info":"Number of chat history messages to retrieve.","list":false,"list_add_label":"Add More","name":"n_messages","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":100},"openai_api_base":{"_input_type":"StrInput","advanced":true,"display_name":"OpenAI API Base","dynamic":false,"info":"The base URL of the OpenAI API. Defaults to https://api.openai.com/v1. You can change this to use other APIs like JinaChat, LocalAI and Prem.","list":false,"list_add_label":"Add More","load_from_db":false,"name":"openai_api_base","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"output_schema":{"_input_type":"TableInput","advanced":true,"display_name":"Output Schema","dynamic":false,"info":"Schema Validation: Define the structure and data types for structured output. No validation if no output schema.","is_list":true,"list_add_label":"Add More","name":"output_schema","placeholder":"","required":false,"show":true,"table_icon":"Table","table_schema":[{"default":"field","description":"Specify the name of the output field.","display_name":"Name","edit_mode":"inline","name":"name","type":"str"},{"default":"description of field","description":"Describe the purpose of the output field.","display_name":"Description","edit_mode":"popover","name":"description","type":"str"},{"default":"str","description":"Indicate the data type of the output field (e.g., str, int, float, bool, dict).","display_name":"Type","edit_mode":"inline","name":"type","options":["str","int","float","bool","dict"],"type":"str"},{"default":"False","description":"Set to True if this output field should be a list of the specified type.","display_name":"As List","edit_mode":"inline","name":"multiple","type":"boolean"}],"title_case":false,"tool_mode":false,"trace_as_metadata":true,"trigger_icon":"Table","trigger_text":"Open table","type":"table","value":[]},"policies":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"Policies","dynamic":false,"info":"Custom instructions or policies for the agent to adhere to during its operation.\nExample:\n# Plan\n< planning instructions e.g. which tools and when to use>\n# Answer\n< final answer instructions how to answer>","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"policies","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"seed":{"_input_type":"IntInput","advanced":true,"display_name":"Seed","dynamic":false,"info":"The seed controls the reproducibility of the job.","list":false,"list_add_label":"Add More","name":"seed","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":1},"temperature":{"_input_type":"SliderInput","advanced":true,"display_name":"Temperature","dynamic":false,"info":"","max_label":"","max_label_icon":"","min_label":"","min_label_icon":"","name":"temperature","placeholder":"","range_spec":{"max":1.0,"min":0.0,"step":0.01,"step_type":"float"},"required":false,"show":true,"slider_buttons":false,"slider_buttons_options":[],"slider_input":false,"title_case":false,"tool_mode":false,"type":"slider","value":0.1},"timeout":{"_input_type":"IntInput","advanced":true,"display_name":"Timeout","dynamic":false,"info":"The timeout for requests to OpenAI completion API.","list":false,"list_add_label":"Add More","name":"timeout","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":700},"tools":{"_input_type":"HandleInput","advanced":false,"display_name":"Tools","dynamic":false,"info":"These are the tools that the agent can use to help with tasks.","input_types":["Tool"],"list":true,"list_add_label":"Add More","name":"tools","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"verbose":{"_input_type":"BoolInput","advanced":true,"display_name":"Verbose","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"verbose","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true},"web_apps":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"Web applications","dynamic":false,"info":"Define a list of web applications that cuga will open when enable browser is true. Currently only supports one web application. Example: https://example.com","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"web_apps","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"MCPTools":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Connect to an MCP server to use its tools.","display_name":"MCP Tools","documentation":"https://docs.langflow.org/mcp-client","edited":false,"field_order":["mcp_server","use_cache","verify_ssl","tool","tool_placeholder"],"frozen":false,"icon":"Mcp","legacy":false,"metadata":{"code_hash":"81b1338be859","dependencies":{"dependencies":[{"name":"langchain_core","version":"0.3.79"},{"name":"lfx","version":null},{"name":"langflow","version":null}],"total_dependencies":3},"module":"lfx.components.agents.mcp_component.MCPToolsComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Response","group_outputs":false,"method":"build_output","name":"response","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from __future__ import annotations\n\nimport asyncio\nimport json\nimport uuid\nfrom typing import Any\n\nfrom langchain_core.tools import StructuredTool # noqa: TC002\n\nfrom lfx.base.agents.utils import maybe_unflatten_dict, safe_cache_get, safe_cache_set\nfrom lfx.base.mcp.util import (\n MCPStdioClient,\n MCPStreamableHttpClient,\n create_input_schema_from_json_schema,\n update_tools,\n)\nfrom lfx.custom.custom_component.component_with_cache import ComponentWithCache\nfrom lfx.inputs.inputs import InputTypes # noqa: TC001\nfrom lfx.io import BoolInput, DropdownInput, McpInput, MessageTextInput, Output\nfrom lfx.io.schema import flatten_schema, schema_to_langflow_inputs\nfrom lfx.log.logger import logger\nfrom lfx.schema.dataframe import DataFrame\nfrom lfx.schema.message import Message\nfrom lfx.services.deps import get_settings_service, get_storage_service, session_scope\n\n\nclass MCPToolsComponent(ComponentWithCache):\n schema_inputs: list = []\n tools: list[StructuredTool] = []\n _not_load_actions: bool = False\n _tool_cache: dict = {}\n _last_selected_server: str | None = None # Cache for the last selected server\n\n def __init__(self, **data) -> None:\n super().__init__(**data)\n # Initialize cache keys to avoid CacheMiss when accessing them\n self._ensure_cache_structure()\n\n # Initialize clients with access to the component cache\n self.stdio_client: MCPStdioClient = MCPStdioClient(component_cache=self._shared_component_cache)\n self.streamable_http_client: MCPStreamableHttpClient = MCPStreamableHttpClient(\n component_cache=self._shared_component_cache\n )\n\n def _ensure_cache_structure(self):\n \"\"\"Ensure the cache has the required structure.\"\"\"\n # Check if servers key exists and is not CacheMiss\n servers_value = safe_cache_get(self._shared_component_cache, \"servers\")\n if servers_value is None:\n safe_cache_set(self._shared_component_cache, \"servers\", {})\n\n # Check if last_selected_server key exists and is not CacheMiss\n last_server_value = safe_cache_get(self._shared_component_cache, \"last_selected_server\")\n if last_server_value is None:\n safe_cache_set(self._shared_component_cache, \"last_selected_server\", \"\")\n\n default_keys: list[str] = [\n \"code\",\n \"_type\",\n \"tool_mode\",\n \"tool_placeholder\",\n \"mcp_server\",\n \"tool\",\n \"use_cache\",\n \"verify_ssl\",\n ]\n\n display_name = \"MCP Tools\"\n description = \"Connect to an MCP server to use its tools.\"\n documentation: str = \"https://docs.langflow.org/mcp-client\"\n icon = \"Mcp\"\n name = \"MCPTools\"\n\n inputs = [\n McpInput(\n name=\"mcp_server\",\n display_name=\"MCP Server\",\n info=\"Select the MCP Server that will be used by this component\",\n real_time_refresh=True,\n ),\n BoolInput(\n name=\"use_cache\",\n display_name=\"Use Cached Server\",\n info=(\n \"Enable caching of MCP Server and tools to improve performance. \"\n \"Disable to always fetch fresh tools and server updates.\"\n ),\n value=False,\n advanced=True,\n ),\n BoolInput(\n name=\"verify_ssl\",\n display_name=\"Verify SSL Certificate\",\n info=(\n \"Enable SSL certificate verification for HTTPS connections. \"\n \"Disable only for development/testing with self-signed certificates.\"\n ),\n value=True,\n advanced=True,\n ),\n DropdownInput(\n name=\"tool\",\n display_name=\"Tool\",\n options=[],\n value=\"\",\n info=\"Select the tool to execute\",\n show=False,\n required=True,\n real_time_refresh=True,\n ),\n MessageTextInput(\n name=\"tool_placeholder\",\n display_name=\"Tool Placeholder\",\n info=\"Placeholder for the tool\",\n value=\"\",\n show=False,\n tool_mode=False,\n ),\n ]\n\n outputs = [\n Output(display_name=\"Response\", name=\"response\", method=\"build_output\"),\n ]\n\n async def _validate_schema_inputs(self, tool_obj) -> list[InputTypes]:\n \"\"\"Validate and process schema inputs for a tool.\"\"\"\n try:\n if not tool_obj or not hasattr(tool_obj, \"args_schema\"):\n msg = \"Invalid tool object or missing input schema\"\n raise ValueError(msg)\n\n flat_schema = flatten_schema(tool_obj.args_schema.schema())\n input_schema = create_input_schema_from_json_schema(flat_schema)\n if not input_schema:\n msg = f\"Empty input schema for tool '{tool_obj.name}'\"\n raise ValueError(msg)\n\n schema_inputs = schema_to_langflow_inputs(input_schema)\n if not schema_inputs:\n msg = f\"No input parameters defined for tool '{tool_obj.name}'\"\n await logger.awarning(msg)\n return []\n\n except Exception as e:\n msg = f\"Error validating schema inputs: {e!s}\"\n await logger.aexception(msg)\n raise ValueError(msg) from e\n else:\n return schema_inputs\n\n async def update_tool_list(self, mcp_server_value=None):\n # Accepts mcp_server_value as dict {name, config} or uses self.mcp_server\n mcp_server = mcp_server_value if mcp_server_value is not None else getattr(self, \"mcp_server\", None)\n server_name = None\n server_config_from_value = None\n if isinstance(mcp_server, dict):\n server_name = mcp_server.get(\"name\")\n server_config_from_value = mcp_server.get(\"config\")\n else:\n server_name = mcp_server\n if not server_name:\n self.tools = []\n return [], {\"name\": server_name, \"config\": server_config_from_value}\n\n # Check if caching is enabled, default to False\n use_cache = getattr(self, \"use_cache\", False)\n\n # Use shared cache if available and caching is enabled\n cached = None\n if use_cache:\n servers_cache = safe_cache_get(self._shared_component_cache, \"servers\", {})\n cached = servers_cache.get(server_name) if isinstance(servers_cache, dict) else None\n\n if cached is not None:\n try:\n self.tools = cached[\"tools\"]\n self.tool_names = cached[\"tool_names\"]\n self._tool_cache = cached[\"tool_cache\"]\n server_config_from_value = cached[\"config\"]\n except (TypeError, KeyError, AttributeError) as e:\n # Handle corrupted cache data by clearing it and continuing to fetch fresh tools\n msg = f\"Unable to use cached data for MCP Server{server_name}: {e}\"\n await logger.awarning(msg)\n # Clear the corrupted cache entry\n current_servers_cache = safe_cache_get(self._shared_component_cache, \"servers\", {})\n if isinstance(current_servers_cache, dict) and server_name in current_servers_cache:\n current_servers_cache.pop(server_name)\n safe_cache_set(self._shared_component_cache, \"servers\", current_servers_cache)\n else:\n return self.tools, {\"name\": server_name, \"config\": server_config_from_value}\n\n try:\n try:\n from langflow.api.v2.mcp import get_server\n from langflow.services.database.models.user.crud import get_user_by_id\n except ImportError as e:\n msg = (\n \"Langflow MCP server functionality is not available. \"\n \"This feature requires the full Langflow installation.\"\n )\n raise ImportError(msg) from e\n async with session_scope() as db:\n if not self.user_id:\n msg = \"User ID is required for fetching MCP tools.\"\n raise ValueError(msg)\n current_user = await get_user_by_id(db, self.user_id)\n\n # Try to get server config from DB/API\n server_config = await get_server(\n server_name,\n current_user,\n db,\n storage_service=get_storage_service(),\n settings_service=get_settings_service(),\n )\n\n # If get_server returns empty but we have a config, use it\n if not server_config and server_config_from_value:\n server_config = server_config_from_value\n\n if not server_config:\n self.tools = []\n return [], {\"name\": server_name, \"config\": server_config}\n\n # Add verify_ssl option to server config if not present\n if \"verify_ssl\" not in server_config:\n verify_ssl = getattr(self, \"verify_ssl\", True)\n server_config[\"verify_ssl\"] = verify_ssl\n\n _, tool_list, tool_cache = await update_tools(\n server_name=server_name,\n server_config=server_config,\n mcp_stdio_client=self.stdio_client,\n mcp_streamable_http_client=self.streamable_http_client,\n )\n\n self.tool_names = [tool.name for tool in tool_list if hasattr(tool, \"name\")]\n self._tool_cache = tool_cache\n self.tools = tool_list\n\n # Cache the result only if caching is enabled\n if use_cache:\n cache_data = {\n \"tools\": tool_list,\n \"tool_names\": self.tool_names,\n \"tool_cache\": tool_cache,\n \"config\": server_config,\n }\n\n # Safely update the servers cache\n current_servers_cache = safe_cache_get(self._shared_component_cache, \"servers\", {})\n if isinstance(current_servers_cache, dict):\n current_servers_cache[server_name] = cache_data\n safe_cache_set(self._shared_component_cache, \"servers\", current_servers_cache)\n\n except (TimeoutError, asyncio.TimeoutError) as e:\n msg = f\"Timeout updating tool list: {e!s}\"\n await logger.aexception(msg)\n raise TimeoutError(msg) from e\n except Exception as e:\n msg = f\"Error updating tool list: {e!s}\"\n await logger.aexception(msg)\n raise ValueError(msg) from e\n else:\n return tool_list, {\"name\": server_name, \"config\": server_config}\n\n async def update_build_config(self, build_config: dict, field_value: str, field_name: str | None = None) -> dict:\n \"\"\"Toggle the visibility of connection-specific fields based on the selected mode.\"\"\"\n try:\n if field_name == \"tool\":\n try:\n if len(self.tools) == 0:\n try:\n self.tools, build_config[\"mcp_server\"][\"value\"] = await self.update_tool_list()\n build_config[\"tool\"][\"options\"] = [tool.name for tool in self.tools]\n build_config[\"tool\"][\"placeholder\"] = \"Select a tool\"\n except (TimeoutError, asyncio.TimeoutError) as e:\n msg = f\"Timeout updating tool list: {e!s}\"\n await logger.aexception(msg)\n if not build_config[\"tools_metadata\"][\"show\"]:\n build_config[\"tool\"][\"show\"] = True\n build_config[\"tool\"][\"options\"] = []\n build_config[\"tool\"][\"value\"] = \"\"\n build_config[\"tool\"][\"placeholder\"] = \"Timeout on MCP server\"\n else:\n build_config[\"tool\"][\"show\"] = False\n except ValueError:\n if not build_config[\"tools_metadata\"][\"show\"]:\n build_config[\"tool\"][\"show\"] = True\n build_config[\"tool\"][\"options\"] = []\n build_config[\"tool\"][\"value\"] = \"\"\n build_config[\"tool\"][\"placeholder\"] = \"Error on MCP Server\"\n else:\n build_config[\"tool\"][\"show\"] = False\n\n if field_value == \"\":\n return build_config\n tool_obj = None\n for tool in self.tools:\n if tool.name == field_value:\n tool_obj = tool\n break\n if tool_obj is None:\n msg = f\"Tool {field_value} not found in available tools: {self.tools}\"\n await logger.awarning(msg)\n return build_config\n await self._update_tool_config(build_config, field_value)\n except Exception as e:\n build_config[\"tool\"][\"options\"] = []\n msg = f\"Failed to update tools: {e!s}\"\n raise ValueError(msg) from e\n else:\n return build_config\n elif field_name == \"mcp_server\":\n if not field_value:\n build_config[\"tool\"][\"show\"] = False\n build_config[\"tool\"][\"options\"] = []\n build_config[\"tool\"][\"value\"] = \"\"\n build_config[\"tool\"][\"placeholder\"] = \"\"\n build_config[\"tool_placeholder\"][\"tool_mode\"] = False\n self.remove_non_default_keys(build_config)\n return build_config\n\n build_config[\"tool_placeholder\"][\"tool_mode\"] = True\n\n current_server_name = field_value.get(\"name\") if isinstance(field_value, dict) else field_value\n _last_selected_server = safe_cache_get(self._shared_component_cache, \"last_selected_server\", \"\")\n\n # To avoid unnecessary updates, only proceed if the server has actually changed\n if (_last_selected_server in (current_server_name, \"\")) and build_config[\"tool\"][\"show\"]:\n if current_server_name:\n servers_cache = safe_cache_get(self._shared_component_cache, \"servers\", {})\n if isinstance(servers_cache, dict):\n cached = servers_cache.get(current_server_name)\n if cached is not None and cached.get(\"tool_names\"):\n cached_tools = cached[\"tool_names\"]\n current_tools = build_config[\"tool\"][\"options\"]\n if current_tools == cached_tools:\n return build_config\n else:\n return build_config\n\n # Determine if \"Tool Mode\" is active by checking if the tool dropdown is hidden.\n is_in_tool_mode = build_config[\"tools_metadata\"][\"show\"]\n safe_cache_set(self._shared_component_cache, \"last_selected_server\", current_server_name)\n\n # Check if tools are already cached for this server before clearing\n cached_tools = None\n if current_server_name:\n use_cache = getattr(self, \"use_cache\", True)\n if use_cache:\n servers_cache = safe_cache_get(self._shared_component_cache, \"servers\", {})\n if isinstance(servers_cache, dict):\n cached = servers_cache.get(current_server_name)\n if cached is not None:\n try:\n cached_tools = cached[\"tools\"]\n self.tools = cached_tools\n self.tool_names = cached[\"tool_names\"]\n self._tool_cache = cached[\"tool_cache\"]\n except (TypeError, KeyError, AttributeError) as e:\n # Handle corrupted cache data by ignoring it\n msg = f\"Unable to use cached data for MCP Server,{current_server_name}: {e}\"\n await logger.awarning(msg)\n cached_tools = None\n\n # Only clear tools if we don't have cached tools for the current server\n if not cached_tools:\n self.tools = [] # Clear previous tools only if no cache\n\n self.remove_non_default_keys(build_config) # Clear previous tool inputs\n\n # Only show the tool dropdown if not in tool_mode\n if not is_in_tool_mode:\n build_config[\"tool\"][\"show\"] = True\n if cached_tools:\n # Use cached tools to populate options immediately\n build_config[\"tool\"][\"options\"] = [tool.name for tool in cached_tools]\n build_config[\"tool\"][\"placeholder\"] = \"Select a tool\"\n else:\n # Show loading state only when we need to fetch tools\n build_config[\"tool\"][\"placeholder\"] = \"Loading tools...\"\n build_config[\"tool\"][\"options\"] = []\n build_config[\"tool\"][\"value\"] = uuid.uuid4()\n else:\n # Keep the tool dropdown hidden if in tool_mode\n self._not_load_actions = True\n build_config[\"tool\"][\"show\"] = False\n\n elif field_name == \"tool_mode\":\n build_config[\"tool\"][\"placeholder\"] = \"\"\n build_config[\"tool\"][\"show\"] = not bool(field_value) and bool(build_config[\"mcp_server\"])\n self.remove_non_default_keys(build_config)\n self.tool = build_config[\"tool\"][\"value\"]\n if field_value:\n self._not_load_actions = True\n else:\n build_config[\"tool\"][\"value\"] = uuid.uuid4()\n build_config[\"tool\"][\"options\"] = []\n build_config[\"tool\"][\"show\"] = True\n build_config[\"tool\"][\"placeholder\"] = \"Loading tools...\"\n elif field_name == \"tools_metadata\":\n self._not_load_actions = False\n\n except Exception as e:\n msg = f\"Error in update_build_config: {e!s}\"\n await logger.aexception(msg)\n raise ValueError(msg) from e\n else:\n return build_config\n\n def get_inputs_for_all_tools(self, tools: list) -> dict:\n \"\"\"Get input schemas for all tools.\"\"\"\n inputs = {}\n for tool in tools:\n if not tool or not hasattr(tool, \"name\"):\n continue\n try:\n flat_schema = flatten_schema(tool.args_schema.schema())\n input_schema = create_input_schema_from_json_schema(flat_schema)\n langflow_inputs = schema_to_langflow_inputs(input_schema)\n inputs[tool.name] = langflow_inputs\n except (AttributeError, ValueError, TypeError, KeyError) as e:\n msg = f\"Error getting inputs for tool {getattr(tool, 'name', 'unknown')}: {e!s}\"\n logger.exception(msg)\n continue\n return inputs\n\n def remove_input_schema_from_build_config(\n self, build_config: dict, tool_name: str, input_schema: dict[list[InputTypes], Any]\n ):\n \"\"\"Remove the input schema for the tool from the build config.\"\"\"\n # Keep only schemas that don't belong to the current tool\n input_schema = {k: v for k, v in input_schema.items() if k != tool_name}\n # Remove all inputs from other tools\n for value in input_schema.values():\n for _input in value:\n if _input.name in build_config:\n build_config.pop(_input.name)\n\n def remove_non_default_keys(self, build_config: dict) -> None:\n \"\"\"Remove non-default keys from the build config.\"\"\"\n for key in list(build_config.keys()):\n if key not in self.default_keys:\n build_config.pop(key)\n\n async def _update_tool_config(self, build_config: dict, tool_name: str) -> None:\n \"\"\"Update tool configuration with proper error handling.\"\"\"\n if not self.tools:\n self.tools, build_config[\"mcp_server\"][\"value\"] = await self.update_tool_list()\n\n if not tool_name:\n return\n\n tool_obj = next((tool for tool in self.tools if tool.name == tool_name), None)\n if not tool_obj:\n msg = f\"Tool {tool_name} not found in available tools: {self.tools}\"\n self.remove_non_default_keys(build_config)\n build_config[\"tool\"][\"value\"] = \"\"\n await logger.awarning(msg)\n return\n\n try:\n # Store current values before removing inputs\n current_values = {}\n for key, value in build_config.items():\n if key not in self.default_keys and isinstance(value, dict) and \"value\" in value:\n current_values[key] = value[\"value\"]\n\n # Get all tool inputs and remove old ones\n input_schema_for_all_tools = self.get_inputs_for_all_tools(self.tools)\n self.remove_input_schema_from_build_config(build_config, tool_name, input_schema_for_all_tools)\n\n # Get and validate new inputs\n self.schema_inputs = await self._validate_schema_inputs(tool_obj)\n if not self.schema_inputs:\n msg = f\"No input parameters to configure for tool '{tool_name}'\"\n await logger.ainfo(msg)\n return\n\n # Add new inputs to build config\n for schema_input in self.schema_inputs:\n if not schema_input or not hasattr(schema_input, \"name\"):\n msg = \"Invalid schema input detected, skipping\"\n await logger.awarning(msg)\n continue\n\n try:\n name = schema_input.name\n input_dict = schema_input.to_dict()\n input_dict.setdefault(\"value\", None)\n input_dict.setdefault(\"required\", True)\n\n build_config[name] = input_dict\n\n # Preserve existing value if the parameter name exists in current_values\n if name in current_values:\n build_config[name][\"value\"] = current_values[name]\n\n except (AttributeError, KeyError, TypeError) as e:\n msg = f\"Error processing schema input {schema_input}: {e!s}\"\n await logger.aexception(msg)\n continue\n except ValueError as e:\n msg = f\"Schema validation error for tool {tool_name}: {e!s}\"\n await logger.aexception(msg)\n self.schema_inputs = []\n return\n except (AttributeError, KeyError, TypeError) as e:\n msg = f\"Error updating tool config: {e!s}\"\n await logger.aexception(msg)\n raise ValueError(msg) from e\n\n async def build_output(self) -> DataFrame:\n \"\"\"Build output with improved error handling and validation.\"\"\"\n try:\n self.tools, _ = await self.update_tool_list()\n if self.tool != \"\":\n # Set session context for persistent MCP sessions using Langflow session ID\n session_context = self._get_session_context()\n if session_context:\n self.stdio_client.set_session_context(session_context)\n self.streamable_http_client.set_session_context(session_context)\n exec_tool = self._tool_cache[self.tool]\n tool_args = self.get_inputs_for_all_tools(self.tools)[self.tool]\n kwargs = {}\n for arg in tool_args:\n value = getattr(self, arg.name, None)\n if value is not None:\n if isinstance(value, Message):\n kwargs[arg.name] = value.text\n else:\n kwargs[arg.name] = value\n\n unflattened_kwargs = maybe_unflatten_dict(kwargs)\n\n output = await exec_tool.coroutine(**unflattened_kwargs)\n tool_content = []\n for item in output.content:\n item_dict = item.model_dump()\n item_dict = self.process_output_item(item_dict)\n tool_content.append(item_dict)\n\n if isinstance(tool_content, list) and all(isinstance(x, dict) for x in tool_content):\n return DataFrame(tool_content)\n return DataFrame(data=tool_content)\n return DataFrame(data=[{\"error\": \"You must select a tool\"}])\n except Exception as e:\n msg = f\"Error in build_output: {e!s}\"\n await logger.aexception(msg)\n raise ValueError(msg) from e\n\n def process_output_item(self, item_dict):\n \"\"\"Process the output of a tool.\"\"\"\n if item_dict.get(\"type\") == \"text\":\n text = item_dict.get(\"text\")\n try:\n return json.loads(text)\n # convert it to dict\n except json.JSONDecodeError:\n return item_dict\n return item_dict\n\n def _get_session_context(self) -> str | None:\n \"\"\"Get the Langflow session ID for MCP session caching.\"\"\"\n # Try to get session ID from the component's execution context\n if hasattr(self, \"graph\") and hasattr(self.graph, \"session_id\"):\n session_id = self.graph.session_id\n # Include server name to ensure different servers get different sessions\n server_name = \"\"\n mcp_server = getattr(self, \"mcp_server\", None)\n if isinstance(mcp_server, dict):\n server_name = mcp_server.get(\"name\", \"\")\n elif mcp_server:\n server_name = str(mcp_server)\n return f\"{session_id}_{server_name}\" if session_id else None\n return None\n\n async def _get_tools(self):\n \"\"\"Get cached tools or update if necessary.\"\"\"\n mcp_server = getattr(self, \"mcp_server\", None)\n if not self._not_load_actions:\n tools, _ = await self.update_tool_list(mcp_server)\n return tools\n return []\n"},"mcp_server":{"_input_type":"McpInput","advanced":false,"display_name":"MCP Server","dynamic":false,"info":"Select the MCP Server that will be used by this component","name":"mcp_server","placeholder":"","real_time_refresh":true,"required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"mcp","value":{}},"tool":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Tool","dynamic":false,"external_options":{},"info":"Select the tool to execute","name":"tool","options":[],"options_metadata":[],"placeholder":"","real_time_refresh":true,"required":true,"show":false,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tool_placeholder":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Tool Placeholder","dynamic":false,"info":"Placeholder for the tool","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"tool_placeholder","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"use_cache":{"_input_type":"BoolInput","advanced":true,"display_name":"Use Cached Server","dynamic":false,"info":"Enable caching of MCP Server and tools to improve performance. Disable to always fetch fresh tools and server updates.","list":false,"list_add_label":"Add More","name":"use_cache","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"verify_ssl":{"_input_type":"BoolInput","advanced":true,"display_name":"Verify SSL Certificate","dynamic":false,"info":"Enable SSL certificate verification for HTTPS connections. Disable only for development/testing with self-signed certificates.","list":false,"list_add_label":"Add More","name":"verify_ssl","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true}},"tool_mode":false}}],["aiml",{"AIMLEmbeddings":{"base_classes":["Embeddings"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Generate embeddings using the AI/ML API.","display_name":"AI/ML API Embeddings","documentation":"","edited":false,"field_order":["model_name","aiml_api_key"],"frozen":false,"icon":"AIML","legacy":false,"metadata":{"code_hash":"dae370391ba3","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.aiml.aiml_embeddings.AIMLEmbeddingsComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Embedding Model","group_outputs":false,"method":"build_embeddings","name":"embeddings","selected":"Embeddings","tool_mode":true,"types":["Embeddings"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","aiml_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"AI/ML API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"aiml_api_key","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":"AIML_API_KEY"},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.embeddings.aiml_embeddings import AIMLEmbeddingsImpl\nfrom lfx.base.embeddings.model import LCEmbeddingsModel\nfrom lfx.field_typing import Embeddings\nfrom lfx.inputs.inputs import DropdownInput\nfrom lfx.io import SecretStrInput\n\n\nclass AIMLEmbeddingsComponent(LCEmbeddingsModel):\n display_name = \"AI/ML API Embeddings\"\n description = \"Generate embeddings using the AI/ML API.\"\n icon = \"AIML\"\n name = \"AIMLEmbeddings\"\n\n inputs = [\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n options=[\n \"text-embedding-3-small\",\n \"text-embedding-3-large\",\n \"text-embedding-ada-002\",\n ],\n required=True,\n ),\n SecretStrInput(\n name=\"aiml_api_key\",\n display_name=\"AI/ML API Key\",\n value=\"AIML_API_KEY\",\n required=True,\n ),\n ]\n\n def build_embeddings(self) -> Embeddings:\n return AIMLEmbeddingsImpl(\n api_key=self.aiml_api_key,\n model=self.model_name,\n )\n"},"model_name":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Model Name","dynamic":false,"external_options":{},"info":"","name":"model_name","options":["text-embedding-3-small","text-embedding-3-large","text-embedding-ada-002"],"options_metadata":[],"placeholder":"","required":true,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"AIMLModel":{"base_classes":["LanguageModel","Message"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Generates text using AI/ML API LLMs.","display_name":"AI/ML API","documentation":"https://docs.aimlapi.com/api-reference","edited":false,"field_order":["input_value","system_message","stream","max_tokens","model_kwargs","model_name","aiml_api_base","api_key","temperature"],"frozen":false,"icon":"AIML","legacy":false,"metadata":{"code_hash":"db72277a0d5a","dependencies":{"dependencies":[{"name":"langchain_openai","version":"0.3.23"},{"name":"pydantic","version":"2.10.6"},{"name":"typing_extensions","version":"4.15.0"},{"name":"lfx","version":null},{"name":"openai","version":"1.82.1"}],"total_dependencies":5},"keywords":["model","llm","language model","large language model"],"module":"lfx.components.aiml.aiml.AIMLModelComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Model Response","group_outputs":false,"method":"text_response","name":"text_output","selected":"Message","tool_mode":true,"types":["Message"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"Language Model","group_outputs":false,"method":"build_model","name":"model_output","selected":"LanguageModel","tool_mode":true,"types":["LanguageModel"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","aiml_api_base":{"_input_type":"StrInput","advanced":true,"display_name":"AI/ML API Base","dynamic":false,"info":"The base URL of the API. Defaults to https://api.aimlapi.com . You can change this to use other APIs like JinaChat, LocalAI and Prem.","list":false,"list_add_label":"Add More","load_from_db":false,"name":"aiml_api_base","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"AI/ML API Key","dynamic":false,"info":"The AI/ML API Key to use for the OpenAI model.","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":"AIML_API_KEY"},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\nfrom typing_extensions import override\n\nfrom lfx.base.models.aiml_constants import AimlModels\nfrom lfx.base.models.model import LCModelComponent\nfrom lfx.field_typing import LanguageModel\nfrom lfx.field_typing.range_spec import RangeSpec\nfrom lfx.inputs.inputs import (\n DictInput,\n DropdownInput,\n IntInput,\n SecretStrInput,\n SliderInput,\n StrInput,\n)\n\n\nclass AIMLModelComponent(LCModelComponent):\n display_name = \"AI/ML API\"\n description = \"Generates text using AI/ML API LLMs.\"\n icon = \"AIML\"\n name = \"AIMLModel\"\n documentation = \"https://docs.aimlapi.com/api-reference\"\n\n inputs = [\n *LCModelComponent.get_base_inputs(),\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(name=\"model_kwargs\", display_name=\"Model Kwargs\", advanced=True),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=[],\n refresh_button=True,\n ),\n StrInput(\n name=\"aiml_api_base\",\n display_name=\"AI/ML API Base\",\n advanced=True,\n info=\"The base URL of the API. Defaults to https://api.aimlapi.com . \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"AI/ML API Key\",\n info=\"The AI/ML API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"AIML_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\",\n display_name=\"Temperature\",\n value=0.1,\n range_spec=RangeSpec(min=0, max=2, step=0.01),\n ),\n ]\n\n @override\n def update_build_config(self, build_config: dict, field_value: str, field_name: str | None = None):\n if field_name in {\"api_key\", \"aiml_api_base\", \"model_name\"}:\n aiml = AimlModels()\n aiml.get_aiml_models()\n build_config[\"model_name\"][\"options\"] = aiml.chat_models\n return build_config\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n aiml_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n aiml_api_base = self.aiml_api_base or \"https://api.aimlapi.com/v2\"\n\n openai_api_key = aiml_api_key.get_secret_value() if isinstance(aiml_api_key, SecretStr) else aiml_api_key\n\n # TODO: Once OpenAI fixes their o1 models, this part will need to be removed\n # to work correctly with o1 temperature settings.\n if \"o1\" in model_name:\n temperature = 1\n\n return ChatOpenAI(\n model=model_name,\n temperature=temperature,\n api_key=openai_api_key,\n base_url=aiml_api_base,\n max_tokens=max_tokens or None,\n **model_kwargs,\n )\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai.error import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.json_body.get(\"error\", {}).get(\"message\", \"\")\n if message:\n return message\n return None\n"},"input_value":{"_input_type":"MessageInput","advanced":false,"display_name":"Input","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"input_value","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"max_tokens":{"_input_type":"IntInput","advanced":true,"display_name":"Max Tokens","dynamic":false,"info":"The maximum number of tokens to generate. Set to 0 for unlimited tokens.","list":false,"list_add_label":"Add More","name":"max_tokens","placeholder":"","range_spec":{"max":128000.0,"min":0.0,"step":0.1,"step_type":"float"},"required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":""},"model_kwargs":{"_input_type":"DictInput","advanced":true,"display_name":"Model Kwargs","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"model_kwargs","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"type":"dict","value":{}},"model_name":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Model Name","dynamic":false,"external_options":{},"info":"","name":"model_name","options":[],"options_metadata":[],"placeholder":"","refresh_button":true,"required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"stream":{"_input_type":"BoolInput","advanced":true,"display_name":"Stream","dynamic":false,"info":"Stream the response from the model. Streaming works only in Chat.","list":false,"list_add_label":"Add More","name":"stream","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"system_message":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"System Message","dynamic":false,"info":"System message to pass to the model.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"system_message","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"temperature":{"_input_type":"SliderInput","advanced":false,"display_name":"Temperature","dynamic":false,"info":"","max_label":"","max_label_icon":"","min_label":"","min_label_icon":"","name":"temperature","placeholder":"","range_spec":{"max":2.0,"min":0.0,"step":0.01,"step_type":"float"},"required":false,"show":true,"slider_buttons":false,"slider_buttons_options":[],"slider_input":false,"title_case":false,"tool_mode":false,"type":"slider","value":0.1}},"tool_mode":false}}],["amazon",{"AmazonBedrockConverseModel":{"base_classes":["LanguageModel","Message"],"beta":true,"conditional_paths":[],"custom_fields":{},"description":"Generate text using Amazon Bedrock LLMs with the modern Converse API for improved conversation handling.","display_name":"Amazon Bedrock Converse","documentation":"","edited":false,"field_order":["input_value","system_message","stream","model_id","aws_access_key_id","aws_secret_access_key","aws_session_token","credentials_profile_name","region_name","endpoint_url","temperature","max_tokens","top_p","top_k","disable_streaming","additional_model_fields"],"frozen":false,"icon":"Amazon","legacy":false,"metadata":{"code_hash":"54c335f8699f","dependencies":{"dependencies":[{"name":"langflow","version":null},{"name":"lfx","version":null},{"name":"langchain_aws","version":"0.2.33"}],"total_dependencies":3},"keywords":["model","llm","language model","large language model"],"module":"lfx.components.amazon.amazon_bedrock_converse.AmazonBedrockConverseComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Model Response","group_outputs":false,"method":"text_response","name":"text_output","selected":"Message","tool_mode":true,"types":["Message"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"Language Model","group_outputs":false,"method":"build_model","name":"model_output","selected":"LanguageModel","tool_mode":true,"types":["LanguageModel"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","additional_model_fields":{"_input_type":"DictInput","advanced":true,"display_name":"Additional Model Fields","dynamic":false,"info":"Additional model-specific parameters for fine-tuning behavior.","list":true,"list_add_label":"Add More","name":"additional_model_fields","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"type":"dict","value":{}},"aws_access_key_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"AWS Access Key ID","dynamic":false,"info":"The access key for your AWS account. Usually set in Python code as the environment variable 'AWS_ACCESS_KEY_ID'.","input_types":[],"load_from_db":true,"name":"aws_access_key_id","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":"AWS_ACCESS_KEY_ID"},"aws_secret_access_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"AWS Secret Access Key","dynamic":false,"info":"The secret key for your AWS account. Usually set in Python code as the environment variable 'AWS_SECRET_ACCESS_KEY'.","input_types":[],"load_from_db":true,"name":"aws_secret_access_key","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":"AWS_SECRET_ACCESS_KEY"},"aws_session_token":{"_input_type":"SecretStrInput","advanced":true,"display_name":"AWS Session Token","dynamic":false,"info":"The session key for your AWS account. Only needed for temporary credentials. Usually set in Python code as the environment variable 'AWS_SESSION_TOKEN'.","input_types":[],"load_from_db":false,"name":"aws_session_token","password":true,"placeholder":"","required":false,"show":true,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from langflow.field_typing import LanguageModel\nfrom langflow.inputs.inputs import BoolInput, FloatInput, IntInput, MessageTextInput, SecretStrInput\nfrom langflow.io import DictInput, DropdownInput\n\nfrom lfx.base.models.aws_constants import AWS_REGIONS, AWS_MODEL_IDs\nfrom lfx.base.models.model import LCModelComponent\n\n\nclass AmazonBedrockConverseComponent(LCModelComponent):\n display_name: str = \"Amazon Bedrock Converse\"\n description: str = (\n \"Generate text using Amazon Bedrock LLMs with the modern Converse API for improved conversation handling.\"\n )\n icon = \"Amazon\"\n name = \"AmazonBedrockConverseModel\"\n beta = True\n\n inputs = [\n *LCModelComponent.get_base_inputs(),\n DropdownInput(\n name=\"model_id\",\n display_name=\"Model ID\",\n options=AWS_MODEL_IDs,\n value=\"anthropic.claude-3-5-sonnet-20241022-v2:0\",\n info=\"List of available model IDs to choose from.\",\n ),\n SecretStrInput(\n name=\"aws_access_key_id\",\n display_name=\"AWS Access Key ID\",\n info=\"The access key for your AWS account. \"\n \"Usually set in Python code as the environment variable 'AWS_ACCESS_KEY_ID'.\",\n value=\"AWS_ACCESS_KEY_ID\",\n required=True,\n ),\n SecretStrInput(\n name=\"aws_secret_access_key\",\n display_name=\"AWS Secret Access Key\",\n info=\"The secret key for your AWS account. \"\n \"Usually set in Python code as the environment variable 'AWS_SECRET_ACCESS_KEY'.\",\n value=\"AWS_SECRET_ACCESS_KEY\",\n required=True,\n ),\n SecretStrInput(\n name=\"aws_session_token\",\n display_name=\"AWS Session Token\",\n advanced=True,\n info=\"The session key for your AWS account. \"\n \"Only needed for temporary credentials. \"\n \"Usually set in Python code as the environment variable 'AWS_SESSION_TOKEN'.\",\n load_from_db=False,\n ),\n SecretStrInput(\n name=\"credentials_profile_name\",\n display_name=\"Credentials Profile Name\",\n advanced=True,\n info=\"The name of the profile to use from your \"\n \"~/.aws/credentials file. \"\n \"If not provided, the default profile will be used.\",\n load_from_db=False,\n ),\n DropdownInput(\n name=\"region_name\",\n display_name=\"Region Name\",\n value=\"us-east-1\",\n options=AWS_REGIONS,\n info=\"The AWS region where your Bedrock resources are located.\",\n ),\n MessageTextInput(\n name=\"endpoint_url\",\n display_name=\"Endpoint URL\",\n advanced=True,\n info=\"The URL of the Bedrock endpoint to use.\",\n ),\n # Model-specific parameters for fine control\n FloatInput(\n name=\"temperature\",\n display_name=\"Temperature\",\n value=0.7,\n info=\"Controls randomness in output. Higher values make output more random.\",\n advanced=True,\n ),\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n value=4096,\n info=\"Maximum number of tokens to generate.\",\n advanced=True,\n ),\n FloatInput(\n name=\"top_p\",\n display_name=\"Top P\",\n value=0.9,\n info=\"Nucleus sampling parameter. Controls diversity of output.\",\n advanced=True,\n ),\n IntInput(\n name=\"top_k\",\n display_name=\"Top K\",\n value=250,\n info=\"Limits the number of highest probability vocabulary tokens to consider. \"\n \"Note: Not all models support top_k. Use 'Additional Model Fields' for manual configuration if needed.\",\n advanced=True,\n ),\n BoolInput(\n name=\"disable_streaming\",\n display_name=\"Disable Streaming\",\n value=False,\n info=\"If True, disables streaming responses. Useful for batch processing.\",\n advanced=True,\n ),\n DictInput(\n name=\"additional_model_fields\",\n display_name=\"Additional Model Fields\",\n advanced=True,\n is_list=True,\n info=\"Additional model-specific parameters for fine-tuning behavior.\",\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n try:\n from langchain_aws.chat_models.bedrock_converse import ChatBedrockConverse\n except ImportError as e:\n msg = \"langchain_aws is not installed. Please install it with `pip install langchain_aws`.\"\n raise ImportError(msg) from e\n\n # Prepare initialization parameters\n init_params = {\n \"model\": self.model_id,\n \"region_name\": self.region_name,\n }\n\n # Add AWS credentials if provided\n if self.aws_access_key_id:\n init_params[\"aws_access_key_id\"] = self.aws_access_key_id\n if self.aws_secret_access_key:\n init_params[\"aws_secret_access_key\"] = self.aws_secret_access_key\n if self.aws_session_token:\n init_params[\"aws_session_token\"] = self.aws_session_token\n if self.credentials_profile_name:\n init_params[\"credentials_profile_name\"] = self.credentials_profile_name\n if self.endpoint_url:\n init_params[\"endpoint_url\"] = self.endpoint_url\n\n # Add model parameters directly as supported by ChatBedrockConverse\n if hasattr(self, \"temperature\") and self.temperature is not None:\n init_params[\"temperature\"] = self.temperature\n if hasattr(self, \"max_tokens\") and self.max_tokens is not None:\n init_params[\"max_tokens\"] = self.max_tokens\n if hasattr(self, \"top_p\") and self.top_p is not None:\n init_params[\"top_p\"] = self.top_p\n\n # Handle streaming - only disable if explicitly requested\n if hasattr(self, \"disable_streaming\") and self.disable_streaming:\n init_params[\"disable_streaming\"] = True\n\n # Handle additional model request fields carefully\n # Based on the error, inferenceConfig should not be passed as additional fields for some models\n additional_model_request_fields = {}\n\n # Only add top_k if user explicitly provided additional fields or if needed for specific models\n if hasattr(self, \"additional_model_fields\") and self.additional_model_fields:\n for field in self.additional_model_fields:\n if isinstance(field, dict):\n additional_model_request_fields.update(field)\n\n # For now, don't automatically add inferenceConfig for top_k to avoid validation errors\n # Users can manually add it via additional_model_fields if their model supports it\n\n # Only add if we have actual additional fields\n if additional_model_request_fields:\n init_params[\"additional_model_request_fields\"] = additional_model_request_fields\n\n try:\n output = ChatBedrockConverse(**init_params)\n except Exception as e:\n # Provide helpful error message with fallback suggestions\n error_details = str(e)\n if \"validation error\" in error_details.lower():\n msg = (\n f\"ChatBedrockConverse validation error: {error_details}. \"\n f\"This may be due to incompatible parameters for model '{self.model_id}'. \"\n f\"Consider adjusting the model parameters or trying the legacy Amazon Bedrock component.\"\n )\n elif \"converse api\" in error_details.lower():\n msg = (\n f\"Converse API error: {error_details}. \"\n f\"The model '{self.model_id}' may not support the Converse API. \"\n f\"Try using the legacy Amazon Bedrock component instead.\"\n )\n else:\n msg = f\"Could not initialize ChatBedrockConverse: {error_details}\"\n raise ValueError(msg) from e\n\n return output\n"},"credentials_profile_name":{"_input_type":"SecretStrInput","advanced":true,"display_name":"Credentials Profile Name","dynamic":false,"info":"The name of the profile to use from your ~/.aws/credentials file. If not provided, the default profile will be used.","input_types":[],"load_from_db":false,"name":"credentials_profile_name","password":true,"placeholder":"","required":false,"show":true,"title_case":false,"type":"str","value":""},"disable_streaming":{"_input_type":"BoolInput","advanced":true,"display_name":"Disable Streaming","dynamic":false,"info":"If True, disables streaming responses. Useful for batch processing.","list":false,"list_add_label":"Add More","name":"disable_streaming","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"endpoint_url":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Endpoint URL","dynamic":false,"info":"The URL of the Bedrock endpoint to use.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"endpoint_url","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"input_value":{"_input_type":"MessageInput","advanced":false,"display_name":"Input","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"input_value","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"max_tokens":{"_input_type":"IntInput","advanced":true,"display_name":"Max Tokens","dynamic":false,"info":"Maximum number of tokens to generate.","list":false,"list_add_label":"Add More","name":"max_tokens","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":4096},"model_id":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Model ID","dynamic":false,"external_options":{},"info":"List of available model IDs to choose from.","name":"model_id","options":["amazon.titan-text-express-v1","amazon.titan-text-lite-v1","amazon.titan-text-premier-v1:0","anthropic.claude-v2","anthropic.claude-v2:1","anthropic.claude-3-sonnet-20240229-v1:0","anthropic.claude-3-5-sonnet-20240620-v1:0","anthropic.claude-3-5-sonnet-20241022-v2:0","anthropic.claude-3-haiku-20240307-v1:0","anthropic.claude-3-5-haiku-20241022-v1:0","anthropic.claude-3-opus-20240229-v1:0","anthropic.claude-instant-v1","ai21.jamba-instruct-v1:0","ai21.j2-mid-v1","ai21.j2-ultra-v1","ai21.jamba-1-5-large-v1:0","ai21.jamba-1-5-mini-v1:0","cohere.command-text-v14","cohere.command-light-text-v14","cohere.command-r-v1:0","cohere.command-r-plus-v1:0","meta.llama2-13b-chat-v1","meta.llama2-70b-chat-v1","meta.llama3-8b-instruct-v1:0","meta.llama3-70b-instruct-v1:0","meta.llama3-1-8b-instruct-v1:0","meta.llama3-1-70b-instruct-v1:0","meta.llama3-1-405b-instruct-v1:0","meta.llama3-2-1b-instruct-v1:0","meta.llama3-2-3b-instruct-v1:0","meta.llama3-2-11b-instruct-v1:0","meta.llama3-2-90b-instruct-v1:0","mistral.mistral-7b-instruct-v0:2","mistral.mixtral-8x7b-instruct-v0:1","mistral.mistral-large-2402-v1:0","mistral.mistral-large-2407-v1:0","mistral.mistral-small-2402-v1:0"],"options_metadata":[],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"anthropic.claude-3-5-sonnet-20241022-v2:0"},"region_name":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Region Name","dynamic":false,"external_options":{},"info":"The AWS region where your Bedrock resources are located.","name":"region_name","options":["us-west-2","us-west-1","us-gov-west-1","us-gov-east-1","us-east-2","us-east-1","sa-east-1","me-south-1","me-central-1","il-central-1","eu-west-3","eu-west-2","eu-west-1","eu-south-2","eu-south-1","eu-north-1","eu-central-2","eu-central-1","cn-northwest-1","cn-north-1","ca-west-1","ca-central-1","ap-southeast-5","ap-southeast-4","ap-southeast-3","ap-southeast-2","ap-southeast-1","ap-south-2","ap-south-1","ap-northeast-3","ap-northeast-2","ap-northeast-1","ap-east-1","af-south-1"],"options_metadata":[],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"us-east-1"},"stream":{"_input_type":"BoolInput","advanced":true,"display_name":"Stream","dynamic":false,"info":"Stream the response from the model. Streaming works only in Chat.","list":false,"list_add_label":"Add More","name":"stream","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"system_message":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"System Message","dynamic":false,"info":"System message to pass to the model.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"system_message","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"temperature":{"_input_type":"FloatInput","advanced":true,"display_name":"Temperature","dynamic":false,"info":"Controls randomness in output. Higher values make output more random.","list":false,"list_add_label":"Add More","name":"temperature","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"float","value":0.7},"top_k":{"_input_type":"IntInput","advanced":true,"display_name":"Top K","dynamic":false,"info":"Limits the number of highest probability vocabulary tokens to consider. Note: Not all models support top_k. Use 'Additional Model Fields' for manual configuration if needed.","list":false,"list_add_label":"Add More","name":"top_k","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":250},"top_p":{"_input_type":"FloatInput","advanced":true,"display_name":"Top P","dynamic":false,"info":"Nucleus sampling parameter. Controls diversity of output.","list":false,"list_add_label":"Add More","name":"top_p","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"float","value":0.9}},"tool_mode":false},"AmazonBedrockEmbeddings":{"base_classes":["Embeddings"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Generate embeddings using Amazon Bedrock models.","display_name":"Amazon Bedrock Embeddings","documentation":"","edited":false,"field_order":["model_id","aws_access_key_id","aws_secret_access_key","aws_session_token","credentials_profile_name","region_name","endpoint_url"],"frozen":false,"icon":"Amazon","legacy":false,"metadata":{"code_hash":"70d039ff79f0","dependencies":{"dependencies":[{"name":"lfx","version":null},{"name":"langchain_aws","version":"0.2.33"},{"name":"boto3","version":"1.40.56"}],"total_dependencies":3},"keywords":["model","llm","language model","large language model"],"module":"lfx.components.amazon.amazon_bedrock_embedding.AmazonBedrockEmbeddingsComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Embeddings","group_outputs":false,"method":"build_embeddings","name":"embeddings","selected":"Embeddings","tool_mode":true,"types":["Embeddings"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","aws_access_key_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"AWS Access Key ID","dynamic":false,"info":"The access key for your AWS account.Usually set in Python code as the environment variable 'AWS_ACCESS_KEY_ID'.","input_types":[],"load_from_db":true,"name":"aws_access_key_id","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":"AWS_ACCESS_KEY_ID"},"aws_secret_access_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"AWS Secret Access Key","dynamic":false,"info":"The secret key for your AWS account. Usually set in Python code as the environment variable 'AWS_SECRET_ACCESS_KEY'.","input_types":[],"load_from_db":true,"name":"aws_secret_access_key","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":"AWS_SECRET_ACCESS_KEY"},"aws_session_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"AWS Session Token","dynamic":false,"info":"The session key for your AWS account. Only needed for temporary credentials. Usually set in Python code as the environment variable 'AWS_SESSION_TOKEN'.","input_types":[],"load_from_db":true,"name":"aws_session_token","password":true,"placeholder":"","required":false,"show":true,"title_case":false,"type":"str","value":"AWS_SESSION_TOKEN"},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.models.aws_constants import AWS_EMBEDDING_MODEL_IDS, AWS_REGIONS\nfrom lfx.base.models.model import LCModelComponent\nfrom lfx.field_typing import Embeddings\nfrom lfx.inputs.inputs import SecretStrInput\nfrom lfx.io import DropdownInput, MessageTextInput, Output\n\n\nclass AmazonBedrockEmbeddingsComponent(LCModelComponent):\n display_name: str = \"Amazon Bedrock Embeddings\"\n description: str = \"Generate embeddings using Amazon Bedrock models.\"\n icon = \"Amazon\"\n name = \"AmazonBedrockEmbeddings\"\n\n inputs = [\n DropdownInput(\n name=\"model_id\",\n display_name=\"Model Id\",\n options=AWS_EMBEDDING_MODEL_IDS,\n value=\"amazon.titan-embed-text-v1\",\n ),\n SecretStrInput(\n name=\"aws_access_key_id\",\n display_name=\"AWS Access Key ID\",\n info=\"The access key for your AWS account.\"\n \"Usually set in Python code as the environment variable 'AWS_ACCESS_KEY_ID'.\",\n value=\"AWS_ACCESS_KEY_ID\",\n required=True,\n ),\n SecretStrInput(\n name=\"aws_secret_access_key\",\n display_name=\"AWS Secret Access Key\",\n info=\"The secret key for your AWS account. \"\n \"Usually set in Python code as the environment variable 'AWS_SECRET_ACCESS_KEY'.\",\n value=\"AWS_SECRET_ACCESS_KEY\",\n required=True,\n ),\n SecretStrInput(\n name=\"aws_session_token\",\n display_name=\"AWS Session Token\",\n advanced=False,\n info=\"The session key for your AWS account. \"\n \"Only needed for temporary credentials. \"\n \"Usually set in Python code as the environment variable 'AWS_SESSION_TOKEN'.\",\n value=\"AWS_SESSION_TOKEN\",\n ),\n SecretStrInput(\n name=\"credentials_profile_name\",\n display_name=\"Credentials Profile Name\",\n advanced=True,\n info=\"The name of the profile to use from your \"\n \"~/.aws/credentials file. \"\n \"If not provided, the default profile will be used.\",\n value=\"AWS_CREDENTIALS_PROFILE_NAME\",\n ),\n DropdownInput(\n name=\"region_name\",\n display_name=\"Region Name\",\n value=\"us-east-1\",\n options=AWS_REGIONS,\n info=\"The AWS region where your Bedrock resources are located.\",\n ),\n MessageTextInput(\n name=\"endpoint_url\",\n display_name=\"Endpoint URL\",\n advanced=True,\n info=\"The URL of the AWS Bedrock endpoint to use.\",\n ),\n ]\n\n outputs = [\n Output(display_name=\"Embeddings\", name=\"embeddings\", method=\"build_embeddings\"),\n ]\n\n def build_embeddings(self) -> Embeddings:\n try:\n from langchain_aws import BedrockEmbeddings\n except ImportError as e:\n msg = \"langchain_aws is not installed. Please install it with `pip install langchain_aws`.\"\n raise ImportError(msg) from e\n try:\n import boto3\n except ImportError as e:\n msg = \"boto3 is not installed. Please install it with `pip install boto3`.\"\n raise ImportError(msg) from e\n if self.aws_access_key_id or self.aws_secret_access_key:\n session = boto3.Session(\n aws_access_key_id=self.aws_access_key_id,\n aws_secret_access_key=self.aws_secret_access_key,\n aws_session_token=self.aws_session_token,\n )\n elif self.credentials_profile_name:\n session = boto3.Session(profile_name=self.credentials_profile_name)\n else:\n session = boto3.Session()\n\n client_params = {}\n if self.endpoint_url:\n client_params[\"endpoint_url\"] = self.endpoint_url\n if self.region_name:\n client_params[\"region_name\"] = self.region_name\n\n boto3_client = session.client(\"bedrock-runtime\", **client_params)\n return BedrockEmbeddings(\n credentials_profile_name=self.credentials_profile_name,\n client=boto3_client,\n model_id=self.model_id,\n endpoint_url=self.endpoint_url,\n region_name=self.region_name,\n )\n"},"credentials_profile_name":{"_input_type":"SecretStrInput","advanced":true,"display_name":"Credentials Profile Name","dynamic":false,"info":"The name of the profile to use from your ~/.aws/credentials file. If not provided, the default profile will be used.","input_types":[],"load_from_db":true,"name":"credentials_profile_name","password":true,"placeholder":"","required":false,"show":true,"title_case":false,"type":"str","value":"AWS_CREDENTIALS_PROFILE_NAME"},"endpoint_url":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Endpoint URL","dynamic":false,"info":"The URL of the AWS Bedrock endpoint to use.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"endpoint_url","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"model_id":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Model Id","dynamic":false,"external_options":{},"info":"","name":"model_id","options":["amazon.titan-embed-text-v1","amazon.titan-embed-text-v2:0","cohere.embed-english-v3","cohere.embed-multilingual-v3"],"options_metadata":[],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"amazon.titan-embed-text-v1"},"region_name":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Region Name","dynamic":false,"external_options":{},"info":"The AWS region where your Bedrock resources are located.","name":"region_name","options":["us-west-2","us-west-1","us-gov-west-1","us-gov-east-1","us-east-2","us-east-1","sa-east-1","me-south-1","me-central-1","il-central-1","eu-west-3","eu-west-2","eu-west-1","eu-south-2","eu-south-1","eu-north-1","eu-central-2","eu-central-1","cn-northwest-1","cn-north-1","ca-west-1","ca-central-1","ap-southeast-5","ap-southeast-4","ap-southeast-3","ap-southeast-2","ap-southeast-1","ap-south-2","ap-south-1","ap-northeast-3","ap-northeast-2","ap-northeast-1","ap-east-1","af-south-1"],"options_metadata":[],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"us-east-1"}},"tool_mode":false},"AmazonBedrockModel":{"base_classes":["LanguageModel","Message"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Generate text using Amazon Bedrock LLMs with the legacy ChatBedrock API. This component is deprecated. Please use Amazon Bedrock Converse instead for better compatibility, newer features, and improved conversation handling.","display_name":"Amazon Bedrock","documentation":"","edited":false,"field_order":["input_value","system_message","stream","model_id","aws_access_key_id","aws_secret_access_key","aws_session_token","credentials_profile_name","region_name","model_kwargs","endpoint_url"],"frozen":false,"icon":"Amazon","legacy":true,"metadata":{"code_hash":"922093a831b6","dependencies":{"dependencies":[{"name":"lfx","version":null},{"name":"langchain_aws","version":"0.2.33"},{"name":"boto3","version":"1.40.56"}],"total_dependencies":3},"keywords":["model","llm","language model","large language model"],"module":"lfx.components.amazon.amazon_bedrock_model.AmazonBedrockComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Model Response","group_outputs":false,"method":"text_response","name":"text_output","selected":"Message","tool_mode":true,"types":["Message"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"Language Model","group_outputs":false,"method":"build_model","name":"model_output","selected":"LanguageModel","tool_mode":true,"types":["LanguageModel"],"value":"__UNDEFINED__"}],"pinned":false,"replacement":[],"template":{"_type":"Component","aws_access_key_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"AWS Access Key ID","dynamic":false,"info":"The access key for your AWS account.Usually set in Python code as the environment variable 'AWS_ACCESS_KEY_ID'.","input_types":[],"load_from_db":true,"name":"aws_access_key_id","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":"AWS_ACCESS_KEY_ID"},"aws_secret_access_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"AWS Secret Access Key","dynamic":false,"info":"The secret key for your AWS account. Usually set in Python code as the environment variable 'AWS_SECRET_ACCESS_KEY'.","input_types":[],"load_from_db":true,"name":"aws_secret_access_key","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":"AWS_SECRET_ACCESS_KEY"},"aws_session_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"AWS Session Token","dynamic":false,"info":"The session key for your AWS account. Only needed for temporary credentials. Usually set in Python code as the environment variable 'AWS_SESSION_TOKEN'.","input_types":[],"load_from_db":false,"name":"aws_session_token","password":true,"placeholder":"","required":false,"show":true,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.models.aws_constants import AWS_REGIONS, AWS_MODEL_IDs\nfrom lfx.base.models.model import LCModelComponent\nfrom lfx.field_typing import LanguageModel\nfrom lfx.inputs.inputs import MessageTextInput, SecretStrInput\nfrom lfx.io import DictInput, DropdownInput\n\n\nclass AmazonBedrockComponent(LCModelComponent):\n display_name: str = \"Amazon Bedrock\"\n description: str = (\n \"Generate text using Amazon Bedrock LLMs with the legacy ChatBedrock API. \"\n \"This component is deprecated. Please use Amazon Bedrock Converse instead \"\n \"for better compatibility, newer features, and improved conversation handling.\"\n )\n icon = \"Amazon\"\n name = \"AmazonBedrockModel\"\n legacy = True\n replacement = \"amazon.AmazonBedrockConverseModel\"\n\n inputs = [\n *LCModelComponent.get_base_inputs(),\n DropdownInput(\n name=\"model_id\",\n display_name=\"Model ID\",\n options=AWS_MODEL_IDs,\n value=\"anthropic.claude-3-haiku-20240307-v1:0\",\n info=\"List of available model IDs to choose from.\",\n ),\n SecretStrInput(\n name=\"aws_access_key_id\",\n display_name=\"AWS Access Key ID\",\n info=\"The access key for your AWS account.\"\n \"Usually set in Python code as the environment variable 'AWS_ACCESS_KEY_ID'.\",\n value=\"AWS_ACCESS_KEY_ID\",\n required=True,\n ),\n SecretStrInput(\n name=\"aws_secret_access_key\",\n display_name=\"AWS Secret Access Key\",\n info=\"The secret key for your AWS account. \"\n \"Usually set in Python code as the environment variable 'AWS_SECRET_ACCESS_KEY'.\",\n value=\"AWS_SECRET_ACCESS_KEY\",\n required=True,\n ),\n SecretStrInput(\n name=\"aws_session_token\",\n display_name=\"AWS Session Token\",\n advanced=False,\n info=\"The session key for your AWS account. \"\n \"Only needed for temporary credentials. \"\n \"Usually set in Python code as the environment variable 'AWS_SESSION_TOKEN'.\",\n load_from_db=False,\n ),\n SecretStrInput(\n name=\"credentials_profile_name\",\n display_name=\"Credentials Profile Name\",\n advanced=True,\n info=\"The name of the profile to use from your \"\n \"~/.aws/credentials file. \"\n \"If not provided, the default profile will be used.\",\n load_from_db=False,\n ),\n DropdownInput(\n name=\"region_name\",\n display_name=\"Region Name\",\n value=\"us-east-1\",\n options=AWS_REGIONS,\n info=\"The AWS region where your Bedrock resources are located.\",\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n is_list=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n MessageTextInput(\n name=\"endpoint_url\",\n display_name=\"Endpoint URL\",\n advanced=True,\n info=\"The URL of the Bedrock endpoint to use.\",\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n try:\n from langchain_aws import ChatBedrock\n except ImportError as e:\n msg = \"langchain_aws is not installed. Please install it with `pip install langchain_aws`.\"\n raise ImportError(msg) from e\n try:\n import boto3\n except ImportError as e:\n msg = \"boto3 is not installed. Please install it with `pip install boto3`.\"\n raise ImportError(msg) from e\n if self.aws_access_key_id or self.aws_secret_access_key:\n try:\n session = boto3.Session(\n aws_access_key_id=self.aws_access_key_id,\n aws_secret_access_key=self.aws_secret_access_key,\n aws_session_token=self.aws_session_token,\n )\n except Exception as e:\n msg = \"Could not create a boto3 session.\"\n raise ValueError(msg) from e\n elif self.credentials_profile_name:\n session = boto3.Session(profile_name=self.credentials_profile_name)\n else:\n session = boto3.Session()\n\n client_params = {}\n if self.endpoint_url:\n client_params[\"endpoint_url\"] = self.endpoint_url\n if self.region_name:\n client_params[\"region_name\"] = self.region_name\n\n boto3_client = session.client(\"bedrock-runtime\", **client_params)\n try:\n output = ChatBedrock(\n client=boto3_client,\n model_id=self.model_id,\n region_name=self.region_name,\n model_kwargs=self.model_kwargs,\n endpoint_url=self.endpoint_url,\n streaming=self.stream,\n )\n except Exception as e:\n msg = \"Could not connect to AmazonBedrock API.\"\n raise ValueError(msg) from e\n return output\n"},"credentials_profile_name":{"_input_type":"SecretStrInput","advanced":true,"display_name":"Credentials Profile Name","dynamic":false,"info":"The name of the profile to use from your ~/.aws/credentials file. If not provided, the default profile will be used.","input_types":[],"load_from_db":false,"name":"credentials_profile_name","password":true,"placeholder":"","required":false,"show":true,"title_case":false,"type":"str","value":""},"endpoint_url":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Endpoint URL","dynamic":false,"info":"The URL of the Bedrock endpoint to use.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"endpoint_url","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"input_value":{"_input_type":"MessageInput","advanced":false,"display_name":"Input","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"input_value","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"model_id":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Model ID","dynamic":false,"external_options":{},"info":"List of available model IDs to choose from.","name":"model_id","options":["amazon.titan-text-express-v1","amazon.titan-text-lite-v1","amazon.titan-text-premier-v1:0","anthropic.claude-v2","anthropic.claude-v2:1","anthropic.claude-3-sonnet-20240229-v1:0","anthropic.claude-3-5-sonnet-20240620-v1:0","anthropic.claude-3-5-sonnet-20241022-v2:0","anthropic.claude-3-haiku-20240307-v1:0","anthropic.claude-3-5-haiku-20241022-v1:0","anthropic.claude-3-opus-20240229-v1:0","anthropic.claude-instant-v1","ai21.jamba-instruct-v1:0","ai21.j2-mid-v1","ai21.j2-ultra-v1","ai21.jamba-1-5-large-v1:0","ai21.jamba-1-5-mini-v1:0","cohere.command-text-v14","cohere.command-light-text-v14","cohere.command-r-v1:0","cohere.command-r-plus-v1:0","meta.llama2-13b-chat-v1","meta.llama2-70b-chat-v1","meta.llama3-8b-instruct-v1:0","meta.llama3-70b-instruct-v1:0","meta.llama3-1-8b-instruct-v1:0","meta.llama3-1-70b-instruct-v1:0","meta.llama3-1-405b-instruct-v1:0","meta.llama3-2-1b-instruct-v1:0","meta.llama3-2-3b-instruct-v1:0","meta.llama3-2-11b-instruct-v1:0","meta.llama3-2-90b-instruct-v1:0","mistral.mistral-7b-instruct-v0:2","mistral.mixtral-8x7b-instruct-v0:1","mistral.mistral-large-2402-v1:0","mistral.mistral-large-2407-v1:0","mistral.mistral-small-2402-v1:0"],"options_metadata":[],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"anthropic.claude-3-haiku-20240307-v1:0"},"model_kwargs":{"_input_type":"DictInput","advanced":true,"display_name":"Model Kwargs","dynamic":false,"info":"Additional keyword arguments to pass to the model.","list":true,"list_add_label":"Add More","name":"model_kwargs","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"type":"dict","value":{}},"region_name":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Region Name","dynamic":false,"external_options":{},"info":"The AWS region where your Bedrock resources are located.","name":"region_name","options":["us-west-2","us-west-1","us-gov-west-1","us-gov-east-1","us-east-2","us-east-1","sa-east-1","me-south-1","me-central-1","il-central-1","eu-west-3","eu-west-2","eu-west-1","eu-south-2","eu-south-1","eu-north-1","eu-central-2","eu-central-1","cn-northwest-1","cn-north-1","ca-west-1","ca-central-1","ap-southeast-5","ap-southeast-4","ap-southeast-3","ap-southeast-2","ap-southeast-1","ap-south-2","ap-south-1","ap-northeast-3","ap-northeast-2","ap-northeast-1","ap-east-1","af-south-1"],"options_metadata":[],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"us-east-1"},"stream":{"_input_type":"BoolInput","advanced":true,"display_name":"Stream","dynamic":false,"info":"Stream the response from the model. Streaming works only in Chat.","list":false,"list_add_label":"Add More","name":"stream","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"system_message":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"System Message","dynamic":false,"info":"System message to pass to the model.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"system_message","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"s3bucketuploader":{"base_classes":["NoneType"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Uploads files to S3 bucket.","display_name":"S3 Bucket Uploader","documentation":"","edited":false,"field_order":["aws_access_key_id","aws_secret_access_key","bucket_name","strategy","data_inputs","s3_prefix","strip_path"],"frozen":false,"icon":"Amazon","legacy":false,"metadata":{"code_hash":"6e4ba2dafc3c","dependencies":{"dependencies":[{"name":"lfx","version":null},{"name":"boto3","version":"1.40.56"}],"total_dependencies":2},"module":"lfx.components.amazon.s3_bucket_uploader.S3BucketUploaderComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Writes to AWS Bucket","group_outputs":false,"method":"process_files","name":"data","selected":"NoneType","tool_mode":true,"types":["NoneType"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","aws_access_key_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"AWS Access Key ID","dynamic":false,"info":"AWS Access key ID.","input_types":[],"load_from_db":true,"name":"aws_access_key_id","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""},"aws_secret_access_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"AWS Secret Key","dynamic":false,"info":"AWS Secret Key.","input_types":[],"load_from_db":true,"name":"aws_secret_access_key","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""},"bucket_name":{"_input_type":"StrInput","advanced":false,"display_name":"Bucket Name","dynamic":false,"info":"Enter the name of the bucket.","list":false,"list_add_label":"Add More","load_from_db":false,"name":"bucket_name","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from pathlib import Path\nfrom typing import Any\n\nfrom lfx.custom.custom_component.component import Component\nfrom lfx.io import (\n BoolInput,\n DropdownInput,\n HandleInput,\n Output,\n SecretStrInput,\n StrInput,\n)\n\n\nclass S3BucketUploaderComponent(Component):\n \"\"\"S3BucketUploaderComponent is a component responsible for uploading files to an S3 bucket.\n\n It provides two strategies for file upload: \"By Data\" and \"By File Name\". The component\n requires AWS credentials and bucket details as inputs and processes files accordingly.\n\n Attributes:\n display_name (str): The display name of the component.\n description (str): A brief description of the components functionality.\n icon (str): The icon representing the component.\n name (str): The internal name of the component.\n inputs (list): A list of input configurations required by the component.\n outputs (list): A list of output configurations provided by the component.\n\n Methods:\n process_files() -> None:\n Processes files based on the selected strategy. Calls the appropriate method\n based on the strategy attribute.\n process_files_by_data() -> None:\n Processes and uploads files to an S3 bucket based on the data inputs. Iterates\n over the data inputs, logs the file path and text content, and uploads each file\n to the specified S3 bucket if both file path and text content are available.\n process_files_by_name() -> None:\n Processes and uploads files to an S3 bucket based on their names. Iterates through\n the list of data inputs, retrieves the file path from each data item, and uploads\n the file to the specified S3 bucket if the file path is available. Logs the file\n path being uploaded.\n _s3_client() -> Any:\n Creates and returns an S3 client using the provided AWS access key ID and secret\n access key.\n\n Please note that this component requires the boto3 library to be installed. It is designed\n to work with File and Director components as inputs\n \"\"\"\n\n display_name = \"S3 Bucket Uploader\"\n description = \"Uploads files to S3 bucket.\"\n icon = \"Amazon\"\n name = \"s3bucketuploader\"\n\n inputs = [\n SecretStrInput(\n name=\"aws_access_key_id\",\n display_name=\"AWS Access Key ID\",\n required=True,\n password=True,\n info=\"AWS Access key ID.\",\n ),\n SecretStrInput(\n name=\"aws_secret_access_key\",\n display_name=\"AWS Secret Key\",\n required=True,\n password=True,\n info=\"AWS Secret Key.\",\n ),\n StrInput(\n name=\"bucket_name\",\n display_name=\"Bucket Name\",\n info=\"Enter the name of the bucket.\",\n advanced=False,\n ),\n DropdownInput(\n name=\"strategy\",\n display_name=\"Strategy for file upload\",\n options=[\"Store Data\", \"Store Original File\"],\n value=\"By Data\",\n info=(\n \"Choose the strategy to upload the file. By Data means that the source file \"\n \"is parsed and stored as LangFlow data. By File Name means that the source \"\n \"file is uploaded as is.\"\n ),\n ),\n HandleInput(\n name=\"data_inputs\",\n display_name=\"Data Inputs\",\n info=\"The data to split.\",\n input_types=[\"Data\"],\n is_list=True,\n required=True,\n ),\n StrInput(\n name=\"s3_prefix\",\n display_name=\"S3 Prefix\",\n info=\"Prefix for all files.\",\n advanced=True,\n ),\n BoolInput(\n name=\"strip_path\",\n display_name=\"Strip Path\",\n info=\"Removes path from file path.\",\n required=True,\n advanced=True,\n ),\n ]\n\n outputs = [\n Output(display_name=\"Writes to AWS Bucket\", name=\"data\", method=\"process_files\"),\n ]\n\n def process_files(self) -> None:\n \"\"\"Process files based on the selected strategy.\n\n This method uses a strategy pattern to process files. The strategy is determined\n by the `self.strategy` attribute, which can be either \"By Data\" or \"By File Name\".\n Depending on the strategy, the corresponding method (`process_files_by_data` or\n `process_files_by_name`) is called. If an invalid strategy is provided, an error\n is logged.\n\n Returns:\n None\n \"\"\"\n strategy_methods = {\n \"Store Data\": self.process_files_by_data,\n \"Store Original File\": self.process_files_by_name,\n }\n strategy_methods.get(self.strategy, lambda: self.log(\"Invalid strategy\"))()\n\n def process_files_by_data(self) -> None:\n \"\"\"Processes and uploads files to an S3 bucket based on the data inputs.\n\n This method iterates over the data inputs, logs the file path and text content,\n and uploads each file to the specified S3 bucket if both file path and text content\n are available.\n\n Args:\n None\n\n Returns:\n None\n \"\"\"\n for data_item in self.data_inputs:\n file_path = data_item.data.get(\"file_path\")\n text_content = data_item.data.get(\"text\")\n\n if file_path and text_content:\n self._s3_client().put_object(\n Bucket=self.bucket_name, Key=self._normalize_path(file_path), Body=text_content\n )\n\n def process_files_by_name(self) -> None:\n \"\"\"Processes and uploads files to an S3 bucket based on their names.\n\n Iterates through the list of data inputs, retrieves the file path from each data item,\n and uploads the file to the specified S3 bucket if the file path is available.\n Logs the file path being uploaded.\n\n Returns:\n None\n \"\"\"\n for data_item in self.data_inputs:\n file_path = data_item.data.get(\"file_path\")\n self.log(f\"Uploading file: {file_path}\")\n if file_path:\n self._s3_client().upload_file(file_path, Bucket=self.bucket_name, Key=self._normalize_path(file_path))\n\n def _s3_client(self) -> Any:\n \"\"\"Creates and returns an S3 client using the provided AWS access key ID and secret access key.\n\n Returns:\n Any: A boto3 S3 client instance.\n \"\"\"\n try:\n import boto3\n except ImportError as e:\n msg = \"boto3 is not installed. Please install it using `uv pip install boto3`.\"\n raise ImportError(msg) from e\n\n return boto3.client(\n \"s3\",\n aws_access_key_id=self.aws_access_key_id,\n aws_secret_access_key=self.aws_secret_access_key,\n )\n\n def _normalize_path(self, file_path) -> str:\n \"\"\"Process the file path based on the s3_prefix and path_as_prefix.\n\n Args:\n file_path (str): The original file path.\n s3_prefix (str): The S3 prefix to use.\n path_as_prefix (bool): Whether to use the file path as the S3 prefix.\n\n Returns:\n str: The processed file path.\n \"\"\"\n prefix = self.s3_prefix\n strip_path = self.strip_path\n processed_path: str = file_path\n\n if strip_path:\n # Filename only\n processed_path = Path(file_path).name\n\n # Concatenate the s3_prefix if it exists\n if prefix:\n processed_path = str(Path(prefix) / processed_path)\n\n return processed_path\n"},"data_inputs":{"_input_type":"HandleInput","advanced":false,"display_name":"Data Inputs","dynamic":false,"info":"The data to split.","input_types":["Data"],"list":true,"list_add_label":"Add More","name":"data_inputs","placeholder":"","required":true,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"s3_prefix":{"_input_type":"StrInput","advanced":true,"display_name":"S3 Prefix","dynamic":false,"info":"Prefix for all files.","list":false,"list_add_label":"Add More","load_from_db":false,"name":"s3_prefix","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"strategy":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Strategy for file upload","dynamic":false,"external_options":{},"info":"Choose the strategy to upload the file. By Data means that the source file is parsed and stored as LangFlow data. By File Name means that the source file is uploaded as is.","name":"strategy","options":["Store Data","Store Original File"],"options_metadata":[],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"By Data"},"strip_path":{"_input_type":"BoolInput","advanced":true,"display_name":"Strip Path","dynamic":false,"info":"Removes path from file path.","list":false,"list_add_label":"Add More","name":"strip_path","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false}},"tool_mode":false}}],["anthropic",{"AnthropicModel":{"base_classes":["LanguageModel","Message"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Generate text using Anthropic's Messages API and models.","display_name":"Anthropic","documentation":"","edited":false,"field_order":["input_value","system_message","stream","max_tokens","model_name","api_key","temperature","base_url","tool_model_enabled"],"frozen":false,"icon":"Anthropic","legacy":false,"metadata":{"code_hash":"7c894c5a66ba","dependencies":{"dependencies":[{"name":"requests","version":"2.32.5"},{"name":"pydantic","version":"2.10.6"},{"name":"lfx","version":null},{"name":"langchain_anthropic","version":"0.3.14"},{"name":"anthropic","version":"0.71.0"}],"total_dependencies":5},"keywords":["model","llm","language model","large language model"],"module":"lfx.components.anthropic.anthropic.AnthropicModelComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Model Response","group_outputs":false,"method":"text_response","name":"text_output","selected":"Message","tool_mode":true,"types":["Message"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"Language Model","group_outputs":false,"method":"build_model","name":"model_output","selected":"LanguageModel","tool_mode":true,"types":["LanguageModel"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Anthropic API Key","dynamic":false,"info":"Your Anthropic API key.","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str"},"base_url":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Anthropic API URL","dynamic":false,"info":"Endpoint of the Anthropic API. Defaults to 'https://api.anthropic.com' if not specified.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"https://api.anthropic.com"},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from typing import Any, cast\n\nimport requests\nfrom pydantic import ValidationError\n\nfrom lfx.base.models.anthropic_constants import (\n ANTHROPIC_MODELS,\n DEFAULT_ANTHROPIC_API_URL,\n TOOL_CALLING_SUPPORTED_ANTHROPIC_MODELS,\n TOOL_CALLING_UNSUPPORTED_ANTHROPIC_MODELS,\n)\nfrom lfx.base.models.model import LCModelComponent\nfrom lfx.field_typing import LanguageModel\nfrom lfx.field_typing.range_spec import RangeSpec\nfrom lfx.io import BoolInput, DropdownInput, IntInput, MessageTextInput, SecretStrInput, SliderInput\nfrom lfx.log.logger import logger\nfrom lfx.schema.dotdict import dotdict\n\n\nclass AnthropicModelComponent(LCModelComponent):\n display_name = \"Anthropic\"\n description = \"Generate text using Anthropic's Messages API and models.\"\n icon = \"Anthropic\"\n name = \"AnthropicModel\"\n\n inputs = [\n *LCModelComponent.get_base_inputs(),\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n value=4096,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n options=ANTHROPIC_MODELS,\n refresh_button=True,\n value=ANTHROPIC_MODELS[0],\n combobox=True,\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"Anthropic API Key\",\n info=\"Your Anthropic API key.\",\n value=None,\n required=True,\n real_time_refresh=True,\n ),\n SliderInput(\n name=\"temperature\",\n display_name=\"Temperature\",\n value=0.1,\n info=\"Run inference with this temperature. Must by in the closed interval [0.0, 1.0].\",\n range_spec=RangeSpec(min=0, max=1, step=0.01),\n advanced=True,\n ),\n MessageTextInput(\n name=\"base_url\",\n display_name=\"Anthropic API URL\",\n info=\"Endpoint of the Anthropic API. Defaults to 'https://api.anthropic.com' if not specified.\",\n value=DEFAULT_ANTHROPIC_API_URL,\n real_time_refresh=True,\n advanced=True,\n ),\n BoolInput(\n name=\"tool_model_enabled\",\n display_name=\"Enable Tool Models\",\n info=(\n \"Select if you want to use models that can work with tools. If yes, only those models will be shown.\"\n ),\n advanced=False,\n value=False,\n real_time_refresh=True,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n try:\n from langchain_anthropic.chat_models import ChatAnthropic\n except ImportError as e:\n msg = \"langchain_anthropic is not installed. Please install it with `pip install langchain_anthropic`.\"\n raise ImportError(msg) from e\n try:\n max_tokens_value = getattr(self, \"max_tokens\", \"\")\n max_tokens_value = 4096 if max_tokens_value == \"\" else int(max_tokens_value)\n output = ChatAnthropic(\n model=self.model_name,\n anthropic_api_key=self.api_key,\n max_tokens=max_tokens_value,\n temperature=self.temperature,\n anthropic_api_url=self.base_url or DEFAULT_ANTHROPIC_API_URL,\n streaming=self.stream,\n )\n except ValidationError:\n raise\n except Exception as e:\n msg = \"Could not connect to Anthropic API.\"\n raise ValueError(msg) from e\n\n return output\n\n def get_models(self, *, tool_model_enabled: bool | None = None) -> list[str]:\n try:\n import anthropic\n\n client = anthropic.Anthropic(api_key=self.api_key)\n models = client.models.list(limit=20).data\n model_ids = ANTHROPIC_MODELS + [model.id for model in models]\n except (ImportError, ValueError, requests.exceptions.RequestException) as e:\n logger.exception(f\"Error getting model names: {e}\")\n model_ids = ANTHROPIC_MODELS\n\n if tool_model_enabled:\n try:\n from langchain_anthropic.chat_models import ChatAnthropic\n except ImportError as e:\n msg = \"langchain_anthropic is not installed. Please install it with `pip install langchain_anthropic`.\"\n raise ImportError(msg) from e\n\n # Create a new list instead of modifying while iterating\n filtered_models = []\n for model in model_ids:\n if model in TOOL_CALLING_SUPPORTED_ANTHROPIC_MODELS:\n filtered_models.append(model)\n continue\n\n model_with_tool = ChatAnthropic(\n model=model, # Use the current model being checked\n anthropic_api_key=self.api_key,\n anthropic_api_url=cast(\"str\", self.base_url) or DEFAULT_ANTHROPIC_API_URL,\n )\n\n if (\n not self.supports_tool_calling(model_with_tool)\n or model in TOOL_CALLING_UNSUPPORTED_ANTHROPIC_MODELS\n ):\n continue\n\n filtered_models.append(model)\n\n return filtered_models\n\n return model_ids\n\n def _get_exception_message(self, exception: Exception) -> str | None:\n \"\"\"Get a message from an Anthropic exception.\n\n Args:\n exception (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from anthropic import BadRequestError\n except ImportError:\n return None\n if isinstance(exception, BadRequestError):\n message = exception.body.get(\"error\", {}).get(\"message\")\n if message:\n return message\n return None\n\n def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None):\n if \"base_url\" in build_config and build_config[\"base_url\"][\"value\"] is None:\n build_config[\"base_url\"][\"value\"] = DEFAULT_ANTHROPIC_API_URL\n self.base_url = DEFAULT_ANTHROPIC_API_URL\n if field_name in {\"base_url\", \"model_name\", \"tool_model_enabled\", \"api_key\"} and field_value:\n try:\n if len(self.api_key) == 0:\n ids = ANTHROPIC_MODELS\n else:\n try:\n ids = self.get_models(tool_model_enabled=self.tool_model_enabled)\n except (ImportError, ValueError, requests.exceptions.RequestException) as e:\n logger.exception(f\"Error getting model names: {e}\")\n ids = ANTHROPIC_MODELS\n build_config.setdefault(\"model_name\", {})\n build_config[\"model_name\"][\"options\"] = ids\n build_config[\"model_name\"].setdefault(\"value\", ids[0])\n build_config[\"model_name\"][\"combobox\"] = True\n except Exception as e:\n msg = f\"Error getting model names: {e}\"\n raise ValueError(msg) from e\n return build_config\n"},"input_value":{"_input_type":"MessageInput","advanced":false,"display_name":"Input","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"input_value","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"max_tokens":{"_input_type":"IntInput","advanced":true,"display_name":"Max Tokens","dynamic":false,"info":"The maximum number of tokens to generate. Set to 0 for unlimited tokens.","list":false,"list_add_label":"Add More","name":"max_tokens","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":4096},"model_name":{"_input_type":"DropdownInput","advanced":false,"combobox":true,"dialog_inputs":{},"display_name":"Model Name","dynamic":false,"external_options":{},"info":"","name":"model_name","options":["claude-sonnet-4-5-20250929","claude-opus-4-1-20250805","claude-opus-4-20250514","claude-sonnet-4-20250514","claude-3-7-sonnet-latest","claude-3-5-sonnet-latest","claude-3-5-haiku-latest","claude-3-opus-latest"],"options_metadata":[],"placeholder":"","refresh_button":true,"required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"claude-sonnet-4-5-20250929"},"stream":{"_input_type":"BoolInput","advanced":true,"display_name":"Stream","dynamic":false,"info":"Stream the response from the model. Streaming works only in Chat.","list":false,"list_add_label":"Add More","name":"stream","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"system_message":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"System Message","dynamic":false,"info":"System message to pass to the model.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"system_message","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"temperature":{"_input_type":"SliderInput","advanced":true,"display_name":"Temperature","dynamic":false,"info":"Run inference with this temperature. Must by in the closed interval [0.0, 1.0].","max_label":"","max_label_icon":"","min_label":"","min_label_icon":"","name":"temperature","placeholder":"","range_spec":{"max":1.0,"min":0.0,"step":0.01,"step_type":"float"},"required":false,"show":true,"slider_buttons":false,"slider_buttons_options":[],"slider_input":false,"title_case":false,"tool_mode":false,"type":"slider","value":0.1},"tool_model_enabled":{"_input_type":"BoolInput","advanced":false,"display_name":"Enable Tool Models","dynamic":false,"info":"Select if you want to use models that can work with tools. If yes, only those models will be shown.","list":false,"list_add_label":"Add More","name":"tool_model_enabled","placeholder":"","real_time_refresh":true,"required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false}},"tool_mode":false}}],["apify",{"ApifyActors":{"base_classes":["Data","Tool"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Use Apify Actors to extract data from hundreds of places fast. This component can be used in a flow to retrieve data or as a tool with an agent.","display_name":"Apify Actors","documentation":"http://docs.langflow.org/integrations-apify","edited":false,"field_order":["apify_token","actor_id","run_input","dataset_fields","flatten_dataset"],"frozen":false,"icon":"Apify","legacy":false,"metadata":{"code_hash":"9fcfdb0fb080","dependencies":{"dependencies":[{"name":"apify_client","version":"1.12.2"},{"name":"langchain_community","version":"0.3.21"},{"name":"langchain_core","version":"0.3.79"},{"name":"pydantic","version":"2.10.6"},{"name":"lfx","version":null}],"total_dependencies":5},"module":"lfx.components.apify.apify_actor.ApifyActorsComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Output","group_outputs":false,"method":"run_model","name":"output","selected":"Data","tool_mode":true,"types":["Data"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"Tool","group_outputs":false,"method":"build_tool","name":"tool","selected":"Tool","tool_mode":true,"types":["Tool"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","actor_id":{"_input_type":"StrInput","advanced":false,"display_name":"Actor","dynamic":false,"info":"Actor name from Apify store to run. For example 'apify/website-content-crawler' to use the Website Content Crawler Actor.","list":false,"list_add_label":"Add More","load_from_db":false,"name":"actor_id","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"apify/website-content-crawler"},"apify_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Apify Token","dynamic":false,"info":"The API token for the Apify account.","input_types":[],"load_from_db":true,"name":"apify_token","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"import json\nimport string\nfrom typing import Any, cast\n\nfrom apify_client import ApifyClient\nfrom langchain_community.document_loaders.apify_dataset import ApifyDatasetLoader\nfrom langchain_core.tools import BaseTool\nfrom pydantic import BaseModel, Field, field_serializer\n\nfrom lfx.custom.custom_component.component import Component\nfrom lfx.field_typing import Tool\nfrom lfx.inputs.inputs import BoolInput\nfrom lfx.io import MultilineInput, Output, SecretStrInput, StrInput\nfrom lfx.schema.data import Data\n\nMAX_DESCRIPTION_LEN = 250\n\n\nclass ApifyActorsComponent(Component):\n display_name = \"Apify Actors\"\n description = (\n \"Use Apify Actors to extract data from hundreds of places fast. \"\n \"This component can be used in a flow to retrieve data or as a tool with an agent.\"\n )\n documentation: str = \"http://docs.langflow.org/integrations-apify\"\n icon = \"Apify\"\n name = \"ApifyActors\"\n\n inputs = [\n SecretStrInput(\n name=\"apify_token\",\n display_name=\"Apify Token\",\n info=\"The API token for the Apify account.\",\n required=True,\n password=True,\n ),\n StrInput(\n name=\"actor_id\",\n display_name=\"Actor\",\n info=(\n \"Actor name from Apify store to run. For example 'apify/website-content-crawler' \"\n \"to use the Website Content Crawler Actor.\"\n ),\n value=\"apify/website-content-crawler\",\n required=True,\n ),\n # multiline input is more pleasant to use than the nested dict input\n MultilineInput(\n name=\"run_input\",\n display_name=\"Run input\",\n info=(\n 'The JSON input for the Actor run. For example for the \"apify/website-content-crawler\" Actor: '\n '{\"startUrls\":[{\"url\":\"https://docs.apify.com/academy/web-scraping-for-beginners\"}],\"maxCrawlDepth\":0}'\n ),\n value='{\"startUrls\":[{\"url\":\"https://docs.apify.com/academy/web-scraping-for-beginners\"}],\"maxCrawlDepth\":0}',\n required=True,\n ),\n MultilineInput(\n name=\"dataset_fields\",\n display_name=\"Output fields\",\n info=(\n \"Fields to extract from the dataset, split by commas. \"\n \"Other fields will be ignored. Dots in nested structures will be replaced by underscores. \"\n \"Sample input: 'text, metadata.title'. \"\n \"Sample output: {'text': 'page content here', 'metadata_title': 'page title here'}. \"\n \"For example, for the 'apify/website-content-crawler' Actor, you can extract the 'markdown' field, \"\n \"which is the content of the website in markdown format.\"\n ),\n ),\n BoolInput(\n name=\"flatten_dataset\",\n display_name=\"Flatten output\",\n info=(\n \"The output dataset will be converted from a nested format to a flat structure. \"\n \"Dots in nested structure will be replaced by underscores. \"\n \"This is useful for further processing of the Data object. \"\n \"For example, {'a': {'b': 1}} will be flattened to {'a_b': 1}.\"\n ),\n ),\n ]\n\n outputs = [\n Output(display_name=\"Output\", name=\"output\", type_=list[Data], method=\"run_model\"),\n Output(display_name=\"Tool\", name=\"tool\", type_=Tool, method=\"build_tool\"),\n ]\n\n def __init__(self, *args, **kwargs) -> None:\n super().__init__(*args, **kwargs)\n self._apify_client: ApifyClient | None = None\n\n def run_model(self) -> list[Data]:\n \"\"\"Run the Actor and return node output.\"\"\"\n input_ = json.loads(self.run_input)\n fields = ApifyActorsComponent.parse_dataset_fields(self.dataset_fields) if self.dataset_fields else None\n res = self.run_actor(self.actor_id, input_, fields=fields)\n if self.flatten_dataset:\n res = [ApifyActorsComponent.flatten(item) for item in res]\n data = [Data(data=item) for item in res]\n\n self.status = data\n return data\n\n def build_tool(self) -> Tool:\n \"\"\"Build a tool for an agent that runs the Apify Actor.\"\"\"\n actor_id = self.actor_id\n\n build = self._get_actor_latest_build(actor_id)\n readme = build.get(\"readme\", \"\")[:250] + \"...\"\n if not (input_schema_str := build.get(\"inputSchema\")):\n msg = \"Input schema not found\"\n raise ValueError(msg)\n input_schema = json.loads(input_schema_str)\n properties, required = ApifyActorsComponent.get_actor_input_schema_from_build(input_schema)\n properties = {\"run_input\": properties}\n\n # works from input schema\n info_ = [\n (\n \"JSON encoded as a string with input schema (STRICTLY FOLLOW JSON FORMAT AND SCHEMA):\\n\\n\"\n f\"{json.dumps(properties, separators=(',', ':'))}\"\n )\n ]\n if required:\n info_.append(\"\\n\\nRequired fields:\\n\" + \"\\n\".join(required))\n\n info = \"\".join(info_)\n\n input_model_cls = ApifyActorsComponent.create_input_model_class(info)\n tool_cls = ApifyActorsComponent.create_tool_class(self, readme, input_model_cls, actor_id)\n\n return cast(\"Tool\", tool_cls())\n\n @staticmethod\n def create_tool_class(\n parent: \"ApifyActorsComponent\", readme: str, input_model: type[BaseModel], actor_id: str\n ) -> type[BaseTool]:\n \"\"\"Create a tool class that runs an Apify Actor.\"\"\"\n\n class ApifyActorRun(BaseTool):\n \"\"\"Tool that runs Apify Actors.\"\"\"\n\n name: str = f\"apify_actor_{ApifyActorsComponent.actor_id_to_tool_name(actor_id)}\"\n description: str = (\n \"Run an Apify Actor with the given input. \"\n \"Here is a part of the currently loaded Actor README:\\n\\n\"\n f\"{readme}\\n\\n\"\n )\n\n args_schema: type[BaseModel] = input_model\n\n @field_serializer(\"args_schema\")\n def serialize_args_schema(self, args_schema):\n return args_schema.schema()\n\n def _run(self, run_input: str | dict) -> str:\n \"\"\"Use the Apify Actor.\"\"\"\n input_dict = json.loads(run_input) if isinstance(run_input, str) else run_input\n\n # retrieve if nested, just in case\n input_dict = input_dict.get(\"run_input\", input_dict)\n\n res = parent.run_actor(actor_id, input_dict)\n return \"\\n\\n\".join([ApifyActorsComponent.dict_to_json_str(item) for item in res])\n\n return ApifyActorRun\n\n @staticmethod\n def create_input_model_class(description: str) -> type[BaseModel]:\n \"\"\"Create a Pydantic model class for the Actor input.\"\"\"\n\n class ActorInput(BaseModel):\n \"\"\"Input for the Apify Actor tool.\"\"\"\n\n run_input: str = Field(..., description=description)\n\n return ActorInput\n\n def _get_apify_client(self) -> ApifyClient:\n \"\"\"Get the Apify client.\n\n Is created if not exists or token changes.\n \"\"\"\n if not self.apify_token:\n msg = \"API token is required.\"\n raise ValueError(msg)\n # when token changes, create a new client\n if self._apify_client is None or self._apify_client.token != self.apify_token:\n self._apify_client = ApifyClient(self.apify_token)\n if httpx_client := self._apify_client.http_client.httpx_client:\n httpx_client.headers[\"user-agent\"] += \"; Origin/langflow\"\n return self._apify_client\n\n def _get_actor_latest_build(self, actor_id: str) -> dict:\n \"\"\"Get the latest build of an Actor from the default build tag.\"\"\"\n client = self._get_apify_client()\n actor = client.actor(actor_id=actor_id)\n if not (actor_info := actor.get()):\n msg = f\"Actor {actor_id} not found.\"\n raise ValueError(msg)\n\n default_build_tag = actor_info.get(\"defaultRunOptions\", {}).get(\"build\")\n latest_build_id = actor_info.get(\"taggedBuilds\", {}).get(default_build_tag, {}).get(\"buildId\")\n\n if (build := client.build(latest_build_id).get()) is None:\n msg = f\"Build {latest_build_id} not found.\"\n raise ValueError(msg)\n\n return build\n\n @staticmethod\n def get_actor_input_schema_from_build(input_schema: dict) -> tuple[dict, list[str]]:\n \"\"\"Get the input schema from the Actor build.\n\n Trim the description to 250 characters.\n \"\"\"\n properties = input_schema.get(\"properties\", {})\n required = input_schema.get(\"required\", [])\n\n properties_out: dict = {}\n for item, meta in properties.items():\n properties_out[item] = {}\n if desc := meta.get(\"description\"):\n properties_out[item][\"description\"] = (\n desc[:MAX_DESCRIPTION_LEN] + \"...\" if len(desc) > MAX_DESCRIPTION_LEN else desc\n )\n for key_name in (\"type\", \"default\", \"prefill\", \"enum\"):\n if value := meta.get(key_name):\n properties_out[item][key_name] = value\n\n return properties_out, required\n\n def _get_run_dataset_id(self, run_id: str) -> str:\n \"\"\"Get the dataset id from the run id.\"\"\"\n client = self._get_apify_client()\n run = client.run(run_id=run_id)\n if (dataset := run.dataset().get()) is None:\n msg = \"Dataset not found\"\n raise ValueError(msg)\n if (did := dataset.get(\"id\")) is None:\n msg = \"Dataset id not found\"\n raise ValueError(msg)\n return did\n\n @staticmethod\n def dict_to_json_str(d: dict) -> str:\n \"\"\"Convert a dictionary to a JSON string.\"\"\"\n return json.dumps(d, separators=(\",\", \":\"), default=lambda _: \"\")\n\n @staticmethod\n def actor_id_to_tool_name(actor_id: str) -> str:\n \"\"\"Turn actor_id into a valid tool name.\n\n Tool name must only contain letters, numbers, underscores, dashes,\n and cannot contain spaces.\n \"\"\"\n valid_chars = string.ascii_letters + string.digits + \"_-\"\n return \"\".join(char if char in valid_chars else \"_\" for char in actor_id)\n\n def run_actor(self, actor_id: str, run_input: dict, fields: list[str] | None = None) -> list[dict]:\n \"\"\"Run an Apify Actor and return the output dataset.\n\n Args:\n actor_id: Actor name from Apify store to run.\n run_input: JSON input for the Actor.\n fields: List of fields to extract from the dataset. Other fields will be ignored.\n \"\"\"\n client = self._get_apify_client()\n if (details := client.actor(actor_id=actor_id).call(run_input=run_input, wait_secs=1)) is None:\n msg = \"Actor run details not found\"\n raise ValueError(msg)\n if (run_id := details.get(\"id\")) is None:\n msg = \"Run id not found\"\n raise ValueError(msg)\n\n if (run_client := client.run(run_id)) is None:\n msg = \"Run client not found\"\n raise ValueError(msg)\n\n # stream logs\n with run_client.log().stream() as response:\n if response:\n for line in response.iter_lines():\n self.log(line)\n run_client.wait_for_finish()\n\n dataset_id = self._get_run_dataset_id(run_id)\n\n loader = ApifyDatasetLoader(\n dataset_id=dataset_id,\n dataset_mapping_function=lambda item: item\n if not fields\n else {k.replace(\".\", \"_\"): ApifyActorsComponent.get_nested_value(item, k) for k in fields},\n )\n return loader.load()\n\n @staticmethod\n def get_nested_value(data: dict[str, Any], key: str) -> Any:\n \"\"\"Get a nested value from a dictionary.\"\"\"\n keys = key.split(\".\")\n value = data\n for k in keys:\n if not isinstance(value, dict) or k not in value:\n return None\n value = value[k]\n return value\n\n @staticmethod\n def parse_dataset_fields(dataset_fields: str) -> list[str]:\n \"\"\"Convert a string of comma-separated fields into a list of fields.\"\"\"\n dataset_fields = dataset_fields.replace(\"'\", \"\").replace('\"', \"\").replace(\"`\", \"\")\n return [field.strip() for field in dataset_fields.split(\",\")]\n\n @staticmethod\n def flatten(d: dict) -> dict:\n \"\"\"Flatten a nested dictionary.\"\"\"\n\n def items():\n for key, value in d.items():\n if isinstance(value, dict):\n for subkey, subvalue in ApifyActorsComponent.flatten(value).items():\n yield key + \"_\" + subkey, subvalue\n else:\n yield key, value\n\n return dict(items())\n"},"dataset_fields":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"Output fields","dynamic":false,"info":"Fields to extract from the dataset, split by commas. Other fields will be ignored. Dots in nested structures will be replaced by underscores. Sample input: 'text, metadata.title'. Sample output: {'text': 'page content here', 'metadata_title': 'page title here'}. For example, for the 'apify/website-content-crawler' Actor, you can extract the 'markdown' field, which is the content of the website in markdown format.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"dataset_fields","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"flatten_dataset":{"_input_type":"BoolInput","advanced":false,"display_name":"Flatten output","dynamic":false,"info":"The output dataset will be converted from a nested format to a flat structure. Dots in nested structure will be replaced by underscores. This is useful for further processing of the Data object. For example, {'a': {'b': 1}} will be flattened to {'a_b': 1}.","list":false,"list_add_label":"Add More","name":"flatten_dataset","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"run_input":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"Run input","dynamic":false,"info":"The JSON input for the Actor run. For example for the \"apify/website-content-crawler\" Actor: {\"startUrls\":[{\"url\":\"https://docs.apify.com/academy/web-scraping-for-beginners\"}],\"maxCrawlDepth\":0}","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"run_input","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"{\"startUrls\":[{\"url\":\"https://docs.apify.com/academy/web-scraping-for-beginners\"}],\"maxCrawlDepth\":0}"}},"tool_mode":false}}],["arxiv",{"ArXivComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Search and retrieve papers from arXiv.org","display_name":"arXiv","documentation":"","edited":false,"field_order":["search_query","search_type","max_results"],"frozen":false,"icon":"arXiv","legacy":false,"metadata":{"code_hash":"219239ee2b48","dependencies":{"dependencies":[{"name":"defusedxml","version":"0.7.1"},{"name":"lfx","version":null}],"total_dependencies":2},"module":"lfx.components.arxiv.arxiv.ArXivComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"search_papers_dataframe","name":"dataframe","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"import urllib.request\nfrom urllib.parse import urlparse\nfrom xml.etree.ElementTree import Element\n\nfrom defusedxml.ElementTree import fromstring\n\nfrom lfx.custom.custom_component.component import Component\nfrom lfx.io import DropdownInput, IntInput, MessageTextInput, Output\nfrom lfx.schema.data import Data\nfrom lfx.schema.dataframe import DataFrame\n\n\nclass ArXivComponent(Component):\n display_name = \"arXiv\"\n description = \"Search and retrieve papers from arXiv.org\"\n icon = \"arXiv\"\n\n inputs = [\n MessageTextInput(\n name=\"search_query\",\n display_name=\"Search Query\",\n info=\"The search query for arXiv papers (e.g., 'quantum computing')\",\n tool_mode=True,\n ),\n DropdownInput(\n name=\"search_type\",\n display_name=\"Search Field\",\n info=\"The field to search in\",\n options=[\"all\", \"title\", \"abstract\", \"author\", \"cat\"], # cat is for category\n value=\"all\",\n ),\n IntInput(\n name=\"max_results\",\n display_name=\"Max Results\",\n info=\"Maximum number of results to return\",\n value=10,\n ),\n ]\n\n outputs = [\n Output(display_name=\"DataFrame\", name=\"dataframe\", method=\"search_papers_dataframe\"),\n ]\n\n def build_query_url(self) -> str:\n \"\"\"Build the arXiv API query URL.\"\"\"\n base_url = \"http://export.arxiv.org/api/query?\"\n\n # Build the search query based on search type\n if self.search_type == \"all\":\n search_query = self.search_query # No prefix for all fields\n else:\n # Map dropdown values to ArXiv API prefixes\n prefix_map = {\"title\": \"ti\", \"abstract\": \"abs\", \"author\": \"au\", \"cat\": \"cat\"}\n prefix = prefix_map.get(self.search_type, \"\")\n search_query = f\"{prefix}:{self.search_query}\"\n\n # URL parameters\n params = {\n \"search_query\": search_query,\n \"max_results\": str(self.max_results),\n }\n\n # Convert params to URL query string\n query_string = \"&\".join([f\"{k}={urllib.parse.quote(str(v))}\" for k, v in params.items()])\n\n return base_url + query_string\n\n def parse_atom_response(self, response_text: str) -> list[dict]:\n \"\"\"Parse the Atom XML response from arXiv.\"\"\"\n # Parse XML safely using defusedxml\n root = fromstring(response_text)\n\n # Define namespace dictionary for XML parsing\n ns = {\"atom\": \"http://www.w3.org/2005/Atom\", \"arxiv\": \"http://arxiv.org/schemas/atom\"}\n\n papers = []\n # Process each entry (paper)\n for entry in root.findall(\"atom:entry\", ns):\n paper = {\n \"id\": self._get_text(entry, \"atom:id\", ns),\n \"title\": self._get_text(entry, \"atom:title\", ns),\n \"summary\": self._get_text(entry, \"atom:summary\", ns),\n \"published\": self._get_text(entry, \"atom:published\", ns),\n \"updated\": self._get_text(entry, \"atom:updated\", ns),\n \"authors\": [author.find(\"atom:name\", ns).text for author in entry.findall(\"atom:author\", ns)],\n \"arxiv_url\": self._get_link(entry, \"alternate\", ns),\n \"pdf_url\": self._get_link(entry, \"related\", ns),\n \"comment\": self._get_text(entry, \"arxiv:comment\", ns),\n \"journal_ref\": self._get_text(entry, \"arxiv:journal_ref\", ns),\n \"primary_category\": self._get_category(entry, ns),\n \"categories\": [cat.get(\"term\") for cat in entry.findall(\"atom:category\", ns)],\n }\n papers.append(paper)\n\n return papers\n\n def _get_text(self, element: Element, path: str, ns: dict) -> str | None:\n \"\"\"Safely extract text from an XML element.\"\"\"\n el = element.find(path, ns)\n return el.text.strip() if el is not None and el.text else None\n\n def _get_link(self, element: Element, rel: str, ns: dict) -> str | None:\n \"\"\"Get link URL based on relation type.\"\"\"\n for link in element.findall(\"atom:link\", ns):\n if link.get(\"rel\") == rel:\n return link.get(\"href\")\n return None\n\n def _get_category(self, element: Element, ns: dict) -> str | None:\n \"\"\"Get primary category.\"\"\"\n cat = element.find(\"arxiv:primary_category\", ns)\n return cat.get(\"term\") if cat is not None else None\n\n def run_model(self) -> DataFrame:\n return self.search_papers_dataframe()\n\n def search_papers(self) -> list[Data]:\n \"\"\"Search arXiv and return results.\"\"\"\n try:\n # Build the query URL\n url = self.build_query_url()\n\n # Validate URL scheme and host\n parsed_url = urlparse(url)\n if parsed_url.scheme not in {\"http\", \"https\"}:\n error_msg = f\"Invalid URL scheme: {parsed_url.scheme}\"\n raise ValueError(error_msg)\n if parsed_url.hostname != \"export.arxiv.org\":\n error_msg = f\"Invalid host: {parsed_url.hostname}\"\n raise ValueError(error_msg)\n\n # Create a custom opener that only allows http/https schemes\n class RestrictedHTTPHandler(urllib.request.HTTPHandler):\n def http_open(self, req):\n return super().http_open(req)\n\n class RestrictedHTTPSHandler(urllib.request.HTTPSHandler):\n def https_open(self, req):\n return super().https_open(req)\n\n # Build opener with restricted handlers\n opener = urllib.request.build_opener(RestrictedHTTPHandler, RestrictedHTTPSHandler)\n urllib.request.install_opener(opener)\n\n # Make the request with validated URL using restricted opener\n response = opener.open(url)\n response_text = response.read().decode(\"utf-8\")\n\n # Parse the response\n papers = self.parse_atom_response(response_text)\n\n # Convert to Data objects\n results = [Data(data=paper) for paper in papers]\n self.status = results\n except (urllib.error.URLError, ValueError) as e:\n error_data = Data(data={\"error\": f\"Request error: {e!s}\"})\n self.status = error_data\n return [error_data]\n else:\n return results\n\n def search_papers_dataframe(self) -> DataFrame:\n \"\"\"Convert the Arxiv search results to a DataFrame.\n\n Returns:\n DataFrame: A DataFrame containing the search results.\n \"\"\"\n data = self.search_papers()\n return DataFrame(data)\n"},"max_results":{"_input_type":"IntInput","advanced":false,"display_name":"Max Results","dynamic":false,"info":"Maximum number of results to return","list":false,"list_add_label":"Add More","name":"max_results","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":10},"search_query":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Search Query","dynamic":false,"info":"The search query for arXiv papers (e.g., 'quantum computing')","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"search_query","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"search_type":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Search Field","dynamic":false,"external_options":{},"info":"The field to search in","name":"search_type","options":["all","title","abstract","author","cat"],"options_metadata":[],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"all"}},"tool_mode":false}}],["assemblyai",{"AssemblyAIGetSubtitles":{"base_classes":["Data"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Export your transcript in SRT or VTT format for subtitles and closed captions","display_name":"AssemblyAI Get Subtitles","documentation":"https://www.assemblyai.com/docs","edited":false,"field_order":["api_key","transcription_result","subtitle_format","chars_per_caption"],"frozen":false,"icon":"AssemblyAI","legacy":false,"metadata":{"code_hash":"533d1fcf7c7a","dependencies":{"dependencies":[{"name":"assemblyai","version":"0.35.1"},{"name":"lfx","version":null}],"total_dependencies":2},"module":"lfx.components.assemblyai.assemblyai_get_subtitles.AssemblyAIGetSubtitles"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Subtitles","group_outputs":false,"method":"get_subtitles","name":"subtitles","selected":"Data","tool_mode":true,"types":["Data"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Assembly API Key","dynamic":false,"info":"Your AssemblyAI API key. You can get one from https://www.assemblyai.com/","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""},"chars_per_caption":{"_input_type":"IntInput","advanced":true,"display_name":"Characters per Caption","dynamic":false,"info":"The maximum number of characters per caption (0 for no limit)","list":false,"list_add_label":"Add More","name":"chars_per_caption","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":0},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"import assemblyai as aai\n\nfrom lfx.custom.custom_component.component import Component\nfrom lfx.io import DataInput, DropdownInput, IntInput, Output, SecretStrInput\nfrom lfx.log.logger import logger\nfrom lfx.schema.data import Data\n\n\nclass AssemblyAIGetSubtitles(Component):\n display_name = \"AssemblyAI Get Subtitles\"\n description = \"Export your transcript in SRT or VTT format for subtitles and closed captions\"\n documentation = \"https://www.assemblyai.com/docs\"\n icon = \"AssemblyAI\"\n\n inputs = [\n SecretStrInput(\n name=\"api_key\",\n display_name=\"Assembly API Key\",\n info=\"Your AssemblyAI API key. You can get one from https://www.assemblyai.com/\",\n required=True,\n ),\n DataInput(\n name=\"transcription_result\",\n display_name=\"Transcription Result\",\n info=\"The transcription result from AssemblyAI\",\n required=True,\n ),\n DropdownInput(\n name=\"subtitle_format\",\n display_name=\"Subtitle Format\",\n options=[\"srt\", \"vtt\"],\n value=\"srt\",\n info=\"The format of the captions (SRT or VTT)\",\n ),\n IntInput(\n name=\"chars_per_caption\",\n display_name=\"Characters per Caption\",\n info=\"The maximum number of characters per caption (0 for no limit)\",\n value=0,\n advanced=True,\n ),\n ]\n\n outputs = [\n Output(display_name=\"Subtitles\", name=\"subtitles\", method=\"get_subtitles\"),\n ]\n\n def get_subtitles(self) -> Data:\n aai.settings.api_key = self.api_key\n\n # check if it's an error message from the previous step\n if self.transcription_result.data.get(\"error\"):\n self.status = self.transcription_result.data[\"error\"]\n return self.transcription_result\n\n try:\n transcript_id = self.transcription_result.data[\"id\"]\n transcript = aai.Transcript.get_by_id(transcript_id)\n except Exception as e: # noqa: BLE001\n error = f\"Getting transcription failed: {e}\"\n logger.debug(error, exc_info=True)\n self.status = error\n return Data(data={\"error\": error})\n\n if transcript.status == aai.TranscriptStatus.completed:\n subtitles = None\n chars_per_caption = self.chars_per_caption if self.chars_per_caption > 0 else None\n if self.subtitle_format == \"srt\":\n subtitles = transcript.export_subtitles_srt(chars_per_caption)\n else:\n subtitles = transcript.export_subtitles_vtt(chars_per_caption)\n\n result = Data(\n subtitles=subtitles,\n format=self.subtitle_format,\n transcript_id=transcript_id,\n chars_per_caption=chars_per_caption,\n )\n\n self.status = result\n return result\n self.status = transcript.error\n return Data(data={\"error\": transcript.error})\n"},"subtitle_format":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Subtitle Format","dynamic":false,"external_options":{},"info":"The format of the captions (SRT or VTT)","name":"subtitle_format","options":["srt","vtt"],"options_metadata":[],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"srt"},"transcription_result":{"_input_type":"DataInput","advanced":false,"display_name":"Transcription Result","dynamic":false,"info":"The transcription result from AssemblyAI","input_types":["Data"],"list":false,"list_add_label":"Add More","name":"transcription_result","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"other","value":""}},"tool_mode":false},"AssemblyAILeMUR":{"base_classes":["Data"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Apply Large Language Models to spoken data using the AssemblyAI LeMUR framework","display_name":"AssemblyAI LeMUR","documentation":"https://www.assemblyai.com/docs/lemur","edited":false,"field_order":["api_key","transcription_result","prompt","final_model","temperature","max_output_size","endpoint","questions","transcript_ids"],"frozen":false,"icon":"AssemblyAI","legacy":false,"metadata":{"code_hash":"8c96738ab967","dependencies":{"dependencies":[{"name":"assemblyai","version":"0.35.1"},{"name":"lfx","version":null}],"total_dependencies":2},"module":"lfx.components.assemblyai.assemblyai_lemur.AssemblyAILeMUR"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"LeMUR Response","group_outputs":false,"method":"run_lemur","name":"lemur_response","selected":"Data","tool_mode":true,"types":["Data"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Assembly API Key","dynamic":false,"info":"Your AssemblyAI API key. You can get one from https://www.assemblyai.com/","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"import assemblyai as aai\n\nfrom lfx.custom.custom_component.component import Component\nfrom lfx.io import DataInput, DropdownInput, FloatInput, IntInput, MultilineInput, Output, SecretStrInput\nfrom lfx.log.logger import logger\nfrom lfx.schema.data import Data\n\n\nclass AssemblyAILeMUR(Component):\n display_name = \"AssemblyAI LeMUR\"\n description = \"Apply Large Language Models to spoken data using the AssemblyAI LeMUR framework\"\n documentation = \"https://www.assemblyai.com/docs/lemur\"\n icon = \"AssemblyAI\"\n\n inputs = [\n SecretStrInput(\n name=\"api_key\",\n display_name=\"Assembly API Key\",\n info=\"Your AssemblyAI API key. You can get one from https://www.assemblyai.com/\",\n advanced=False,\n required=True,\n ),\n DataInput(\n name=\"transcription_result\",\n display_name=\"Transcription Result\",\n info=\"The transcription result from AssemblyAI\",\n required=True,\n ),\n MultilineInput(name=\"prompt\", display_name=\"Input Prompt\", info=\"The text to prompt the model\", required=True),\n DropdownInput(\n name=\"final_model\",\n display_name=\"Final Model\",\n options=[\"claude3_5_sonnet\", \"claude3_opus\", \"claude3_haiku\", \"claude3_sonnet\"],\n value=\"claude3_5_sonnet\",\n info=\"The model that is used for the final prompt after compression is performed\",\n advanced=True,\n ),\n FloatInput(\n name=\"temperature\",\n display_name=\"Temperature\",\n advanced=True,\n value=0.0,\n info=\"The temperature to use for the model\",\n ),\n IntInput(\n name=\"max_output_size\",\n display_name=\" Max Output Size\",\n advanced=True,\n value=2000,\n info=\"Max output size in tokens, up to 4000\",\n ),\n DropdownInput(\n name=\"endpoint\",\n display_name=\"Endpoint\",\n options=[\"task\", \"summary\", \"question-answer\"],\n value=\"task\",\n info=(\n \"The LeMUR endpoint to use. For 'summary' and 'question-answer',\"\n \" no prompt input is needed. See https://www.assemblyai.com/docs/api-reference/lemur/ for more info.\"\n ),\n advanced=True,\n ),\n MultilineInput(\n name=\"questions\",\n display_name=\"Questions\",\n info=\"Comma-separated list of your questions. Only used if Endpoint is 'question-answer'\",\n advanced=True,\n ),\n MultilineInput(\n name=\"transcript_ids\",\n display_name=\"Transcript IDs\",\n info=(\n \"Comma-separated list of transcript IDs. LeMUR can perform actions over multiple transcripts.\"\n \" If provided, the Transcription Result is ignored.\"\n ),\n advanced=True,\n ),\n ]\n\n outputs = [\n Output(display_name=\"LeMUR Response\", name=\"lemur_response\", method=\"run_lemur\"),\n ]\n\n def run_lemur(self) -> Data:\n \"\"\"Use the LeMUR task endpoint to input the LLM prompt.\"\"\"\n aai.settings.api_key = self.api_key\n\n if not self.transcription_result and not self.transcript_ids:\n error = \"Either a Transcription Result or Transcript IDs must be provided\"\n self.status = error\n return Data(data={\"error\": error})\n if self.transcription_result and self.transcription_result.data.get(\"error\"):\n # error message from the previous step\n self.status = self.transcription_result.data[\"error\"]\n return self.transcription_result\n if self.endpoint == \"task\" and not self.prompt:\n self.status = \"No prompt specified for the task endpoint\"\n return Data(data={\"error\": \"No prompt specified\"})\n if self.endpoint == \"question-answer\" and not self.questions:\n error = \"No Questions were provided for the question-answer endpoint\"\n self.status = error\n return Data(data={\"error\": error})\n\n # Check for valid transcripts\n transcript_ids = None\n if self.transcription_result and \"id\" in self.transcription_result.data:\n transcript_ids = [self.transcription_result.data[\"id\"]]\n elif self.transcript_ids:\n transcript_ids = self.transcript_ids.split(\",\") or []\n transcript_ids = [t.strip() for t in transcript_ids]\n\n if not transcript_ids:\n error = \"Either a valid Transcription Result or valid Transcript IDs must be provided\"\n self.status = error\n return Data(data={\"error\": error})\n\n # Get TranscriptGroup and check if there is any error\n transcript_group = aai.TranscriptGroup(transcript_ids=transcript_ids)\n transcript_group, failures = transcript_group.wait_for_completion(return_failures=True)\n if failures:\n error = f\"Getting transcriptions failed: {failures[0]}\"\n self.status = error\n return Data(data={\"error\": error})\n\n for t in transcript_group.transcripts:\n if t.status == aai.TranscriptStatus.error:\n self.status = t.error\n return Data(data={\"error\": t.error})\n\n # Perform LeMUR action\n try:\n response = self.perform_lemur_action(transcript_group, self.endpoint)\n except Exception as e: # noqa: BLE001\n logger.debug(\"Error running LeMUR\", exc_info=True)\n error = f\"An Error happened: {e}\"\n self.status = error\n return Data(data={\"error\": error})\n\n result = Data(data=response)\n self.status = result\n return result\n\n def perform_lemur_action(self, transcript_group: aai.TranscriptGroup, endpoint: str) -> dict:\n logger.info(\"Endpoint:\", endpoint, type(endpoint))\n if endpoint == \"task\":\n result = transcript_group.lemur.task(\n prompt=self.prompt,\n final_model=self.get_final_model(self.final_model),\n temperature=self.temperature,\n max_output_size=self.max_output_size,\n )\n elif endpoint == \"summary\":\n result = transcript_group.lemur.summarize(\n final_model=self.get_final_model(self.final_model),\n temperature=self.temperature,\n max_output_size=self.max_output_size,\n )\n elif endpoint == \"question-answer\":\n questions = self.questions.split(\",\")\n questions = [aai.LemurQuestion(question=q) for q in questions]\n result = transcript_group.lemur.question(\n questions=questions,\n final_model=self.get_final_model(self.final_model),\n temperature=self.temperature,\n max_output_size=self.max_output_size,\n )\n else:\n msg = f\"Endpoint not supported: {endpoint}\"\n raise ValueError(msg)\n\n return result.dict()\n\n def get_final_model(self, model_name: str) -> aai.LemurModel:\n if model_name == \"claude3_5_sonnet\":\n return aai.LemurModel.claude3_5_sonnet\n if model_name == \"claude3_opus\":\n return aai.LemurModel.claude3_opus\n if model_name == \"claude3_haiku\":\n return aai.LemurModel.claude3_haiku\n if model_name == \"claude3_sonnet\":\n return aai.LemurModel.claude3_sonnet\n msg = f\"Model name not supported: {model_name}\"\n raise ValueError(msg)\n"},"endpoint":{"_input_type":"DropdownInput","advanced":true,"combobox":false,"dialog_inputs":{},"display_name":"Endpoint","dynamic":false,"external_options":{},"info":"The LeMUR endpoint to use. For 'summary' and 'question-answer', no prompt input is needed. See https://www.assemblyai.com/docs/api-reference/lemur/ for more info.","name":"endpoint","options":["task","summary","question-answer"],"options_metadata":[],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"task"},"final_model":{"_input_type":"DropdownInput","advanced":true,"combobox":false,"dialog_inputs":{},"display_name":"Final Model","dynamic":false,"external_options":{},"info":"The model that is used for the final prompt after compression is performed","name":"final_model","options":["claude3_5_sonnet","claude3_opus","claude3_haiku","claude3_sonnet"],"options_metadata":[],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"claude3_5_sonnet"},"max_output_size":{"_input_type":"IntInput","advanced":true,"display_name":" Max Output Size","dynamic":false,"info":"Max output size in tokens, up to 4000","list":false,"list_add_label":"Add More","name":"max_output_size","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":2000},"prompt":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"Input Prompt","dynamic":false,"info":"The text to prompt the model","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"prompt","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"questions":{"_input_type":"MultilineInput","advanced":true,"copy_field":false,"display_name":"Questions","dynamic":false,"info":"Comma-separated list of your questions. Only used if Endpoint is 'question-answer'","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"questions","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"temperature":{"_input_type":"FloatInput","advanced":true,"display_name":"Temperature","dynamic":false,"info":"The temperature to use for the model","list":false,"list_add_label":"Add More","name":"temperature","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"float","value":0.0},"transcript_ids":{"_input_type":"MultilineInput","advanced":true,"copy_field":false,"display_name":"Transcript IDs","dynamic":false,"info":"Comma-separated list of transcript IDs. LeMUR can perform actions over multiple transcripts. If provided, the Transcription Result is ignored.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"transcript_ids","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"transcription_result":{"_input_type":"DataInput","advanced":false,"display_name":"Transcription Result","dynamic":false,"info":"The transcription result from AssemblyAI","input_types":["Data"],"list":false,"list_add_label":"Add More","name":"transcription_result","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"other","value":""}},"tool_mode":false},"AssemblyAIListTranscripts":{"base_classes":["Data"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Retrieve a list of transcripts from AssemblyAI with filtering options","display_name":"AssemblyAI List Transcripts","documentation":"https://www.assemblyai.com/docs","edited":false,"field_order":["api_key","limit","status_filter","created_on","throttled_only"],"frozen":false,"icon":"AssemblyAI","legacy":false,"metadata":{"code_hash":"267dcda48ad4","dependencies":{"dependencies":[{"name":"assemblyai","version":"0.35.1"},{"name":"lfx","version":null}],"total_dependencies":2},"module":"lfx.components.assemblyai.assemblyai_list_transcripts.AssemblyAIListTranscripts"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Transcript List","group_outputs":false,"method":"list_transcripts","name":"transcript_list","selected":"Data","tool_mode":true,"types":["Data"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Assembly API Key","dynamic":false,"info":"Your AssemblyAI API key. You can get one from https://www.assemblyai.com/","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"import assemblyai as aai\n\nfrom lfx.custom.custom_component.component import Component\nfrom lfx.io import BoolInput, DropdownInput, IntInput, MessageTextInput, Output, SecretStrInput\nfrom lfx.log.logger import logger\nfrom lfx.schema.data import Data\n\n\nclass AssemblyAIListTranscripts(Component):\n display_name = \"AssemblyAI List Transcripts\"\n description = \"Retrieve a list of transcripts from AssemblyAI with filtering options\"\n documentation = \"https://www.assemblyai.com/docs\"\n icon = \"AssemblyAI\"\n\n inputs = [\n SecretStrInput(\n name=\"api_key\",\n display_name=\"Assembly API Key\",\n info=\"Your AssemblyAI API key. You can get one from https://www.assemblyai.com/\",\n required=True,\n ),\n IntInput(\n name=\"limit\",\n display_name=\"Limit\",\n info=\"Maximum number of transcripts to retrieve (default: 20, use 0 for all)\",\n value=20,\n ),\n DropdownInput(\n name=\"status_filter\",\n display_name=\"Status Filter\",\n options=[\"all\", \"queued\", \"processing\", \"completed\", \"error\"],\n value=\"all\",\n info=\"Filter by transcript status\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"created_on\",\n display_name=\"Created On\",\n info=\"Only get transcripts created on this date (YYYY-MM-DD)\",\n advanced=True,\n ),\n BoolInput(\n name=\"throttled_only\",\n display_name=\"Throttled Only\",\n info=\"Only get throttled transcripts, overrides the status filter\",\n advanced=True,\n ),\n ]\n\n outputs = [\n Output(display_name=\"Transcript List\", name=\"transcript_list\", method=\"list_transcripts\"),\n ]\n\n def list_transcripts(self) -> list[Data]:\n aai.settings.api_key = self.api_key\n\n params = aai.ListTranscriptParameters()\n if self.limit:\n params.limit = self.limit\n if self.status_filter != \"all\":\n params.status = self.status_filter\n if self.created_on and self.created_on.text:\n params.created_on = self.created_on.text\n if self.throttled_only:\n params.throttled_only = True\n\n try:\n transcriber = aai.Transcriber()\n\n def convert_page_to_data_list(page):\n return [Data(**t.dict()) for t in page.transcripts]\n\n if self.limit == 0:\n # paginate over all pages\n params.limit = 100\n page = transcriber.list_transcripts(params)\n transcripts = convert_page_to_data_list(page)\n\n while page.page_details.before_id_of_prev_url is not None:\n params.before_id = page.page_details.before_id_of_prev_url\n page = transcriber.list_transcripts(params)\n transcripts.extend(convert_page_to_data_list(page))\n else:\n # just one page\n page = transcriber.list_transcripts(params)\n transcripts = convert_page_to_data_list(page)\n\n except Exception as e: # noqa: BLE001\n logger.debug(\"Error listing transcripts\", exc_info=True)\n error_data = Data(data={\"error\": f\"An error occurred: {e}\"})\n self.status = [error_data]\n return [error_data]\n\n self.status = transcripts\n return transcripts\n"},"created_on":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Created On","dynamic":false,"info":"Only get transcripts created on this date (YYYY-MM-DD)","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"created_on","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"limit":{"_input_type":"IntInput","advanced":false,"display_name":"Limit","dynamic":false,"info":"Maximum number of transcripts to retrieve (default: 20, use 0 for all)","list":false,"list_add_label":"Add More","name":"limit","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":20},"status_filter":{"_input_type":"DropdownInput","advanced":true,"combobox":false,"dialog_inputs":{},"display_name":"Status Filter","dynamic":false,"external_options":{},"info":"Filter by transcript status","name":"status_filter","options":["all","queued","processing","completed","error"],"options_metadata":[],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"all"},"throttled_only":{"_input_type":"BoolInput","advanced":true,"display_name":"Throttled Only","dynamic":false,"info":"Only get throttled transcripts, overrides the status filter","list":false,"list_add_label":"Add More","name":"throttled_only","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false}},"tool_mode":false},"AssemblyAITranscriptionJobCreator":{"base_classes":["Data"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Create a transcription job for an audio file using AssemblyAI with advanced options","display_name":"AssemblyAI Start Transcript","documentation":"https://www.assemblyai.com/docs","edited":false,"field_order":["api_key","audio_file","audio_file_url","speech_model","language_detection","language_code","speaker_labels","speakers_expected","punctuate","format_text"],"frozen":false,"icon":"AssemblyAI","legacy":false,"metadata":{"code_hash":"7ff7b3f90298","dependencies":{"dependencies":[{"name":"assemblyai","version":"0.35.1"},{"name":"lfx","version":null}],"total_dependencies":2},"module":"lfx.components.assemblyai.assemblyai_start_transcript.AssemblyAITranscriptionJobCreator"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Transcript ID","group_outputs":false,"method":"create_transcription_job","name":"transcript_id","selected":"Data","tool_mode":true,"types":["Data"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Assembly API Key","dynamic":false,"info":"Your AssemblyAI API key. You can get one from https://www.assemblyai.com/","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""},"audio_file":{"_input_type":"FileInput","advanced":false,"display_name":"Audio File","dynamic":false,"fileTypes":["3ga","8svx","aac","ac3","aif","aiff","alac","amr","ape","au","dss","flac","flv","m4a","m4b","m4p","m4r","mp3","mpga","ogg","oga","mogg","opus","qcp","tta","voc","wav","wma","wv","webm","mts","m2ts","ts","mov","mp2","mp4","m4p","m4v","mxf"],"file_path":"","info":"The audio file to transcribe","list":false,"list_add_label":"Add More","name":"audio_file","placeholder":"","required":true,"show":true,"temp_file":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"file","value":""},"audio_file_url":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Audio File URL","dynamic":false,"info":"The URL of the audio file to transcribe (Can be used instead of a File)","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"audio_file_url","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from pathlib import Path\n\nimport assemblyai as aai\n\nfrom lfx.custom.custom_component.component import Component\nfrom lfx.io import BoolInput, DropdownInput, FileInput, MessageTextInput, Output, SecretStrInput\nfrom lfx.log.logger import logger\nfrom lfx.schema.data import Data\n\n\nclass AssemblyAITranscriptionJobCreator(Component):\n display_name = \"AssemblyAI Start Transcript\"\n description = \"Create a transcription job for an audio file using AssemblyAI with advanced options\"\n documentation = \"https://www.assemblyai.com/docs\"\n icon = \"AssemblyAI\"\n\n inputs = [\n SecretStrInput(\n name=\"api_key\",\n display_name=\"Assembly API Key\",\n info=\"Your AssemblyAI API key. You can get one from https://www.assemblyai.com/\",\n required=True,\n ),\n FileInput(\n name=\"audio_file\",\n display_name=\"Audio File\",\n file_types=[\n \"3ga\",\n \"8svx\",\n \"aac\",\n \"ac3\",\n \"aif\",\n \"aiff\",\n \"alac\",\n \"amr\",\n \"ape\",\n \"au\",\n \"dss\",\n \"flac\",\n \"flv\",\n \"m4a\",\n \"m4b\",\n \"m4p\",\n \"m4r\",\n \"mp3\",\n \"mpga\",\n \"ogg\",\n \"oga\",\n \"mogg\",\n \"opus\",\n \"qcp\",\n \"tta\",\n \"voc\",\n \"wav\",\n \"wma\",\n \"wv\",\n \"webm\",\n \"mts\",\n \"m2ts\",\n \"ts\",\n \"mov\",\n \"mp2\",\n \"mp4\",\n \"m4p\",\n \"m4v\",\n \"mxf\",\n ],\n info=\"The audio file to transcribe\",\n required=True,\n ),\n MessageTextInput(\n name=\"audio_file_url\",\n display_name=\"Audio File URL\",\n info=\"The URL of the audio file to transcribe (Can be used instead of a File)\",\n advanced=True,\n ),\n DropdownInput(\n name=\"speech_model\",\n display_name=\"Speech Model\",\n options=[\n \"best\",\n \"nano\",\n ],\n value=\"best\",\n info=\"The speech model to use for the transcription\",\n advanced=True,\n ),\n BoolInput(\n name=\"language_detection\",\n display_name=\"Automatic Language Detection\",\n info=\"Enable automatic language detection\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"language_code\",\n display_name=\"Language\",\n info=(\n \"\"\"\n The language of the audio file. Can be set manually if automatic language detection is disabled.\n See https://www.assemblyai.com/docs/getting-started/supported-languages \"\"\"\n \"for a list of supported language codes.\"\n ),\n advanced=True,\n ),\n BoolInput(\n name=\"speaker_labels\",\n display_name=\"Enable Speaker Labels\",\n info=\"Enable speaker diarization\",\n ),\n MessageTextInput(\n name=\"speakers_expected\",\n display_name=\"Expected Number of Speakers\",\n info=\"Set the expected number of speakers (optional, enter a number)\",\n advanced=True,\n ),\n BoolInput(\n name=\"punctuate\",\n display_name=\"Punctuate\",\n info=\"Enable automatic punctuation\",\n advanced=True,\n value=True,\n ),\n BoolInput(\n name=\"format_text\",\n display_name=\"Format Text\",\n info=\"Enable text formatting\",\n advanced=True,\n value=True,\n ),\n ]\n\n outputs = [\n Output(display_name=\"Transcript ID\", name=\"transcript_id\", method=\"create_transcription_job\"),\n ]\n\n def create_transcription_job(self) -> Data:\n aai.settings.api_key = self.api_key\n\n # Convert speakers_expected to int if it's not empty\n speakers_expected = None\n if self.speakers_expected and self.speakers_expected.strip():\n try:\n speakers_expected = int(self.speakers_expected)\n except ValueError:\n self.status = \"Error: Expected Number of Speakers must be a valid integer\"\n return Data(data={\"error\": \"Error: Expected Number of Speakers must be a valid integer\"})\n\n language_code = self.language_code or None\n\n config = aai.TranscriptionConfig(\n speech_model=self.speech_model,\n language_detection=self.language_detection,\n language_code=language_code,\n speaker_labels=self.speaker_labels,\n speakers_expected=speakers_expected,\n punctuate=self.punctuate,\n format_text=self.format_text,\n )\n\n audio = None\n if self.audio_file:\n if self.audio_file_url:\n logger.warning(\"Both an audio file an audio URL were specified. The audio URL was ignored.\")\n\n # Check if the file exists\n if not Path(self.audio_file).exists():\n self.status = \"Error: Audio file not found\"\n return Data(data={\"error\": \"Error: Audio file not found\"})\n audio = self.audio_file\n elif self.audio_file_url:\n audio = self.audio_file_url\n else:\n self.status = \"Error: Either an audio file or an audio URL must be specified\"\n return Data(data={\"error\": \"Error: Either an audio file or an audio URL must be specified\"})\n\n try:\n transcript = aai.Transcriber().submit(audio, config=config)\n except Exception as e: # noqa: BLE001\n logger.debug(\"Error submitting transcription job\", exc_info=True)\n self.status = f\"An error occurred: {e}\"\n return Data(data={\"error\": f\"An error occurred: {e}\"})\n\n if transcript.error:\n self.status = transcript.error\n return Data(data={\"error\": transcript.error})\n result = Data(data={\"transcript_id\": transcript.id})\n self.status = result\n return result\n"},"format_text":{"_input_type":"BoolInput","advanced":true,"display_name":"Format Text","dynamic":false,"info":"Enable text formatting","list":false,"list_add_label":"Add More","name":"format_text","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true},"language_code":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Language","dynamic":false,"info":"\n The language of the audio file. Can be set manually if automatic language detection is disabled.\n See https://www.assemblyai.com/docs/getting-started/supported-languages for a list of supported language codes.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"language_code","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"language_detection":{"_input_type":"BoolInput","advanced":true,"display_name":"Automatic Language Detection","dynamic":false,"info":"Enable automatic language detection","list":false,"list_add_label":"Add More","name":"language_detection","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"punctuate":{"_input_type":"BoolInput","advanced":true,"display_name":"Punctuate","dynamic":false,"info":"Enable automatic punctuation","list":false,"list_add_label":"Add More","name":"punctuate","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true},"speaker_labels":{"_input_type":"BoolInput","advanced":false,"display_name":"Enable Speaker Labels","dynamic":false,"info":"Enable speaker diarization","list":false,"list_add_label":"Add More","name":"speaker_labels","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"speakers_expected":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Expected Number of Speakers","dynamic":false,"info":"Set the expected number of speakers (optional, enter a number)","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"speakers_expected","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"speech_model":{"_input_type":"DropdownInput","advanced":true,"combobox":false,"dialog_inputs":{},"display_name":"Speech Model","dynamic":false,"external_options":{},"info":"The speech model to use for the transcription","name":"speech_model","options":["best","nano"],"options_metadata":[],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"best"}},"tool_mode":false},"AssemblyAITranscriptionJobPoller":{"base_classes":["Data"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Poll for the status of a transcription job using AssemblyAI","display_name":"AssemblyAI Poll Transcript","documentation":"https://www.assemblyai.com/docs","edited":false,"field_order":["api_key","transcript_id","polling_interval"],"frozen":false,"icon":"AssemblyAI","legacy":false,"metadata":{"code_hash":"935c9296b149","dependencies":{"dependencies":[{"name":"assemblyai","version":"0.35.1"},{"name":"lfx","version":null}],"total_dependencies":2},"module":"lfx.components.assemblyai.assemblyai_poll_transcript.AssemblyAITranscriptionJobPoller"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Transcription Result","group_outputs":false,"method":"poll_transcription_job","name":"transcription_result","selected":"Data","tool_mode":true,"types":["Data"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Assembly API Key","dynamic":false,"info":"Your AssemblyAI API key. You can get one from https://www.assemblyai.com/","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"import assemblyai as aai\n\nfrom lfx.custom.custom_component.component import Component\nfrom lfx.field_typing.range_spec import RangeSpec\nfrom lfx.io import DataInput, FloatInput, Output, SecretStrInput\nfrom lfx.log.logger import logger\nfrom lfx.schema.data import Data\n\n\nclass AssemblyAITranscriptionJobPoller(Component):\n display_name = \"AssemblyAI Poll Transcript\"\n description = \"Poll for the status of a transcription job using AssemblyAI\"\n documentation = \"https://www.assemblyai.com/docs\"\n icon = \"AssemblyAI\"\n\n inputs = [\n SecretStrInput(\n name=\"api_key\",\n display_name=\"Assembly API Key\",\n info=\"Your AssemblyAI API key. You can get one from https://www.assemblyai.com/\",\n required=True,\n ),\n DataInput(\n name=\"transcript_id\",\n display_name=\"Transcript ID\",\n info=\"The ID of the transcription job to poll\",\n required=True,\n ),\n FloatInput(\n name=\"polling_interval\",\n display_name=\"Polling Interval\",\n value=3.0,\n info=\"The polling interval in seconds\",\n advanced=True,\n range_spec=RangeSpec(min=3, max=30),\n ),\n ]\n\n outputs = [\n Output(display_name=\"Transcription Result\", name=\"transcription_result\", method=\"poll_transcription_job\"),\n ]\n\n def poll_transcription_job(self) -> Data:\n \"\"\"Polls the transcription status until completion and returns the Data.\"\"\"\n aai.settings.api_key = self.api_key\n aai.settings.polling_interval = self.polling_interval\n\n # check if it's an error message from the previous step\n if self.transcript_id.data.get(\"error\"):\n self.status = self.transcript_id.data[\"error\"]\n return self.transcript_id\n\n try:\n transcript = aai.Transcript.get_by_id(self.transcript_id.data[\"transcript_id\"])\n except Exception as e: # noqa: BLE001\n error = f\"Getting transcription failed: {e}\"\n logger.debug(error, exc_info=True)\n self.status = error\n return Data(data={\"error\": error})\n\n if transcript.status == aai.TranscriptStatus.completed:\n json_response = transcript.json_response\n text = json_response.pop(\"text\", None)\n utterances = json_response.pop(\"utterances\", None)\n transcript_id = json_response.pop(\"id\", None)\n sorted_data = {\"text\": text, \"utterances\": utterances, \"id\": transcript_id}\n sorted_data.update(json_response)\n data = Data(data=sorted_data)\n self.status = data\n return data\n self.status = transcript.error\n return Data(data={\"error\": transcript.error})\n"},"polling_interval":{"_input_type":"FloatInput","advanced":true,"display_name":"Polling Interval","dynamic":false,"info":"The polling interval in seconds","list":false,"list_add_label":"Add More","name":"polling_interval","placeholder":"","range_spec":{"max":30.0,"min":3.0,"step":0.1,"step_type":"float"},"required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"float","value":3.0},"transcript_id":{"_input_type":"DataInput","advanced":false,"display_name":"Transcript ID","dynamic":false,"info":"The ID of the transcription job to poll","input_types":["Data"],"list":false,"list_add_label":"Add More","name":"transcript_id","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"other","value":""}},"tool_mode":false}}],["azure",{"AzureOpenAIEmbeddings":{"base_classes":["Embeddings"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Generate embeddings using Azure OpenAI models.","display_name":"Azure OpenAI Embeddings","documentation":"https://python.langchain.com/docs/integrations/text_embedding/azureopenai","edited":false,"field_order":["model","azure_endpoint","azure_deployment","api_version","api_key","dimensions"],"frozen":false,"icon":"Azure","legacy":false,"metadata":{"code_hash":"6b54f3243a6a","dependencies":{"dependencies":[{"name":"langchain_openai","version":"0.3.23"},{"name":"lfx","version":null}],"total_dependencies":2},"keywords":["model","llm","language model","large language model"],"module":"lfx.components.azure.azure_openai_embeddings.AzureOpenAIEmbeddingsComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Embeddings","group_outputs":false,"method":"build_embeddings","name":"embeddings","selected":"Embeddings","tool_mode":true,"types":["Embeddings"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Azure OpenAI API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""},"api_version":{"_input_type":"DropdownInput","advanced":true,"combobox":false,"dialog_inputs":{},"display_name":"API Version","dynamic":false,"external_options":{},"info":"","name":"api_version","options":["2022-12-01","2023-03-15-preview","2023-05-15","2023-06-01-preview","2023-07-01-preview","2023-08-01-preview"],"options_metadata":[],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"2023-08-01-preview"},"azure_deployment":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Deployment Name","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"azure_deployment","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"azure_endpoint":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Azure Endpoint","dynamic":false,"info":"Your Azure endpoint, including the resource. Example: `https://example-resource.azure.openai.com/`","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"azure_endpoint","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from langchain_openai import AzureOpenAIEmbeddings\n\nfrom lfx.base.models.model import LCModelComponent\nfrom lfx.base.models.openai_constants import OPENAI_EMBEDDING_MODEL_NAMES\nfrom lfx.field_typing import Embeddings\nfrom lfx.io import DropdownInput, IntInput, MessageTextInput, Output, SecretStrInput\n\n\nclass AzureOpenAIEmbeddingsComponent(LCModelComponent):\n display_name: str = \"Azure OpenAI Embeddings\"\n description: str = \"Generate embeddings using Azure OpenAI models.\"\n documentation: str = \"https://python.langchain.com/docs/integrations/text_embedding/azureopenai\"\n icon = \"Azure\"\n name = \"AzureOpenAIEmbeddings\"\n\n API_VERSION_OPTIONS = [\n \"2022-12-01\",\n \"2023-03-15-preview\",\n \"2023-05-15\",\n \"2023-06-01-preview\",\n \"2023-07-01-preview\",\n \"2023-08-01-preview\",\n ]\n\n inputs = [\n DropdownInput(\n name=\"model\",\n display_name=\"Model\",\n advanced=False,\n options=OPENAI_EMBEDDING_MODEL_NAMES,\n value=OPENAI_EMBEDDING_MODEL_NAMES[0],\n ),\n MessageTextInput(\n name=\"azure_endpoint\",\n display_name=\"Azure Endpoint\",\n required=True,\n info=\"Your Azure endpoint, including the resource. Example: `https://example-resource.azure.openai.com/`\",\n ),\n MessageTextInput(\n name=\"azure_deployment\",\n display_name=\"Deployment Name\",\n required=True,\n ),\n DropdownInput(\n name=\"api_version\",\n display_name=\"API Version\",\n options=API_VERSION_OPTIONS,\n value=API_VERSION_OPTIONS[-1],\n advanced=True,\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"Azure OpenAI API Key\",\n required=True,\n ),\n IntInput(\n name=\"dimensions\",\n display_name=\"Dimensions\",\n info=\"The number of dimensions the resulting output embeddings should have. \"\n \"Only supported by certain models.\",\n advanced=True,\n ),\n ]\n\n outputs = [\n Output(display_name=\"Embeddings\", name=\"embeddings\", method=\"build_embeddings\"),\n ]\n\n def build_embeddings(self) -> Embeddings:\n try:\n embeddings = AzureOpenAIEmbeddings(\n model=self.model,\n azure_endpoint=self.azure_endpoint,\n azure_deployment=self.azure_deployment,\n api_version=self.api_version,\n api_key=self.api_key,\n dimensions=self.dimensions or None,\n )\n except Exception as e:\n msg = f\"Could not connect to AzureOpenAIEmbeddings API: {e}\"\n raise ValueError(msg) from e\n\n return embeddings\n"},"dimensions":{"_input_type":"IntInput","advanced":true,"display_name":"Dimensions","dynamic":false,"info":"The number of dimensions the resulting output embeddings should have. Only supported by certain models.","list":false,"list_add_label":"Add More","name":"dimensions","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":""},"model":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Model","dynamic":false,"external_options":{},"info":"","name":"model","options":["text-embedding-3-small","text-embedding-3-large","text-embedding-ada-002"],"options_metadata":[],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"text-embedding-3-small"}},"tool_mode":false},"AzureOpenAIModel":{"base_classes":["LanguageModel","Message"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Generate text using Azure OpenAI LLMs.","display_name":"Azure OpenAI","documentation":"https://python.langchain.com/docs/integrations/llms/azure_openai","edited":false,"field_order":["input_value","system_message","stream","azure_endpoint","azure_deployment","api_key","api_version","temperature","max_tokens"],"frozen":false,"icon":"Azure","legacy":false,"metadata":{"code_hash":"cc8d003556d8","dependencies":{"dependencies":[{"name":"langchain_openai","version":"0.3.23"},{"name":"lfx","version":null}],"total_dependencies":2},"keywords":["model","llm","language model","large language model"],"module":"lfx.components.azure.azure_openai.AzureChatOpenAIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Model Response","group_outputs":false,"method":"text_response","name":"text_output","selected":"Message","tool_mode":true,"types":["Message"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"Language Model","group_outputs":false,"method":"build_model","name":"model_output","selected":"LanguageModel","tool_mode":true,"types":["LanguageModel"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Azure Chat OpenAI API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""},"api_version":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"API Version","dynamic":false,"external_options":{},"info":"","name":"api_version","options":["2025-02-01-preview","2025-01-01-preview","2024-12-01-preview","2024-10-01-preview","2024-09-01-preview","2024-08-01-preview","2024-07-01-preview","2024-06-01","2024-03-01-preview","2024-02-15-preview","2023-12-01-preview","2023-05-15"],"options_metadata":[],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"2024-06-01"},"azure_deployment":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Deployment Name","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"azure_deployment","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"azure_endpoint":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Azure Endpoint","dynamic":false,"info":"Your Azure endpoint, including the resource. Example: `https://example-resource.azure.openai.com/`","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"azure_endpoint","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from langchain_openai import AzureChatOpenAI\n\nfrom lfx.base.models.model import LCModelComponent\nfrom lfx.field_typing import LanguageModel\nfrom lfx.field_typing.range_spec import RangeSpec\nfrom lfx.inputs.inputs import MessageTextInput\nfrom lfx.io import DropdownInput, IntInput, SecretStrInput, SliderInput\n\n\nclass AzureChatOpenAIComponent(LCModelComponent):\n display_name: str = \"Azure OpenAI\"\n description: str = \"Generate text using Azure OpenAI LLMs.\"\n documentation: str = \"https://python.langchain.com/docs/integrations/llms/azure_openai\"\n beta = False\n icon = \"Azure\"\n name = \"AzureOpenAIModel\"\n\n AZURE_OPENAI_API_VERSIONS = [\n \"2024-06-01\",\n \"2024-07-01-preview\",\n \"2024-08-01-preview\",\n \"2024-09-01-preview\",\n \"2024-10-01-preview\",\n \"2023-05-15\",\n \"2023-12-01-preview\",\n \"2024-02-15-preview\",\n \"2024-03-01-preview\",\n \"2024-12-01-preview\",\n \"2025-01-01-preview\",\n \"2025-02-01-preview\",\n ]\n\n inputs = [\n *LCModelComponent.get_base_inputs(),\n MessageTextInput(\n name=\"azure_endpoint\",\n display_name=\"Azure Endpoint\",\n info=\"Your Azure endpoint, including the resource. Example: `https://example-resource.azure.openai.com/`\",\n required=True,\n ),\n MessageTextInput(name=\"azure_deployment\", display_name=\"Deployment Name\", required=True),\n SecretStrInput(name=\"api_key\", display_name=\"Azure Chat OpenAI API Key\", required=True),\n DropdownInput(\n name=\"api_version\",\n display_name=\"API Version\",\n options=sorted(AZURE_OPENAI_API_VERSIONS, reverse=True),\n value=next(\n (\n version\n for version in sorted(AZURE_OPENAI_API_VERSIONS, reverse=True)\n if not version.endswith(\"-preview\")\n ),\n AZURE_OPENAI_API_VERSIONS[0],\n ),\n ),\n SliderInput(\n name=\"temperature\",\n display_name=\"Temperature\",\n value=0.7,\n range_spec=RangeSpec(min=0, max=2, step=0.01),\n info=\"Controls randomness. Lower values are more deterministic, higher values are more creative.\",\n advanced=True,\n ),\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n azure_endpoint = self.azure_endpoint\n azure_deployment = self.azure_deployment\n api_version = self.api_version\n api_key = self.api_key\n temperature = self.temperature\n max_tokens = self.max_tokens\n stream = self.stream\n\n try:\n output = AzureChatOpenAI(\n azure_endpoint=azure_endpoint,\n azure_deployment=azure_deployment,\n api_version=api_version,\n api_key=api_key,\n temperature=temperature,\n max_tokens=max_tokens or None,\n streaming=stream,\n )\n except Exception as e:\n msg = f\"Could not connect to AzureOpenAI API: {e}\"\n raise ValueError(msg) from e\n\n return output\n"},"input_value":{"_input_type":"MessageInput","advanced":false,"display_name":"Input","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"input_value","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"max_tokens":{"_input_type":"IntInput","advanced":true,"display_name":"Max Tokens","dynamic":false,"info":"The maximum number of tokens to generate. Set to 0 for unlimited tokens.","list":false,"list_add_label":"Add More","name":"max_tokens","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":""},"stream":{"_input_type":"BoolInput","advanced":true,"display_name":"Stream","dynamic":false,"info":"Stream the response from the model. Streaming works only in Chat.","list":false,"list_add_label":"Add More","name":"stream","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"system_message":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"System Message","dynamic":false,"info":"System message to pass to the model.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"system_message","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"temperature":{"_input_type":"SliderInput","advanced":true,"display_name":"Temperature","dynamic":false,"info":"Controls randomness. Lower values are more deterministic, higher values are more creative.","max_label":"","max_label_icon":"","min_label":"","min_label_icon":"","name":"temperature","placeholder":"","range_spec":{"max":2.0,"min":0.0,"step":0.01,"step_type":"float"},"required":false,"show":true,"slider_buttons":false,"slider_buttons_options":[],"slider_input":false,"title_case":false,"tool_mode":false,"type":"slider","value":0.7}},"tool_mode":false}}],["baidu",{"BaiduQianfanChatModel":{"base_classes":["LanguageModel","Message"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Generate text using Baidu Qianfan LLMs.","display_name":"Qianfan","documentation":"https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint","edited":false,"field_order":["input_value","system_message","stream","model","qianfan_ak","qianfan_sk","top_p","temperature","penalty_score","endpoint"],"frozen":false,"icon":"BaiduQianfan","legacy":false,"metadata":{"code_hash":"a5fdfdb5757f","dependencies":{"dependencies":[{"name":"langchain_community","version":"0.3.21"},{"name":"lfx","version":null}],"total_dependencies":2},"keywords":["model","llm","language model","large language model"],"module":"lfx.components.baidu.baidu_qianfan_chat.QianfanChatEndpointComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Model Response","group_outputs":false,"method":"text_response","name":"text_output","selected":"Message","tool_mode":true,"types":["Message"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"Language Model","group_outputs":false,"method":"build_model","name":"model_output","selected":"LanguageModel","tool_mode":true,"types":["LanguageModel"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from langchain_community.chat_models.baidu_qianfan_endpoint import QianfanChatEndpoint\n\nfrom lfx.base.models.model import LCModelComponent\nfrom lfx.field_typing.constants import LanguageModel\nfrom lfx.io import DropdownInput, FloatInput, MessageTextInput, SecretStrInput\n\n\nclass QianfanChatEndpointComponent(LCModelComponent):\n display_name: str = \"Qianfan\"\n description: str = \"Generate text using Baidu Qianfan LLMs.\"\n documentation: str = \"https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint\"\n icon = \"BaiduQianfan\"\n name = \"BaiduQianfanChatModel\"\n\n inputs = [\n *LCModelComponent.get_base_inputs(),\n DropdownInput(\n name=\"model\",\n display_name=\"Model Name\",\n options=[\n \"EB-turbo-AppBuilder\",\n \"Llama-2-70b-chat\",\n \"ERNIE-Bot-turbo-AI\",\n \"ERNIE-Lite-8K-0308\",\n \"ERNIE-Speed\",\n \"Qianfan-Chinese-Llama-2-13B\",\n \"ERNIE-3.5-8K\",\n \"BLOOMZ-7B\",\n \"Qianfan-Chinese-Llama-2-7B\",\n \"XuanYuan-70B-Chat-4bit\",\n \"AquilaChat-7B\",\n \"ERNIE-Bot-4\",\n \"Llama-2-13b-chat\",\n \"ChatGLM2-6B-32K\",\n \"ERNIE-Bot\",\n \"ERNIE-Speed-128k\",\n \"ERNIE-4.0-8K\",\n \"Qianfan-BLOOMZ-7B-compressed\",\n \"ERNIE Speed\",\n \"Llama-2-7b-chat\",\n \"Mixtral-8x7B-Instruct\",\n \"ERNIE 3.5\",\n \"ERNIE Speed-AppBuilder\",\n \"ERNIE-Speed-8K\",\n \"Yi-34B-Chat\",\n ],\n info=\"https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint\",\n value=\"ERNIE-4.0-8K\",\n ),\n SecretStrInput(\n name=\"qianfan_ak\",\n display_name=\"Qianfan Ak\",\n info=\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\",\n ),\n SecretStrInput(\n name=\"qianfan_sk\",\n display_name=\"Qianfan Sk\",\n info=\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\",\n ),\n FloatInput(\n name=\"top_p\",\n display_name=\"Top p\",\n info=\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\",\n value=0.8,\n advanced=True,\n ),\n FloatInput(\n name=\"temperature\",\n display_name=\"Temperature\",\n info=\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\",\n value=0.95,\n ),\n FloatInput(\n name=\"penalty_score\",\n display_name=\"Penalty Score\",\n info=\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\",\n value=1.0,\n advanced=True,\n ),\n MessageTextInput(\n name=\"endpoint\", display_name=\"Endpoint\", info=\"Endpoint of the Qianfan LLM, required if custom model used.\"\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n model = self.model\n qianfan_ak = self.qianfan_ak\n qianfan_sk = self.qianfan_sk\n top_p = self.top_p\n temperature = self.temperature\n penalty_score = self.penalty_score\n endpoint = self.endpoint\n\n try:\n kwargs = {\n \"model\": model,\n \"qianfan_ak\": qianfan_ak or None,\n \"qianfan_sk\": qianfan_sk or None,\n \"top_p\": top_p,\n \"temperature\": temperature,\n \"penalty_score\": penalty_score,\n }\n\n if endpoint: # Only add endpoint if it has a value\n kwargs[\"endpoint\"] = endpoint\n\n output = QianfanChatEndpoint(**kwargs)\n\n except Exception as e:\n msg = \"Could not connect to Baidu Qianfan API.\"\n raise ValueError(msg) from e\n\n return output\n"},"endpoint":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Endpoint","dynamic":false,"info":"Endpoint of the Qianfan LLM, required if custom model used.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"endpoint","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"input_value":{"_input_type":"MessageInput","advanced":false,"display_name":"Input","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"input_value","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"model":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Model Name","dynamic":false,"external_options":{},"info":"https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint","name":"model","options":["EB-turbo-AppBuilder","Llama-2-70b-chat","ERNIE-Bot-turbo-AI","ERNIE-Lite-8K-0308","ERNIE-Speed","Qianfan-Chinese-Llama-2-13B","ERNIE-3.5-8K","BLOOMZ-7B","Qianfan-Chinese-Llama-2-7B","XuanYuan-70B-Chat-4bit","AquilaChat-7B","ERNIE-Bot-4","Llama-2-13b-chat","ChatGLM2-6B-32K","ERNIE-Bot","ERNIE-Speed-128k","ERNIE-4.0-8K","Qianfan-BLOOMZ-7B-compressed","ERNIE Speed","Llama-2-7b-chat","Mixtral-8x7B-Instruct","ERNIE 3.5","ERNIE Speed-AppBuilder","ERNIE-Speed-8K","Yi-34B-Chat"],"options_metadata":[],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"ERNIE-4.0-8K"},"penalty_score":{"_input_type":"FloatInput","advanced":true,"display_name":"Penalty Score","dynamic":false,"info":"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo","list":false,"list_add_label":"Add More","name":"penalty_score","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"float","value":1.0},"qianfan_ak":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Qianfan Ak","dynamic":false,"info":"which you could get from https://cloud.baidu.com/product/wenxinworkshop","input_types":[],"load_from_db":true,"name":"qianfan_ak","password":true,"placeholder":"","required":false,"show":true,"title_case":false,"type":"str","value":""},"qianfan_sk":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Qianfan Sk","dynamic":false,"info":"which you could get from https://cloud.baidu.com/product/wenxinworkshop","input_types":[],"load_from_db":true,"name":"qianfan_sk","password":true,"placeholder":"","required":false,"show":true,"title_case":false,"type":"str","value":""},"stream":{"_input_type":"BoolInput","advanced":true,"display_name":"Stream","dynamic":false,"info":"Stream the response from the model. Streaming works only in Chat.","list":false,"list_add_label":"Add More","name":"stream","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"system_message":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"System Message","dynamic":false,"info":"System message to pass to the model.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"system_message","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"temperature":{"_input_type":"FloatInput","advanced":false,"display_name":"Temperature","dynamic":false,"info":"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo","list":false,"list_add_label":"Add More","name":"temperature","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"float","value":0.95},"top_p":{"_input_type":"FloatInput","advanced":true,"display_name":"Top p","dynamic":false,"info":"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo","list":false,"list_add_label":"Add More","name":"top_p","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"float","value":0.8}},"tool_mode":false}}],["bing",{"BingSearchAPI":{"base_classes":["DataFrame","Tool"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Call the Bing Search API.","display_name":"Bing Search API","documentation":"","edited":false,"field_order":["bing_subscription_key","input_value","bing_search_url","k"],"frozen":false,"icon":"Bing","legacy":false,"metadata":{"code_hash":"84334607b325","dependencies":{"dependencies":[{"name":"langchain_community","version":"0.3.21"},{"name":"lfx","version":null}],"total_dependencies":2},"module":"lfx.components.bing.bing_search_api.BingSearchAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"fetch_content_dataframe","name":"dataframe","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"Tool","group_outputs":false,"method":"build_tool","name":"tool","selected":"Tool","tool_mode":true,"types":["Tool"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","bing_search_url":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Bing Search URL","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"bing_search_url","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"bing_subscription_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bing Subscription Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bing_subscription_key","password":true,"placeholder":"","required":false,"show":true,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from typing import cast\n\nfrom langchain_community.tools.bing_search import BingSearchResults\nfrom langchain_community.utilities import BingSearchAPIWrapper\n\nfrom lfx.base.langchain_utilities.model import LCToolComponent\nfrom lfx.field_typing import Tool\nfrom lfx.inputs.inputs import IntInput, MessageTextInput, MultilineInput, SecretStrInput\nfrom lfx.schema.data import Data\nfrom lfx.schema.dataframe import DataFrame\nfrom lfx.template.field.base import Output\n\n\nclass BingSearchAPIComponent(LCToolComponent):\n display_name = \"Bing Search API\"\n description = \"Call the Bing Search API.\"\n name = \"BingSearchAPI\"\n icon = \"Bing\"\n\n inputs = [\n SecretStrInput(name=\"bing_subscription_key\", display_name=\"Bing Subscription Key\"),\n MultilineInput(\n name=\"input_value\",\n display_name=\"Input\",\n ),\n MessageTextInput(name=\"bing_search_url\", display_name=\"Bing Search URL\", advanced=True),\n IntInput(name=\"k\", display_name=\"Number of results\", value=4, required=True),\n ]\n\n outputs = [\n Output(display_name=\"DataFrame\", name=\"dataframe\", method=\"fetch_content_dataframe\"),\n Output(display_name=\"Tool\", name=\"tool\", method=\"build_tool\"),\n ]\n\n def run_model(self) -> DataFrame:\n return self.fetch_content_dataframe()\n\n def fetch_content(self) -> list[Data]:\n if self.bing_search_url:\n wrapper = BingSearchAPIWrapper(\n bing_search_url=self.bing_search_url, bing_subscription_key=self.bing_subscription_key\n )\n else:\n wrapper = BingSearchAPIWrapper(bing_subscription_key=self.bing_subscription_key)\n results = wrapper.results(query=self.input_value, num_results=self.k)\n data = [Data(data=result, text=result[\"snippet\"]) for result in results]\n self.status = data\n return data\n\n def fetch_content_dataframe(self) -> DataFrame:\n data = self.fetch_content()\n return DataFrame(data)\n\n def build_tool(self) -> Tool:\n if self.bing_search_url:\n wrapper = BingSearchAPIWrapper(\n bing_search_url=self.bing_search_url, bing_subscription_key=self.bing_subscription_key\n )\n else:\n wrapper = BingSearchAPIWrapper(bing_subscription_key=self.bing_subscription_key)\n return cast(\"Tool\", BingSearchResults(api_wrapper=wrapper, num_results=self.k))\n"},"input_value":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"Input","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"input_value","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"k":{"_input_type":"IntInput","advanced":false,"display_name":"Number of results","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"k","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":4}},"tool_mode":false}}],["cassandra",{"Cassandra":{"base_classes":["Data","DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Cassandra Vector Store with search capabilities","display_name":"Cassandra","documentation":"https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/cassandra","edited":false,"field_order":["database_ref","username","token","keyspace","table_name","ttl_seconds","batch_size","setup_mode","cluster_kwargs","ingest_data","search_query","should_cache_vector_store","embedding","number_of_results","search_type","search_score_threshold","search_filter","body_search","enable_body_search"],"frozen":false,"icon":"Cassandra","legacy":false,"metadata":{"code_hash":"833f277daab7","dependencies":{"dependencies":[{"name":"langchain_community","version":"0.3.21"},{"name":"lfx","version":null},{"name":"cassio","version":null}],"total_dependencies":3},"module":"lfx.components.cassandra.cassandra.CassandraVectorStoreComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Search Results","group_outputs":false,"method":"search_documents","name":"search_results","selected":"Data","tool_mode":true,"types":["Data"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataframe","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","batch_size":{"_input_type":"IntInput","advanced":true,"display_name":"Batch Size","dynamic":false,"info":"Optional number of data to process in a single batch.","list":false,"list_add_label":"Add More","name":"batch_size","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":16},"body_search":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Search Body","dynamic":false,"info":"Document textual search terms to apply to the search query.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"body_search","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"cluster_kwargs":{"_input_type":"DictInput","advanced":true,"display_name":"Cluster arguments","dynamic":false,"info":"Optional dictionary of additional keyword arguments for the Cassandra cluster.","list":true,"list_add_label":"Add More","name":"cluster_kwargs","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"type":"dict","value":{}},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from langchain_community.vectorstores import Cassandra\n\nfrom lfx.base.vectorstores.model import LCVectorStoreComponent, check_cached_vector_store\nfrom lfx.helpers.data import docs_to_data\nfrom lfx.inputs.inputs import BoolInput, DictInput, FloatInput\nfrom lfx.io import (\n DropdownInput,\n HandleInput,\n IntInput,\n MessageTextInput,\n SecretStrInput,\n)\nfrom lfx.schema.data import Data\n\n\nclass CassandraVectorStoreComponent(LCVectorStoreComponent):\n display_name = \"Cassandra\"\n description = \"Cassandra Vector Store with search capabilities\"\n documentation = \"https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/cassandra\"\n name = \"Cassandra\"\n icon = \"Cassandra\"\n\n inputs = [\n MessageTextInput(\n name=\"database_ref\",\n display_name=\"Contact Points / Astra Database ID\",\n info=\"Contact points for the database (or Astra DB database ID)\",\n required=True,\n ),\n MessageTextInput(\n name=\"username\", display_name=\"Username\", info=\"Username for the database (leave empty for Astra DB).\"\n ),\n SecretStrInput(\n name=\"token\",\n display_name=\"Password / Astra DB Token\",\n info=\"User password for the database (or Astra DB token).\",\n required=True,\n ),\n MessageTextInput(\n name=\"keyspace\",\n display_name=\"Keyspace\",\n info=\"Table Keyspace (or Astra DB namespace).\",\n required=True,\n ),\n MessageTextInput(\n name=\"table_name\",\n display_name=\"Table Name\",\n info=\"The name of the table (or Astra DB collection) where vectors will be stored.\",\n required=True,\n ),\n IntInput(\n name=\"ttl_seconds\",\n display_name=\"TTL Seconds\",\n info=\"Optional time-to-live for the added texts.\",\n advanced=True,\n ),\n IntInput(\n name=\"batch_size\",\n display_name=\"Batch Size\",\n info=\"Optional number of data to process in a single batch.\",\n value=16,\n advanced=True,\n ),\n DropdownInput(\n name=\"setup_mode\",\n display_name=\"Setup Mode\",\n info=\"Configuration mode for setting up the Cassandra table, with options like 'Sync', 'Async', or 'Off'.\",\n options=[\"Sync\", \"Async\", \"Off\"],\n value=\"Sync\",\n advanced=True,\n ),\n DictInput(\n name=\"cluster_kwargs\",\n display_name=\"Cluster arguments\",\n info=\"Optional dictionary of additional keyword arguments for the Cassandra cluster.\",\n advanced=True,\n list=True,\n ),\n *LCVectorStoreComponent.inputs,\n HandleInput(name=\"embedding\", display_name=\"Embedding\", input_types=[\"Embeddings\"]),\n IntInput(\n name=\"number_of_results\",\n display_name=\"Number of Results\",\n info=\"Number of results to return.\",\n value=4,\n advanced=True,\n ),\n DropdownInput(\n name=\"search_type\",\n display_name=\"Search Type\",\n info=\"Search type to use\",\n options=[\"Similarity\", \"Similarity with score threshold\", \"MMR (Max Marginal Relevance)\"],\n value=\"Similarity\",\n advanced=True,\n ),\n FloatInput(\n name=\"search_score_threshold\",\n display_name=\"Search Score Threshold\",\n info=\"Minimum similarity score threshold for search results. \"\n \"(when using 'Similarity with score threshold')\",\n value=0,\n advanced=True,\n ),\n DictInput(\n name=\"search_filter\",\n display_name=\"Search Metadata Filter\",\n info=\"Optional dictionary of filters to apply to the search query.\",\n advanced=True,\n list=True,\n ),\n MessageTextInput(\n name=\"body_search\",\n display_name=\"Search Body\",\n info=\"Document textual search terms to apply to the search query.\",\n advanced=True,\n ),\n BoolInput(\n name=\"enable_body_search\",\n display_name=\"Enable Body Search\",\n info=\"Flag to enable body search. This must be enabled BEFORE the table is created.\",\n value=False,\n advanced=True,\n ),\n ]\n\n @check_cached_vector_store\n def build_vector_store(self) -> Cassandra:\n try:\n import cassio\n from langchain_community.utilities.cassandra import SetupMode\n except ImportError as e:\n msg = \"Could not import cassio integration package. Please install it with `pip install cassio`.\"\n raise ImportError(msg) from e\n\n from uuid import UUID\n\n database_ref = self.database_ref\n\n try:\n UUID(self.database_ref)\n is_astra = True\n except ValueError:\n is_astra = False\n if \",\" in self.database_ref:\n # use a copy because we can't change the type of the parameter\n database_ref = self.database_ref.split(\",\")\n\n if is_astra:\n cassio.init(\n database_id=database_ref,\n token=self.token,\n cluster_kwargs=self.cluster_kwargs,\n )\n else:\n cassio.init(\n contact_points=database_ref,\n username=self.username,\n password=self.token,\n cluster_kwargs=self.cluster_kwargs,\n )\n\n # Convert DataFrame to Data if needed using parent's method\n self.ingest_data = self._prepare_ingest_data()\n\n documents = []\n for _input in self.ingest_data or []:\n if isinstance(_input, Data):\n documents.append(_input.to_lc_document())\n else:\n documents.append(_input)\n\n body_index_options = [(\"index_analyzer\", \"STANDARD\")] if self.enable_body_search else None\n\n if self.setup_mode == \"Off\":\n setup_mode = SetupMode.OFF\n elif self.setup_mode == \"Sync\":\n setup_mode = SetupMode.SYNC\n else:\n setup_mode = SetupMode.ASYNC\n\n if documents:\n self.log(f\"Adding {len(documents)} documents to the Vector Store.\")\n table = Cassandra.from_documents(\n documents=documents,\n embedding=self.embedding,\n table_name=self.table_name,\n keyspace=self.keyspace,\n ttl_seconds=self.ttl_seconds or None,\n batch_size=self.batch_size,\n body_index_options=body_index_options,\n )\n else:\n self.log(\"No documents to add to the Vector Store.\")\n table = Cassandra(\n embedding=self.embedding,\n table_name=self.table_name,\n keyspace=self.keyspace,\n ttl_seconds=self.ttl_seconds or None,\n body_index_options=body_index_options,\n setup_mode=setup_mode,\n )\n return table\n\n def _map_search_type(self) -> str:\n if self.search_type == \"Similarity with score threshold\":\n return \"similarity_score_threshold\"\n if self.search_type == \"MMR (Max Marginal Relevance)\":\n return \"mmr\"\n return \"similarity\"\n\n def search_documents(self) -> list[Data]:\n vector_store = self.build_vector_store()\n\n self.log(f\"Search input: {self.search_query}\")\n self.log(f\"Search type: {self.search_type}\")\n self.log(f\"Number of results: {self.number_of_results}\")\n\n if self.search_query and isinstance(self.search_query, str) and self.search_query.strip():\n try:\n search_type = self._map_search_type()\n search_args = self._build_search_args()\n\n self.log(f\"Search args: {search_args}\")\n\n docs = vector_store.search(query=self.search_query, search_type=search_type, **search_args)\n except KeyError as e:\n if \"content\" in str(e):\n msg = (\n \"You should ingest data through Langflow (or LangChain) to query it in Langflow. \"\n \"Your collection does not contain a field name 'content'.\"\n )\n raise ValueError(msg) from e\n raise\n\n self.log(f\"Retrieved documents: {len(docs)}\")\n\n data = docs_to_data(docs)\n self.status = data\n return data\n return []\n\n def _build_search_args(self):\n args = {\n \"k\": self.number_of_results,\n \"score_threshold\": self.search_score_threshold,\n }\n\n if self.search_filter:\n clean_filter = {k: v for k, v in self.search_filter.items() if k and v}\n if len(clean_filter) > 0:\n args[\"filter\"] = clean_filter\n if self.body_search:\n if not self.enable_body_search:\n msg = \"You should enable body search when creating the table to search the body field.\"\n raise ValueError(msg)\n args[\"body_search\"] = self.body_search\n return args\n\n def get_retriever_kwargs(self):\n search_args = self._build_search_args()\n return {\n \"search_type\": self._map_search_type(),\n \"search_kwargs\": search_args,\n }\n"},"database_ref":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Contact Points / Astra Database ID","dynamic":false,"info":"Contact points for the database (or Astra DB database ID)","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"database_ref","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"embedding":{"_input_type":"HandleInput","advanced":false,"display_name":"Embedding","dynamic":false,"info":"","input_types":["Embeddings"],"list":false,"list_add_label":"Add More","name":"embedding","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"enable_body_search":{"_input_type":"BoolInput","advanced":true,"display_name":"Enable Body Search","dynamic":false,"info":"Flag to enable body search. This must be enabled BEFORE the table is created.","list":false,"list_add_label":"Add More","name":"enable_body_search","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"ingest_data":{"_input_type":"HandleInput","advanced":false,"display_name":"Ingest Data","dynamic":false,"info":"","input_types":["Data","DataFrame"],"list":true,"list_add_label":"Add More","name":"ingest_data","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"keyspace":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Keyspace","dynamic":false,"info":"Table Keyspace (or Astra DB namespace).","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"keyspace","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"number_of_results":{"_input_type":"IntInput","advanced":true,"display_name":"Number of Results","dynamic":false,"info":"Number of results to return.","list":false,"list_add_label":"Add More","name":"number_of_results","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":4},"search_filter":{"_input_type":"DictInput","advanced":true,"display_name":"Search Metadata Filter","dynamic":false,"info":"Optional dictionary of filters to apply to the search query.","list":true,"list_add_label":"Add More","name":"search_filter","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"type":"dict","value":{}},"search_query":{"_input_type":"QueryInput","advanced":false,"display_name":"Search Query","dynamic":false,"info":"Enter a query to run a similarity search.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"search_query","placeholder":"Enter a query...","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"query","value":""},"search_score_threshold":{"_input_type":"FloatInput","advanced":true,"display_name":"Search Score Threshold","dynamic":false,"info":"Minimum similarity score threshold for search results. (when using 'Similarity with score threshold')","list":false,"list_add_label":"Add More","name":"search_score_threshold","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"float","value":0.0},"search_type":{"_input_type":"DropdownInput","advanced":true,"combobox":false,"dialog_inputs":{},"display_name":"Search Type","dynamic":false,"external_options":{},"info":"Search type to use","name":"search_type","options":["Similarity","Similarity with score threshold","MMR (Max Marginal Relevance)"],"options_metadata":[],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"Similarity"},"setup_mode":{"_input_type":"DropdownInput","advanced":true,"combobox":false,"dialog_inputs":{},"display_name":"Setup Mode","dynamic":false,"external_options":{},"info":"Configuration mode for setting up the Cassandra table, with options like 'Sync', 'Async', or 'Off'.","name":"setup_mode","options":["Sync","Async","Off"],"options_metadata":[],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"Sync"},"should_cache_vector_store":{"_input_type":"BoolInput","advanced":true,"display_name":"Cache Vector Store","dynamic":false,"info":"If True, the vector store will be cached for the current build of the component. This is useful for components that have multiple output methods and want to share the same vector store.","list":false,"list_add_label":"Add More","name":"should_cache_vector_store","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true},"table_name":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Table Name","dynamic":false,"info":"The name of the table (or Astra DB collection) where vectors will be stored.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"table_name","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password / Astra DB Token","dynamic":false,"info":"User password for the database (or Astra DB token).","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""},"ttl_seconds":{"_input_type":"IntInput","advanced":true,"display_name":"TTL Seconds","dynamic":false,"info":"Optional time-to-live for the added texts.","list":false,"list_add_label":"Add More","name":"ttl_seconds","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":""},"username":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Username","dynamic":false,"info":"Username for the database (leave empty for Astra DB).","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"CassandraChatMemory":{"base_classes":["Memory"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Retrieves and store chat messages from Apache Cassandra.","display_name":"Cassandra Chat Memory","documentation":"","edited":false,"field_order":["database_ref","username","token","keyspace","table_name","session_id","cluster_kwargs"],"frozen":false,"icon":"Cassandra","legacy":false,"metadata":{"code_hash":"f6497182984e","dependencies":{"dependencies":[{"name":"lfx","version":null},{"name":"langchain_community","version":"0.3.21"},{"name":"cassio","version":null}],"total_dependencies":3},"module":"lfx.components.cassandra.cassandra_chat.CassandraChatMemory"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Memory","group_outputs":false,"method":"build_message_history","name":"memory","selected":"Memory","tool_mode":true,"types":["Memory"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","cluster_kwargs":{"_input_type":"DictInput","advanced":true,"display_name":"Cluster arguments","dynamic":false,"info":"Optional dictionary of additional keyword arguments for the Cassandra cluster.","list":true,"list_add_label":"Add More","name":"cluster_kwargs","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"type":"dict","value":{}},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.memory.model import LCChatMemoryComponent\nfrom lfx.field_typing.constants import Memory\nfrom lfx.inputs.inputs import DictInput, MessageTextInput, SecretStrInput\n\n\nclass CassandraChatMemory(LCChatMemoryComponent):\n display_name = \"Cassandra Chat Memory\"\n description = \"Retrieves and store chat messages from Apache Cassandra.\"\n name = \"CassandraChatMemory\"\n icon = \"Cassandra\"\n\n inputs = [\n MessageTextInput(\n name=\"database_ref\",\n display_name=\"Contact Points / Astra Database ID\",\n info=\"Contact points for the database (or Astra DB database ID)\",\n required=True,\n ),\n MessageTextInput(\n name=\"username\", display_name=\"Username\", info=\"Username for the database (leave empty for Astra DB).\"\n ),\n SecretStrInput(\n name=\"token\",\n display_name=\"Password / Astra DB Token\",\n info=\"User password for the database (or Astra DB token).\",\n required=True,\n ),\n MessageTextInput(\n name=\"keyspace\",\n display_name=\"Keyspace\",\n info=\"Table Keyspace (or Astra DB namespace).\",\n required=True,\n ),\n MessageTextInput(\n name=\"table_name\",\n display_name=\"Table Name\",\n info=\"The name of the table (or Astra DB collection) where vectors will be stored.\",\n required=True,\n ),\n MessageTextInput(\n name=\"session_id\", display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n DictInput(\n name=\"cluster_kwargs\",\n display_name=\"Cluster arguments\",\n info=\"Optional dictionary of additional keyword arguments for the Cassandra cluster.\",\n advanced=True,\n is_list=True,\n ),\n ]\n\n def build_message_history(self) -> Memory:\n from langchain_community.chat_message_histories import CassandraChatMessageHistory\n\n try:\n import cassio\n except ImportError as e:\n msg = \"Could not import cassio integration package. Please install it with `pip install cassio`.\"\n raise ImportError(msg) from e\n\n from uuid import UUID\n\n database_ref = self.database_ref\n\n try:\n UUID(self.database_ref)\n is_astra = True\n except ValueError:\n is_astra = False\n if \",\" in self.database_ref:\n # use a copy because we can't change the type of the parameter\n database_ref = self.database_ref.split(\",\")\n\n if is_astra:\n cassio.init(\n database_id=database_ref,\n token=self.token,\n cluster_kwargs=self.cluster_kwargs,\n )\n else:\n cassio.init(\n contact_points=database_ref,\n username=self.username,\n password=self.token,\n cluster_kwargs=self.cluster_kwargs,\n )\n\n return CassandraChatMessageHistory(\n session_id=self.session_id,\n table_name=self.table_name,\n keyspace=self.keyspace,\n )\n"},"database_ref":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Contact Points / Astra Database ID","dynamic":false,"info":"Contact points for the database (or Astra DB database ID)","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"database_ref","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"keyspace":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Keyspace","dynamic":false,"info":"Table Keyspace (or Astra DB namespace).","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"keyspace","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"session_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Session ID","dynamic":false,"info":"Session ID for the message.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"session_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"table_name":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Table Name","dynamic":false,"info":"The name of the table (or Astra DB collection) where vectors will be stored.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"table_name","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password / Astra DB Token","dynamic":false,"info":"User password for the database (or Astra DB token).","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""},"username":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Username","dynamic":false,"info":"Username for the database (leave empty for Astra DB).","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"CassandraGraph":{"base_classes":["Data","DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Cassandra Graph Vector Store","display_name":"Cassandra Graph","documentation":"","edited":false,"field_order":["database_ref","username","token","keyspace","table_name","setup_mode","cluster_kwargs","ingest_data","search_query","should_cache_vector_store","embedding","number_of_results","search_type","depth","search_score_threshold","search_filter"],"frozen":false,"icon":"Cassandra","legacy":false,"metadata":{"code_hash":"26c63f80745e","dependencies":{"dependencies":[{"name":"langchain_community","version":"0.3.21"},{"name":"lfx","version":null},{"name":"cassio","version":null}],"total_dependencies":3},"module":"lfx.components.cassandra.cassandra_graph.CassandraGraphVectorStoreComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Search Results","group_outputs":false,"method":"search_documents","name":"search_results","selected":"Data","tool_mode":true,"types":["Data"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataframe","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","cluster_kwargs":{"_input_type":"DictInput","advanced":true,"display_name":"Cluster arguments","dynamic":false,"info":"Optional dictionary of additional keyword arguments for the Cassandra cluster.","list":true,"list_add_label":"Add More","name":"cluster_kwargs","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"type":"dict","value":{}},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from uuid import UUID\n\nfrom langchain_community.graph_vectorstores import CassandraGraphVectorStore\n\nfrom lfx.base.vectorstores.model import LCVectorStoreComponent, check_cached_vector_store\nfrom lfx.helpers.data import docs_to_data\nfrom lfx.inputs.inputs import DictInput, FloatInput\nfrom lfx.io import (\n DropdownInput,\n HandleInput,\n IntInput,\n MessageTextInput,\n SecretStrInput,\n)\nfrom lfx.schema.data import Data\n\n\nclass CassandraGraphVectorStoreComponent(LCVectorStoreComponent):\n display_name = \"Cassandra Graph\"\n description = \"Cassandra Graph Vector Store\"\n name = \"CassandraGraph\"\n icon = \"Cassandra\"\n\n inputs = [\n MessageTextInput(\n name=\"database_ref\",\n display_name=\"Contact Points / Astra Database ID\",\n info=\"Contact points for the database (or Astra DB database ID)\",\n required=True,\n ),\n MessageTextInput(\n name=\"username\", display_name=\"Username\", info=\"Username for the database (leave empty for Astra DB).\"\n ),\n SecretStrInput(\n name=\"token\",\n display_name=\"Password / Astra DB Token\",\n info=\"User password for the database (or Astra DB token).\",\n required=True,\n ),\n MessageTextInput(\n name=\"keyspace\",\n display_name=\"Keyspace\",\n info=\"Table Keyspace (or Astra DB namespace).\",\n required=True,\n ),\n MessageTextInput(\n name=\"table_name\",\n display_name=\"Table Name\",\n info=\"The name of the table (or Astra DB collection) where vectors will be stored.\",\n required=True,\n ),\n DropdownInput(\n name=\"setup_mode\",\n display_name=\"Setup Mode\",\n info=\"Configuration mode for setting up the Cassandra table, with options like 'Sync' or 'Off'.\",\n options=[\"Sync\", \"Off\"],\n value=\"Sync\",\n advanced=True,\n ),\n DictInput(\n name=\"cluster_kwargs\",\n display_name=\"Cluster arguments\",\n info=\"Optional dictionary of additional keyword arguments for the Cassandra cluster.\",\n advanced=True,\n list=True,\n ),\n *LCVectorStoreComponent.inputs,\n HandleInput(name=\"embedding\", display_name=\"Embedding\", input_types=[\"Embeddings\"]),\n IntInput(\n name=\"number_of_results\",\n display_name=\"Number of Results\",\n info=\"Number of results to return.\",\n value=4,\n advanced=True,\n ),\n DropdownInput(\n name=\"search_type\",\n display_name=\"Search Type\",\n info=\"Search type to use\",\n options=[\n \"Traversal\",\n \"MMR traversal\",\n \"Similarity\",\n \"Similarity with score threshold\",\n \"MMR (Max Marginal Relevance)\",\n ],\n value=\"Traversal\",\n advanced=True,\n ),\n IntInput(\n name=\"depth\",\n display_name=\"Depth of traversal\",\n info=\"The maximum depth of edges to traverse. (when using 'Traversal' or 'MMR traversal')\",\n value=1,\n advanced=True,\n ),\n FloatInput(\n name=\"search_score_threshold\",\n display_name=\"Search Score Threshold\",\n info=\"Minimum similarity score threshold for search results. \"\n \"(when using 'Similarity with score threshold')\",\n value=0,\n advanced=True,\n ),\n DictInput(\n name=\"search_filter\",\n display_name=\"Search Metadata Filter\",\n info=\"Optional dictionary of filters to apply to the search query.\",\n advanced=True,\n list=True,\n ),\n ]\n\n @check_cached_vector_store\n def build_vector_store(self) -> CassandraGraphVectorStore:\n try:\n import cassio\n from langchain_community.utilities.cassandra import SetupMode\n except ImportError as e:\n msg = \"Could not import cassio integration package. Please install it with `pip install cassio`.\"\n raise ImportError(msg) from e\n\n database_ref = self.database_ref\n\n try:\n UUID(self.database_ref)\n is_astra = True\n except ValueError:\n is_astra = False\n if \",\" in self.database_ref:\n # use a copy because we can't change the type of the parameter\n database_ref = self.database_ref.split(\",\")\n\n if is_astra:\n cassio.init(\n database_id=database_ref,\n token=self.token,\n cluster_kwargs=self.cluster_kwargs,\n )\n else:\n cassio.init(\n contact_points=database_ref,\n username=self.username,\n password=self.token,\n cluster_kwargs=self.cluster_kwargs,\n )\n\n self.ingest_data = self._prepare_ingest_data()\n\n documents = []\n\n for _input in self.ingest_data or []:\n if isinstance(_input, Data):\n documents.append(_input.to_lc_document())\n else:\n documents.append(_input)\n\n setup_mode = SetupMode.OFF if self.setup_mode == \"Off\" else SetupMode.SYNC\n\n if documents:\n self.log(f\"Adding {len(documents)} documents to the Vector Store.\")\n store = CassandraGraphVectorStore.from_documents(\n documents=documents,\n embedding=self.embedding,\n node_table=self.table_name,\n keyspace=self.keyspace,\n )\n else:\n self.log(\"No documents to add to the Vector Store.\")\n store = CassandraGraphVectorStore(\n embedding=self.embedding,\n node_table=self.table_name,\n keyspace=self.keyspace,\n setup_mode=setup_mode,\n )\n return store\n\n def _map_search_type(self) -> str:\n if self.search_type == \"Similarity\":\n return \"similarity\"\n if self.search_type == \"Similarity with score threshold\":\n return \"similarity_score_threshold\"\n if self.search_type == \"MMR (Max Marginal Relevance)\":\n return \"mmr\"\n if self.search_type == \"MMR Traversal\":\n return \"mmr_traversal\"\n return \"traversal\"\n\n def search_documents(self) -> list[Data]:\n vector_store = self.build_vector_store()\n\n self.log(f\"Search input: {self.search_query}\")\n self.log(f\"Search type: {self.search_type}\")\n self.log(f\"Number of results: {self.number_of_results}\")\n\n if self.search_query and isinstance(self.search_query, str) and self.search_query.strip():\n try:\n search_type = self._map_search_type()\n search_args = self._build_search_args()\n\n self.log(f\"Search args: {search_args}\")\n\n docs = vector_store.search(query=self.search_query, search_type=search_type, **search_args)\n except KeyError as e:\n if \"content\" in str(e):\n msg = (\n \"You should ingest data through Langflow (or LangChain) to query it in Langflow. \"\n \"Your collection does not contain a field name 'content'.\"\n )\n raise ValueError(msg) from e\n raise\n\n self.log(f\"Retrieved documents: {len(docs)}\")\n\n data = docs_to_data(docs)\n self.status = data\n return data\n return []\n\n def _build_search_args(self):\n args = {\n \"k\": self.number_of_results,\n \"score_threshold\": self.search_score_threshold,\n \"depth\": self.depth,\n }\n\n if self.search_filter:\n clean_filter = {k: v for k, v in self.search_filter.items() if k and v}\n if len(clean_filter) > 0:\n args[\"filter\"] = clean_filter\n return args\n\n def get_retriever_kwargs(self):\n search_args = self._build_search_args()\n return {\n \"search_type\": self._map_search_type(),\n \"search_kwargs\": search_args,\n }\n"},"database_ref":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Contact Points / Astra Database ID","dynamic":false,"info":"Contact points for the database (or Astra DB database ID)","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"database_ref","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"depth":{"_input_type":"IntInput","advanced":true,"display_name":"Depth of traversal","dynamic":false,"info":"The maximum depth of edges to traverse. (when using 'Traversal' or 'MMR traversal')","list":false,"list_add_label":"Add More","name":"depth","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":1},"embedding":{"_input_type":"HandleInput","advanced":false,"display_name":"Embedding","dynamic":false,"info":"","input_types":["Embeddings"],"list":false,"list_add_label":"Add More","name":"embedding","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"ingest_data":{"_input_type":"HandleInput","advanced":false,"display_name":"Ingest Data","dynamic":false,"info":"","input_types":["Data","DataFrame"],"list":true,"list_add_label":"Add More","name":"ingest_data","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"keyspace":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Keyspace","dynamic":false,"info":"Table Keyspace (or Astra DB namespace).","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"keyspace","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"number_of_results":{"_input_type":"IntInput","advanced":true,"display_name":"Number of Results","dynamic":false,"info":"Number of results to return.","list":false,"list_add_label":"Add More","name":"number_of_results","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":4},"search_filter":{"_input_type":"DictInput","advanced":true,"display_name":"Search Metadata Filter","dynamic":false,"info":"Optional dictionary of filters to apply to the search query.","list":true,"list_add_label":"Add More","name":"search_filter","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"type":"dict","value":{}},"search_query":{"_input_type":"QueryInput","advanced":false,"display_name":"Search Query","dynamic":false,"info":"Enter a query to run a similarity search.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"search_query","placeholder":"Enter a query...","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"query","value":""},"search_score_threshold":{"_input_type":"FloatInput","advanced":true,"display_name":"Search Score Threshold","dynamic":false,"info":"Minimum similarity score threshold for search results. (when using 'Similarity with score threshold')","list":false,"list_add_label":"Add More","name":"search_score_threshold","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"float","value":0.0},"search_type":{"_input_type":"DropdownInput","advanced":true,"combobox":false,"dialog_inputs":{},"display_name":"Search Type","dynamic":false,"external_options":{},"info":"Search type to use","name":"search_type","options":["Traversal","MMR traversal","Similarity","Similarity with score threshold","MMR (Max Marginal Relevance)"],"options_metadata":[],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"Traversal"},"setup_mode":{"_input_type":"DropdownInput","advanced":true,"combobox":false,"dialog_inputs":{},"display_name":"Setup Mode","dynamic":false,"external_options":{},"info":"Configuration mode for setting up the Cassandra table, with options like 'Sync' or 'Off'.","name":"setup_mode","options":["Sync","Off"],"options_metadata":[],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"Sync"},"should_cache_vector_store":{"_input_type":"BoolInput","advanced":true,"display_name":"Cache Vector Store","dynamic":false,"info":"If True, the vector store will be cached for the current build of the component. This is useful for components that have multiple output methods and want to share the same vector store.","list":false,"list_add_label":"Add More","name":"should_cache_vector_store","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true},"table_name":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Table Name","dynamic":false,"info":"The name of the table (or Astra DB collection) where vectors will be stored.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"table_name","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password / Astra DB Token","dynamic":false,"info":"User password for the database (or Astra DB token).","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""},"username":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Username","dynamic":false,"info":"Username for the database (leave empty for Astra DB).","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false}}],["chroma",{"Chroma":{"base_classes":["Data","DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Chroma Vector Store with search capabilities","display_name":"Chroma DB","documentation":"","edited":false,"field_order":["collection_name","persist_directory","ingest_data","search_query","should_cache_vector_store","embedding","chroma_server_cors_allow_origins","chroma_server_host","chroma_server_http_port","chroma_server_grpc_port","chroma_server_ssl_enabled","allow_duplicates","search_type","number_of_results","limit"],"frozen":false,"icon":"Chroma","legacy":false,"metadata":{"code_hash":"82d38624f19a","dependencies":{"dependencies":[{"name":"chromadb","version":"1.2.1"},{"name":"langchain_chroma","version":"0.2.6"},{"name":"typing_extensions","version":"4.15.0"},{"name":"lfx","version":null},{"name":"langchain_community","version":"0.3.21"}],"total_dependencies":5},"module":"lfx.components.chroma.chroma.ChromaVectorStoreComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Search Results","group_outputs":false,"method":"search_documents","name":"search_results","selected":"Data","tool_mode":true,"types":["Data"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataframe","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","allow_duplicates":{"_input_type":"BoolInput","advanced":true,"display_name":"Allow Duplicates","dynamic":false,"info":"If false, will not add documents that are already in the Vector Store.","list":false,"list_add_label":"Add More","name":"allow_duplicates","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"chroma_server_cors_allow_origins":{"_input_type":"StrInput","advanced":true,"display_name":"Server CORS Allow Origins","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"chroma_server_cors_allow_origins","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"chroma_server_grpc_port":{"_input_type":"IntInput","advanced":true,"display_name":"Server gRPC Port","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"chroma_server_grpc_port","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":""},"chroma_server_host":{"_input_type":"StrInput","advanced":true,"display_name":"Server Host","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"chroma_server_host","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"chroma_server_http_port":{"_input_type":"IntInput","advanced":true,"display_name":"Server HTTP Port","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"chroma_server_http_port","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":""},"chroma_server_ssl_enabled":{"_input_type":"BoolInput","advanced":true,"display_name":"Server SSL Enabled","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"chroma_server_ssl_enabled","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from copy import deepcopy\nfrom typing import TYPE_CHECKING\n\nfrom chromadb.config import Settings\nfrom langchain_chroma import Chroma\nfrom typing_extensions import override\n\nfrom lfx.base.vectorstores.model import LCVectorStoreComponent, check_cached_vector_store\nfrom lfx.base.vectorstores.utils import chroma_collection_to_data\nfrom lfx.inputs.inputs import BoolInput, DropdownInput, HandleInput, IntInput, StrInput\nfrom lfx.schema.data import Data\n\nif TYPE_CHECKING:\n from lfx.schema.dataframe import DataFrame\n\n\nclass ChromaVectorStoreComponent(LCVectorStoreComponent):\n \"\"\"Chroma Vector Store with search capabilities.\"\"\"\n\n display_name: str = \"Chroma DB\"\n description: str = \"Chroma Vector Store with search capabilities\"\n name = \"Chroma\"\n icon = \"Chroma\"\n\n inputs = [\n StrInput(\n name=\"collection_name\",\n display_name=\"Collection Name\",\n value=\"langflow\",\n ),\n StrInput(\n name=\"persist_directory\",\n display_name=\"Persist Directory\",\n ),\n *LCVectorStoreComponent.inputs,\n HandleInput(name=\"embedding\", display_name=\"Embedding\", input_types=[\"Embeddings\"]),\n StrInput(\n name=\"chroma_server_cors_allow_origins\",\n display_name=\"Server CORS Allow Origins\",\n advanced=True,\n ),\n StrInput(\n name=\"chroma_server_host\",\n display_name=\"Server Host\",\n advanced=True,\n ),\n IntInput(\n name=\"chroma_server_http_port\",\n display_name=\"Server HTTP Port\",\n advanced=True,\n ),\n IntInput(\n name=\"chroma_server_grpc_port\",\n display_name=\"Server gRPC Port\",\n advanced=True,\n ),\n BoolInput(\n name=\"chroma_server_ssl_enabled\",\n display_name=\"Server SSL Enabled\",\n advanced=True,\n ),\n BoolInput(\n name=\"allow_duplicates\",\n display_name=\"Allow Duplicates\",\n advanced=True,\n info=\"If false, will not add documents that are already in the Vector Store.\",\n ),\n DropdownInput(\n name=\"search_type\",\n display_name=\"Search Type\",\n options=[\"Similarity\", \"MMR\"],\n value=\"Similarity\",\n advanced=True,\n ),\n IntInput(\n name=\"number_of_results\",\n display_name=\"Number of Results\",\n info=\"Number of results to return.\",\n advanced=True,\n value=10,\n ),\n IntInput(\n name=\"limit\",\n display_name=\"Limit\",\n advanced=True,\n info=\"Limit the number of records to compare when Allow Duplicates is False.\",\n ),\n ]\n\n @override\n @check_cached_vector_store\n def build_vector_store(self) -> Chroma:\n \"\"\"Builds the Chroma object.\"\"\"\n try:\n from chromadb import Client\n from langchain_chroma import Chroma\n except ImportError as e:\n msg = \"Could not import Chroma integration package. Please install it with `pip install langchain-chroma`.\"\n raise ImportError(msg) from e\n # Chroma settings\n chroma_settings = None\n client = None\n if self.chroma_server_host:\n chroma_settings = Settings(\n chroma_server_cors_allow_origins=self.chroma_server_cors_allow_origins or [],\n chroma_server_host=self.chroma_server_host,\n chroma_server_http_port=self.chroma_server_http_port or None,\n chroma_server_grpc_port=self.chroma_server_grpc_port or None,\n chroma_server_ssl_enabled=self.chroma_server_ssl_enabled,\n )\n client = Client(settings=chroma_settings)\n\n # Check persist_directory and expand it if it is a relative path\n persist_directory = self.resolve_path(self.persist_directory) if self.persist_directory is not None else None\n\n chroma = Chroma(\n persist_directory=persist_directory,\n client=client,\n embedding_function=self.embedding,\n collection_name=self.collection_name,\n )\n\n self._add_documents_to_vector_store(chroma)\n limit = int(self.limit) if self.limit is not None and str(self.limit).strip() else None\n self.status = chroma_collection_to_data(chroma.get(limit=limit))\n return chroma\n\n def _add_documents_to_vector_store(self, vector_store: \"Chroma\") -> None:\n \"\"\"Adds documents to the Vector Store.\"\"\"\n ingest_data: list | Data | DataFrame = self.ingest_data\n if not ingest_data:\n self.status = \"\"\n return\n\n # Convert DataFrame to Data if needed using parent's method\n ingest_data = self._prepare_ingest_data()\n\n stored_documents_without_id = []\n if self.allow_duplicates:\n stored_data = []\n else:\n limit = int(self.limit) if self.limit is not None and str(self.limit).strip() else None\n stored_data = chroma_collection_to_data(vector_store.get(limit=limit))\n for value in deepcopy(stored_data):\n del value.id\n stored_documents_without_id.append(value)\n\n documents = []\n for _input in ingest_data or []:\n if isinstance(_input, Data):\n if _input not in stored_documents_without_id:\n documents.append(_input.to_lc_document())\n else:\n msg = \"Vector Store Inputs must be Data objects.\"\n raise TypeError(msg)\n\n if documents and self.embedding is not None:\n self.log(f\"Adding {len(documents)} documents to the Vector Store.\")\n # Filter complex metadata to prevent ChromaDB errors\n try:\n from langchain_community.vectorstores.utils import filter_complex_metadata\n\n filtered_documents = filter_complex_metadata(documents)\n vector_store.add_documents(filtered_documents)\n except ImportError:\n self.log(\"Warning: Could not import filter_complex_metadata. Adding documents without filtering.\")\n vector_store.add_documents(documents)\n else:\n self.log(\"No documents to add to the Vector Store.\")\n"},"collection_name":{"_input_type":"StrInput","advanced":false,"display_name":"Collection Name","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"collection_name","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"langflow"},"embedding":{"_input_type":"HandleInput","advanced":false,"display_name":"Embedding","dynamic":false,"info":"","input_types":["Embeddings"],"list":false,"list_add_label":"Add More","name":"embedding","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"ingest_data":{"_input_type":"HandleInput","advanced":false,"display_name":"Ingest Data","dynamic":false,"info":"","input_types":["Data","DataFrame"],"list":true,"list_add_label":"Add More","name":"ingest_data","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"limit":{"_input_type":"IntInput","advanced":true,"display_name":"Limit","dynamic":false,"info":"Limit the number of records to compare when Allow Duplicates is False.","list":false,"list_add_label":"Add More","name":"limit","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":""},"number_of_results":{"_input_type":"IntInput","advanced":true,"display_name":"Number of Results","dynamic":false,"info":"Number of results to return.","list":false,"list_add_label":"Add More","name":"number_of_results","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":10},"persist_directory":{"_input_type":"StrInput","advanced":false,"display_name":"Persist Directory","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"persist_directory","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"search_query":{"_input_type":"QueryInput","advanced":false,"display_name":"Search Query","dynamic":false,"info":"Enter a query to run a similarity search.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"search_query","placeholder":"Enter a query...","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"query","value":""},"search_type":{"_input_type":"DropdownInput","advanced":true,"combobox":false,"dialog_inputs":{},"display_name":"Search Type","dynamic":false,"external_options":{},"info":"","name":"search_type","options":["Similarity","MMR"],"options_metadata":[],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"Similarity"},"should_cache_vector_store":{"_input_type":"BoolInput","advanced":true,"display_name":"Cache Vector Store","dynamic":false,"info":"If True, the vector store will be cached for the current build of the component. This is useful for components that have multiple output methods and want to share the same vector store.","list":false,"list_add_label":"Add More","name":"should_cache_vector_store","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true}},"tool_mode":false}}],["cleanlab",{"CleanlabEvaluator":{"base_classes":["float","Message","number"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Evaluates any LLM response using Cleanlab and outputs trust score and explanation.","display_name":"Cleanlab Evaluator","documentation":"","edited":false,"field_order":["system_prompt","prompt","response","api_key","model","quality_preset"],"frozen":false,"icon":"Cleanlab","legacy":false,"metadata":{"code_hash":"06963c804ffe","dependencies":{"dependencies":[{"name":"cleanlab_tlm","version":"1.1.36"},{"name":"lfx","version":null}],"total_dependencies":2},"module":"lfx.components.cleanlab.cleanlab_evaluator.CleanlabEvaluator"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Response","group_outputs":false,"method":"pass_response","name":"response_passthrough","selected":"Message","tool_mode":true,"types":["Message"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"Trust Score","group_outputs":false,"method":"get_score","name":"score","selected":"number","tool_mode":true,"types":["number","float"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"Explanation","group_outputs":false,"method":"get_explanation","name":"explanation","selected":"Message","tool_mode":true,"types":["Message"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Cleanlab API Key","dynamic":false,"info":"Your Cleanlab API key.","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from cleanlab_tlm import TLM\n\nfrom lfx.custom import Component\nfrom lfx.io import (\n DropdownInput,\n MessageTextInput,\n Output,\n SecretStrInput,\n)\nfrom lfx.schema.message import Message\n\n\nclass CleanlabEvaluator(Component):\n \"\"\"A component that evaluates the trustworthiness of LLM responses using Cleanlab.\n\n This component takes a prompt and response pair, along with optional system instructions,\n and uses Cleanlab's evaluation algorithms to generate a trust score and explanation.\n\n Inputs:\n - system_prompt (MessageTextInput): Optional system-level instructions prepended to the user prompt.\n - prompt (MessageTextInput): The user's prompt or query sent to the LLM.\n - response (MessageTextInput): The response generated by the LLM to be evaluated. This should come from the\n LLM component, i.e. OpenAI, Gemini, etc.\n - api_key (SecretStrInput): Your Cleanlab API key.\n - model (DropdownInput): The model used by Cleanlab to evaluate the response (can differ from the\n generation model).\n - quality_preset (DropdownInput): Tradeoff setting for accuracy vs. speed and cost. Higher presets are\n slower but more accurate.\n\n Outputs:\n - response_passthrough (Message): The original response, passed through for downstream use.\n - score (number): A float between 0 and 1 indicating Cleanlab's trustworthiness score for the response.\n - explanation (Message): A textual explanation of why the response received its score.\n\n This component works well in conjunction with the CleanlabRemediator to create a complete trust evaluation\n and remediation pipeline.\n\n More details on the evaluation metrics can be found here: https://help.cleanlab.ai/tlm/tutorials/tlm/\n \"\"\"\n\n display_name = \"Cleanlab Evaluator\"\n description = \"Evaluates any LLM response using Cleanlab and outputs trust score and explanation.\"\n icon = \"Cleanlab\"\n name = \"CleanlabEvaluator\"\n\n inputs = [\n MessageTextInput(\n name=\"system_prompt\",\n display_name=\"System Message\",\n info=\"System-level instructions prepended to the user query.\",\n value=\"\",\n ),\n MessageTextInput(\n name=\"prompt\",\n display_name=\"Prompt\",\n info=\"The user's query to the model.\",\n required=True,\n ),\n MessageTextInput(\n name=\"response\",\n display_name=\"Response\",\n info=\"The response to the user's query.\",\n required=True,\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"Cleanlab API Key\",\n info=\"Your Cleanlab API key.\",\n required=True,\n ),\n DropdownInput(\n name=\"model\",\n display_name=\"Cleanlab Evaluation Model\",\n options=[\n \"gpt-4.1\",\n \"gpt-4.1-mini\",\n \"gpt-4.1-nano\",\n \"o4-mini\",\n \"o3\",\n \"gpt-4.5-preview\",\n \"gpt-4o-mini\",\n \"gpt-4o\",\n \"o3-mini\",\n \"o1\",\n \"o1-mini\",\n \"gpt-4\",\n \"gpt-3.5-turbo-16k\",\n \"claude-3.7-sonnet\",\n \"claude-3.5-sonnet-v2\",\n \"claude-3.5-sonnet\",\n \"claude-3.5-haiku\",\n \"claude-3-haiku\",\n \"nova-micro\",\n \"nova-lite\",\n \"nova-pro\",\n ],\n info=\"The model Cleanlab uses to evaluate the response. This does NOT need to be the same model that \"\n \"generated the response.\",\n value=\"gpt-4o-mini\",\n required=True,\n advanced=True,\n ),\n DropdownInput(\n name=\"quality_preset\",\n display_name=\"Quality Preset\",\n options=[\"base\", \"low\", \"medium\", \"high\", \"best\"],\n value=\"medium\",\n info=\"This determines the accuracy, latency, and cost of the evaluation. Higher quality is generally \"\n \"slower but more accurate.\",\n required=True,\n advanced=True,\n ),\n ]\n\n outputs = [\n Output(\n display_name=\"Response\",\n name=\"response_passthrough\",\n method=\"pass_response\",\n types=[\"Message\"],\n ),\n Output(display_name=\"Trust Score\", name=\"score\", method=\"get_score\", types=[\"number\"]),\n Output(\n display_name=\"Explanation\",\n name=\"explanation\",\n method=\"get_explanation\",\n types=[\"Message\"],\n ),\n ]\n\n def _evaluate_once(self):\n if not hasattr(self, \"_cached_result\"):\n full_prompt = f\"{self.system_prompt}\\n\\n{self.prompt}\" if self.system_prompt else self.prompt\n tlm = TLM(\n api_key=self.api_key,\n options={\"log\": [\"explanation\"], \"model\": self.model},\n quality_preset=self.quality_preset,\n )\n self._cached_result = tlm.get_trustworthiness_score(full_prompt, self.response)\n return self._cached_result\n\n def get_score(self) -> float:\n result = self._evaluate_once()\n score = result.get(\"trustworthiness_score\", 0.0)\n self.status = f\"Trust score: {score:.2f}\"\n return score\n\n def get_explanation(self) -> Message:\n result = self._evaluate_once()\n explanation = result.get(\"log\", {}).get(\"explanation\", \"No explanation returned.\")\n return Message(text=explanation)\n\n def pass_response(self) -> Message:\n self.status = \"Passing through response.\"\n return Message(text=self.response)\n"},"model":{"_input_type":"DropdownInput","advanced":true,"combobox":false,"dialog_inputs":{},"display_name":"Cleanlab Evaluation Model","dynamic":false,"external_options":{},"info":"The model Cleanlab uses to evaluate the response. This does NOT need to be the same model that generated the response.","name":"model","options":["gpt-4.1","gpt-4.1-mini","gpt-4.1-nano","o4-mini","o3","gpt-4.5-preview","gpt-4o-mini","gpt-4o","o3-mini","o1","o1-mini","gpt-4","gpt-3.5-turbo-16k","claude-3.7-sonnet","claude-3.5-sonnet-v2","claude-3.5-sonnet","claude-3.5-haiku","claude-3-haiku","nova-micro","nova-lite","nova-pro"],"options_metadata":[],"placeholder":"","required":true,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"gpt-4o-mini"},"prompt":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Prompt","dynamic":false,"info":"The user's query to the model.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"prompt","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"quality_preset":{"_input_type":"DropdownInput","advanced":true,"combobox":false,"dialog_inputs":{},"display_name":"Quality Preset","dynamic":false,"external_options":{},"info":"This determines the accuracy, latency, and cost of the evaluation. Higher quality is generally slower but more accurate.","name":"quality_preset","options":["base","low","medium","high","best"],"options_metadata":[],"placeholder":"","required":true,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"medium"},"response":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Response","dynamic":false,"info":"The response to the user's query.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"response","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"system_prompt":{"_input_type":"MessageTextInput","advanced":false,"display_name":"System Message","dynamic":false,"info":"System-level instructions prepended to the user query.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"system_prompt","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"CleanlabRAGEvaluator":{"base_classes":["Data","dict","float","Message","number"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Evaluates context, query, and response from a RAG pipeline using Cleanlab and outputs trust metrics.","display_name":"Cleanlab RAG Evaluator","documentation":"","edited":false,"field_order":["api_key","model","quality_preset","context","query","response","run_context_sufficiency","run_response_groundedness","run_response_helpfulness","run_query_ease"],"frozen":false,"icon":"Cleanlab","legacy":false,"metadata":{"code_hash":"f48b57ff7ca3","dependencies":{"dependencies":[{"name":"cleanlab_tlm","version":"1.1.36"},{"name":"lfx","version":null}],"total_dependencies":2},"module":"lfx.components.cleanlab.cleanlab_rag_evaluator.CleanlabRAGEvaluator"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Response","group_outputs":false,"method":"pass_response","name":"response_passthrough","selected":"Message","tool_mode":true,"types":["Message"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"Trust Score","group_outputs":false,"method":"get_trust_score","name":"trust_score","selected":"number","tool_mode":true,"types":["number","float"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"Explanation","group_outputs":false,"method":"get_trust_explanation","name":"trust_explanation","selected":"Message","tool_mode":true,"types":["Message"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"Other Evals","group_outputs":false,"method":"get_other_scores","name":"other_scores","selected":"Data","tool_mode":true,"types":["Data","dict"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"Evaluation Summary","group_outputs":false,"method":"get_evaluation_summary","name":"evaluation_summary","selected":"Message","tool_mode":true,"types":["Message"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Cleanlab API Key","dynamic":false,"info":"Your Cleanlab API key.","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from cleanlab_tlm import TrustworthyRAG, get_default_evals\n\nfrom lfx.custom import Component\nfrom lfx.io import (\n BoolInput,\n DropdownInput,\n MessageTextInput,\n Output,\n SecretStrInput,\n)\nfrom lfx.schema.message import Message\n\n\nclass CleanlabRAGEvaluator(Component):\n \"\"\"A component that evaluates the quality of RAG (Retrieval-Augmented Generation) outputs using Cleanlab.\n\n This component takes a query, retrieved context, and generated response from a RAG pipeline,\n and uses Cleanlab's evaluation algorithms to assess various aspects of the RAG system's performance.\n\n The component can evaluate:\n - Overall trustworthiness of the LLM generated response\n - Context sufficiency (whether the retrieved context contains information needed to answer the query)\n - Response groundedness (whether the response is supported directly by the context)\n - Response helpfulness (whether the response effectively addresses the user's query)\n - Query ease (whether the user query seems easy for an AI system to properly handle, useful to diagnose\n queries that are: complex, vague, tricky, or disgruntled-sounding)\n\n Outputs:\n - Trust Score: A score between 0-1 corresponding to the trustworthiness of the response. A higher score\n indicates a higher confidence that the response is correct/good.\n - Explanation: An LLM generated explanation of the trustworthiness assessment\n - Other Evals: Additional evaluation metrics for selected evaluation types in the \"Controls\" tab\n - Evaluation Summary: A comprehensive summary of context, query, response, and selected evaluation results\n\n This component works well in conjunction with the CleanlabRemediator to create a complete trust evaluation\n and remediation pipeline.\n\n More details on the evaluation metrics can be found here: https://help.cleanlab.ai/tlm/use-cases/tlm_rag/\n \"\"\"\n\n display_name = \"Cleanlab RAG Evaluator\"\n description = \"Evaluates context, query, and response from a RAG pipeline using Cleanlab and outputs trust metrics.\"\n icon = \"Cleanlab\"\n name = \"CleanlabRAGEvaluator\"\n\n inputs = [\n SecretStrInput(\n name=\"api_key\",\n display_name=\"Cleanlab API Key\",\n info=\"Your Cleanlab API key.\",\n required=True,\n ),\n DropdownInput(\n name=\"model\",\n display_name=\"Cleanlab Evaluation Model\",\n options=[\n \"gpt-4.1\",\n \"gpt-4.1-mini\",\n \"gpt-4.1-nano\",\n \"o4-mini\",\n \"o3\",\n \"gpt-4.5-preview\",\n \"gpt-4o-mini\",\n \"gpt-4o\",\n \"o3-mini\",\n \"o1\",\n \"o1-mini\",\n \"gpt-4\",\n \"gpt-3.5-turbo-16k\",\n \"claude-3.7-sonnet\",\n \"claude-3.5-sonnet-v2\",\n \"claude-3.5-sonnet\",\n \"claude-3.5-haiku\",\n \"claude-3-haiku\",\n \"nova-micro\",\n \"nova-lite\",\n \"nova-pro\",\n ],\n info=\"The model Cleanlab uses to evaluate the context, query, and response. This does NOT need to be \"\n \"the same model that generated the response.\",\n value=\"gpt-4o-mini\",\n required=True,\n advanced=True,\n ),\n DropdownInput(\n name=\"quality_preset\",\n display_name=\"Quality Preset\",\n options=[\"base\", \"low\", \"medium\"],\n value=\"medium\",\n info=\"This determines the accuracy, latency, and cost of the evaluation. Higher quality is generally \"\n \"slower but more accurate.\",\n required=True,\n advanced=True,\n ),\n MessageTextInput(\n name=\"context\",\n display_name=\"Context\",\n info=\"The context retrieved for the given query.\",\n required=True,\n ),\n MessageTextInput(\n name=\"query\",\n display_name=\"Query\",\n info=\"The user's query.\",\n required=True,\n ),\n MessageTextInput(\n name=\"response\",\n display_name=\"Response\",\n info=\"The response generated by the LLM.\",\n required=True,\n ),\n BoolInput(\n name=\"run_context_sufficiency\",\n display_name=\"Run Context Sufficiency\",\n value=False,\n advanced=True,\n ),\n BoolInput(\n name=\"run_response_groundedness\",\n display_name=\"Run Response Groundedness\",\n value=False,\n advanced=True,\n ),\n BoolInput(\n name=\"run_response_helpfulness\",\n display_name=\"Run Response Helpfulness\",\n value=False,\n advanced=True,\n ),\n BoolInput(\n name=\"run_query_ease\",\n display_name=\"Run Query Ease\",\n value=False,\n advanced=True,\n ),\n ]\n\n outputs = [\n Output(display_name=\"Response\", name=\"response_passthrough\", method=\"pass_response\", types=[\"Message\"]),\n Output(display_name=\"Trust Score\", name=\"trust_score\", method=\"get_trust_score\", types=[\"number\"]),\n Output(display_name=\"Explanation\", name=\"trust_explanation\", method=\"get_trust_explanation\", types=[\"Message\"]),\n Output(display_name=\"Other Evals\", name=\"other_scores\", method=\"get_other_scores\", types=[\"Data\"]),\n Output(\n display_name=\"Evaluation Summary\",\n name=\"evaluation_summary\",\n method=\"get_evaluation_summary\",\n types=[\"Message\"],\n ),\n ]\n\n def _evaluate_once(self):\n if not hasattr(self, \"_cached_result\"):\n try:\n self.status = \"Configuring selected evals...\"\n default_evals = get_default_evals()\n enabled_names = []\n if self.run_context_sufficiency:\n enabled_names.append(\"context_sufficiency\")\n if self.run_response_groundedness:\n enabled_names.append(\"response_groundedness\")\n if self.run_response_helpfulness:\n enabled_names.append(\"response_helpfulness\")\n if self.run_query_ease:\n enabled_names.append(\"query_ease\")\n\n selected_evals = [e for e in default_evals if e.name in enabled_names]\n\n validator = TrustworthyRAG(\n api_key=self.api_key,\n quality_preset=self.quality_preset,\n options={\"log\": [\"explanation\"], \"model\": self.model},\n evals=selected_evals,\n )\n\n self.status = f\"Running evals: {[e.name for e in selected_evals]}\"\n self._cached_result = validator.score(\n query=self.query,\n context=self.context,\n response=self.response,\n )\n self.status = \"Evaluation complete.\"\n\n except Exception as e: # noqa: BLE001\n self.status = f\"Evaluation failed: {e!s}\"\n self._cached_result = {}\n return self._cached_result\n\n def pass_response(self) -> Message:\n self.status = \"Passing through response.\"\n return Message(text=self.response)\n\n def get_trust_score(self) -> float:\n score = self._evaluate_once().get(\"trustworthiness\", {}).get(\"score\", 0.0)\n self.status = f\"Trust Score: {score:.3f}\"\n return score\n\n def get_trust_explanation(self) -> Message:\n explanation = self._evaluate_once().get(\"trustworthiness\", {}).get(\"log\", {}).get(\"explanation\", \"\")\n self.status = \"Trust explanation extracted.\"\n return Message(text=explanation)\n\n def get_other_scores(self) -> dict:\n result = self._evaluate_once()\n\n selected = {\n \"context_sufficiency\": self.run_context_sufficiency,\n \"response_groundedness\": self.run_response_groundedness,\n \"response_helpfulness\": self.run_response_helpfulness,\n \"query_ease\": self.run_query_ease,\n }\n\n filtered_scores = {key: result[key][\"score\"] for key, include in selected.items() if include and key in result}\n\n self.status = f\"{len(filtered_scores)} other evals returned.\"\n return filtered_scores\n\n def get_evaluation_summary(self) -> Message:\n result = self._evaluate_once()\n\n query_text = self.query.strip()\n context_text = self.context.strip()\n response_text = self.response.strip()\n\n trust = result.get(\"trustworthiness\", {}).get(\"score\", 0.0)\n trust_exp = result.get(\"trustworthiness\", {}).get(\"log\", {}).get(\"explanation\", \"\")\n\n selected = {\n \"context_sufficiency\": self.run_context_sufficiency,\n \"response_groundedness\": self.run_response_groundedness,\n \"response_helpfulness\": self.run_response_helpfulness,\n \"query_ease\": self.run_query_ease,\n }\n\n other_scores = {key: result[key][\"score\"] for key, include in selected.items() if include and key in result}\n\n metrics = f\"Trustworthiness: {trust:.3f}\"\n if trust_exp:\n metrics += f\"\\nExplanation: {trust_exp}\"\n if other_scores:\n metrics += \"\\n\" + \"\\n\".join(f\"{k.replace('_', ' ').title()}: {v:.3f}\" for k, v in other_scores.items())\n\n summary = (\n f\"Query:\\n{query_text}\\n\"\n \"-----\\n\"\n f\"Context:\\n{context_text}\\n\"\n \"-----\\n\"\n f\"Response:\\n{response_text}\\n\"\n \"------------------------------\\n\"\n f\"{metrics}\"\n )\n\n self.status = \"Evaluation summary built.\"\n return Message(text=summary)\n"},"context":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Context","dynamic":false,"info":"The context retrieved for the given query.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"context","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"model":{"_input_type":"DropdownInput","advanced":true,"combobox":false,"dialog_inputs":{},"display_name":"Cleanlab Evaluation Model","dynamic":false,"external_options":{},"info":"The model Cleanlab uses to evaluate the context, query, and response. This does NOT need to be the same model that generated the response.","name":"model","options":["gpt-4.1","gpt-4.1-mini","gpt-4.1-nano","o4-mini","o3","gpt-4.5-preview","gpt-4o-mini","gpt-4o","o3-mini","o1","o1-mini","gpt-4","gpt-3.5-turbo-16k","claude-3.7-sonnet","claude-3.5-sonnet-v2","claude-3.5-sonnet","claude-3.5-haiku","claude-3-haiku","nova-micro","nova-lite","nova-pro"],"options_metadata":[],"placeholder":"","required":true,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"gpt-4o-mini"},"quality_preset":{"_input_type":"DropdownInput","advanced":true,"combobox":false,"dialog_inputs":{},"display_name":"Quality Preset","dynamic":false,"external_options":{},"info":"This determines the accuracy, latency, and cost of the evaluation. Higher quality is generally slower but more accurate.","name":"quality_preset","options":["base","low","medium"],"options_metadata":[],"placeholder":"","required":true,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"medium"},"query":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Query","dynamic":false,"info":"The user's query.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"query","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"response":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Response","dynamic":false,"info":"The response generated by the LLM.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"response","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"run_context_sufficiency":{"_input_type":"BoolInput","advanced":true,"display_name":"Run Context Sufficiency","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"run_context_sufficiency","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"run_query_ease":{"_input_type":"BoolInput","advanced":true,"display_name":"Run Query Ease","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"run_query_ease","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"run_response_groundedness":{"_input_type":"BoolInput","advanced":true,"display_name":"Run Response Groundedness","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"run_response_groundedness","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"run_response_helpfulness":{"_input_type":"BoolInput","advanced":true,"display_name":"Run Response Helpfulness","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"run_response_helpfulness","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false}},"tool_mode":false},"CleanlabRemediator":{"base_classes":["Message"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Remediates an untrustworthy response based on trust score from the Cleanlab Evaluator, score threshold, and message handling settings.","display_name":"Cleanlab Remediator","documentation":"","edited":false,"field_order":["response","score","explanation","threshold","show_untrustworthy_response","untrustworthy_warning_text","fallback_text"],"frozen":false,"icon":"Cleanlab","legacy":false,"metadata":{"code_hash":"a5b19d338991","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.cleanlab.cleanlab_remediator.CleanlabRemediator"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Remediated Message","group_outputs":false,"method":"remediate_response","name":"remediated_response","selected":"Message","tool_mode":true,"types":["Message"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.custom import Component\nfrom lfx.field_typing.range_spec import RangeSpec\nfrom lfx.io import BoolInput, FloatInput, HandleInput, MessageTextInput, Output, PromptInput\nfrom lfx.schema.message import Message\n\n\nclass CleanlabRemediator(Component):\n \"\"\"Remediates potentially untrustworthy LLM responses based on trust scores computed by the Cleanlab Evaluator.\n\n This component takes a response and its associated trust score,\n and applies remediation strategies based on configurable thresholds and settings.\n\n Inputs:\n - response (MessageTextInput): The original LLM-generated response to be evaluated and possibly remediated.\n The CleanlabEvaluator passes this response through.\n - score (HandleInput): The trust score output from CleanlabEvaluator (expected to be a float between 0 and 1).\n - explanation (MessageTextInput): Optional textual explanation for the trust score, to be included in the\n output.\n - threshold (Input[float]): Minimum trust score required to accept the response. If the score is lower, the\n response is remediated.\n - show_untrustworthy_response (BoolInput): If true, returns the original response with a warning; if false,\n returns fallback text.\n - untrustworthy_warning_text (PromptInput): Text warning to append to responses deemed untrustworthy (when\n showing them).\n - fallback_text (PromptInput): Replacement message returned if the response is untrustworthy and should be\n hidden.\n\n Outputs:\n - remediated_response (Message): Either:\n • the original response,\n • the original response with appended warning, or\n • the fallback response,\n depending on the trust score and configuration.\n\n This component is typically used downstream of CleanlabEvaluator or CleanlabRagValidator\n to take appropriate action on low-trust responses and inform users accordingly.\n \"\"\"\n\n display_name = \"Cleanlab Remediator\"\n description = (\n \"Remediates an untrustworthy response based on trust score from the Cleanlab Evaluator, \"\n \"score threshold, and message handling settings.\"\n )\n icon = \"Cleanlab\"\n name = \"CleanlabRemediator\"\n\n inputs = [\n MessageTextInput(\n name=\"response\",\n display_name=\"Response\",\n info=\"The response to the user's query.\",\n required=True,\n ),\n HandleInput(\n name=\"score\",\n display_name=\"Trust Score\",\n info=\"The trustworthiness score output from the Cleanlab Evaluator.\",\n input_types=[\"number\"],\n required=True,\n ),\n MessageTextInput(\n name=\"explanation\",\n display_name=\"Explanation\",\n info=\"The explanation from the Cleanlab Evaluator.\",\n required=False,\n ),\n FloatInput(\n name=\"threshold\",\n display_name=\"Threshold\",\n field_type=\"float\",\n value=0.7,\n range_spec=RangeSpec(min=0.0, max=1.0, step=0.05),\n info=\"Minimum score required to show the response unmodified. Reponses with scores above this threshold \"\n \"are considered trustworthy. Reponses with scores below this threshold are considered untrustworthy and \"\n \"will be remediated based on the settings below.\",\n required=True,\n show=True,\n ),\n BoolInput(\n name=\"show_untrustworthy_response\",\n display_name=\"Show Untrustworthy Response\",\n info=\"If enabled, and the trust score is below the threshold, the original response is shown with the \"\n \"added warning. If disabled, and the trust score is below the threshold, the fallback answer is returned.\",\n value=True,\n ),\n PromptInput(\n name=\"untrustworthy_warning_text\",\n display_name=\"Warning for Untrustworthy Response\",\n info=\"Warning to append to the response if Show Untrustworthy Response is enabled and trust score is \"\n \"below the threshold.\",\n value=\"⚠️ WARNING: The following response is potentially untrustworthy.\",\n ),\n PromptInput(\n name=\"fallback_text\",\n display_name=\"Fallback Answer\",\n info=\"Response returned if the trust score is below the threshold and 'Show Untrustworthy Response' is \"\n \"disabled.\",\n value=\"Based on the available information, I cannot provide a complete answer to this question.\",\n ),\n ]\n\n outputs = [\n Output(\n display_name=\"Remediated Message\",\n name=\"remediated_response\",\n method=\"remediate_response\",\n types=[\"Message\"],\n ),\n ]\n\n def remediate_response(self) -> Message:\n if self.score >= self.threshold:\n self.status = f\"Score {self.score:.2f} ≥ threshold {self.threshold:.2f} → accepted\"\n return Message(\n text=f\"{self.response}\\n\\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\n\\n**Trust Score:** {self.score:.2f}\"\n )\n\n self.status = f\"Score {self.score:.2f} < threshold {self.threshold:.2f} → flagged\"\n\n if self.show_untrustworthy_response:\n parts = [\n self.response,\n \"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\",\n f\"**{self.untrustworthy_warning_text.strip()}**\",\n f\"**Trust Score:** {self.score:.2f}\",\n ]\n if self.explanation:\n parts.append(f\"**Explanation:** {self.explanation}\")\n return Message(text=\"\\n\\n\".join(parts))\n\n return Message(text=self.fallback_text)\n"},"explanation":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Explanation","dynamic":false,"info":"The explanation from the Cleanlab Evaluator.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"explanation","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"fallback_text":{"_input_type":"PromptInput","advanced":false,"display_name":"Fallback Answer","dynamic":false,"info":"Response returned if the trust score is below the threshold and 'Show Untrustworthy Response' is disabled.","list":false,"list_add_label":"Add More","name":"fallback_text","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"type":"prompt","value":"Based on the available information, I cannot provide a complete answer to this question."},"response":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Response","dynamic":false,"info":"The response to the user's query.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"response","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"score":{"_input_type":"HandleInput","advanced":false,"display_name":"Trust Score","dynamic":false,"info":"The trustworthiness score output from the Cleanlab Evaluator.","input_types":["number"],"list":false,"list_add_label":"Add More","name":"score","placeholder":"","required":true,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"show_untrustworthy_response":{"_input_type":"BoolInput","advanced":false,"display_name":"Show Untrustworthy Response","dynamic":false,"info":"If enabled, and the trust score is below the threshold, the original response is shown with the added warning. If disabled, and the trust score is below the threshold, the fallback answer is returned.","list":false,"list_add_label":"Add More","name":"show_untrustworthy_response","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true},"threshold":{"_input_type":"FloatInput","advanced":false,"display_name":"Threshold","dynamic":false,"info":"Minimum score required to show the response unmodified. Reponses with scores above this threshold are considered trustworthy. Reponses with scores below this threshold are considered untrustworthy and will be remediated based on the settings below.","list":false,"list_add_label":"Add More","name":"threshold","placeholder":"","range_spec":{"max":1.0,"min":0.0,"step":0.05,"step_type":"float"},"required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"float","value":0.7},"untrustworthy_warning_text":{"_input_type":"PromptInput","advanced":false,"display_name":"Warning for Untrustworthy Response","dynamic":false,"info":"Warning to append to the response if Show Untrustworthy Response is enabled and trust score is below the threshold.","list":false,"list_add_label":"Add More","name":"untrustworthy_warning_text","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"type":"prompt","value":"⚠️ WARNING: The following response is potentially untrustworthy."}},"tool_mode":false}}],["clickhouse",{"Clickhouse":{"base_classes":["Data","DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"ClickHouse Vector Store with search capabilities","display_name":"ClickHouse","documentation":"","edited":false,"field_order":["host","port","database","table","username","password","index_type","metric","secure","index_param","index_query_params","ingest_data","search_query","should_cache_vector_store","embedding","number_of_results","score_threshold"],"frozen":false,"icon":"Clickhouse","legacy":false,"metadata":{"code_hash":"ab991e83da44","dependencies":{"dependencies":[{"name":"langchain_community","version":"0.3.21"},{"name":"lfx","version":null},{"name":"clickhouse_connect","version":"0.7.19"}],"total_dependencies":3},"module":"lfx.components.clickhouse.clickhouse.ClickhouseVectorStoreComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Search Results","group_outputs":false,"method":"search_documents","name":"search_results","selected":"Data","tool_mode":true,"types":["Data"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataframe","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from langchain_community.vectorstores import Clickhouse, ClickhouseSettings\n\nfrom lfx.base.vectorstores.model import LCVectorStoreComponent, check_cached_vector_store\nfrom lfx.helpers.data import docs_to_data\nfrom lfx.inputs.inputs import BoolInput, FloatInput\nfrom lfx.io import (\n DictInput,\n DropdownInput,\n HandleInput,\n IntInput,\n SecretStrInput,\n StrInput,\n)\nfrom lfx.schema.data import Data\n\n\nclass ClickhouseVectorStoreComponent(LCVectorStoreComponent):\n display_name = \"ClickHouse\"\n description = \"ClickHouse Vector Store with search capabilities\"\n name = \"Clickhouse\"\n icon = \"Clickhouse\"\n\n inputs = [\n StrInput(name=\"host\", display_name=\"hostname\", required=True, value=\"localhost\"),\n IntInput(name=\"port\", display_name=\"port\", required=True, value=8123),\n StrInput(name=\"database\", display_name=\"database\", required=True),\n StrInput(name=\"table\", display_name=\"Table name\", required=True),\n StrInput(name=\"username\", display_name=\"The ClickHouse user name.\", required=True),\n SecretStrInput(name=\"password\", display_name=\"Clickhouse Password\", required=True),\n DropdownInput(\n name=\"index_type\",\n display_name=\"index_type\",\n options=[\"annoy\", \"vector_similarity\"],\n info=\"Type of the index.\",\n value=\"annoy\",\n advanced=True,\n ),\n DropdownInput(\n name=\"metric\",\n display_name=\"metric\",\n options=[\"angular\", \"euclidean\", \"manhattan\", \"hamming\", \"dot\"],\n info=\"Metric to compute distance.\",\n value=\"angular\",\n advanced=True,\n ),\n BoolInput(\n name=\"secure\",\n display_name=\"Use https/TLS. This overrides inferred values from the interface or port arguments.\",\n value=False,\n advanced=True,\n ),\n StrInput(name=\"index_param\", display_name=\"Param of the index\", value=\"100,'L2Distance'\", advanced=True),\n DictInput(name=\"index_query_params\", display_name=\"index query params\", advanced=True),\n *LCVectorStoreComponent.inputs,\n HandleInput(name=\"embedding\", display_name=\"Embedding\", input_types=[\"Embeddings\"]),\n IntInput(\n name=\"number_of_results\",\n display_name=\"Number of Results\",\n info=\"Number of results to return.\",\n value=4,\n advanced=True,\n ),\n FloatInput(name=\"score_threshold\", display_name=\"Score threshold\", advanced=True),\n ]\n\n @check_cached_vector_store\n def build_vector_store(self) -> Clickhouse:\n try:\n import clickhouse_connect\n except ImportError as e:\n msg = (\n \"Failed to import ClickHouse dependencies. \"\n \"Install it using `uv pip install langflow[clickhouse-connect] --pre`\"\n )\n raise ImportError(msg) from e\n\n try:\n client = clickhouse_connect.get_client(\n host=self.host, port=self.port, username=self.username, password=self.password\n )\n client.command(\"SELECT 1\")\n except Exception as e:\n msg = f\"Failed to connect to Clickhouse: {e}\"\n raise ValueError(msg) from e\n\n # Convert DataFrame to Data if needed using parent's method\n self.ingest_data = self._prepare_ingest_data()\n\n documents = []\n for _input in self.ingest_data or []:\n if isinstance(_input, Data):\n documents.append(_input.to_lc_document())\n else:\n documents.append(_input)\n\n kwargs = {}\n if self.index_param:\n kwargs[\"index_param\"] = self.index_param.split(\",\")\n if self.index_query_params:\n kwargs[\"index_query_params\"] = self.index_query_params\n\n settings = ClickhouseSettings(\n table=self.table,\n database=self.database,\n host=self.host,\n index_type=self.index_type,\n metric=self.metric,\n password=self.password,\n port=self.port,\n secure=self.secure,\n username=self.username,\n **kwargs,\n )\n if documents:\n clickhouse_vs = Clickhouse.from_documents(documents=documents, embedding=self.embedding, config=settings)\n\n else:\n clickhouse_vs = Clickhouse(embedding=self.embedding, config=settings)\n\n return clickhouse_vs\n\n def search_documents(self) -> list[Data]:\n vector_store = self.build_vector_store()\n\n if self.search_query and isinstance(self.search_query, str) and self.search_query.strip():\n kwargs = {}\n if self.score_threshold:\n kwargs[\"score_threshold\"] = self.score_threshold\n\n docs = vector_store.similarity_search(query=self.search_query, k=self.number_of_results, **kwargs)\n\n data = docs_to_data(docs)\n self.status = data\n return data\n return []\n"},"database":{"_input_type":"StrInput","advanced":false,"display_name":"database","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"database","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"embedding":{"_input_type":"HandleInput","advanced":false,"display_name":"Embedding","dynamic":false,"info":"","input_types":["Embeddings"],"list":false,"list_add_label":"Add More","name":"embedding","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"host":{"_input_type":"StrInput","advanced":false,"display_name":"hostname","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"host","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"localhost"},"index_param":{"_input_type":"StrInput","advanced":true,"display_name":"Param of the index","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"index_param","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"100,'L2Distance'"},"index_query_params":{"_input_type":"DictInput","advanced":true,"display_name":"index query params","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"index_query_params","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"type":"dict","value":{}},"index_type":{"_input_type":"DropdownInput","advanced":true,"combobox":false,"dialog_inputs":{},"display_name":"index_type","dynamic":false,"external_options":{},"info":"Type of the index.","name":"index_type","options":["annoy","vector_similarity"],"options_metadata":[],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"annoy"},"ingest_data":{"_input_type":"HandleInput","advanced":false,"display_name":"Ingest Data","dynamic":false,"info":"","input_types":["Data","DataFrame"],"list":true,"list_add_label":"Add More","name":"ingest_data","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"metric":{"_input_type":"DropdownInput","advanced":true,"combobox":false,"dialog_inputs":{},"display_name":"metric","dynamic":false,"external_options":{},"info":"Metric to compute distance.","name":"metric","options":["angular","euclidean","manhattan","hamming","dot"],"options_metadata":[],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"angular"},"number_of_results":{"_input_type":"IntInput","advanced":true,"display_name":"Number of Results","dynamic":false,"info":"Number of results to return.","list":false,"list_add_label":"Add More","name":"number_of_results","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":4},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Clickhouse Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""},"port":{"_input_type":"IntInput","advanced":false,"display_name":"port","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"port","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":8123},"score_threshold":{"_input_type":"FloatInput","advanced":true,"display_name":"Score threshold","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"score_threshold","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"float","value":""},"search_query":{"_input_type":"QueryInput","advanced":false,"display_name":"Search Query","dynamic":false,"info":"Enter a query to run a similarity search.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"search_query","placeholder":"Enter a query...","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"query","value":""},"secure":{"_input_type":"BoolInput","advanced":true,"display_name":"Use https/TLS. This overrides inferred values from the interface or port arguments.","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"secure","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"should_cache_vector_store":{"_input_type":"BoolInput","advanced":true,"display_name":"Cache Vector Store","dynamic":false,"info":"If True, the vector store will be cached for the current build of the component. This is useful for components that have multiple output methods and want to share the same vector store.","list":false,"list_add_label":"Add More","name":"should_cache_vector_store","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true},"table":{"_input_type":"StrInput","advanced":false,"display_name":"Table name","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"table","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"The ClickHouse user name.","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false}}],["cloudflare",{"CloudflareWorkersAIEmbeddings":{"base_classes":["Embeddings"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Generate embeddings using Cloudflare Workers AI models.","display_name":"Cloudflare Workers AI Embeddings","documentation":"https://python.langchain.com/docs/integrations/text_embedding/cloudflare_workersai/","edited":false,"field_order":["account_id","api_token","model_name","strip_new_lines","batch_size","api_base_url","headers"],"frozen":false,"icon":"Cloudflare","legacy":false,"metadata":{"code_hash":"1ea6e4857c14","dependencies":{"dependencies":[{"name":"langchain_community","version":"0.3.21"},{"name":"lfx","version":null}],"total_dependencies":2},"keywords":["model","llm","language model","large language model"],"module":"lfx.components.cloudflare.cloudflare.CloudflareWorkersAIEmbeddingsComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Embeddings","group_outputs":false,"method":"build_embeddings","name":"embeddings","selected":"Embeddings","tool_mode":true,"types":["Embeddings"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","account_id":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Cloudflare account ID","dynamic":false,"info":"Find your account ID https://developers.cloudflare.com/fundamentals/setup/find-account-and-zone-ids/#find-account-id-workers-and-pages","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"account_id","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"api_base_url":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Cloudflare API base URL","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"api_base_url","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"https://api.cloudflare.com/client/v4/accounts"},"api_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Cloudflare API token","dynamic":false,"info":"Create an API token https://developers.cloudflare.com/fundamentals/api/get-started/create-token/","input_types":[],"load_from_db":true,"name":"api_token","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""},"batch_size":{"_input_type":"IntInput","advanced":true,"display_name":"Batch Size","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"batch_size","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":50},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from langchain_community.embeddings.cloudflare_workersai import CloudflareWorkersAIEmbeddings\n\nfrom lfx.base.models.model import LCModelComponent\nfrom lfx.field_typing import Embeddings\nfrom lfx.io import BoolInput, DictInput, IntInput, MessageTextInput, Output, SecretStrInput\n\n\nclass CloudflareWorkersAIEmbeddingsComponent(LCModelComponent):\n display_name: str = \"Cloudflare Workers AI Embeddings\"\n description: str = \"Generate embeddings using Cloudflare Workers AI models.\"\n documentation: str = \"https://python.langchain.com/docs/integrations/text_embedding/cloudflare_workersai/\"\n icon = \"Cloudflare\"\n name = \"CloudflareWorkersAIEmbeddings\"\n\n inputs = [\n MessageTextInput(\n name=\"account_id\",\n display_name=\"Cloudflare account ID\",\n info=\"Find your account ID https://developers.cloudflare.com/fundamentals/setup/find-account-and-zone-ids/#find-account-id-workers-and-pages\",\n required=True,\n ),\n SecretStrInput(\n name=\"api_token\",\n display_name=\"Cloudflare API token\",\n info=\"Create an API token https://developers.cloudflare.com/fundamentals/api/get-started/create-token/\",\n required=True,\n ),\n MessageTextInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n info=\"List of supported models https://developers.cloudflare.com/workers-ai/models/#text-embeddings\",\n required=True,\n value=\"@cf/baai/bge-base-en-v1.5\",\n ),\n BoolInput(\n name=\"strip_new_lines\",\n display_name=\"Strip New Lines\",\n advanced=True,\n value=True,\n ),\n IntInput(\n name=\"batch_size\",\n display_name=\"Batch Size\",\n advanced=True,\n value=50,\n ),\n MessageTextInput(\n name=\"api_base_url\",\n display_name=\"Cloudflare API base URL\",\n advanced=True,\n value=\"https://api.cloudflare.com/client/v4/accounts\",\n ),\n DictInput(\n name=\"headers\",\n display_name=\"Headers\",\n info=\"Additional request headers\",\n is_list=True,\n advanced=True,\n ),\n ]\n\n outputs = [\n Output(display_name=\"Embeddings\", name=\"embeddings\", method=\"build_embeddings\"),\n ]\n\n def build_embeddings(self) -> Embeddings:\n try:\n embeddings = CloudflareWorkersAIEmbeddings(\n account_id=self.account_id,\n api_base_url=self.api_base_url,\n api_token=self.api_token,\n batch_size=self.batch_size,\n headers=self.headers,\n model_name=self.model_name,\n strip_new_lines=self.strip_new_lines,\n )\n except Exception as e:\n msg = f\"Could not connect to CloudflareWorkersAIEmbeddings API: {e!s}\"\n raise ValueError(msg) from e\n\n return embeddings\n"},"headers":{"_input_type":"DictInput","advanced":true,"display_name":"Headers","dynamic":false,"info":"Additional request headers","list":true,"list_add_label":"Add More","name":"headers","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"type":"dict","value":{}},"model_name":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Model Name","dynamic":false,"info":"List of supported models https://developers.cloudflare.com/workers-ai/models/#text-embeddings","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"model_name","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"@cf/baai/bge-base-en-v1.5"},"strip_new_lines":{"_input_type":"BoolInput","advanced":true,"display_name":"Strip New Lines","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"strip_new_lines","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true}},"tool_mode":false}}],["cohere",{"CohereEmbeddings":{"base_classes":["Embeddings"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Generate embeddings using Cohere models.","display_name":"Cohere Embeddings","documentation":"","edited":false,"field_order":["api_key","model_name","truncate","max_retries","user_agent","request_timeout"],"frozen":false,"icon":"Cohere","legacy":false,"metadata":{"code_hash":"9c0f413a2c64","dependencies":{"dependencies":[{"name":"cohere","version":"5.19.0"},{"name":"langchain_cohere","version":"0.3.3"},{"name":"lfx","version":null}],"total_dependencies":3},"keywords":["model","llm","language model","large language model"],"module":"lfx.components.cohere.cohere_embeddings.CohereEmbeddingsComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Embeddings","group_outputs":false,"method":"build_embeddings","name":"embeddings","selected":"Embeddings","tool_mode":true,"types":["Embeddings"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Cohere API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from typing import Any\n\nimport cohere\nfrom langchain_cohere import CohereEmbeddings\n\nfrom lfx.base.models.model import LCModelComponent\nfrom lfx.field_typing import Embeddings\nfrom lfx.io import DropdownInput, FloatInput, IntInput, MessageTextInput, Output, SecretStrInput\n\nHTTP_STATUS_OK = 200\n\n\nclass CohereEmbeddingsComponent(LCModelComponent):\n display_name = \"Cohere Embeddings\"\n description = \"Generate embeddings using Cohere models.\"\n icon = \"Cohere\"\n name = \"CohereEmbeddings\"\n\n inputs = [\n SecretStrInput(name=\"api_key\", display_name=\"Cohere API Key\", required=True, real_time_refresh=True),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model\",\n advanced=False,\n options=[\n \"embed-english-v2.0\",\n \"embed-multilingual-v2.0\",\n \"embed-english-light-v2.0\",\n \"embed-multilingual-light-v2.0\",\n ],\n value=\"embed-english-v2.0\",\n refresh_button=True,\n combobox=True,\n ),\n MessageTextInput(name=\"truncate\", display_name=\"Truncate\", advanced=True),\n IntInput(name=\"max_retries\", display_name=\"Max Retries\", value=3, advanced=True),\n MessageTextInput(name=\"user_agent\", display_name=\"User Agent\", advanced=True, value=\"langchain\"),\n FloatInput(name=\"request_timeout\", display_name=\"Request Timeout\", advanced=True),\n ]\n\n outputs = [\n Output(display_name=\"Embeddings\", name=\"embeddings\", method=\"build_embeddings\"),\n ]\n\n def build_embeddings(self) -> Embeddings:\n data = None\n try:\n data = CohereEmbeddings(\n cohere_api_key=self.api_key,\n model=self.model_name,\n truncate=self.truncate,\n max_retries=self.max_retries,\n user_agent=self.user_agent,\n request_timeout=self.request_timeout or None,\n )\n except Exception as e:\n msg = (\n \"Unable to create Cohere Embeddings. \",\n \"Please verify the API key and model parameters, and try again.\",\n )\n raise ValueError(msg) from e\n # added status if not the return data would be serialised to create the status\n return data\n\n def get_model(self):\n try:\n co = cohere.ClientV2(self.api_key)\n response = co.models.list(endpoint=\"embed\")\n models = response.models\n return [model.name for model in models]\n except Exception as e:\n msg = f\"Failed to fetch Cohere models. Error: {e}\"\n raise ValueError(msg) from e\n\n async def update_build_config(self, build_config: dict, field_value: Any, field_name: str | None = None):\n if field_name in {\"model_name\", \"api_key\"}:\n if build_config.get(\"api_key\", {}).get(\"value\", None):\n build_config[\"model_name\"][\"options\"] = self.get_model()\n else:\n build_config[\"model_name\"][\"options\"] = field_value\n return build_config\n"},"max_retries":{"_input_type":"IntInput","advanced":true,"display_name":"Max Retries","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"max_retries","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":3},"model_name":{"_input_type":"DropdownInput","advanced":false,"combobox":true,"dialog_inputs":{},"display_name":"Model","dynamic":false,"external_options":{},"info":"","name":"model_name","options":["embed-english-v2.0","embed-multilingual-v2.0","embed-english-light-v2.0","embed-multilingual-light-v2.0"],"options_metadata":[],"placeholder":"","refresh_button":true,"required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"embed-english-v2.0"},"request_timeout":{"_input_type":"FloatInput","advanced":true,"display_name":"Request Timeout","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"request_timeout","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"float","value":""},"truncate":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Truncate","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"truncate","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"user_agent":{"_input_type":"MessageTextInput","advanced":true,"display_name":"User Agent","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"user_agent","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"langchain"}},"tool_mode":false},"CohereModel":{"base_classes":["LanguageModel","Message"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Generate text using Cohere LLMs.","display_name":"Cohere Language Models","documentation":"https://python.langchain.com/docs/integrations/llms/cohere/","edited":false,"field_order":["input_value","system_message","stream","cohere_api_key","temperature"],"frozen":false,"icon":"Cohere","legacy":false,"metadata":{"code_hash":"594852e1d706","dependencies":{"dependencies":[{"name":"langchain_cohere","version":"0.3.3"},{"name":"pydantic","version":"2.10.6"},{"name":"lfx","version":null}],"total_dependencies":3},"keywords":["model","llm","language model","large language model"],"module":"lfx.components.cohere.cohere_models.CohereComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Model Response","group_outputs":false,"method":"text_response","name":"text_output","selected":"Message","tool_mode":true,"types":["Message"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"Language Model","group_outputs":false,"method":"build_model","name":"model_output","selected":"LanguageModel","tool_mode":true,"types":["LanguageModel"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from langchain_cohere import ChatCohere\nfrom pydantic.v1 import SecretStr\n\nfrom lfx.base.models.model import LCModelComponent\nfrom lfx.field_typing import LanguageModel\nfrom lfx.field_typing.range_spec import RangeSpec\nfrom lfx.io import SecretStrInput, SliderInput\n\n\nclass CohereComponent(LCModelComponent):\n display_name = \"Cohere Language Models\"\n description = \"Generate text using Cohere LLMs.\"\n documentation = \"https://python.langchain.com/docs/integrations/llms/cohere/\"\n icon = \"Cohere\"\n name = \"CohereModel\"\n\n inputs = [\n *LCModelComponent.get_base_inputs(),\n SecretStrInput(\n name=\"cohere_api_key\",\n display_name=\"Cohere API Key\",\n info=\"The Cohere API Key to use for the Cohere model.\",\n advanced=False,\n value=\"COHERE_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\",\n display_name=\"Temperature\",\n value=0.75,\n range_spec=RangeSpec(min=0, max=2, step=0.01),\n info=\"Controls randomness. Lower values are more deterministic, higher values are more creative.\",\n advanced=True,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n cohere_api_key = self.cohere_api_key\n temperature = self.temperature\n\n api_key = SecretStr(cohere_api_key).get_secret_value() if cohere_api_key else None\n\n return ChatCohere(\n temperature=temperature or 0.75,\n cohere_api_key=api_key,\n )\n"},"cohere_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Cohere API Key","dynamic":false,"info":"The Cohere API Key to use for the Cohere model.","input_types":[],"load_from_db":true,"name":"cohere_api_key","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":"COHERE_API_KEY"},"input_value":{"_input_type":"MessageInput","advanced":false,"display_name":"Input","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"input_value","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"stream":{"_input_type":"BoolInput","advanced":true,"display_name":"Stream","dynamic":false,"info":"Stream the response from the model. Streaming works only in Chat.","list":false,"list_add_label":"Add More","name":"stream","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"system_message":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"System Message","dynamic":false,"info":"System message to pass to the model.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"system_message","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"temperature":{"_input_type":"SliderInput","advanced":true,"display_name":"Temperature","dynamic":false,"info":"Controls randomness. Lower values are more deterministic, higher values are more creative.","max_label":"","max_label_icon":"","min_label":"","min_label_icon":"","name":"temperature","placeholder":"","range_spec":{"max":2.0,"min":0.0,"step":0.01,"step_type":"float"},"required":false,"show":true,"slider_buttons":false,"slider_buttons_options":[],"slider_input":false,"title_case":false,"tool_mode":false,"type":"slider","value":0.75}},"tool_mode":false},"CohereRerank":{"base_classes":["Data"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Rerank documents using the Cohere API.","display_name":"Cohere Rerank","documentation":"","edited":false,"field_order":["search_query","search_results","top_n","api_key","model"],"frozen":false,"icon":"Cohere","legacy":false,"metadata":{"code_hash":"a94a0d11eeac","dependencies":{"dependencies":[{"name":"lfx","version":null},{"name":"langchain_cohere","version":"0.3.3"}],"total_dependencies":2},"module":"lfx.components.cohere.cohere_rerank.CohereRerankComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Reranked Documents","group_outputs":false,"method":"compress_documents","name":"reranked_documents","selected":"Data","tool_mode":true,"types":["Data"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Cohere API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","required":false,"show":true,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.compressors.model import LCCompressorComponent\nfrom lfx.field_typing import BaseDocumentCompressor\nfrom lfx.inputs.inputs import SecretStrInput\nfrom lfx.io import DropdownInput\nfrom lfx.template.field.base import Output\n\n\nclass CohereRerankComponent(LCCompressorComponent):\n display_name = \"Cohere Rerank\"\n description = \"Rerank documents using the Cohere API.\"\n name = \"CohereRerank\"\n icon = \"Cohere\"\n\n inputs = [\n *LCCompressorComponent.inputs,\n SecretStrInput(\n name=\"api_key\",\n display_name=\"Cohere API Key\",\n ),\n DropdownInput(\n name=\"model\",\n display_name=\"Model\",\n options=[\n \"rerank-english-v3.0\",\n \"rerank-multilingual-v3.0\",\n \"rerank-english-v2.0\",\n \"rerank-multilingual-v2.0\",\n ],\n value=\"rerank-english-v3.0\",\n ),\n ]\n\n outputs = [\n Output(\n display_name=\"Reranked Documents\",\n name=\"reranked_documents\",\n method=\"compress_documents\",\n ),\n ]\n\n def build_compressor(self) -> BaseDocumentCompressor: # type: ignore[type-var]\n try:\n from langchain_cohere import CohereRerank\n except ImportError as e:\n msg = \"Please install langchain-cohere to use the Cohere model.\"\n raise ImportError(msg) from e\n return CohereRerank(\n cohere_api_key=self.api_key,\n model=self.model,\n top_n=self.top_n,\n )\n"},"model":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Model","dynamic":false,"external_options":{},"info":"","name":"model","options":["rerank-english-v3.0","rerank-multilingual-v3.0","rerank-english-v2.0","rerank-multilingual-v2.0"],"options_metadata":[],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"rerank-english-v3.0"},"search_query":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"Search Query","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"search_query","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"search_results":{"_input_type":"DataInput","advanced":false,"display_name":"Search Results","dynamic":false,"info":"Search Results from a Vector Store.","input_types":["Data"],"list":true,"list_add_label":"Add More","name":"search_results","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"other","value":""},"top_n":{"_input_type":"IntInput","advanced":true,"display_name":"Top N","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"top_n","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":3}},"tool_mode":false}}],["cometapi",{"CometAPIModel":{"base_classes":["LanguageModel","Message"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"All AI Models in One API 500+ AI Models","display_name":"CometAPI","documentation":"","edited":false,"field_order":["input_value","system_message","stream","api_key","app_name","model_name","model_kwargs","temperature","max_tokens","seed","json_mode"],"frozen":false,"icon":"CometAPI","legacy":false,"metadata":{"code_hash":"4ec4a8852e9c","dependencies":{"dependencies":[{"name":"requests","version":"2.32.5"},{"name":"langchain_openai","version":"0.3.23"},{"name":"pydantic","version":"2.10.6"},{"name":"typing_extensions","version":"4.15.0"},{"name":"lfx","version":null}],"total_dependencies":5},"keywords":["model","llm","language model","large language model"],"module":"lfx.components.cometapi.cometapi.CometAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Model Response","group_outputs":false,"method":"text_response","name":"text_output","selected":"Message","tool_mode":true,"types":["Message"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"Language Model","group_outputs":false,"method":"build_model","name":"model_output","selected":"LanguageModel","tool_mode":true,"types":["LanguageModel"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"CometAPI Key","dynamic":false,"info":"Your CometAPI key","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":""},"app_name":{"_input_type":"StrInput","advanced":true,"display_name":"App Name","dynamic":false,"info":"Your app name for CometAPI rankings","list":false,"list_add_label":"Add More","load_from_db":false,"name":"app_name","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"import json\n\nimport requests\nfrom langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\nfrom typing_extensions import override\n\nfrom lfx.base.models.cometapi_constants import MODEL_NAMES\nfrom lfx.base.models.model import LCModelComponent\nfrom lfx.field_typing import LanguageModel\nfrom lfx.field_typing.range_spec import RangeSpec\nfrom lfx.inputs.inputs import (\n BoolInput,\n DictInput,\n DropdownInput,\n IntInput,\n SecretStrInput,\n SliderInput,\n StrInput,\n)\n\n\nclass CometAPIComponent(LCModelComponent):\n \"\"\"CometAPI component for language models.\"\"\"\n\n display_name = \"CometAPI\"\n description = \"All AI Models in One API 500+ AI Models\"\n icon = \"CometAPI\"\n name = \"CometAPIModel\"\n\n inputs = [\n *LCModelComponent.get_base_inputs(),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"CometAPI Key\",\n required=True,\n info=\"Your CometAPI key\",\n real_time_refresh=True,\n ),\n StrInput(\n name=\"app_name\",\n display_name=\"App Name\",\n info=\"Your app name for CometAPI rankings\",\n advanced=True,\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model\",\n info=\"The model to use for chat completion\",\n options=[\"Select a model\"],\n value=\"Select a model\",\n real_time_refresh=True,\n required=True,\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n info=\"Additional keyword arguments to pass to the model.\",\n advanced=True,\n ),\n SliderInput(\n name=\"temperature\",\n display_name=\"Temperature\",\n value=0.7,\n range_spec=RangeSpec(min=0, max=2, step=0.01),\n info=\"Controls randomness. Lower values are more deterministic, higher values are more creative.\",\n advanced=True,\n ),\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n info=\"Maximum number of tokens to generate\",\n advanced=True,\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"Seed for reproducible outputs.\",\n value=1,\n advanced=True,\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n info=\"If enabled, the model will be asked to return a JSON object.\",\n advanced=True,\n ),\n ]\n\n def get_models(self, token_override: str | None = None) -> list[str]:\n base_url = \"https://api.cometapi.com/v1\"\n url = f\"{base_url}/models\"\n\n headers = {\"Content-Type\": \"application/json\"}\n # Add Bearer Authorization when API key is available\n api_key_source = token_override if token_override else getattr(self, \"api_key\", None)\n if api_key_source:\n token = api_key_source.get_secret_value() if isinstance(api_key_source, SecretStr) else str(api_key_source)\n headers[\"Authorization\"] = f\"Bearer {token}\"\n\n try:\n response = requests.get(url, headers=headers, timeout=10)\n response.raise_for_status()\n # Safely parse JSON; fallback to defaults on failure\n try:\n model_list = response.json()\n except (json.JSONDecodeError, ValueError) as e:\n self.status = f\"Error decoding models response: {e}\"\n return MODEL_NAMES\n return [model[\"id\"] for model in model_list.get(\"data\", [])]\n except requests.RequestException as e:\n self.status = f\"Error fetching models: {e}\"\n return MODEL_NAMES\n\n @override\n def update_build_config(self, build_config: dict, field_value: str, field_name: str | None = None):\n if field_name == \"api_key\":\n models = self.get_models(field_value)\n model_cfg = build_config.get(\"model_name\", {})\n # Preserve placeholder (fallback to existing value or a generic prompt)\n placeholder = model_cfg.get(\"placeholder\", model_cfg.get(\"value\", \"Select a model\"))\n current_value = model_cfg.get(\"value\")\n\n options = list(models) if models else []\n # Ensure current value stays visible even if not present in fetched options\n if current_value and current_value not in options:\n options = [current_value, *options]\n\n model_cfg[\"options\"] = options\n model_cfg[\"placeholder\"] = placeholder\n build_config[\"model_name\"] = model_cfg\n return build_config\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = getattr(self, \"model_kwargs\", {}) or {}\n json_mode = self.json_mode\n seed = self.seed\n # Ensure a valid model was selected\n if not model_name or model_name == \"Select a model\":\n msg = \"Please select a valid CometAPI model.\"\n raise ValueError(msg)\n try:\n # Extract raw API key safely\n _api_key = api_key.get_secret_value() if isinstance(api_key, SecretStr) else api_key\n output = ChatOpenAI(\n model=model_name,\n api_key=_api_key or None,\n max_tokens=max_tokens or None,\n temperature=temperature,\n model_kwargs=model_kwargs,\n streaming=bool(self.stream),\n seed=seed,\n base_url=\"https://api.cometapi.com/v1\",\n )\n except (TypeError, ValueError) as e:\n msg = \"Could not connect to CometAPI.\"\n raise ValueError(msg) from e\n\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n"},"input_value":{"_input_type":"MessageInput","advanced":false,"display_name":"Input","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"input_value","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"json_mode":{"_input_type":"BoolInput","advanced":true,"display_name":"JSON Mode","dynamic":false,"info":"If enabled, the model will be asked to return a JSON object.","list":false,"list_add_label":"Add More","name":"json_mode","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"max_tokens":{"_input_type":"IntInput","advanced":true,"display_name":"Max Tokens","dynamic":false,"info":"Maximum number of tokens to generate","list":false,"list_add_label":"Add More","name":"max_tokens","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":""},"model_kwargs":{"_input_type":"DictInput","advanced":true,"display_name":"Model Kwargs","dynamic":false,"info":"Additional keyword arguments to pass to the model.","list":false,"list_add_label":"Add More","name":"model_kwargs","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"type":"dict","value":{}},"model_name":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Model","dynamic":false,"external_options":{},"info":"The model to use for chat completion","name":"model_name","options":["Select a model"],"options_metadata":[],"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"Select a model"},"seed":{"_input_type":"IntInput","advanced":true,"display_name":"Seed","dynamic":false,"info":"Seed for reproducible outputs.","list":false,"list_add_label":"Add More","name":"seed","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":1},"stream":{"_input_type":"BoolInput","advanced":true,"display_name":"Stream","dynamic":false,"info":"Stream the response from the model. Streaming works only in Chat.","list":false,"list_add_label":"Add More","name":"stream","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"system_message":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"System Message","dynamic":false,"info":"System message to pass to the model.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"system_message","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"temperature":{"_input_type":"SliderInput","advanced":true,"display_name":"Temperature","dynamic":false,"info":"Controls randomness. Lower values are more deterministic, higher values are more creative.","max_label":"","max_label_icon":"","min_label":"","min_label_icon":"","name":"temperature","placeholder":"","range_spec":{"max":2.0,"min":0.0,"step":0.01,"step_type":"float"},"required":false,"show":true,"slider_buttons":false,"slider_buttons_options":[],"slider_input":false,"title_case":false,"tool_mode":false,"type":"slider","value":0.7}},"tool_mode":false}}],["composio",{"ComposioAPI":{"base_classes":["Tool"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Use Composio toolset to run actions with your agent","display_name":"Composio Tools","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","tool_name","actions"],"frozen":false,"icon":"Composio","legacy":false,"metadata":{"code_hash":"c41cf13f84ff","dependencies":{"dependencies":[{"name":"composio","version":"0.8.5"},{"name":"composio_langchain","version":"0.8.5"},{"name":"langchain_core","version":"0.3.79"},{"name":"lfx","version":null}],"total_dependencies":4},"module":"lfx.components.composio.composio_api.ComposioAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Tools","group_outputs":false,"method":"build_tool","name":"tools","selected":"Tool","tool_mode":true,"types":["Tool"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","actions":{"_input_type":"SortableListInput","advanced":false,"display_name":"Actions","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"icon":"OctagonAlert","variant":"destructive"},"info":"The actions to use","limit":1,"name":"actions","options":[],"placeholder":"Select action","required":false,"search_category":[],"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":""},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"Refer to https://docs.composio.dev/faq/api_key/api_key","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"# Standard library imports\nfrom collections.abc import Sequence\nfrom typing import Any\n\nfrom composio import Composio\nfrom composio_langchain import LangchainProvider\n\n# Third-party imports\nfrom langchain_core.tools import Tool\n\n# Local imports\nfrom lfx.base.langchain_utilities.model import LCToolComponent\nfrom lfx.inputs.inputs import (\n ConnectionInput,\n MessageTextInput,\n SecretStrInput,\n SortableListInput,\n)\nfrom lfx.io import Output\n\n# TODO: We get the list from the API but we need to filter it\nenabled_tools = [\"confluence\", \"discord\", \"dropbox\", \"github\", \"gmail\", \"linkedin\", \"notion\", \"slack\", \"youtube\"]\n\n\nclass ComposioAPIComponent(LCToolComponent):\n display_name: str = \"Composio Tools\"\n description: str = \"Use Composio toolset to run actions with your agent\"\n name = \"ComposioAPI\"\n icon = \"Composio\"\n documentation: str = \"https://docs.composio.dev\"\n\n inputs = [\n # Basic configuration inputs\n MessageTextInput(name=\"entity_id\", display_name=\"Entity ID\", value=\"default\", advanced=True),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"Composio API Key\",\n required=True,\n info=\"Refer to https://docs.composio.dev/faq/api_key/api_key\",\n real_time_refresh=True,\n ),\n ConnectionInput(\n name=\"tool_name\",\n display_name=\"Tool Name\",\n placeholder=\"Select a tool...\",\n button_metadata={\"icon\": \"unplug\", \"variant\": \"destructive\"},\n options=[],\n search_category=[],\n value=\"\",\n connection_link=\"\",\n info=\"The name of the tool to use\",\n real_time_refresh=True,\n ),\n SortableListInput(\n name=\"actions\",\n display_name=\"Actions\",\n placeholder=\"Select action\",\n helper_text=\"Please connect before selecting actions.\",\n helper_text_metadata={\"icon\": \"OctagonAlert\", \"variant\": \"destructive\"},\n options=[],\n value=\"\",\n info=\"The actions to use\",\n limit=1,\n show=False,\n ),\n ]\n\n outputs = [\n Output(name=\"tools\", display_name=\"Tools\", method=\"build_tool\"),\n ]\n\n def validate_tool(self, build_config: dict, field_value: Any, tool_name: str | None = None) -> dict:\n # Get the index of the selected tool in the list of options\n selected_tool_index = next(\n (\n ind\n for ind, tool in enumerate(build_config[\"tool_name\"][\"options\"])\n if tool[\"name\"] == field_value\n or (\"validate\" in field_value and tool[\"name\"] == field_value[\"validate\"])\n ),\n None,\n )\n\n # Set the link to be the text 'validated'\n build_config[\"tool_name\"][\"options\"][selected_tool_index][\"link\"] = \"validated\"\n\n # Set the helper text and helper text metadata field of the actions now\n build_config[\"actions\"][\"helper_text\"] = \"\"\n build_config[\"actions\"][\"helper_text_metadata\"] = {\"icon\": \"Check\", \"variant\": \"success\"}\n\n try:\n composio = self._build_wrapper()\n current_tool = tool_name or getattr(self, \"tool_name\", None)\n if not current_tool:\n self.log(\"No tool name available for validate_tool\")\n return build_config\n\n toolkit_slug = current_tool.lower()\n\n tools = composio.tools.get(user_id=self.entity_id, toolkits=[toolkit_slug])\n\n authenticated_actions = []\n for tool in tools:\n if hasattr(tool, \"name\"):\n action_name = tool.name\n display_name = action_name.replace(\"_\", \" \").title()\n authenticated_actions.append({\"name\": action_name, \"display_name\": display_name})\n except (ValueError, ConnectionError, AttributeError) as e:\n self.log(f\"Error getting actions for {current_tool or 'unknown tool'}: {e}\")\n authenticated_actions = []\n\n build_config[\"actions\"][\"options\"] = [\n {\n \"name\": action[\"name\"],\n }\n for action in authenticated_actions\n ]\n\n build_config[\"actions\"][\"show\"] = True\n return build_config\n\n def update_build_config(self, build_config: dict, field_value: Any, field_name: str | None = None) -> dict:\n if field_name == \"api_key\" or (self.api_key and not build_config[\"tool_name\"][\"options\"]):\n if field_name == \"api_key\" and not field_value:\n build_config[\"tool_name\"][\"options\"] = []\n build_config[\"tool_name\"][\"value\"] = \"\"\n\n # Reset the list of actions\n build_config[\"actions\"][\"show\"] = False\n build_config[\"actions\"][\"options\"] = []\n build_config[\"actions\"][\"value\"] = \"\"\n\n return build_config\n\n # Build the list of available tools\n build_config[\"tool_name\"][\"options\"] = [\n {\n \"name\": app.title(),\n \"icon\": app,\n \"link\": (\n build_config[\"tool_name\"][\"options\"][ind][\"link\"]\n if build_config[\"tool_name\"][\"options\"]\n else \"\"\n ),\n }\n for ind, app in enumerate(enabled_tools)\n ]\n\n return build_config\n\n if field_name == \"tool_name\" and field_value:\n composio = self._build_wrapper()\n\n current_tool_name = (\n field_value\n if isinstance(field_value, str)\n else field_value.get(\"validate\")\n if isinstance(field_value, dict) and \"validate\" in field_value\n else getattr(self, \"tool_name\", None)\n )\n\n if not current_tool_name:\n self.log(\"No tool name available for connection check\")\n return build_config\n\n try:\n toolkit_slug = current_tool_name.lower()\n\n connection_list = composio.connected_accounts.list(\n user_ids=[self.entity_id], toolkit_slugs=[toolkit_slug]\n )\n\n # Check for active connections\n has_active_connections = False\n if (\n connection_list\n and hasattr(connection_list, \"items\")\n and connection_list.items\n and isinstance(connection_list.items, list)\n and len(connection_list.items) > 0\n ):\n for connection in connection_list.items:\n if getattr(connection, \"status\", None) == \"ACTIVE\":\n has_active_connections = True\n break\n\n # Get the index of the selected tool in the list of options\n selected_tool_index = next(\n (\n ind\n for ind, tool in enumerate(build_config[\"tool_name\"][\"options\"])\n if tool[\"name\"] == current_tool_name.title()\n ),\n None,\n )\n\n if has_active_connections:\n # User has active connection\n if selected_tool_index is not None:\n build_config[\"tool_name\"][\"options\"][selected_tool_index][\"link\"] = \"validated\"\n\n # If it's a validation request, validate the tool\n if (isinstance(field_value, dict) and \"validate\" in field_value) or isinstance(field_value, str):\n return self.validate_tool(build_config, field_value, current_tool_name)\n else:\n # No active connection - create OAuth connection\n try:\n connection = composio.toolkits.authorize(user_id=self.entity_id, toolkit=toolkit_slug)\n redirect_url = getattr(connection, \"redirect_url\", None)\n\n if redirect_url and redirect_url.startswith((\"http://\", \"https://\")):\n if selected_tool_index is not None:\n build_config[\"tool_name\"][\"options\"][selected_tool_index][\"link\"] = redirect_url\n elif selected_tool_index is not None:\n build_config[\"tool_name\"][\"options\"][selected_tool_index][\"link\"] = \"error\"\n except (ValueError, ConnectionError, AttributeError) as e:\n self.log(f\"Error creating OAuth connection: {e}\")\n if selected_tool_index is not None:\n build_config[\"tool_name\"][\"options\"][selected_tool_index][\"link\"] = \"error\"\n\n except (ValueError, ConnectionError, AttributeError) as e:\n self.log(f\"Error checking connection status: {e}\")\n\n return build_config\n\n def build_tool(self) -> Sequence[Tool]:\n \"\"\"Build Composio tools based on selected actions.\n\n Returns:\n Sequence[Tool]: List of configured Composio tools.\n \"\"\"\n composio = self._build_wrapper()\n action_names = [action[\"name\"] for action in self.actions]\n\n # Get toolkits from action names\n toolkits = set()\n for action_name in action_names:\n if \"_\" in action_name:\n toolkit = action_name.split(\"_\")[0].lower()\n toolkits.add(toolkit)\n\n if not toolkits:\n return []\n\n # Get all tools for the relevant toolkits\n all_tools = composio.tools.get(user_id=self.entity_id, toolkits=list(toolkits))\n\n # Filter to only the specific actions we want using list comprehension\n return [tool for tool in all_tools if hasattr(tool, \"name\") and tool.name in action_names]\n\n def _build_wrapper(self) -> Composio:\n \"\"\"Build the Composio wrapper using new SDK.\n\n Returns:\n Composio: The initialized Composio client.\n\n Raises:\n ValueError: If the API key is not found or invalid.\n \"\"\"\n try:\n if not self.api_key:\n msg = \"Composio API Key is required\"\n raise ValueError(msg)\n return Composio(api_key=self.api_key, provider=LangchainProvider())\n except ValueError as e:\n self.log(f\"Error building Composio wrapper: {e}\")\n msg = \"Please provide a valid Composio API Key in the component settings\"\n raise ValueError(msg) from e\n"},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"tool_name":{"_input_type":"ConnectionInput","advanced":false,"button_metadata":{"icon":"unplug","variant":"destructive"},"connection_link":"","display_name":"Tool Name","dynamic":false,"info":"The name of the tool to use","name":"tool_name","options":[],"placeholder":"Select a tool...","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"connect","value":""}},"tool_mode":false},"ComposioAgentQLAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"AgentQL","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"AgentQL","legacy":false,"metadata":{"code_hash":"cca708a10ab6","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.agentql_composio.ComposioAgentQLAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioAgentQLAPIComponent(ComposioBaseComponent):\n display_name: str = \"AgentQL\"\n icon = \"AgentQL\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"agentql\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for AgentQL component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioAgiledAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Agiled","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Agiled","legacy":false,"metadata":{"code_hash":"3294a951a1a8","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.agiled_composio.ComposioAgiledAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioAgiledAPIComponent(ComposioBaseComponent):\n display_name: str = \"Agiled\"\n icon = \"Agiled\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"agiled\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Agiled component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioAirtableAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Airtable","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Airtable","legacy":false,"metadata":{"code_hash":"e47ad011c33c","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.airtable_composio.ComposioAirtableAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioAirtableAPIComponent(ComposioBaseComponent):\n display_name: str = \"Airtable\"\n icon = \"Airtable\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"airtable\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Airtable component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioAsanaAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Asana","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Asana","legacy":false,"metadata":{"code_hash":"290d6d61d049","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.asana_composio.ComposioAsanaAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioAsanaAPIComponent(ComposioBaseComponent):\n display_name: str = \"Asana\"\n icon = \"Asana\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"asana\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Asana component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioAttioAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Attio","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Attio","legacy":false,"metadata":{"code_hash":"de43b3cf5671","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.attio_composio.ComposioAttioAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioAttioAPIComponent(ComposioBaseComponent):\n display_name: str = \"Attio\"\n icon = \"Attio\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"attio\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Attio component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioBolnaAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Bolna","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Bolna","legacy":false,"metadata":{"code_hash":"dde7d2ee80a2","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.bolna_composio.ComposioBolnaAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioBolnaAPIComponent(ComposioBaseComponent):\n display_name: str = \"Bolna\"\n icon = \"Bolna\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"bolna\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Bolna component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioBrightdataAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Brightdata","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Brightdata","legacy":false,"metadata":{"code_hash":"49a04c5a23cb","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.brightdata_composio.ComposioBrightdataAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioBrightdataAPIComponent(ComposioBaseComponent):\n display_name: str = \"Brightdata\"\n icon = \"Brightdata\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"brightdata\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Brightdata component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioCalendlyAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Calendly","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Calendly","legacy":false,"metadata":{"code_hash":"4a282e413d55","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.calendly_composio.ComposioCalendlyAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioCalendlyAPIComponent(ComposioBaseComponent):\n display_name: str = \"Calendly\"\n icon = \"Calendly\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"calendly\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Calendly component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioCanvasAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Canvas","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Canvas","legacy":false,"metadata":{"code_hash":"6510d212a720","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.canvas_composio.ComposioCanvasAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioCanvasAPIComponent(ComposioBaseComponent):\n display_name: str = \"Canvas\"\n icon = \"Canvas\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"canvas\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Canvaas component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioContentfulAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Contentful","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Contentful","legacy":false,"metadata":{"code_hash":"36befb1ec8fc","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.contentful_composio.ComposioContentfulAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioContentfulAPIComponent(ComposioBaseComponent):\n display_name: str = \"Contentful\"\n icon = \"Contentful\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"contentful\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Contentful component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioDigicertAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Digicert","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Digicert","legacy":false,"metadata":{"code_hash":"0fcbc1b899f8","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.digicert_composio.ComposioDigicertAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioDigicertAPIComponent(ComposioBaseComponent):\n display_name: str = \"Digicert\"\n icon = \"Digicert\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"digicert\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Digicert component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioDiscordAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Discord","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Discord","legacy":false,"metadata":{"code_hash":"dd7e1bed6ba7","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.discord_composio.ComposioDiscordAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioDiscordAPIComponent(ComposioBaseComponent):\n display_name: str = \"Discord\"\n icon = \"Discord\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"discord\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Discord component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioDropboxAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Dropbox","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Dropbox","legacy":false,"metadata":{"code_hash":"d05825599def","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.dropbox_compnent.ComposioDropboxAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioDropboxAPIComponent(ComposioBaseComponent):\n display_name: str = \"Dropbox\"\n icon = \"Dropbox\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"dropbox\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Dropbox component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioFigmaAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Figma","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Figma","legacy":false,"metadata":{"code_hash":"7443d213546b","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.figma_composio.ComposioFigmaAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioFigmaAPIComponent(ComposioBaseComponent):\n display_name: str = \"Figma\"\n icon = \"Figma\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"figma\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Figma component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioFinageAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Finage","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Finage","legacy":false,"metadata":{"code_hash":"50a2bdee4cd1","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.finage_composio.ComposioFinageAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioFinageAPIComponent(ComposioBaseComponent):\n display_name: str = \"Finage\"\n icon = \"Finage\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"finage\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Finage component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioFixerAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Fixer","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Fixer","legacy":false,"metadata":{"code_hash":"9e4c00f9dcd8","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.fixer_composio.ComposioFixerAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioFixerAPIComponent(ComposioBaseComponent):\n display_name: str = \"Fixer\"\n icon = \"Fixer\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"fixer\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Fixer component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioFlexisignAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Flexisign","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Flexisign","legacy":false,"metadata":{"code_hash":"c69bbee0005d","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.flexisign_composio.ComposioFlexisignAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioFlexisignAPIComponent(ComposioBaseComponent):\n display_name: str = \"Flexisign\"\n icon = \"Flexisign\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"flexisign\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Flexisign component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioFreshdeskAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Freshdesk","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Freshdesk","legacy":false,"metadata":{"code_hash":"1dde03d615ca","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.freshdesk_composio.ComposioFreshdeskAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioFreshdeskAPIComponent(ComposioBaseComponent):\n display_name: str = \"Freshdesk\"\n icon = \"Freshdesk\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"freshdesk\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Freshdesk component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioGitHubAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"GitHub","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Github","legacy":false,"metadata":{"code_hash":"f8abad5de5fd","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.github_composio.ComposioGitHubAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioGitHubAPIComponent(ComposioBaseComponent):\n display_name: str = \"GitHub\"\n icon = \"Github\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"github\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for GitHub component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioGmailAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Gmail","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Google","legacy":false,"metadata":{"code_hash":"550884222de1","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.gmail_composio.ComposioGmailAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioGmailAPIComponent(ComposioBaseComponent):\n display_name: str = \"Gmail\"\n icon = \"Google\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"gmail\"\n\n def __init__(self, **kwargs):\n super().__init__(**kwargs)\n self.post_processors = {\n \"GMAIL_SEND_EMAIL\": self._process_send_email_response,\n \"GMAIL_FETCH_EMAILS\": self._process_fetch_emails_response,\n }\n\n def _process_send_email_response(self, raw_data):\n \"\"\"Post-processor for GMAIL_SEND_EMAIL action.\"\"\"\n if isinstance(raw_data, dict):\n response_data = raw_data.get(\"response_data\", raw_data)\n\n return {\n \"message_id\": response_data.get(\"id\"),\n \"thread_id\": response_data.get(\"threadId\"),\n \"label_ids\": response_data.get(\"labelIds\", []),\n }\n return raw_data\n\n def _process_fetch_emails_response(self, raw_data):\n \"\"\"Post-processor for GMAIL_FETCH_EMAILS action.\"\"\"\n if isinstance(raw_data, dict):\n messages = raw_data.get(\"messages\", [])\n if messages:\n return messages\n return raw_data\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Gmail component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioGoogleCalendarAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Google Calendar","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Googlecalendar","legacy":false,"metadata":{"code_hash":"8723320b6c9b","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.googlecalendar_composio.ComposioGoogleCalendarAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioGoogleCalendarAPIComponent(ComposioBaseComponent):\n display_name: str = \"Google Calendar\"\n icon = \"Googlecalendar\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"googlecalendar\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Google Calendar component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioGoogleDocsAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Google Docs","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Googledocs","legacy":false,"metadata":{"code_hash":"fc420f66a780","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.googledocs_composio.ComposioGoogleDocsAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioGoogleDocsAPIComponent(ComposioBaseComponent):\n display_name: str = \"Google Docs\"\n icon = \"Googledocs\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"googledocs\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Google Docs component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioGoogleSheetsAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Google Sheets","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Googlesheets","legacy":false,"metadata":{"code_hash":"a3ef38681708","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.googlesheets_composio.ComposioGoogleSheetsAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioGoogleSheetsAPIComponent(ComposioBaseComponent):\n display_name: str = \"Google Sheets\"\n icon = \"Googlesheets\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"googlesheets\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Google Sheets component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioGoogleTasksAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Google Tasks","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"GoogleTasks","legacy":false,"metadata":{"code_hash":"ddb9b20c05fc","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.googletasks_composio.ComposioGoogleTasksAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioGoogleTasksAPIComponent(ComposioBaseComponent):\n display_name: str = \"Google Tasks\"\n icon = \"GoogleTasks\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"googletasks\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioGoogleclassroomAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Google Classroom","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Classroom","legacy":false,"metadata":{"code_hash":"85a5c37c13f6","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.googleclassroom_composio.ComposioGoogleclassroomAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioGoogleclassroomAPIComponent(ComposioBaseComponent):\n display_name: str = \"Google Classroom\"\n icon = \"Classroom\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"GOOGLE_CLASSROOM\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Google Classroom component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioGooglemeetAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Google Meet","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Googlemeet","legacy":false,"metadata":{"code_hash":"c54db98a21d1","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.googlemeet_composio.ComposioGooglemeetAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioGooglemeetAPIComponent(ComposioBaseComponent):\n display_name: str = \"Google Meet\"\n icon = \"Googlemeet\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"googlemeet\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Google Calendar component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioInstagramAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Instagram","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Instagram","legacy":false,"metadata":{"code_hash":"a6691c905833","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.instagram_composio.ComposioInstagramAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioInstagramAPIComponent(ComposioBaseComponent):\n display_name: str = \"Instagram\"\n icon = \"Instagram\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"instagram\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Instagram component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioJiraAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Jira","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Jira","legacy":false,"metadata":{"code_hash":"3e62396f3868","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.jira_composio.ComposioJiraAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioJiraAPIComponent(ComposioBaseComponent):\n display_name: str = \"Jira\"\n icon = \"Jira\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"jira\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Jira component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioJotformAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Jotform","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Jotform","legacy":false,"metadata":{"code_hash":"7c1c6a676814","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.jotform_composio.ComposioJotformAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioJotformAPIComponent(ComposioBaseComponent):\n display_name: str = \"Jotform\"\n icon = \"Jotform\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"jotform\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Jotform component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioKlaviyoAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Klaviyo","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Klaviyo","legacy":false,"metadata":{"code_hash":"3be7e8a5e3fe","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.klaviyo_composio.ComposioKlaviyoAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioKlaviyoAPIComponent(ComposioBaseComponent):\n display_name: str = \"Klaviyo\"\n icon = \"Klaviyo\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"klaviyo\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Klaviyo component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioLinearAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Linear","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Linear","legacy":false,"metadata":{"code_hash":"be2b2ebbeea7","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.linear_composio.ComposioLinearAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioLinearAPIComponent(ComposioBaseComponent):\n display_name: str = \"Linear\"\n icon = \"Linear\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"linear\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Linear component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioListennotesAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Listennotes","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Listennotes","legacy":false,"metadata":{"code_hash":"b85f2fe51906","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.listennotes_composio.ComposioListennotesAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioListennotesAPIComponent(ComposioBaseComponent):\n display_name: str = \"Listennotes\"\n icon = \"Listennotes\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"listennotes\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Listennotes component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioMiroAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Miro","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Miro","legacy":false,"metadata":{"code_hash":"1e9c421e1ac4","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.miro_composio.ComposioMiroAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioMiroAPIComponent(ComposioBaseComponent):\n display_name: str = \"Miro\"\n icon = \"Miro\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"miro\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Miro component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioMissiveAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Missive","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Missive","legacy":false,"metadata":{"code_hash":"6def944a7739","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.missive_composio.ComposioMissiveAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioMissiveAPIComponent(ComposioBaseComponent):\n display_name: str = \"Missive\"\n icon = \"Missive\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"missive\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Missive component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioNotionAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Notion","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Notion","legacy":false,"metadata":{"code_hash":"590aa6ff30d1","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.notion_composio.ComposioNotionAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioNotionAPIComponent(ComposioBaseComponent):\n display_name: str = \"Notion\"\n icon = \"Notion\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"notion\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Notion component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioOneDriveAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"OneDrive","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"One_Drive","legacy":false,"metadata":{"code_hash":"497cc4625121","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.onedrive_composio.ComposioOneDriveAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioOneDriveAPIComponent(ComposioBaseComponent):\n display_name: str = \"OneDrive\"\n icon = \"One_Drive\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"one_drive\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for OneDrive component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioOutlookAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Outlook","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Outlook","legacy":false,"metadata":{"code_hash":"bf6998d60b63","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.outlook_composio.ComposioOutlookAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioOutlookAPIComponent(ComposioBaseComponent):\n display_name: str = \"Outlook\"\n icon = \"Outlook\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"outlook\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Gmail component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioPandadocAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Pandadoc","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Pandadoc","legacy":false,"metadata":{"code_hash":"21d92aabc1bf","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.pandadoc_composio.ComposioPandadocAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioPandadocAPIComponent(ComposioBaseComponent):\n display_name: str = \"Pandadoc\"\n icon = \"Pandadoc\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"pandadoc\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Pandadoc component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioRedditAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Reddit","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Reddit","legacy":false,"metadata":{"code_hash":"a86794073c22","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.reddit_composio.ComposioRedditAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioRedditAPIComponent(ComposioBaseComponent):\n display_name: str = \"Reddit\"\n icon = \"Reddit\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"reddit\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Reddit component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioSlackAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Slack","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button","SLACK_LIST_ALL_SLACK_TEAM_USERS_WITH_PAGINATION_limit","SLACK_LIST_ALL_SLACK_TEAM_USERS_WITH_PAGINATION_cursor","SLACK_LIST_ALL_SLACK_TEAM_USERS_WITH_PAGINATION_include_locale","SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_as_user","SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_attachments","SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_blocks","SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_channel","SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_icon_emoji","SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_icon_url","SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_link_names","SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_mrkdwn","SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_parse","SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_reply_broadcast","SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_text","SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_thread_ts","SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_unfurl_links","SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_unfurl_media","SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_username","SLACK_UPDATES_A_SLACK_MESSAGE_as_user","SLACK_UPDATES_A_SLACK_MESSAGE_attachments","SLACK_UPDATES_A_SLACK_MESSAGE_blocks","SLACK_UPDATES_A_SLACK_MESSAGE_channel","SLACK_UPDATES_A_SLACK_MESSAGE_link_names","SLACK_UPDATES_A_SLACK_MESSAGE_parse","SLACK_UPDATES_A_SLACK_MESSAGE_text","SLACK_UPDATES_A_SLACK_MESSAGE_ts","SLACK_FETCH_CONVERSATION_HISTORY_channel","SLACK_FETCH_CONVERSATION_HISTORY_latest","SLACK_FETCH_CONVERSATION_HISTORY_oldest","SLACK_FETCH_CONVERSATION_HISTORY_inclusive","SLACK_FETCH_CONVERSATION_HISTORY_limit","SLACK_FETCH_CONVERSATION_HISTORY_cursor","SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_as_user","SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_attachments","SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_blocks","SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_channel","SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_link_names","SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_parse","SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_post_at","SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_reply_broadcast","SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_text","SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_thread_ts","SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_unfurl_links","SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_unfurl_media","SLACK_LIST_ALL_SLACK_TEAM_CHANNELS_WITH_VARIOUS_FILTERS_exclude_archived","SLACK_LIST_ALL_SLACK_TEAM_CHANNELS_WITH_VARIOUS_FILTERS_types","SLACK_LIST_ALL_SLACK_TEAM_CHANNELS_WITH_VARIOUS_FILTERS_limit","SLACK_LIST_ALL_SLACK_TEAM_CHANNELS_WITH_VARIOUS_FILTERS_cursor","SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_count","SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_highlight","SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_page","SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_query","SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_sort","SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_sort_dir","SLACK_CREATE_A_REMINDER_text","SLACK_CREATE_A_REMINDER_time","SLACK_CREATE_A_REMINDER_user"],"frozen":false,"icon":"Slack","legacy":false,"metadata":{"code_hash":"db5adee4a80d","dependencies":{"dependencies":[{"name":"lfx","version":null},{"name":"composio","version":"0.8.5"}],"total_dependencies":2},"module":"lfx.components.composio.slack_composio.ComposioSlackAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"SLACK_CREATE_A_REMINDER_text":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Text","dynamic":false,"info":"The content of the reminder","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_CREATE_A_REMINDER_text","placeholder":"","required":true,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_CREATE_A_REMINDER_time":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Time","dynamic":false,"info":"When this reminder should happen: the Unix timestamp (up to five years from now), the number of seconds until the reminder (if within 24 hours), or a natural language description (Ex. 'in 15 minutes,' or 'every Thursday') ","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_CREATE_A_REMINDER_time","placeholder":"","required":true,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_CREATE_A_REMINDER_user":{"_input_type":"MessageTextInput","advanced":false,"display_name":"User","dynamic":false,"info":"The user who will receive the reminder. If no user is specified, the reminder will go to user who created it. ","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_CREATE_A_REMINDER_user","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_FETCH_CONVERSATION_HISTORY_channel":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Channel ID","dynamic":false,"info":"Channel ID to fetch history for.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_FETCH_CONVERSATION_HISTORY_channel","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_FETCH_CONVERSATION_HISTORY_cursor":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Cursor","dynamic":false,"info":"Paginate through collections of data by setting the `cursor` parameter to a `next_cursor` attribute returned by a previous request's `response_metadata`. Default value fetches the first 'page' of the collection. ","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_FETCH_CONVERSATION_HISTORY_cursor","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_FETCH_CONVERSATION_HISTORY_inclusive":{"_input_type":"BoolInput","advanced":true,"display_name":"Inclusive","dynamic":false,"info":"Include messages with latest or oldest timestamp in results only when either timestamp is specified. ","list":false,"list_add_label":"Add More","name":"SLACK_FETCH_CONVERSATION_HISTORY_inclusive","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"SLACK_FETCH_CONVERSATION_HISTORY_latest":{"_input_type":"IntInput","advanced":true,"display_name":"Latest","dynamic":false,"info":"End of time range of messages to include in results.","list":false,"list_add_label":"Add More","name":"SLACK_FETCH_CONVERSATION_HISTORY_latest","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":""},"SLACK_FETCH_CONVERSATION_HISTORY_limit":{"_input_type":"IntInput","advanced":true,"display_name":"Limit","dynamic":false,"info":"The maximum number of items to return. Fewer than the requested number of items may be returned, even if the end of the users list hasn't been reached. ","list":false,"list_add_label":"Add More","name":"SLACK_FETCH_CONVERSATION_HISTORY_limit","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":""},"SLACK_FETCH_CONVERSATION_HISTORY_oldest":{"_input_type":"IntInput","advanced":true,"display_name":"Oldest","dynamic":false,"info":"Start of time range of messages to include in results.","list":false,"list_add_label":"Add More","name":"SLACK_FETCH_CONVERSATION_HISTORY_oldest","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":""},"SLACK_LIST_ALL_SLACK_TEAM_CHANNELS_WITH_VARIOUS_FILTERS_cursor":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Cursor","dynamic":false,"info":"Paginate through collections of data by setting the `cursor` parameter to a `next_cursor` attribute returned by a previous request's `response_metadata`. Default value fetches the first 'page' of the collection","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_LIST_ALL_SLACK_TEAM_CHANNELS_WITH_VARIOUS_FILTERS_cursor","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_LIST_ALL_SLACK_TEAM_CHANNELS_WITH_VARIOUS_FILTERS_exclude_archived":{"_input_type":"BoolInput","advanced":false,"display_name":"Exclude Archived","dynamic":false,"info":"Set to `true` to exclude archived channels from the list","list":false,"list_add_label":"Add More","name":"SLACK_LIST_ALL_SLACK_TEAM_CHANNELS_WITH_VARIOUS_FILTERS_exclude_archived","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"SLACK_LIST_ALL_SLACK_TEAM_CHANNELS_WITH_VARIOUS_FILTERS_limit":{"_input_type":"IntInput","advanced":false,"display_name":"Limit","dynamic":false,"info":"The maximum number of items to return. Fewer than the requested number of items may be returned, even if the end of the list hasn't been reached. Must be an integer no larger than 1000. ","list":false,"list_add_label":"Add More","name":"SLACK_LIST_ALL_SLACK_TEAM_CHANNELS_WITH_VARIOUS_FILTERS_limit","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":1},"SLACK_LIST_ALL_SLACK_TEAM_CHANNELS_WITH_VARIOUS_FILTERS_types":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Types","dynamic":false,"info":"Mix and match channel types by providing a comma-separated list of any combination of `public_channel`, `private_channel`, `mpim`, `im` ","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_LIST_ALL_SLACK_TEAM_CHANNELS_WITH_VARIOUS_FILTERS_types","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_LIST_ALL_SLACK_TEAM_USERS_WITH_PAGINATION_cursor":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Cursor","dynamic":false,"info":"Paginate through collections of data by setting the `cursor` parameter to a `next_cursor` attribute returned by a previous request's `response_metadata`. Default value fetches the first `page` of the collection","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_LIST_ALL_SLACK_TEAM_USERS_WITH_PAGINATION_cursor","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_LIST_ALL_SLACK_TEAM_USERS_WITH_PAGINATION_include_locale":{"_input_type":"BoolInput","advanced":false,"display_name":"Include Locale","dynamic":false,"info":"Set this to `true` to receive the locale for users. Defaults to `false`","list":false,"list_add_label":"Add More","name":"SLACK_LIST_ALL_SLACK_TEAM_USERS_WITH_PAGINATION_include_locale","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"SLACK_LIST_ALL_SLACK_TEAM_USERS_WITH_PAGINATION_limit":{"_input_type":"IntInput","advanced":false,"display_name":"Limit","dynamic":false,"info":"The maximum number of items to return. Fewer than the requested number of items may be returned, even if the end of the users list hasn't been reached. Providing no `limit` value will result in Slack attempting to deliver you the entire result set. If the collection is too large you may experience `limit_required` or HTTP 500 errors. ","list":false,"list_add_label":"Add More","name":"SLACK_LIST_ALL_SLACK_TEAM_USERS_WITH_PAGINATION_limit","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":1},"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_as_user":{"_input_type":"BoolInput","advanced":true,"display_name":"As User","dynamic":false,"info":"Pass true to post the message as the authed user, instead of as a bot. Defaults to false","list":false,"list_add_label":"Add More","name":"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_as_user","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_attachments":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Attachments","dynamic":false,"info":"A JSON-based array of structured attachments, presented as a URL-encoded string. ","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_attachments","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_blocks":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Blocks","dynamic":false,"info":"A JSON-based array of structured blocks, presented as a URL-encoded string. ","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_blocks","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_channel":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Channel","dynamic":false,"info":"Channel, private group, or DM channel to send message to. Can be an encoded ID, or a name","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_channel","placeholder":"","required":true,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_link_names":{"_input_type":"BoolInput","advanced":true,"display_name":"Link Names","dynamic":false,"info":"Find and link channel names and usernames.","list":false,"list_add_label":"Add More","name":"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_link_names","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_parse":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Parse","dynamic":false,"info":"Change how messages are treated. Defaults to `none`","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_parse","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_post_at":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Post At","dynamic":false,"info":"Unix EPOCH timestamp of time in future to send the message.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_post_at","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_reply_broadcast":{"_input_type":"BoolInput","advanced":true,"display_name":"Reply Broadcast","dynamic":false,"info":"Used in conjunction with `thread_ts` and indicates whether reply should be made visible to everyone in the channel or conversation. Defaults to `false`. ","list":false,"list_add_label":"Add More","name":"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_reply_broadcast","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_text":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Text","dynamic":false,"info":"How this field works and whether it is required depends on other fields you use in your API call","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_text","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_thread_ts":{"_input_type":"IntInput","advanced":true,"display_name":"Thread Ts","dynamic":false,"info":"Provide another message's `ts` value to make this message a reply. Avoid using a reply's `ts` value; use its parent instead. ","list":false,"list_add_label":"Add More","name":"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_thread_ts","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":""},"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_unfurl_links":{"_input_type":"BoolInput","advanced":true,"display_name":"Unfurl Links","dynamic":false,"info":"Pass true to enable unfurling of primarily text-based content.","list":false,"list_add_label":"Add More","name":"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_unfurl_links","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_unfurl_media":{"_input_type":"BoolInput","advanced":true,"display_name":"Unfurl Media","dynamic":false,"info":"Pass false to disable unfurling of media content.","list":false,"list_add_label":"Add More","name":"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_unfurl_media","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_count":{"_input_type":"IntInput","advanced":true,"display_name":"Count","dynamic":false,"info":"Pass the number of results you want per 'page'. Maximum of `100`.","list":false,"list_add_label":"Add More","name":"SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_count","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":1},"SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_highlight":{"_input_type":"BoolInput","advanced":true,"display_name":"Highlight","dynamic":false,"info":"Pass a value of `true` to enable query highlight markers","list":false,"list_add_label":"Add More","name":"SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_highlight","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_page":{"_input_type":"IntInput","advanced":true,"display_name":"Page","dynamic":false,"info":"Page","list":false,"list_add_label":"Add More","name":"SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_page","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":""},"SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_query":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Query","dynamic":false,"info":"Search query.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_query","placeholder":"","required":true,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_sort":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Sort","dynamic":false,"info":"Return matches sorted by either `score` or `timestamp`.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_sort","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_sort_dir":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Sort Dir","dynamic":false,"info":"Change sort direction to ascending (`asc`) or descending (`desc`).","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_sort_dir","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_as_user":{"_input_type":"BoolInput","advanced":true,"display_name":"As User","dynamic":false,"info":"Pass true to post the message as the authed user, instead of as a bot. Defaults to false","list":false,"list_add_label":"Add More","name":"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_as_user","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_attachments":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Attachments","dynamic":false,"info":"A JSON-based array of structured attachments, presented as a URL-encoded string. ","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_attachments","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_blocks":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Blocks","dynamic":false,"info":"A JSON-based array of structured blocks, presented as a URL-encoded string. ","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_blocks","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_channel":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Channel","dynamic":false,"info":"Channel, private group, or IM channel to send message to. Can be an encoded ID, or a name ","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_channel","placeholder":"","required":true,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_icon_emoji":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Icon Emoji","dynamic":false,"info":"Emoji to use as the icon for this message. Overrides `icon_url`. Must be used in conjunction with `as_user` set to `false`, otherwise ignored","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_icon_emoji","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_icon_url":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Icon Url","dynamic":false,"info":"URL to an image to use as the icon for this message. Must be used in conjunction with `as_user` set to false, otherwise ignored","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_icon_url","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_link_names":{"_input_type":"BoolInput","advanced":true,"display_name":"Link Names","dynamic":false,"info":"Find and link channel names and usernames.","list":false,"list_add_label":"Add More","name":"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_link_names","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_mrkdwn":{"_input_type":"BoolInput","advanced":true,"display_name":"Mrkdwn","dynamic":false,"info":"Disable Slack markup parsing by setting to `false`. Enabled by default.","list":false,"list_add_label":"Add More","name":"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_mrkdwn","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_parse":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Parse","dynamic":false,"info":"Change how messages are treated. Defaults to `none` ","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_parse","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_reply_broadcast":{"_input_type":"BoolInput","advanced":true,"display_name":"Reply Broadcast","dynamic":false,"info":"Used in conjunction with `thread_ts` and indicates whether reply should be made visible to everyone in the channel or conversation. Defaults to `false`. ","list":false,"list_add_label":"Add More","name":"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_reply_broadcast","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_text":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Text","dynamic":false,"info":"How this field works and whether it is required depends on other fields you use in your API call","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_text","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_thread_ts":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Thread Ts","dynamic":false,"info":"Provide another message's `ts` value to make this message a reply. Avoid using a reply's `ts` value; use its parent instead. ","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_thread_ts","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_unfurl_links":{"_input_type":"BoolInput","advanced":true,"display_name":"Unfurl Links","dynamic":false,"info":"Pass true to enable unfurling of primarily text-based content.","list":false,"list_add_label":"Add More","name":"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_unfurl_links","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_unfurl_media":{"_input_type":"BoolInput","advanced":true,"display_name":"Unfurl Media","dynamic":false,"info":"Pass false to disable unfurling of media content.","list":false,"list_add_label":"Add More","name":"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_unfurl_media","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_username":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Username","dynamic":false,"info":"Set your bot's user name. Must be used in conjunction with `as_user` set to false, otherwise ignored","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_username","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_UPDATES_A_SLACK_MESSAGE_as_user":{"_input_type":"MessageTextInput","advanced":true,"display_name":"As User","dynamic":false,"info":"Pass true to update the message as the authed user","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_UPDATES_A_SLACK_MESSAGE_as_user","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_UPDATES_A_SLACK_MESSAGE_attachments":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Attachments","dynamic":false,"info":"A JSON-based array of structured attachments, presented as a URL-encoded string. This field is required when not presenting `text`. If you don't include this field, the message's previous `attachments` will be retained. To remove previous `attachments`, include an empty array for this field. ","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_UPDATES_A_SLACK_MESSAGE_attachments","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_UPDATES_A_SLACK_MESSAGE_blocks":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Blocks","dynamic":false,"info":"A JSON-based array of structured blocks, presented as a URL-encoded string. If you don't include this field, the message's previous `blocks` will be retained. To remove previous `blocks`, include an empty array for this field. ","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_UPDATES_A_SLACK_MESSAGE_blocks","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_UPDATES_A_SLACK_MESSAGE_channel":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Channel ID","dynamic":false,"info":"Channel ID containing the message to be updated.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_UPDATES_A_SLACK_MESSAGE_channel","placeholder":"","required":true,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_UPDATES_A_SLACK_MESSAGE_link_names":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Link Names","dynamic":false,"info":"Find and link channel names and usernames. Defaults to `none`. If you do not specify a value for this field, the original value set for the message will be overwritten with the default, `none`. ","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_UPDATES_A_SLACK_MESSAGE_link_names","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_UPDATES_A_SLACK_MESSAGE_parse":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Parse","dynamic":false,"info":"Change how messages are treated. Defaults to `client`, unlike `chat.postMessage`. Accepts either `none` or `full`. If you do not specify a value for this field, the original value set for the message will be overwritten with the default, `client`. ","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_UPDATES_A_SLACK_MESSAGE_parse","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_UPDATES_A_SLACK_MESSAGE_text":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Text","dynamic":false,"info":"New text for the message, using the default formatting rules. It's not required when presenting `blocks` or `attachments`. ","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_UPDATES_A_SLACK_MESSAGE_text","placeholder":"","required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"SLACK_UPDATES_A_SLACK_MESSAGE_ts":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Ts","dynamic":false,"info":"Timestamp of the message to be updated.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"SLACK_UPDATES_A_SLACK_MESSAGE_ts","placeholder":"","required":true,"show":false,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from typing import Any\n\nfrom lfx.base.composio.composio_base import ComposioBaseComponent\nfrom lfx.inputs import BoolInput, IntInput, MessageTextInput\nfrom lfx.log.logger import logger\n\n\nclass ComposioSlackAPIComponent(ComposioBaseComponent):\n display_name: str = \"Slack\"\n icon = \"Slack\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"slack\"\n\n _actions_data: dict = {\n \"SLACK_LIST_ALL_SLACK_TEAM_USERS_WITH_PAGINATION\": {\n \"display_name\": \"List Users\",\n \"action_fields\": [\n \"SLACK_LIST_ALL_SLACK_TEAM_USERS_WITH_PAGINATION_limit\",\n \"SLACK_LIST_ALL_SLACK_TEAM_USERS_WITH_PAGINATION_cursor\",\n \"SLACK_LIST_ALL_SLACK_TEAM_USERS_WITH_PAGINATION_include_locale\",\n ],\n },\n \"SLACK_LIST_ALL_SLACK_TEAM_CHANNELS_WITH_VARIOUS_FILTERS\": {\n \"display_name\": \"List Channels\",\n \"action_fields\": [\n \"SLACK_LIST_ALL_SLACK_TEAM_CHANNELS_WITH_VARIOUS_FILTERS_exclude_archived\",\n \"SLACK_LIST_ALL_SLACK_TEAM_CHANNELS_WITH_VARIOUS_FILTERS_types\",\n \"SLACK_LIST_ALL_SLACK_TEAM_CHANNELS_WITH_VARIOUS_FILTERS_limit\",\n \"SLACK_LIST_ALL_SLACK_TEAM_CHANNELS_WITH_VARIOUS_FILTERS_cursor\",\n ],\n },\n \"SLACK_UPDATES_A_SLACK_MESSAGE\": {\n \"display_name\": \"Update Slack Chat Message\",\n \"action_fields\": [\n \"SLACK_UPDATES_A_SLACK_MESSAGE_as_user\",\n \"SLACK_UPDATES_A_SLACK_MESSAGE_attachments\",\n \"SLACK_UPDATES_A_SLACK_MESSAGE_blocks\",\n \"SLACK_UPDATES_A_SLACK_MESSAGE_channel\",\n \"SLACK_UPDATES_A_SLACK_MESSAGE_link_names\",\n \"SLACK_UPDATES_A_SLACK_MESSAGE_parse\",\n \"SLACK_UPDATES_A_SLACK_MESSAGE_text\",\n \"SLACK_UPDATES_A_SLACK_MESSAGE_ts\",\n ],\n },\n \"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL\": {\n \"display_name\": \"Post Message To Channel\",\n \"action_fields\": [\n \"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_as_user\",\n \"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_attachments\",\n \"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_blocks\",\n \"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_channel\",\n \"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_icon_emoji\",\n \"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_icon_url\",\n \"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_link_names\",\n \"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_mrkdwn\",\n \"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_parse\",\n \"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_reply_broadcast\",\n \"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_text\",\n \"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_thread_ts\",\n \"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_unfurl_links\",\n \"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_unfurl_media\",\n \"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_username\",\n ],\n },\n \"SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY\": {\n \"display_name\": \"Search Messages Endpoint\",\n \"action_fields\": [\n \"SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_count\",\n \"SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_highlight\",\n \"SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_page\",\n \"SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_query\",\n \"SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_sort\",\n \"SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_sort_dir\",\n ],\n },\n \"SLACK_FETCH_CONVERSATION_HISTORY\": {\n \"display_name\": \"Retrieve conversation history\",\n \"action_fields\": [\n \"SLACK_FETCH_CONVERSATION_HISTORY_channel\",\n \"SLACK_FETCH_CONVERSATION_HISTORY_latest\",\n \"SLACK_FETCH_CONVERSATION_HISTORY_oldest\",\n \"SLACK_FETCH_CONVERSATION_HISTORY_inclusive\",\n \"SLACK_FETCH_CONVERSATION_HISTORY_limit\",\n \"SLACK_FETCH_CONVERSATION_HISTORY_cursor\",\n ],\n },\n \"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME\": {\n \"display_name\": \"Schedule Message In Chat\",\n \"action_fields\": [\n \"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_as_user\",\n \"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_attachments\",\n \"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_blocks\",\n \"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_channel\",\n \"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_link_names\",\n \"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_parse\",\n \"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_post_at\",\n \"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_reply_broadcast\",\n \"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_text\",\n \"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_thread_ts\",\n \"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_unfurl_links\",\n \"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_unfurl_media\",\n ],\n },\n \"SLACK_CREATE_A_REMINDER\": {\n \"display_name\": \"Add Reminder For User\",\n \"action_fields\": [\n \"SLACK_CREATE_A_REMINDER_text\",\n \"SLACK_CREATE_A_REMINDER_time\",\n \"SLACK_CREATE_A_REMINDER_user\",\n ],\n },\n }\n\n _all_fields = {field for action_data in _actions_data.values() for field in action_data[\"action_fields\"]}\n _bool_variables = {\n \"SLACK_LIST_ALL_SLACK_TEAM_USERS_WITH_PAGINATION_include_locale\",\n \"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_as_user\",\n \"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_link_names\",\n \"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_mrkdwn\",\n \"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_reply_broadcast\",\n \"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_unfurl_links\",\n \"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_unfurl_media\",\n \"SLACK_FETCH_CONVERSATION_HISTORY_inclusive\",\n \"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_as_user\",\n \"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_link_names\",\n \"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_reply_broadcast\",\n \"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_unfurl_links\",\n \"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_unfurl_media\",\n \"SLACK_LIST_ALL_SLACK_TEAM_CHANNELS_WITH_VARIOUS_FILTERS_exclude_archived\",\n \"SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_highlight\",\n }\n\n inputs = [\n *ComposioBaseComponent.get_base_inputs(),\n IntInput(\n name=\"SLACK_LIST_ALL_SLACK_TEAM_USERS_WITH_PAGINATION_limit\",\n display_name=\"Limit\",\n info=\"The maximum number of items to return. Fewer than the requested number of items may be returned, even if the end of the users list hasn't been reached. Providing no `limit` value will result in Slack attempting to deliver you the entire result set. If the collection is too large you may experience `limit_required` or HTTP 500 errors. \", # noqa: E501\n show=False,\n value=1,\n ),\n MessageTextInput(\n name=\"SLACK_LIST_ALL_SLACK_TEAM_USERS_WITH_PAGINATION_cursor\",\n display_name=\"Cursor\",\n info=\"Paginate through collections of data by setting the `cursor` parameter to a `next_cursor` attribute returned by a previous request's `response_metadata`. Default value fetches the first `page` of the collection\", # noqa: E501\n show=False,\n advanced=True,\n ),\n BoolInput(\n name=\"SLACK_LIST_ALL_SLACK_TEAM_USERS_WITH_PAGINATION_include_locale\",\n display_name=\"Include Locale\",\n info=\"Set this to `true` to receive the locale for users. Defaults to `false`\",\n show=False,\n ),\n BoolInput(\n name=\"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_as_user\",\n display_name=\"As User\",\n info=\"Pass true to post the message as the authed user, instead of as a bot. Defaults to false\",\n show=False,\n advanced=True,\n ),\n MessageTextInput(\n name=\"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_attachments\",\n display_name=\"Attachments\",\n info=\"A JSON-based array of structured attachments, presented as a URL-encoded string. \",\n show=False,\n advanced=True,\n ),\n MessageTextInput(\n name=\"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_blocks\",\n display_name=\"Blocks\",\n info=\"A JSON-based array of structured blocks, presented as a URL-encoded string. \",\n show=False,\n advanced=True,\n ),\n MessageTextInput(\n name=\"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_channel\",\n display_name=\"Channel\",\n info=\"Channel, private group, or IM channel to send message to. Can be an encoded ID, or a name \",\n show=False,\n required=True,\n ),\n MessageTextInput(\n name=\"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_icon_emoji\",\n display_name=\"Icon Emoji\",\n info=\"Emoji to use as the icon for this message. Overrides `icon_url`. Must be used in conjunction with `as_user` set to `false`, otherwise ignored\", # noqa: E501\n show=False,\n advanced=True,\n ),\n MessageTextInput(\n name=\"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_icon_url\",\n display_name=\"Icon Url\",\n info=\"URL to an image to use as the icon for this message. Must be used in conjunction with `as_user` set to false, otherwise ignored\", # noqa: E501\n show=False,\n advanced=True,\n ),\n BoolInput(\n name=\"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_link_names\",\n display_name=\"Link Names\",\n info=\"Find and link channel names and usernames.\",\n show=False,\n advanced=True,\n ),\n BoolInput(\n name=\"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_mrkdwn\",\n display_name=\"Mrkdwn\",\n info=\"Disable Slack markup parsing by setting to `false`. Enabled by default.\",\n show=False,\n advanced=True,\n ),\n MessageTextInput(\n name=\"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_parse\",\n display_name=\"Parse\",\n info=\"Change how messages are treated. Defaults to `none` \",\n show=False,\n advanced=True,\n ),\n BoolInput(\n name=\"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_reply_broadcast\",\n display_name=\"Reply Broadcast\",\n info=\"Used in conjunction with `thread_ts` and indicates whether reply should be made visible to everyone in the channel or conversation. Defaults to `false`. \", # noqa: E501\n show=False,\n advanced=True,\n ),\n MessageTextInput(\n name=\"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_text\",\n display_name=\"Text\",\n info=\"How this field works and whether it is required depends on other fields you use in your API call\",\n show=False,\n ),\n MessageTextInput(\n name=\"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_thread_ts\",\n display_name=\"Thread Ts\",\n info=\"Provide another message's `ts` value to make this message a reply. Avoid using a reply's `ts` value; use its parent instead. \", # noqa: E501\n show=False,\n ),\n BoolInput(\n name=\"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_unfurl_links\",\n display_name=\"Unfurl Links\",\n info=\"Pass true to enable unfurling of primarily text-based content.\",\n show=False,\n advanced=True,\n ),\n BoolInput(\n name=\"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_unfurl_media\",\n display_name=\"Unfurl Media\",\n info=\"Pass false to disable unfurling of media content.\",\n show=False,\n advanced=True,\n ),\n MessageTextInput(\n name=\"SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL_username\",\n display_name=\"Username\",\n info=\"Set your bot's user name. Must be used in conjunction with `as_user` set to false, otherwise ignored\",\n show=False,\n advanced=True,\n ),\n MessageTextInput(\n name=\"SLACK_UPDATES_A_SLACK_MESSAGE_as_user\",\n display_name=\"As User\",\n info=\"Pass true to update the message as the authed user\",\n show=False,\n advanced=True,\n ),\n MessageTextInput(\n name=\"SLACK_UPDATES_A_SLACK_MESSAGE_attachments\",\n display_name=\"Attachments\",\n info=\"A JSON-based array of structured attachments, presented as a URL-encoded string. This field is required when not presenting `text`. If you don't include this field, the message's previous `attachments` will be retained. To remove previous `attachments`, include an empty array for this field. \", # noqa: E501\n show=False,\n advanced=True,\n ),\n MessageTextInput(\n name=\"SLACK_UPDATES_A_SLACK_MESSAGE_blocks\",\n display_name=\"Blocks\",\n info=\"A JSON-based array of structured blocks, presented as a URL-encoded string. If you don't include this field, the message's previous `blocks` will be retained. To remove previous `blocks`, include an empty array for this field. \", # noqa: E501\n show=False,\n advanced=True,\n ),\n MessageTextInput(\n name=\"SLACK_UPDATES_A_SLACK_MESSAGE_channel\",\n display_name=\"Channel ID\",\n info=\"Channel ID containing the message to be updated.\",\n show=False,\n required=True,\n ),\n MessageTextInput(\n name=\"SLACK_UPDATES_A_SLACK_MESSAGE_link_names\",\n display_name=\"Link Names\",\n info=\"Find and link channel names and usernames. Defaults to `none`. If you do not specify a value for this field, the original value set for the message will be overwritten with the default, `none`. \", # noqa: E501\n show=False,\n advanced=True,\n ),\n MessageTextInput(\n name=\"SLACK_UPDATES_A_SLACK_MESSAGE_parse\",\n display_name=\"Parse\",\n info=\"Change how messages are treated. Defaults to `client`, unlike `chat.postMessage`. Accepts either `none` or `full`. If you do not specify a value for this field, the original value set for the message will be overwritten with the default, `client`. \", # noqa: E501\n show=False,\n advanced=True,\n ),\n MessageTextInput(\n name=\"SLACK_UPDATES_A_SLACK_MESSAGE_text\",\n display_name=\"Text\",\n info=\"New text for the message, using the default formatting rules. It's not required when presenting `blocks` or `attachments`. \", # noqa: E501\n show=False,\n ),\n MessageTextInput(\n name=\"SLACK_UPDATES_A_SLACK_MESSAGE_ts\",\n display_name=\"Ts\",\n info=\"Timestamp of the message to be updated.\",\n show=False,\n required=True,\n ),\n MessageTextInput(\n name=\"SLACK_FETCH_CONVERSATION_HISTORY_channel\",\n display_name=\"Channel ID\",\n info=\"Channel ID to fetch history for.\",\n show=False,\n ),\n IntInput(\n name=\"SLACK_FETCH_CONVERSATION_HISTORY_latest\",\n display_name=\"Latest\",\n info=\"End of time range of messages to include in results.\",\n show=False,\n advanced=True,\n ),\n IntInput(\n name=\"SLACK_FETCH_CONVERSATION_HISTORY_oldest\",\n display_name=\"Oldest\",\n info=\"Start of time range of messages to include in results.\",\n show=False,\n advanced=True,\n ),\n BoolInput(\n name=\"SLACK_FETCH_CONVERSATION_HISTORY_inclusive\",\n display_name=\"Inclusive\",\n info=\"Include messages with latest or oldest timestamp in results only when either timestamp is specified. \", # noqa: E501\n show=False,\n advanced=True,\n ),\n IntInput(\n name=\"SLACK_FETCH_CONVERSATION_HISTORY_limit\",\n display_name=\"Limit\",\n info=\"The maximum number of items to return. Fewer than the requested number of items may be returned, even if the end of the users list hasn't been reached. \", # noqa: E501\n show=False,\n advanced=True,\n ),\n MessageTextInput(\n name=\"SLACK_FETCH_CONVERSATION_HISTORY_cursor\",\n display_name=\"Cursor\",\n info=\"Paginate through collections of data by setting the `cursor` parameter to a `next_cursor` attribute returned by a previous request's `response_metadata`. Default value fetches the first 'page' of the collection. \", # noqa: E501\n show=False,\n advanced=True,\n ),\n BoolInput(\n name=\"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_as_user\",\n display_name=\"As User\",\n info=\"Pass true to post the message as the authed user, instead of as a bot. Defaults to false\",\n show=False,\n advanced=True,\n ),\n MessageTextInput(\n name=\"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_attachments\",\n display_name=\"Attachments\",\n info=\"A JSON-based array of structured attachments, presented as a URL-encoded string. \",\n show=False,\n advanced=True,\n ),\n MessageTextInput(\n name=\"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_blocks\",\n display_name=\"Blocks\",\n info=\"A JSON-based array of structured blocks, presented as a URL-encoded string. \",\n show=False,\n advanced=True,\n ),\n MessageTextInput(\n name=\"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_channel\",\n display_name=\"Channel\",\n info=\"Channel, private group, or DM channel to send message to. Can be an encoded ID, or a name\",\n show=False,\n required=True,\n ),\n BoolInput(\n name=\"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_link_names\",\n display_name=\"Link Names\",\n info=\"Find and link channel names and usernames.\",\n show=False,\n advanced=True,\n ),\n MessageTextInput(\n name=\"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_parse\",\n display_name=\"Parse\",\n info=\"Change how messages are treated. Defaults to `none`\",\n show=False,\n advanced=True,\n ),\n MessageTextInput(\n name=\"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_post_at\",\n display_name=\"Post At\",\n info=\"Unix EPOCH timestamp of time in future to send the message.\",\n show=False,\n ),\n BoolInput(\n name=\"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_reply_broadcast\",\n display_name=\"Reply Broadcast\",\n info=\"Used in conjunction with `thread_ts` and indicates whether reply should be made visible to everyone in the channel or conversation. Defaults to `false`. \", # noqa: E501\n show=False,\n advanced=True,\n ),\n MessageTextInput(\n name=\"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_text\",\n display_name=\"Text\",\n info=\"How this field works and whether it is required depends on other fields you use in your API call\",\n show=False,\n ),\n IntInput(\n name=\"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_thread_ts\",\n display_name=\"Thread Ts\",\n info=\"Provide another message's `ts` value to make this message a reply. Avoid using a reply's `ts` value; use its parent instead. \", # noqa: E501\n show=False,\n advanced=True,\n ),\n BoolInput(\n name=\"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_unfurl_links\",\n display_name=\"Unfurl Links\",\n info=\"Pass true to enable unfurling of primarily text-based content.\",\n show=False,\n advanced=True,\n ),\n BoolInput(\n name=\"SLACK_SCHEDULES_A_MESSAGE_TO_A_CHANNEL_AT_A_SPECIFIED_TIME_unfurl_media\",\n display_name=\"Unfurl Media\",\n info=\"Pass false to disable unfurling of media content.\",\n show=False,\n advanced=True,\n ),\n BoolInput(\n name=\"SLACK_LIST_ALL_SLACK_TEAM_CHANNELS_WITH_VARIOUS_FILTERS_exclude_archived\",\n display_name=\"Exclude Archived\",\n info=\"Set to `true` to exclude archived channels from the list\",\n show=False,\n ),\n MessageTextInput(\n name=\"SLACK_LIST_ALL_SLACK_TEAM_CHANNELS_WITH_VARIOUS_FILTERS_types\",\n display_name=\"Types\",\n info=\"Mix and match channel types by providing a comma-separated list of any combination of `public_channel`, `private_channel`, `mpim`, `im` \", # noqa: E501\n show=False,\n ),\n IntInput(\n name=\"SLACK_LIST_ALL_SLACK_TEAM_CHANNELS_WITH_VARIOUS_FILTERS_limit\",\n display_name=\"Limit\",\n info=\"The maximum number of items to return. Fewer than the requested number of items may be returned, even if the end of the list hasn't been reached. Must be an integer no larger than 1000. \", # noqa: E501\n show=False,\n value=1,\n ),\n MessageTextInput(\n name=\"SLACK_LIST_ALL_SLACK_TEAM_CHANNELS_WITH_VARIOUS_FILTERS_cursor\",\n display_name=\"Cursor\",\n info=\"Paginate through collections of data by setting the `cursor` parameter to a `next_cursor` attribute returned by a previous request's `response_metadata`. Default value fetches the first 'page' of the collection\", # noqa: E501\n show=False,\n advanced=True,\n ),\n IntInput(\n name=\"SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_count\",\n display_name=\"Count\",\n info=\"Pass the number of results you want per 'page'. Maximum of `100`.\",\n show=False,\n value=1,\n advanced=True,\n ),\n BoolInput(\n name=\"SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_highlight\",\n display_name=\"Highlight\",\n info=\"Pass a value of `true` to enable query highlight markers\",\n show=False,\n advanced=True,\n ),\n IntInput(\n name=\"SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_page\",\n display_name=\"Page\",\n info=\"Page\",\n show=False,\n advanced=True,\n ),\n MessageTextInput(\n name=\"SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_query\",\n display_name=\"Query\",\n info=\"Search query.\",\n show=False,\n required=True,\n ),\n MessageTextInput(\n name=\"SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_sort\",\n display_name=\"Sort\",\n info=\"Return matches sorted by either `score` or `timestamp`.\",\n show=False,\n advanced=True,\n ),\n MessageTextInput(\n name=\"SLACK_SEARCH_FOR_MESSAGES_WITH_QUERY_sort_dir\",\n display_name=\"Sort Dir\",\n info=\"Change sort direction to ascending (`asc`) or descending (`desc`).\",\n show=False,\n advanced=True,\n ),\n MessageTextInput(\n name=\"SLACK_CREATE_A_REMINDER_text\",\n display_name=\"Text\",\n info=\"The content of the reminder\",\n show=False,\n required=True,\n ),\n MessageTextInput(\n name=\"SLACK_CREATE_A_REMINDER_time\",\n display_name=\"Time\",\n info=\"When this reminder should happen: the Unix timestamp (up to five years from now), the number of seconds until the reminder (if within 24 hours), or a natural language description (Ex. 'in 15 minutes,' or 'every Thursday') \", # noqa: E501\n show=False,\n required=True,\n ),\n MessageTextInput(\n name=\"SLACK_CREATE_A_REMINDER_user\",\n display_name=\"User\",\n info=\"The user who will receive the reminder. If no user is specified, the reminder will go to user who created it. \", # noqa: E501\n show=False,\n ),\n ]\n\n def execute_action(self):\n \"\"\"Execute action and return response as Message.\"\"\"\n try:\n from composio.client.enums import Action\n except ImportError:\n try:\n from composio import Action\n except ImportError:\n msg = \"Composio Action class is not available. Please install composio package with correct version.\"\n raise RuntimeError(msg) from None\n\n toolset = self._build_wrapper()\n\n try:\n self._build_action_maps()\n display_name = self.action[0][\"name\"] if isinstance(self.action, list) and self.action else self.action\n action_key = self._display_to_key_map.get(display_name)\n if not action_key:\n msg = f\"Invalid action: {display_name}\"\n raise ValueError(msg)\n\n enum_name = getattr(Action, action_key)\n params = {}\n if action_key in self._actions_data:\n for field in self._actions_data[action_key][\"action_fields\"]:\n value = getattr(self, field)\n\n if value is None or value == \"\":\n continue\n\n if field in self._bool_variables:\n value = bool(value)\n\n param_name = field.replace(action_key + \"_\", \"\")\n\n if param_name == \"as_user\":\n value = True\n\n params[param_name] = value\n\n result = toolset.execute_action(\n action=enum_name,\n params=params,\n )\n if not result.get(\"successful\"):\n return {\"error\": result.get(\"error\", \"No response\")}\n\n return result.get(\"data\", [])\n except Exception as e:\n logger.error(f\"Error executing action: {e}\")\n display_name = self.action[0][\"name\"] if isinstance(self.action, list) and self.action else str(self.action)\n msg = f\"Failed to execute {display_name}: {e!s}\"\n raise ValueError(msg) from e\n\n def update_build_config(self, build_config: dict, field_value: Any, field_name: str | None = None) -> dict:\n return super().update_build_config(build_config, field_value, field_name)\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioSlackbotAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Slackbot","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Slack","legacy":false,"metadata":{"code_hash":"b132fa55bcee","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.slackbot_composio.ComposioSlackbotAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioSlackbotAPIComponent(ComposioBaseComponent):\n display_name: str = \"Slackbot\"\n icon = \"Slack\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"slackbot\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Slackbot component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioSupabaseAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Supabase","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Supabase","legacy":false,"metadata":{"code_hash":"7ad58ce34cc0","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.supabase_composio.ComposioSupabaseAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioSupabaseAPIComponent(ComposioBaseComponent):\n display_name: str = \"Supabase\"\n icon = \"Supabase\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"supabase\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Supabase component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioTimelinesAIAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"TimelinesAI","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Timelinesai","legacy":false,"metadata":{"code_hash":"76e70e2de4d3","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.timelinesai_composio.ComposioTimelinesAIAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioTimelinesAIAPIComponent(ComposioBaseComponent):\n display_name: str = \"TimelinesAI\"\n icon = \"Timelinesai\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"timelinesai\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for TimelinesAI component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioTodoistAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Todoist","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Todoist","legacy":false,"metadata":{"code_hash":"4dd9852f2058","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.todoist_composio.ComposioTodoistAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioTodoistAPIComponent(ComposioBaseComponent):\n display_name: str = \"Todoist\"\n icon = \"Todoist\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"todoist\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Todoist component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioWrikeAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Wrike","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Wrike","legacy":false,"metadata":{"code_hash":"a5f2cf00ca08","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.wrike_composio.ComposioWrikeAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioWrikeAPIComponent(ComposioBaseComponent):\n display_name: str = \"Wrike\"\n icon = \"Wrike\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"wrike\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Wrike component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"ComposioYoutubeAPIComponent":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"display_name":"Youtube","documentation":"https://docs.composio.dev","edited":false,"field_order":["entity_id","api_key","auth_mode","auth_link","client_id","client_secret","verification_token","redirect_uri","authorization_url","token_url","api_key_field","generic_api_key","token","access_token","refresh_token","username","password","domain","base_url","bearer_token","authorization_code","scopes","subdomain","instance_url","tenant_id","action_button"],"frozen":false,"icon":"Youtube","legacy":false,"metadata":{"code_hash":"11a5b77fc0ad","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.composio.youtube_composio.ComposioYoutubeAPIComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataFrame","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","access_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Access Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"access_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"action_button":{"_input_type":"SortableListInput","advanced":false,"display_name":"Action","dynamic":false,"helper_text":"Please connect before selecting actions.","helper_text_metadata":{"variant":"destructive"},"info":"","limit":1,"name":"action_button","options":[],"placeholder":"Select action","real_time_refresh":true,"required":false,"search_category":[],"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"sortableList","value":"disabled"},"api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Composio API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","real_time_refresh":true,"required":true,"show":true,"title_case":false,"type":"str","value":"COMPOSIO_API_KEY"},"api_key_field":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"api_key_field","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"auth_link":{"_input_type":"AuthInput","advanced":false,"auth_tooltip":"Please insert a valid Composio API Key.","dynamic":false,"info":"","name":"auth_link","placeholder":"","required":false,"show":false,"title_case":false,"trace_as_metadata":true,"type":"auth","value":""},"auth_mode":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Auth Mode","dynamic":false,"external_options":{},"helper_text":"Choose how to authenticate with the toolkit.","info":"","name":"auth_mode","options":[],"options_metadata":[],"placeholder":"Select auth mode","real_time_refresh":true,"required":false,"show":false,"title_case":false,"toggle":true,"toggle_disable":true,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"authorization_code":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Authorization Code","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"authorization_code","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"authorization_url":{"_input_type":"StrInput","advanced":false,"display_name":"Authorization URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"authorization_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"base_url":{"_input_type":"StrInput","advanced":false,"display_name":"Base URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"base_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"bearer_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Bearer Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"bearer_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_id":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client ID","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_id","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"client_secret":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Client Secret","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"client_secret","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.composio.composio_base import ComposioBaseComponent\n\n\nclass ComposioYoutubeAPIComponent(ComposioBaseComponent):\n display_name: str = \"Youtube\"\n icon = \"Youtube\"\n documentation: str = \"https://docs.composio.dev\"\n app_name = \"youtube\"\n\n def set_default_tools(self):\n \"\"\"Set the default tools for Youtube component.\"\"\"\n"},"domain":{"_input_type":"StrInput","advanced":false,"display_name":"Domain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"domain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"entity_id":{"_input_type":"MessageTextInput","advanced":true,"display_name":"Entity ID","dynamic":false,"info":"","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"entity_id","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"default"},"generic_api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"API Key","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"generic_api_key","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"instance_url":{"_input_type":"StrInput","advanced":false,"display_name":"Instance URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"instance_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"password","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"redirect_uri":{"_input_type":"StrInput","advanced":false,"display_name":"Redirect URI","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"redirect_uri","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"refresh_token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Refresh Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"refresh_token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"scopes":{"_input_type":"StrInput","advanced":false,"display_name":"Scopes","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scopes","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"subdomain":{"_input_type":"StrInput","advanced":false,"display_name":"Subdomain","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"subdomain","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"tenant_id":{"_input_type":"StrInput","advanced":false,"display_name":"Tenant ID","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"tenant_id","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"token":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Token","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"token","password":true,"placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"type":"str","value":""},"token_url":{"_input_type":"StrInput","advanced":false,"display_name":"Token URL","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"token_url","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"verification_token":{"_input_type":"StrInput","advanced":false,"display_name":"Verification Token","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"verification_token","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false}}],["confluence",{"Confluence":{"base_classes":["Data"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Confluence wiki collaboration platform","display_name":"Confluence","documentation":"https://python.langchain.com/v0.2/docs/integrations/document_loaders/confluence/","edited":false,"field_order":["url","username","api_key","space_key","cloud","content_format","max_pages"],"frozen":false,"icon":"Confluence","legacy":false,"metadata":{"code_hash":"8a7ef34b66e4","dependencies":{"dependencies":[{"name":"langchain_community","version":"0.3.21"},{"name":"lfx","version":null}],"total_dependencies":2},"module":"lfx.components.confluence.confluence.ConfluenceComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Data","group_outputs":false,"method":"load_documents","name":"data","selected":"Data","tool_mode":true,"types":["Data"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","api_key":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Confluence API Key","dynamic":false,"info":"Atlassian Key. Create at: https://id.atlassian.com/manage-profile/security/api-tokens","input_types":[],"load_from_db":true,"name":"api_key","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""},"cloud":{"_input_type":"BoolInput","advanced":true,"display_name":"Use Cloud?","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"cloud","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from langchain_community.document_loaders import ConfluenceLoader\nfrom langchain_community.document_loaders.confluence import ContentFormat\n\nfrom lfx.custom.custom_component.component import Component\nfrom lfx.io import BoolInput, DropdownInput, IntInput, Output, SecretStrInput, StrInput\nfrom lfx.schema.data import Data\n\n\nclass ConfluenceComponent(Component):\n display_name = \"Confluence\"\n description = \"Confluence wiki collaboration platform\"\n documentation = \"https://python.langchain.com/v0.2/docs/integrations/document_loaders/confluence/\"\n trace_type = \"tool\"\n icon = \"Confluence\"\n name = \"Confluence\"\n\n inputs = [\n StrInput(\n name=\"url\",\n display_name=\"Site URL\",\n required=True,\n info=\"The base URL of the Confluence Space. Example: https://.atlassian.net/wiki.\",\n ),\n StrInput(\n name=\"username\",\n display_name=\"Username\",\n required=True,\n info=\"Atlassian User E-mail. Example: email@example.com\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"Confluence API Key\",\n required=True,\n info=\"Atlassian Key. Create at: https://id.atlassian.com/manage-profile/security/api-tokens\",\n ),\n StrInput(name=\"space_key\", display_name=\"Space Key\", required=True),\n BoolInput(name=\"cloud\", display_name=\"Use Cloud?\", required=True, value=True, advanced=True),\n DropdownInput(\n name=\"content_format\",\n display_name=\"Content Format\",\n options=[\n ContentFormat.EDITOR.value,\n ContentFormat.EXPORT_VIEW.value,\n ContentFormat.ANONYMOUS_EXPORT_VIEW.value,\n ContentFormat.STORAGE.value,\n ContentFormat.VIEW.value,\n ],\n value=ContentFormat.STORAGE.value,\n required=True,\n advanced=True,\n info=\"Specify content format, defaults to ContentFormat.STORAGE\",\n ),\n IntInput(\n name=\"max_pages\",\n display_name=\"Max Pages\",\n required=False,\n value=1000,\n advanced=True,\n info=\"Maximum number of pages to retrieve in total, defaults 1000\",\n ),\n ]\n\n outputs = [\n Output(name=\"data\", display_name=\"Data\", method=\"load_documents\"),\n ]\n\n def build_confluence(self) -> ConfluenceLoader:\n content_format = ContentFormat(self.content_format)\n return ConfluenceLoader(\n url=self.url,\n username=self.username,\n api_key=self.api_key,\n cloud=self.cloud,\n space_key=self.space_key,\n content_format=content_format,\n max_pages=self.max_pages,\n )\n\n def load_documents(self) -> list[Data]:\n confluence = self.build_confluence()\n documents = confluence.load()\n data = [Data.from_document(doc) for doc in documents] # Using the from_document method of Data\n self.status = data\n return data\n"},"content_format":{"_input_type":"DropdownInput","advanced":true,"combobox":false,"dialog_inputs":{},"display_name":"Content Format","dynamic":false,"external_options":{},"info":"Specify content format, defaults to ContentFormat.STORAGE","name":"content_format","options":["body.editor","body.export_view","body.anonymous_export_view","body.storage","body.view"],"options_metadata":[],"placeholder":"","required":true,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"body.storage"},"max_pages":{"_input_type":"IntInput","advanced":true,"display_name":"Max Pages","dynamic":false,"info":"Maximum number of pages to retrieve in total, defaults 1000","list":false,"list_add_label":"Add More","name":"max_pages","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":1000},"space_key":{"_input_type":"StrInput","advanced":false,"display_name":"Space Key","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"space_key","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"url":{"_input_type":"StrInput","advanced":false,"display_name":"Site URL","dynamic":false,"info":"The base URL of the Confluence Space. Example: https://.atlassian.net/wiki.","list":false,"list_add_label":"Add More","load_from_db":false,"name":"url","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"username":{"_input_type":"StrInput","advanced":false,"display_name":"Username","dynamic":false,"info":"Atlassian User E-mail. Example: email@example.com","list":false,"list_add_label":"Add More","load_from_db":false,"name":"username","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false}}],["couchbase",{"Couchbase":{"base_classes":["Data","DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Couchbase Vector Store with search capabilities","display_name":"Couchbase","documentation":"","edited":false,"field_order":["couchbase_connection_string","couchbase_username","couchbase_password","bucket_name","scope_name","collection_name","index_name","ingest_data","search_query","should_cache_vector_store","embedding","number_of_results"],"frozen":false,"icon":"Couchbase","legacy":false,"metadata":{"code_hash":"70ed475a6f48","dependencies":{"dependencies":[{"name":"langchain_community","version":"0.3.21"},{"name":"lfx","version":null},{"name":"couchbase","version":null}],"total_dependencies":3},"module":"lfx.components.couchbase.couchbase.CouchbaseVectorStoreComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Search Results","group_outputs":false,"method":"search_documents","name":"search_results","selected":"Data","tool_mode":true,"types":["Data"],"value":"__UNDEFINED__"},{"allows_loop":false,"cache":true,"display_name":"DataFrame","group_outputs":false,"method":"as_dataframe","name":"dataframe","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","bucket_name":{"_input_type":"StrInput","advanced":false,"display_name":"Bucket Name","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"bucket_name","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from datetime import timedelta\n\nfrom langchain_community.vectorstores import CouchbaseVectorStore\n\nfrom lfx.base.vectorstores.model import LCVectorStoreComponent, check_cached_vector_store\nfrom lfx.helpers.data import docs_to_data\nfrom lfx.io import HandleInput, IntInput, SecretStrInput, StrInput\nfrom lfx.schema.data import Data\n\n\nclass CouchbaseVectorStoreComponent(LCVectorStoreComponent):\n display_name = \"Couchbase\"\n description = \"Couchbase Vector Store with search capabilities\"\n name = \"Couchbase\"\n icon = \"Couchbase\"\n\n inputs = [\n SecretStrInput(\n name=\"couchbase_connection_string\", display_name=\"Couchbase Cluster connection string\", required=True\n ),\n StrInput(name=\"couchbase_username\", display_name=\"Couchbase username\", required=True),\n SecretStrInput(name=\"couchbase_password\", display_name=\"Couchbase password\", required=True),\n StrInput(name=\"bucket_name\", display_name=\"Bucket Name\", required=True),\n StrInput(name=\"scope_name\", display_name=\"Scope Name\", required=True),\n StrInput(name=\"collection_name\", display_name=\"Collection Name\", required=True),\n StrInput(name=\"index_name\", display_name=\"Index Name\", required=True),\n *LCVectorStoreComponent.inputs,\n HandleInput(name=\"embedding\", display_name=\"Embedding\", input_types=[\"Embeddings\"]),\n IntInput(\n name=\"number_of_results\",\n display_name=\"Number of Results\",\n info=\"Number of results to return.\",\n value=4,\n advanced=True,\n ),\n ]\n\n @check_cached_vector_store\n def build_vector_store(self) -> CouchbaseVectorStore:\n try:\n from couchbase.auth import PasswordAuthenticator\n from couchbase.cluster import Cluster\n from couchbase.options import ClusterOptions\n except ImportError as e:\n msg = \"Failed to import Couchbase dependencies. Install it using `uv pip install langflow[couchbase] --pre`\"\n raise ImportError(msg) from e\n\n try:\n auth = PasswordAuthenticator(self.couchbase_username, self.couchbase_password)\n options = ClusterOptions(auth)\n cluster = Cluster(self.couchbase_connection_string, options)\n\n cluster.wait_until_ready(timedelta(seconds=5))\n except Exception as e:\n msg = f\"Failed to connect to Couchbase: {e}\"\n raise ValueError(msg) from e\n\n self.ingest_data = self._prepare_ingest_data()\n\n documents = []\n for _input in self.ingest_data or []:\n if isinstance(_input, Data):\n documents.append(_input.to_lc_document())\n else:\n documents.append(_input)\n\n if documents:\n couchbase_vs = CouchbaseVectorStore.from_documents(\n documents=documents,\n cluster=cluster,\n bucket_name=self.bucket_name,\n scope_name=self.scope_name,\n collection_name=self.collection_name,\n embedding=self.embedding,\n index_name=self.index_name,\n )\n\n else:\n couchbase_vs = CouchbaseVectorStore(\n cluster=cluster,\n bucket_name=self.bucket_name,\n scope_name=self.scope_name,\n collection_name=self.collection_name,\n embedding=self.embedding,\n index_name=self.index_name,\n )\n\n return couchbase_vs\n\n def search_documents(self) -> list[Data]:\n vector_store = self.build_vector_store()\n\n if self.search_query and isinstance(self.search_query, str) and self.search_query.strip():\n docs = vector_store.similarity_search(\n query=self.search_query,\n k=self.number_of_results,\n )\n\n data = docs_to_data(docs)\n self.status = data\n return data\n return []\n"},"collection_name":{"_input_type":"StrInput","advanced":false,"display_name":"Collection Name","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"collection_name","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"couchbase_connection_string":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Couchbase Cluster connection string","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"couchbase_connection_string","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""},"couchbase_password":{"_input_type":"SecretStrInput","advanced":false,"display_name":"Couchbase password","dynamic":false,"info":"","input_types":[],"load_from_db":true,"name":"couchbase_password","password":true,"placeholder":"","required":true,"show":true,"title_case":false,"type":"str","value":""},"couchbase_username":{"_input_type":"StrInput","advanced":false,"display_name":"Couchbase username","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"couchbase_username","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"embedding":{"_input_type":"HandleInput","advanced":false,"display_name":"Embedding","dynamic":false,"info":"","input_types":["Embeddings"],"list":false,"list_add_label":"Add More","name":"embedding","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"index_name":{"_input_type":"StrInput","advanced":false,"display_name":"Index Name","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"index_name","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"ingest_data":{"_input_type":"HandleInput","advanced":false,"display_name":"Ingest Data","dynamic":false,"info":"","input_types":["Data","DataFrame"],"list":true,"list_add_label":"Add More","name":"ingest_data","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"number_of_results":{"_input_type":"IntInput","advanced":true,"display_name":"Number of Results","dynamic":false,"info":"Number of results to return.","list":false,"list_add_label":"Add More","name":"number_of_results","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":4},"scope_name":{"_input_type":"StrInput","advanced":false,"display_name":"Scope Name","dynamic":false,"info":"","list":false,"list_add_label":"Add More","load_from_db":false,"name":"scope_name","placeholder":"","required":true,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":""},"search_query":{"_input_type":"QueryInput","advanced":false,"display_name":"Search Query","dynamic":false,"info":"Enter a query to run a similarity search.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"search_query","placeholder":"Enter a query...","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"query","value":""},"should_cache_vector_store":{"_input_type":"BoolInput","advanced":true,"display_name":"Cache Vector Store","dynamic":false,"info":"If True, the vector store will be cached for the current build of the component. This is useful for components that have multiple output methods and want to share the same vector store.","list":false,"list_add_label":"Add More","name":"should_cache_vector_store","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true}},"tool_mode":false}}],["crewai",{"CrewAIAgentComponent":{"base_classes":["NoneType"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Represents an agent of CrewAI.","display_name":"CrewAI Agent","documentation":"https://docs.crewai.com/how-to/LLM-Connections/","edited":false,"field_order":["role","goal","backstory","tools","llm","memory","verbose","allow_delegation","allow_code_execution","kwargs"],"frozen":false,"icon":"CrewAI","legacy":true,"metadata":{"code_hash":"a23f0923049d","dependencies":{"dependencies":[{"name":"lfx","version":null},{"name":"crewai","version":null}],"total_dependencies":2},"module":"lfx.components.crewai.crewai.CrewAIAgentComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Agent","group_outputs":false,"method":"build_output","name":"output","selected":"NoneType","tool_mode":true,"types":["NoneType"],"value":"__UNDEFINED__"}],"pinned":false,"replacement":[],"template":{"_type":"Component","allow_code_execution":{"_input_type":"BoolInput","advanced":true,"display_name":"Allow Code Execution","dynamic":false,"info":"Whether the agent is allowed to execute code.","list":false,"list_add_label":"Add More","name":"allow_code_execution","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"allow_delegation":{"_input_type":"BoolInput","advanced":false,"display_name":"Allow Delegation","dynamic":false,"info":"Whether the agent is allowed to delegate tasks to other agents.","list":false,"list_add_label":"Add More","name":"allow_delegation","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true},"backstory":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"Backstory","dynamic":false,"info":"The backstory of the agent.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"backstory","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.agents.crewai.crew import convert_llm, convert_tools\nfrom lfx.custom.custom_component.component import Component\nfrom lfx.io import BoolInput, DictInput, HandleInput, MultilineInput, Output\n\n\nclass CrewAIAgentComponent(Component):\n \"\"\"Component for creating a CrewAI agent.\n\n This component allows you to create a CrewAI agent with the specified role, goal, backstory, tools,\n and language model.\n\n Args:\n Component (Component): Base class for all components.\n\n Returns:\n Agent: CrewAI agent.\n \"\"\"\n\n display_name = \"CrewAI Agent\"\n description = \"Represents an agent of CrewAI.\"\n documentation: str = \"https://docs.crewai.com/how-to/LLM-Connections/\"\n icon = \"CrewAI\"\n legacy = True\n replacement = \"agents.Agent\"\n\n inputs = [\n MultilineInput(name=\"role\", display_name=\"Role\", info=\"The role of the agent.\"),\n MultilineInput(name=\"goal\", display_name=\"Goal\", info=\"The objective of the agent.\"),\n MultilineInput(name=\"backstory\", display_name=\"Backstory\", info=\"The backstory of the agent.\"),\n HandleInput(\n name=\"tools\",\n display_name=\"Tools\",\n input_types=[\"Tool\"],\n is_list=True,\n info=\"Tools at agents disposal\",\n value=[],\n ),\n HandleInput(\n name=\"llm\",\n display_name=\"Language Model\",\n info=\"Language model that will run the agent.\",\n input_types=[\"LanguageModel\"],\n ),\n BoolInput(\n name=\"memory\",\n display_name=\"Memory\",\n info=\"Whether the agent should have memory or not\",\n advanced=True,\n value=True,\n ),\n BoolInput(\n name=\"verbose\",\n display_name=\"Verbose\",\n advanced=True,\n value=False,\n ),\n BoolInput(\n name=\"allow_delegation\",\n display_name=\"Allow Delegation\",\n info=\"Whether the agent is allowed to delegate tasks to other agents.\",\n value=True,\n ),\n BoolInput(\n name=\"allow_code_execution\",\n display_name=\"Allow Code Execution\",\n info=\"Whether the agent is allowed to execute code.\",\n value=False,\n advanced=True,\n ),\n DictInput(\n name=\"kwargs\",\n display_name=\"kwargs\",\n info=\"kwargs of agent.\",\n is_list=True,\n advanced=True,\n ),\n ]\n\n outputs = [\n Output(display_name=\"Agent\", name=\"output\", method=\"build_output\"),\n ]\n\n def build_output(self):\n try:\n from crewai import Agent\n except ImportError as e:\n msg = \"CrewAI is not installed. Please install it with `uv pip install crewai`.\"\n raise ImportError(msg) from e\n\n kwargs = self.kwargs or {}\n\n # Define the Agent\n agent = Agent(\n role=self.role,\n goal=self.goal,\n backstory=self.backstory,\n llm=convert_llm(self.llm),\n verbose=self.verbose,\n memory=self.memory,\n tools=convert_tools(self.tools),\n allow_delegation=self.allow_delegation,\n allow_code_execution=self.allow_code_execution,\n **kwargs,\n )\n\n self.status = repr(agent)\n\n return agent\n"},"goal":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"Goal","dynamic":false,"info":"The objective of the agent.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"goal","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"kwargs":{"_input_type":"DictInput","advanced":true,"display_name":"kwargs","dynamic":false,"info":"kwargs of agent.","list":true,"list_add_label":"Add More","name":"kwargs","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"type":"dict","value":{}},"llm":{"_input_type":"HandleInput","advanced":false,"display_name":"Language Model","dynamic":false,"info":"Language model that will run the agent.","input_types":["LanguageModel"],"list":false,"list_add_label":"Add More","name":"llm","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"memory":{"_input_type":"BoolInput","advanced":true,"display_name":"Memory","dynamic":false,"info":"Whether the agent should have memory or not","list":false,"list_add_label":"Add More","name":"memory","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true},"role":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"Role","dynamic":false,"info":"The role of the agent.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"role","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"tools":{"_input_type":"HandleInput","advanced":false,"display_name":"Tools","dynamic":false,"info":"Tools at agents disposal","input_types":["Tool"],"list":true,"list_add_label":"Add More","name":"tools","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":[]},"verbose":{"_input_type":"BoolInput","advanced":true,"display_name":"Verbose","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"verbose","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false}},"tool_mode":false},"HierarchicalCrewComponent":{"base_classes":["Message"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Represents a group of agents, defining how they should collaborate and the tasks they should perform.","display_name":"Hierarchical Crew","documentation":"https://docs.crewai.com/how-to/Hierarchical/","edited":false,"field_order":["verbose","memory","use_cache","max_rpm","share_crew","function_calling_llm","agents","tasks","manager_llm","manager_agent"],"frozen":false,"icon":"CrewAI","legacy":true,"metadata":{"code_hash":"144be482cfb0","dependencies":{"dependencies":[{"name":"lfx","version":null},{"name":"crewai","version":null}],"total_dependencies":2},"module":"lfx.components.crewai.hierarchical_crew.HierarchicalCrewComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Output","group_outputs":false,"method":"build_output","name":"output","selected":"Message","tool_mode":true,"types":["Message"],"value":"__UNDEFINED__"}],"pinned":false,"replacement":[],"template":{"_type":"Component","agents":{"_input_type":"HandleInput","advanced":false,"display_name":"Agents","dynamic":false,"info":"","input_types":["Agent"],"list":true,"list_add_label":"Add More","name":"agents","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.agents.crewai.crew import BaseCrewComponent\nfrom lfx.io import HandleInput\n\n\nclass HierarchicalCrewComponent(BaseCrewComponent):\n display_name: str = \"Hierarchical Crew\"\n description: str = (\n \"Represents a group of agents, defining how they should collaborate and the tasks they should perform.\"\n )\n documentation: str = \"https://docs.crewai.com/how-to/Hierarchical/\"\n icon = \"CrewAI\"\n legacy = True\n replacement = \"agents.Agent\"\n\n inputs = [\n *BaseCrewComponent.get_base_inputs(),\n HandleInput(name=\"agents\", display_name=\"Agents\", input_types=[\"Agent\"], is_list=True),\n HandleInput(name=\"tasks\", display_name=\"Tasks\", input_types=[\"HierarchicalTask\"], is_list=True),\n HandleInput(name=\"manager_llm\", display_name=\"Manager LLM\", input_types=[\"LanguageModel\"], required=False),\n HandleInput(name=\"manager_agent\", display_name=\"Manager Agent\", input_types=[\"Agent\"], required=False),\n ]\n\n def build_crew(self):\n try:\n from crewai import Crew, Process\n except ImportError as e:\n msg = \"CrewAI is not installed. Please install it with `uv pip install crewai`.\"\n raise ImportError(msg) from e\n\n tasks, agents = self.get_tasks_and_agents()\n manager_llm = self.get_manager_llm()\n\n return Crew(\n agents=agents,\n tasks=tasks,\n process=Process.hierarchical,\n verbose=self.verbose,\n memory=self.memory,\n cache=self.use_cache,\n max_rpm=self.max_rpm,\n share_crew=self.share_crew,\n function_calling_llm=self.function_calling_llm,\n manager_agent=self.manager_agent,\n manager_llm=manager_llm,\n step_callback=self.get_step_callback(),\n task_callback=self.get_task_callback(),\n )\n"},"function_calling_llm":{"_input_type":"HandleInput","advanced":true,"display_name":"Function Calling LLM","dynamic":false,"info":"Turns the ReAct CrewAI agent into a function-calling agent","input_types":["LanguageModel"],"list":false,"list_add_label":"Add More","name":"function_calling_llm","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"manager_agent":{"_input_type":"HandleInput","advanced":false,"display_name":"Manager Agent","dynamic":false,"info":"","input_types":["Agent"],"list":false,"list_add_label":"Add More","name":"manager_agent","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"manager_llm":{"_input_type":"HandleInput","advanced":false,"display_name":"Manager LLM","dynamic":false,"info":"","input_types":["LanguageModel"],"list":false,"list_add_label":"Add More","name":"manager_llm","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"max_rpm":{"_input_type":"IntInput","advanced":true,"display_name":"Max RPM","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"max_rpm","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":100},"memory":{"_input_type":"BoolInput","advanced":true,"display_name":"Memory","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"memory","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"share_crew":{"_input_type":"BoolInput","advanced":true,"display_name":"Share Crew","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"share_crew","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"tasks":{"_input_type":"HandleInput","advanced":false,"display_name":"Tasks","dynamic":false,"info":"","input_types":["HierarchicalTask"],"list":true,"list_add_label":"Add More","name":"tasks","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"use_cache":{"_input_type":"BoolInput","advanced":true,"display_name":"Cache","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"use_cache","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true},"verbose":{"_input_type":"IntInput","advanced":true,"display_name":"Verbose","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"verbose","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":0}},"tool_mode":false},"HierarchicalTaskComponent":{"base_classes":["HierarchicalTask"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Each task must have a description, an expected output and an agent responsible for execution.","display_name":"Hierarchical Task","documentation":"","edited":false,"field_order":["task_description","expected_output","tools"],"frozen":false,"icon":"CrewAI","legacy":true,"metadata":{"code_hash":"25071652dc20","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.crewai.hierarchical_task.HierarchicalTaskComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Task","group_outputs":false,"method":"build_task","name":"task_output","selected":"HierarchicalTask","tool_mode":true,"types":["HierarchicalTask"],"value":"__UNDEFINED__"}],"pinned":false,"replacement":[],"template":{"_type":"Component","code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.agents.crewai.tasks import HierarchicalTask\nfrom lfx.custom.custom_component.component import Component\nfrom lfx.io import HandleInput, MultilineInput, Output\n\n\nclass HierarchicalTaskComponent(Component):\n display_name: str = \"Hierarchical Task\"\n description: str = \"Each task must have a description, an expected output and an agent responsible for execution.\"\n icon = \"CrewAI\"\n legacy = True\n replacement = \"agents.Agent\"\n inputs = [\n MultilineInput(\n name=\"task_description\",\n display_name=\"Description\",\n info=\"Descriptive text detailing task's purpose and execution.\",\n ),\n MultilineInput(\n name=\"expected_output\",\n display_name=\"Expected Output\",\n info=\"Clear definition of expected task outcome.\",\n ),\n HandleInput(\n name=\"tools\",\n display_name=\"Tools\",\n input_types=[\"Tool\"],\n is_list=True,\n info=\"List of tools/resources limited for task execution. Uses the Agent tools by default.\",\n required=False,\n advanced=True,\n ),\n ]\n\n outputs = [\n Output(display_name=\"Task\", name=\"task_output\", method=\"build_task\"),\n ]\n\n def build_task(self) -> HierarchicalTask:\n task = HierarchicalTask(\n description=self.task_description,\n expected_output=self.expected_output,\n tools=self.tools or [],\n )\n self.status = task\n return task\n"},"expected_output":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"Expected Output","dynamic":false,"info":"Clear definition of expected task outcome.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"expected_output","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"task_description":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"Description","dynamic":false,"info":"Descriptive text detailing task's purpose and execution.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"task_description","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"tools":{"_input_type":"HandleInput","advanced":true,"display_name":"Tools","dynamic":false,"info":"List of tools/resources limited for task execution. Uses the Agent tools by default.","input_types":["Tool"],"list":true,"list_add_label":"Add More","name":"tools","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""}},"tool_mode":false},"SequentialCrewComponent":{"base_classes":["Message"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Represents a group of agents with tasks that are executed sequentially.","display_name":"Sequential Crew","documentation":"https://docs.crewai.com/how-to/Sequential/","edited":false,"field_order":["verbose","memory","use_cache","max_rpm","share_crew","function_calling_llm","tasks"],"frozen":false,"icon":"CrewAI","legacy":true,"metadata":{"code_hash":"42e59f6d6572","dependencies":{"dependencies":[{"name":"lfx","version":null},{"name":"crewai","version":null}],"total_dependencies":2},"module":"lfx.components.crewai.sequential_crew.SequentialCrewComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Output","group_outputs":false,"method":"build_output","name":"output","selected":"Message","tool_mode":true,"types":["Message"],"value":"__UNDEFINED__"}],"pinned":false,"replacement":[],"template":{"_type":"Component","code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.agents.crewai.crew import BaseCrewComponent\nfrom lfx.io import HandleInput\nfrom lfx.schema.message import Message\n\n\nclass SequentialCrewComponent(BaseCrewComponent):\n display_name: str = \"Sequential Crew\"\n description: str = \"Represents a group of agents with tasks that are executed sequentially.\"\n documentation: str = \"https://docs.crewai.com/how-to/Sequential/\"\n icon = \"CrewAI\"\n legacy = True\n replacement = \"agents.Agent\"\n\n inputs = [\n *BaseCrewComponent.get_base_inputs(),\n HandleInput(name=\"tasks\", display_name=\"Tasks\", input_types=[\"SequentialTask\"], is_list=True),\n ]\n\n @property\n def agents(self: \"SequentialCrewComponent\") -> list:\n # Derive agents directly from linked tasks\n return [task.agent for task in self.tasks if hasattr(task, \"agent\")]\n\n def get_tasks_and_agents(self, agents_list=None) -> tuple[list, list]:\n # Use the agents property to derive agents\n if not agents_list:\n existing_agents = self.agents\n agents_list = existing_agents + (agents_list or [])\n\n return super().get_tasks_and_agents(agents_list=agents_list)\n\n def build_crew(self) -> Message:\n try:\n from crewai import Crew, Process\n except ImportError as e:\n msg = \"CrewAI is not installed. Please install it with `uv pip install crewai`.\"\n raise ImportError(msg) from e\n\n tasks, agents = self.get_tasks_and_agents()\n\n return Crew(\n agents=agents,\n tasks=tasks,\n process=Process.sequential,\n verbose=self.verbose,\n memory=self.memory,\n cache=self.use_cache,\n max_rpm=self.max_rpm,\n share_crew=self.share_crew,\n function_calling_llm=self.function_calling_llm,\n step_callback=self.get_step_callback(),\n task_callback=self.get_task_callback(),\n )\n"},"function_calling_llm":{"_input_type":"HandleInput","advanced":true,"display_name":"Function Calling LLM","dynamic":false,"info":"Turns the ReAct CrewAI agent into a function-calling agent","input_types":["LanguageModel"],"list":false,"list_add_label":"Add More","name":"function_calling_llm","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"max_rpm":{"_input_type":"IntInput","advanced":true,"display_name":"Max RPM","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"max_rpm","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":100},"memory":{"_input_type":"BoolInput","advanced":true,"display_name":"Memory","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"memory","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"share_crew":{"_input_type":"BoolInput","advanced":true,"display_name":"Share Crew","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"share_crew","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"tasks":{"_input_type":"HandleInput","advanced":false,"display_name":"Tasks","dynamic":false,"info":"","input_types":["SequentialTask"],"list":true,"list_add_label":"Add More","name":"tasks","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"use_cache":{"_input_type":"BoolInput","advanced":true,"display_name":"Cache","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"use_cache","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true},"verbose":{"_input_type":"IntInput","advanced":true,"display_name":"Verbose","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"verbose","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":0}},"tool_mode":false},"SequentialTaskAgentComponent":{"base_classes":["SequentialTask"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Creates a CrewAI Task and its associated Agent.","display_name":"Sequential Task Agent","documentation":"https://docs.crewai.com/how-to/LLM-Connections/","edited":false,"field_order":["role","goal","backstory","tools","llm","memory","verbose","allow_delegation","allow_code_execution","agent_kwargs","task_description","expected_output","async_execution","previous_task"],"frozen":false,"icon":"CrewAI","legacy":true,"metadata":{"code_hash":"0a5483ef82c3","dependencies":{"dependencies":[{"name":"lfx","version":null},{"name":"crewai","version":null}],"total_dependencies":2},"module":"lfx.components.crewai.sequential_task_agent.SequentialTaskAgentComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Sequential Task","group_outputs":false,"method":"build_agent_and_task","name":"task_output","selected":"SequentialTask","tool_mode":true,"types":["SequentialTask"],"value":"__UNDEFINED__"}],"pinned":false,"replacement":[],"template":{"_type":"Component","agent_kwargs":{"_input_type":"DictInput","advanced":true,"display_name":"Agent kwargs","dynamic":false,"info":"Additional kwargs for the agent.","list":true,"list_add_label":"Add More","name":"agent_kwargs","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"type":"dict","value":{}},"allow_code_execution":{"_input_type":"BoolInput","advanced":true,"display_name":"Allow Code Execution","dynamic":false,"info":"Whether the agent is allowed to execute code.","list":false,"list_add_label":"Add More","name":"allow_code_execution","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"allow_delegation":{"_input_type":"BoolInput","advanced":true,"display_name":"Allow Delegation","dynamic":false,"info":"Whether the agent is allowed to delegate tasks to other agents.","list":false,"list_add_label":"Add More","name":"allow_delegation","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"async_execution":{"_input_type":"BoolInput","advanced":true,"display_name":"Async Execution","dynamic":false,"info":"Boolean flag indicating asynchronous task execution.","list":false,"list_add_label":"Add More","name":"async_execution","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"backstory":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"Backstory","dynamic":false,"info":"The backstory of the agent.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"backstory","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.agents.crewai.tasks import SequentialTask\nfrom lfx.custom.custom_component.component import Component\nfrom lfx.io import BoolInput, DictInput, HandleInput, MultilineInput, Output\n\n\nclass SequentialTaskAgentComponent(Component):\n display_name = \"Sequential Task Agent\"\n description = \"Creates a CrewAI Task and its associated Agent.\"\n documentation = \"https://docs.crewai.com/how-to/LLM-Connections/\"\n icon = \"CrewAI\"\n legacy = True\n replacement = \"agents.Agent\"\n\n inputs = [\n # Agent inputs\n MultilineInput(name=\"role\", display_name=\"Role\", info=\"The role of the agent.\"),\n MultilineInput(name=\"goal\", display_name=\"Goal\", info=\"The objective of the agent.\"),\n MultilineInput(\n name=\"backstory\",\n display_name=\"Backstory\",\n info=\"The backstory of the agent.\",\n ),\n HandleInput(\n name=\"tools\",\n display_name=\"Tools\",\n input_types=[\"Tool\"],\n is_list=True,\n info=\"Tools at agent's disposal\",\n value=[],\n ),\n HandleInput(\n name=\"llm\",\n display_name=\"Language Model\",\n info=\"Language model that will run the agent.\",\n input_types=[\"LanguageModel\"],\n ),\n BoolInput(\n name=\"memory\",\n display_name=\"Memory\",\n info=\"Whether the agent should have memory or not\",\n advanced=True,\n value=True,\n ),\n BoolInput(\n name=\"verbose\",\n display_name=\"Verbose\",\n advanced=True,\n value=True,\n ),\n BoolInput(\n name=\"allow_delegation\",\n display_name=\"Allow Delegation\",\n info=\"Whether the agent is allowed to delegate tasks to other agents.\",\n value=False,\n advanced=True,\n ),\n BoolInput(\n name=\"allow_code_execution\",\n display_name=\"Allow Code Execution\",\n info=\"Whether the agent is allowed to execute code.\",\n value=False,\n advanced=True,\n ),\n DictInput(\n name=\"agent_kwargs\",\n display_name=\"Agent kwargs\",\n info=\"Additional kwargs for the agent.\",\n is_list=True,\n advanced=True,\n ),\n # Task inputs\n MultilineInput(\n name=\"task_description\",\n display_name=\"Task Description\",\n info=\"Descriptive text detailing task's purpose and execution.\",\n ),\n MultilineInput(\n name=\"expected_output\",\n display_name=\"Expected Task Output\",\n info=\"Clear definition of expected task outcome.\",\n ),\n BoolInput(\n name=\"async_execution\",\n display_name=\"Async Execution\",\n value=False,\n advanced=True,\n info=\"Boolean flag indicating asynchronous task execution.\",\n ),\n # Chaining input\n HandleInput(\n name=\"previous_task\",\n display_name=\"Previous Task\",\n input_types=[\"SequentialTask\"],\n info=\"The previous task in the sequence (for chaining).\",\n required=False,\n ),\n ]\n\n outputs = [\n Output(\n display_name=\"Sequential Task\",\n name=\"task_output\",\n method=\"build_agent_and_task\",\n ),\n ]\n\n def build_agent_and_task(self) -> list[SequentialTask]:\n try:\n from crewai import Agent, Task\n except ImportError as e:\n msg = \"CrewAI is not installed. Please install it with `uv pip install crewai`.\"\n raise ImportError(msg) from e\n\n # Build the agent\n agent_kwargs = self.agent_kwargs or {}\n agent = Agent(\n role=self.role,\n goal=self.goal,\n backstory=self.backstory,\n llm=self.llm,\n verbose=self.verbose,\n memory=self.memory,\n tools=self.tools or [],\n allow_delegation=self.allow_delegation,\n allow_code_execution=self.allow_code_execution,\n **agent_kwargs,\n )\n\n # Build the task\n task = Task(\n description=self.task_description,\n expected_output=self.expected_output,\n agent=agent,\n async_execution=self.async_execution,\n )\n\n # If there's a previous task, create a list of tasks\n if self.previous_task:\n tasks = [*self.previous_task, task] if isinstance(self.previous_task, list) else [self.previous_task, task]\n else:\n tasks = [task]\n\n self.status = f\"Agent: {agent!r}\\nTask: {task!r}\"\n return tasks\n"},"expected_output":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"Expected Task Output","dynamic":false,"info":"Clear definition of expected task outcome.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"expected_output","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"goal":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"Goal","dynamic":false,"info":"The objective of the agent.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"goal","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"llm":{"_input_type":"HandleInput","advanced":false,"display_name":"Language Model","dynamic":false,"info":"Language model that will run the agent.","input_types":["LanguageModel"],"list":false,"list_add_label":"Add More","name":"llm","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"memory":{"_input_type":"BoolInput","advanced":true,"display_name":"Memory","dynamic":false,"info":"Whether the agent should have memory or not","list":false,"list_add_label":"Add More","name":"memory","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true},"previous_task":{"_input_type":"HandleInput","advanced":false,"display_name":"Previous Task","dynamic":false,"info":"The previous task in the sequence (for chaining).","input_types":["SequentialTask"],"list":false,"list_add_label":"Add More","name":"previous_task","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"role":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"Role","dynamic":false,"info":"The role of the agent.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"role","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"task_description":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"Task Description","dynamic":false,"info":"Descriptive text detailing task's purpose and execution.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"task_description","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"tools":{"_input_type":"HandleInput","advanced":false,"display_name":"Tools","dynamic":false,"info":"Tools at agent's disposal","input_types":["Tool"],"list":true,"list_add_label":"Add More","name":"tools","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":[]},"verbose":{"_input_type":"BoolInput","advanced":true,"display_name":"Verbose","dynamic":false,"info":"","list":false,"list_add_label":"Add More","name":"verbose","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true}},"tool_mode":false},"SequentialTaskComponent":{"base_classes":["SequentialTask"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Each task must have a description, an expected output and an agent responsible for execution.","display_name":"Sequential Task","documentation":"","edited":false,"field_order":["task_description","expected_output","tools","agent","task","async_execution"],"frozen":false,"icon":"CrewAI","legacy":true,"metadata":{"code_hash":"b1f17b8fcc5c","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.crewai.sequential_task.SequentialTaskComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Task","group_outputs":false,"method":"build_task","name":"task_output","selected":"SequentialTask","tool_mode":true,"types":["SequentialTask"],"value":"__UNDEFINED__"}],"pinned":false,"replacement":[],"template":{"_type":"Component","agent":{"_input_type":"HandleInput","advanced":false,"display_name":"Agent","dynamic":false,"info":"CrewAI Agent that will perform the task","input_types":["Agent"],"list":false,"list_add_label":"Add More","name":"agent","placeholder":"","required":true,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"async_execution":{"_input_type":"BoolInput","advanced":true,"display_name":"Async Execution","dynamic":false,"info":"Boolean flag indicating asynchronous task execution.","list":false,"list_add_label":"Add More","name":"async_execution","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.agents.crewai.tasks import SequentialTask\nfrom lfx.custom.custom_component.component import Component\nfrom lfx.io import BoolInput, HandleInput, MultilineInput, Output\n\n\nclass SequentialTaskComponent(Component):\n display_name: str = \"Sequential Task\"\n description: str = \"Each task must have a description, an expected output and an agent responsible for execution.\"\n icon = \"CrewAI\"\n legacy = True\n replacement = \"agents.Agent\"\n inputs = [\n MultilineInput(\n name=\"task_description\",\n display_name=\"Description\",\n info=\"Descriptive text detailing task's purpose and execution.\",\n ),\n MultilineInput(\n name=\"expected_output\",\n display_name=\"Expected Output\",\n info=\"Clear definition of expected task outcome.\",\n ),\n HandleInput(\n name=\"tools\",\n display_name=\"Tools\",\n input_types=[\"Tool\"],\n is_list=True,\n info=\"List of tools/resources limited for task execution. Uses the Agent tools by default.\",\n required=False,\n advanced=True,\n ),\n HandleInput(\n name=\"agent\",\n display_name=\"Agent\",\n input_types=[\"Agent\"],\n info=\"CrewAI Agent that will perform the task\",\n required=True,\n ),\n HandleInput(\n name=\"task\",\n display_name=\"Task\",\n input_types=[\"SequentialTask\"],\n info=\"CrewAI Task that will perform the task\",\n ),\n BoolInput(\n name=\"async_execution\",\n display_name=\"Async Execution\",\n value=True,\n advanced=True,\n info=\"Boolean flag indicating asynchronous task execution.\",\n ),\n ]\n\n outputs = [\n Output(display_name=\"Task\", name=\"task_output\", method=\"build_task\"),\n ]\n\n def build_task(self) -> list[SequentialTask]:\n tasks: list[SequentialTask] = []\n task = SequentialTask(\n description=self.task_description,\n expected_output=self.expected_output,\n tools=self.agent.tools,\n async_execution=False,\n agent=self.agent,\n )\n tasks.append(task)\n self.status = task\n if self.task:\n if isinstance(self.task, list) and all(isinstance(task_item, SequentialTask) for task_item in self.task):\n tasks = self.task + tasks\n elif isinstance(self.task, SequentialTask):\n tasks = [self.task, *tasks]\n return tasks\n"},"expected_output":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"Expected Output","dynamic":false,"info":"Clear definition of expected task outcome.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"expected_output","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"task":{"_input_type":"HandleInput","advanced":false,"display_name":"Task","dynamic":false,"info":"CrewAI Task that will perform the task","input_types":["SequentialTask"],"list":false,"list_add_label":"Add More","name":"task","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""},"task_description":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"Description","dynamic":false,"info":"Descriptive text detailing task's purpose and execution.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"task_description","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"tools":{"_input_type":"HandleInput","advanced":true,"display_name":"Tools","dynamic":false,"info":"List of tools/resources limited for task execution. Uses the Agent tools by default.","input_types":["Tool"],"list":true,"list_add_label":"Add More","name":"tools","placeholder":"","required":false,"show":true,"title_case":false,"trace_as_metadata":true,"type":"other","value":""}},"tool_mode":false}}],["custom_component",{"CustomComponent":{"base_classes":["Data"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Use as a template to create your own component.","display_name":"Custom Component","documentation":"https://docs.langflow.org/components-custom-components","edited":false,"field_order":["input_value"],"frozen":false,"icon":"code","legacy":false,"metadata":{"code_hash":"d50a68a6fa57","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.custom_component.custom_component.CustomComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Output","group_outputs":false,"method":"build_output","name":"output","selected":"Data","tool_mode":true,"types":["Data"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"# from lfx.field_typing import Data\nfrom lfx.custom.custom_component.component import Component\nfrom lfx.io import MessageTextInput, Output\nfrom lfx.schema.data import Data\n\n\nclass CustomComponent(Component):\n display_name = \"Custom Component\"\n description = \"Use as a template to create your own component.\"\n documentation: str = \"https://docs.langflow.org/components-custom-components\"\n icon = \"code\"\n name = \"CustomComponent\"\n\n inputs = [\n MessageTextInput(\n name=\"input_value\",\n display_name=\"Input Value\",\n info=\"This is a custom component Input\",\n value=\"Hello, World!\",\n tool_mode=True,\n ),\n ]\n\n outputs = [\n Output(display_name=\"Output\", name=\"output\", method=\"build_output\"),\n ]\n\n def build_output(self) -> Data:\n data = Data(value=self.input_value)\n self.status = data\n return data\n"},"input_value":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Input Value","dynamic":false,"info":"This is a custom component Input","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"input_value","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"Hello, World!"}},"tool_mode":false}}],["data",{"APIRequest":{"base_classes":["Data"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Make HTTP requests using URL or cURL commands.","display_name":"API Request","documentation":"https://docs.langflow.org/components-data#api-request","edited":false,"field_order":["url_input","curl_input","method","mode","query_params","body","headers","timeout","follow_redirects","save_to_file","include_httpx_metadata"],"frozen":false,"icon":"Globe","legacy":false,"metadata":{"code_hash":"80a56d261133","dependencies":{"dependencies":[{"name":"aiofiles","version":"24.1.0"},{"name":"httpx","version":"0.28.1"},{"name":"validators","version":"0.34.0"},{"name":"lfx","version":null}],"total_dependencies":4},"module":"lfx.components.data.api_request.APIRequestComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"API Response","group_outputs":false,"method":"make_api_request","name":"data","selected":"Data","tool_mode":true,"types":["Data"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","body":{"_input_type":"TableInput","advanced":true,"display_name":"Body","dynamic":false,"info":"The body to send with the request as a dictionary (for POST, PATCH, PUT).","input_types":["Data"],"is_list":true,"list_add_label":"Add More","name":"body","placeholder":"","real_time_refresh":true,"required":false,"show":true,"table_icon":"Table","table_schema":[{"description":"Parameter name","display_name":"Key","name":"key","type":"str"},{"description":"Parameter value","display_name":"Value","name":"value"}],"title_case":false,"tool_mode":false,"trace_as_metadata":true,"trigger_icon":"Table","trigger_text":"Open table","type":"table","value":[]},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"import json\nimport re\nimport tempfile\nfrom datetime import datetime, timezone\nfrom pathlib import Path\nfrom typing import Any\nfrom urllib.parse import parse_qsl, urlencode, urlparse, urlunparse\n\nimport aiofiles\nimport aiofiles.os as aiofiles_os\nimport httpx\nimport validators\n\nfrom lfx.base.curl.parse import parse_context\nfrom lfx.custom.custom_component.component import Component\nfrom lfx.inputs.inputs import TabInput\nfrom lfx.io import (\n BoolInput,\n DataInput,\n DropdownInput,\n IntInput,\n MessageTextInput,\n MultilineInput,\n Output,\n TableInput,\n)\nfrom lfx.schema.data import Data\nfrom lfx.schema.dotdict import dotdict\nfrom lfx.utils.component_utils import set_current_fields, set_field_advanced, set_field_display\n\n# Define fields for each mode\nMODE_FIELDS = {\n \"URL\": [\n \"url_input\",\n \"method\",\n ],\n \"cURL\": [\"curl_input\"],\n}\n\n# Fields that should always be visible\nDEFAULT_FIELDS = [\"mode\"]\n\n\nclass APIRequestComponent(Component):\n display_name = \"API Request\"\n description = \"Make HTTP requests using URL or cURL commands.\"\n documentation: str = \"https://docs.langflow.org/components-data#api-request\"\n icon = \"Globe\"\n name = \"APIRequest\"\n\n inputs = [\n MessageTextInput(\n name=\"url_input\",\n display_name=\"URL\",\n info=\"Enter the URL for the request.\",\n advanced=False,\n tool_mode=True,\n ),\n MultilineInput(\n name=\"curl_input\",\n display_name=\"cURL\",\n info=(\n \"Paste a curl command to populate the fields. \"\n \"This will fill in the dictionary fields for headers and body.\"\n ),\n real_time_refresh=True,\n tool_mode=True,\n advanced=True,\n show=False,\n ),\n DropdownInput(\n name=\"method\",\n display_name=\"Method\",\n options=[\"GET\", \"POST\", \"PATCH\", \"PUT\", \"DELETE\"],\n value=\"GET\",\n info=\"The HTTP method to use.\",\n real_time_refresh=True,\n ),\n TabInput(\n name=\"mode\",\n display_name=\"Mode\",\n options=[\"URL\", \"cURL\"],\n value=\"URL\",\n info=\"Enable cURL mode to populate fields from a cURL command.\",\n real_time_refresh=True,\n ),\n DataInput(\n name=\"query_params\",\n display_name=\"Query Parameters\",\n info=\"The query parameters to append to the URL.\",\n advanced=True,\n ),\n TableInput(\n name=\"body\",\n display_name=\"Body\",\n info=\"The body to send with the request as a dictionary (for POST, PATCH, PUT).\",\n table_schema=[\n {\n \"name\": \"key\",\n \"display_name\": \"Key\",\n \"type\": \"str\",\n \"description\": \"Parameter name\",\n },\n {\n \"name\": \"value\",\n \"display_name\": \"Value\",\n \"description\": \"Parameter value\",\n },\n ],\n value=[],\n input_types=[\"Data\"],\n advanced=True,\n real_time_refresh=True,\n ),\n TableInput(\n name=\"headers\",\n display_name=\"Headers\",\n info=\"The headers to send with the request\",\n table_schema=[\n {\n \"name\": \"key\",\n \"display_name\": \"Header\",\n \"type\": \"str\",\n \"description\": \"Header name\",\n },\n {\n \"name\": \"value\",\n \"display_name\": \"Value\",\n \"type\": \"str\",\n \"description\": \"Header value\",\n },\n ],\n value=[{\"key\": \"User-Agent\", \"value\": \"Langflow/1.0\"}],\n advanced=True,\n input_types=[\"Data\"],\n real_time_refresh=True,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n value=30,\n info=\"The timeout to use for the request.\",\n advanced=True,\n ),\n BoolInput(\n name=\"follow_redirects\",\n display_name=\"Follow Redirects\",\n value=True,\n info=\"Whether to follow http redirects.\",\n advanced=True,\n ),\n BoolInput(\n name=\"save_to_file\",\n display_name=\"Save to File\",\n value=False,\n info=\"Save the API response to a temporary file\",\n advanced=True,\n ),\n BoolInput(\n name=\"include_httpx_metadata\",\n display_name=\"Include HTTPx Metadata\",\n value=False,\n info=(\n \"Include properties such as headers, status_code, response_headers, \"\n \"and redirection_history in the output.\"\n ),\n advanced=True,\n ),\n ]\n\n outputs = [\n Output(display_name=\"API Response\", name=\"data\", method=\"make_api_request\"),\n ]\n\n def _parse_json_value(self, value: Any) -> Any:\n \"\"\"Parse a value that might be a JSON string.\"\"\"\n if not isinstance(value, str):\n return value\n\n try:\n parsed = json.loads(value)\n except json.JSONDecodeError:\n return value\n else:\n return parsed\n\n def _process_body(self, body: Any) -> dict:\n \"\"\"Process the body input into a valid dictionary.\"\"\"\n if body is None:\n return {}\n if hasattr(body, \"data\"):\n body = body.data\n if isinstance(body, dict):\n return self._process_dict_body(body)\n if isinstance(body, str):\n return self._process_string_body(body)\n if isinstance(body, list):\n return self._process_list_body(body)\n return {}\n\n def _process_dict_body(self, body: dict) -> dict:\n \"\"\"Process dictionary body by parsing JSON values.\"\"\"\n return {k: self._parse_json_value(v) for k, v in body.items()}\n\n def _process_string_body(self, body: str) -> dict:\n \"\"\"Process string body by attempting JSON parse.\"\"\"\n try:\n return self._process_body(json.loads(body))\n except json.JSONDecodeError:\n return {\"data\": body}\n\n def _process_list_body(self, body: list) -> dict:\n \"\"\"Process list body by converting to key-value dictionary.\"\"\"\n processed_dict = {}\n try:\n for item in body:\n # Unwrap Data objects\n current_item = item\n if hasattr(item, \"data\"):\n unwrapped_data = item.data\n # If the unwrapped data is a dict but not key-value format, use it directly\n if isinstance(unwrapped_data, dict) and not self._is_valid_key_value_item(unwrapped_data):\n return unwrapped_data\n current_item = unwrapped_data\n if not self._is_valid_key_value_item(current_item):\n continue\n key = current_item[\"key\"]\n value = self._parse_json_value(current_item[\"value\"])\n processed_dict[key] = value\n except (KeyError, TypeError, ValueError) as e:\n self.log(f\"Failed to process body list: {e}\")\n return {}\n return processed_dict\n\n def _is_valid_key_value_item(self, item: Any) -> bool:\n \"\"\"Check if an item is a valid key-value dictionary.\"\"\"\n return isinstance(item, dict) and \"key\" in item and \"value\" in item\n\n def parse_curl(self, curl: str, build_config: dotdict) -> dotdict:\n \"\"\"Parse a cURL command and update build configuration.\"\"\"\n try:\n parsed = parse_context(curl)\n\n # Update basic configuration\n url = parsed.url\n # Normalize URL before setting it\n url = self._normalize_url(url)\n\n build_config[\"url_input\"][\"value\"] = url\n build_config[\"method\"][\"value\"] = parsed.method.upper()\n\n # Process headers\n headers_list = [{\"key\": k, \"value\": v} for k, v in parsed.headers.items()]\n build_config[\"headers\"][\"value\"] = headers_list\n\n # Process body data\n if not parsed.data:\n build_config[\"body\"][\"value\"] = []\n elif parsed.data:\n try:\n json_data = json.loads(parsed.data)\n if isinstance(json_data, dict):\n body_list = [\n {\"key\": k, \"value\": json.dumps(v) if isinstance(v, dict | list) else str(v)}\n for k, v in json_data.items()\n ]\n build_config[\"body\"][\"value\"] = body_list\n else:\n build_config[\"body\"][\"value\"] = [{\"key\": \"data\", \"value\": json.dumps(json_data)}]\n except json.JSONDecodeError:\n build_config[\"body\"][\"value\"] = [{\"key\": \"data\", \"value\": parsed.data}]\n\n except Exception as exc:\n msg = f\"Error parsing curl: {exc}\"\n self.log(msg)\n raise ValueError(msg) from exc\n\n return build_config\n\n def _normalize_url(self, url: str) -> str:\n \"\"\"Normalize URL by adding https:// if no protocol is specified.\"\"\"\n if not url or not isinstance(url, str):\n msg = \"URL cannot be empty\"\n raise ValueError(msg)\n\n url = url.strip()\n if url.startswith((\"http://\", \"https://\")):\n return url\n return f\"https://{url}\"\n\n async def make_request(\n self,\n client: httpx.AsyncClient,\n method: str,\n url: str,\n headers: dict | None = None,\n body: Any = None,\n timeout: int = 5,\n *,\n follow_redirects: bool = True,\n save_to_file: bool = False,\n include_httpx_metadata: bool = False,\n ) -> Data:\n method = method.upper()\n if method not in {\"GET\", \"POST\", \"PATCH\", \"PUT\", \"DELETE\"}:\n msg = f\"Unsupported method: {method}\"\n raise ValueError(msg)\n\n processed_body = self._process_body(body)\n redirection_history = []\n\n try:\n # Prepare request parameters\n request_params = {\n \"method\": method,\n \"url\": url,\n \"headers\": headers,\n \"json\": processed_body,\n \"timeout\": timeout,\n \"follow_redirects\": follow_redirects,\n }\n response = await client.request(**request_params)\n\n redirection_history = [\n {\n \"url\": redirect.headers.get(\"Location\", str(redirect.url)),\n \"status_code\": redirect.status_code,\n }\n for redirect in response.history\n ]\n\n is_binary, file_path = await self._response_info(response, with_file_path=save_to_file)\n response_headers = self._headers_to_dict(response.headers)\n\n # Base metadata\n metadata = {\n \"source\": url,\n \"status_code\": response.status_code,\n \"response_headers\": response_headers,\n }\n\n if redirection_history:\n metadata[\"redirection_history\"] = redirection_history\n\n if save_to_file:\n mode = \"wb\" if is_binary else \"w\"\n encoding = response.encoding if mode == \"w\" else None\n if file_path:\n await aiofiles_os.makedirs(file_path.parent, exist_ok=True)\n if is_binary:\n async with aiofiles.open(file_path, \"wb\") as f:\n await f.write(response.content)\n await f.flush()\n else:\n async with aiofiles.open(file_path, \"w\", encoding=encoding) as f:\n await f.write(response.text)\n await f.flush()\n metadata[\"file_path\"] = str(file_path)\n\n if include_httpx_metadata:\n metadata.update({\"headers\": headers})\n return Data(data=metadata)\n\n # Handle response content\n if is_binary:\n result = response.content\n else:\n try:\n result = response.json()\n except json.JSONDecodeError:\n self.log(\"Failed to decode JSON response\")\n result = response.text.encode(\"utf-8\")\n\n metadata[\"result\"] = result\n\n if include_httpx_metadata:\n metadata.update({\"headers\": headers})\n\n return Data(data=metadata)\n except (httpx.HTTPError, httpx.RequestError, httpx.TimeoutException) as exc:\n self.log(f\"Error making request to {url}\")\n return Data(\n data={\n \"source\": url,\n \"headers\": headers,\n \"status_code\": 500,\n \"error\": str(exc),\n **({\"redirection_history\": redirection_history} if redirection_history else {}),\n },\n )\n\n def add_query_params(self, url: str, params: dict) -> str:\n \"\"\"Add query parameters to URL efficiently.\"\"\"\n if not params:\n return url\n url_parts = list(urlparse(url))\n query = dict(parse_qsl(url_parts[4]))\n query.update(params)\n url_parts[4] = urlencode(query)\n return urlunparse(url_parts)\n\n def _headers_to_dict(self, headers: httpx.Headers) -> dict[str, str]:\n \"\"\"Convert HTTP headers to a dictionary with lowercased keys.\"\"\"\n return {k.lower(): v for k, v in headers.items()}\n\n def _process_headers(self, headers: Any) -> dict:\n \"\"\"Process the headers input into a valid dictionary.\"\"\"\n if headers is None:\n return {}\n if isinstance(headers, dict):\n return headers\n if isinstance(headers, list):\n return {item[\"key\"]: item[\"value\"] for item in headers if self._is_valid_key_value_item(item)}\n return {}\n\n async def make_api_request(self) -> Data:\n \"\"\"Make HTTP request with optimized parameter handling.\"\"\"\n method = self.method\n url = self.url_input.strip() if isinstance(self.url_input, str) else \"\"\n headers = self.headers or {}\n body = self.body or {}\n timeout = self.timeout\n follow_redirects = self.follow_redirects\n save_to_file = self.save_to_file\n include_httpx_metadata = self.include_httpx_metadata\n\n # if self.mode == \"cURL\" and self.curl_input:\n # self._build_config = self.parse_curl(self.curl_input, dotdict())\n # # After parsing curl, get the normalized URL\n # url = self._build_config[\"url_input\"][\"value\"]\n\n # Normalize URL before validation\n url = self._normalize_url(url)\n\n # Validate URL\n if not validators.url(url):\n msg = f\"Invalid URL provided: {url}\"\n raise ValueError(msg)\n\n # Process query parameters\n if isinstance(self.query_params, str):\n query_params = dict(parse_qsl(self.query_params))\n else:\n query_params = self.query_params.data if self.query_params else {}\n\n # Process headers and body\n headers = self._process_headers(headers)\n body = self._process_body(body)\n url = self.add_query_params(url, query_params)\n\n async with httpx.AsyncClient() as client:\n result = await self.make_request(\n client,\n method,\n url,\n headers,\n body,\n timeout,\n follow_redirects=follow_redirects,\n save_to_file=save_to_file,\n include_httpx_metadata=include_httpx_metadata,\n )\n self.status = result\n return result\n\n def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None) -> dotdict:\n \"\"\"Update the build config based on the selected mode.\"\"\"\n if field_name != \"mode\":\n if field_name == \"curl_input\" and self.mode == \"cURL\" and self.curl_input:\n return self.parse_curl(self.curl_input, build_config)\n return build_config\n\n # print(f\"Current mode: {field_value}\")\n if field_value == \"cURL\":\n set_field_display(build_config, \"curl_input\", value=True)\n if build_config[\"curl_input\"][\"value\"]:\n build_config = self.parse_curl(build_config[\"curl_input\"][\"value\"], build_config)\n else:\n set_field_display(build_config, \"curl_input\", value=False)\n\n return set_current_fields(\n build_config=build_config,\n action_fields=MODE_FIELDS,\n selected_action=field_value,\n default_fields=DEFAULT_FIELDS,\n func=set_field_advanced,\n default_value=True,\n )\n\n async def _response_info(\n self, response: httpx.Response, *, with_file_path: bool = False\n ) -> tuple[bool, Path | None]:\n \"\"\"Determine the file path and whether the response content is binary.\n\n Args:\n response (Response): The HTTP response object.\n with_file_path (bool): Whether to save the response content to a file.\n\n Returns:\n Tuple[bool, Path | None]:\n A tuple containing a boolean indicating if the content is binary and the full file path (if applicable).\n \"\"\"\n content_type = response.headers.get(\"Content-Type\", \"\")\n is_binary = \"application/octet-stream\" in content_type or \"application/binary\" in content_type\n\n if not with_file_path:\n return is_binary, None\n\n component_temp_dir = Path(tempfile.gettempdir()) / self.__class__.__name__\n\n # Create directory asynchronously\n await aiofiles_os.makedirs(component_temp_dir, exist_ok=True)\n\n filename = None\n if \"Content-Disposition\" in response.headers:\n content_disposition = response.headers[\"Content-Disposition\"]\n filename_match = re.search(r'filename=\"(.+?)\"', content_disposition)\n if filename_match:\n extracted_filename = filename_match.group(1)\n filename = extracted_filename\n\n # Step 3: Infer file extension or use part of the request URL if no filename\n if not filename:\n # Extract the last segment of the URL path\n url_path = urlparse(str(response.request.url) if response.request else \"\").path\n base_name = Path(url_path).name # Get the last segment of the path\n if not base_name: # If the path ends with a slash or is empty\n base_name = \"response\"\n\n # Infer file extension\n content_type_to_extension = {\n \"text/plain\": \".txt\",\n \"application/json\": \".json\",\n \"image/jpeg\": \".jpg\",\n \"image/png\": \".png\",\n \"application/octet-stream\": \".bin\",\n }\n extension = content_type_to_extension.get(content_type, \".bin\" if is_binary else \".txt\")\n filename = f\"{base_name}{extension}\"\n\n # Step 4: Define the full file path\n file_path = component_temp_dir / filename\n\n # Step 5: Check if file exists asynchronously and handle accordingly\n try:\n # Try to create the file exclusively (x mode) to check existence\n async with aiofiles.open(file_path, \"x\") as _:\n pass # File created successfully, we can use this path\n except FileExistsError:\n # If file exists, append a timestamp to the filename\n timestamp = datetime.now(timezone.utc).strftime(\"%Y%m%d%H%M%S%f\")\n file_path = component_temp_dir / f\"{timestamp}-{filename}\"\n\n return is_binary, file_path\n"},"curl_input":{"_input_type":"MultilineInput","advanced":true,"copy_field":false,"display_name":"cURL","dynamic":false,"info":"Paste a curl command to populate the fields. This will fill in the dictionary fields for headers and body.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"curl_input","placeholder":"","real_time_refresh":true,"required":false,"show":false,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"follow_redirects":{"_input_type":"BoolInput","advanced":true,"display_name":"Follow Redirects","dynamic":false,"info":"Whether to follow http redirects.","list":false,"list_add_label":"Add More","name":"follow_redirects","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":true},"headers":{"_input_type":"TableInput","advanced":true,"display_name":"Headers","dynamic":false,"info":"The headers to send with the request","input_types":["Data"],"is_list":true,"list_add_label":"Add More","name":"headers","placeholder":"","real_time_refresh":true,"required":false,"show":true,"table_icon":"Table","table_schema":[{"description":"Header name","display_name":"Header","name":"key","type":"str"},{"description":"Header value","display_name":"Value","name":"value","type":"str"}],"title_case":false,"tool_mode":false,"trace_as_metadata":true,"trigger_icon":"Table","trigger_text":"Open table","type":"table","value":[{"key":"User-Agent","value":"Langflow/1.0"}]},"include_httpx_metadata":{"_input_type":"BoolInput","advanced":true,"display_name":"Include HTTPx Metadata","dynamic":false,"info":"Include properties such as headers, status_code, response_headers, and redirection_history in the output.","list":false,"list_add_label":"Add More","name":"include_httpx_metadata","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"method":{"_input_type":"DropdownInput","advanced":false,"combobox":false,"dialog_inputs":{},"display_name":"Method","dynamic":false,"external_options":{},"info":"The HTTP method to use.","name":"method","options":["GET","POST","PATCH","PUT","DELETE"],"options_metadata":[],"placeholder":"","real_time_refresh":true,"required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":"GET"},"mode":{"_input_type":"TabInput","advanced":false,"display_name":"Mode","dynamic":false,"info":"Enable cURL mode to populate fields from a cURL command.","name":"mode","options":["URL","cURL"],"placeholder":"","real_time_refresh":true,"required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"tab","value":"URL"},"query_params":{"_input_type":"DataInput","advanced":true,"display_name":"Query Parameters","dynamic":false,"info":"The query parameters to append to the URL.","input_types":["Data"],"list":false,"list_add_label":"Add More","name":"query_params","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"other","value":""},"save_to_file":{"_input_type":"BoolInput","advanced":true,"display_name":"Save to File","dynamic":false,"info":"Save the API response to a temporary file","list":false,"list_add_label":"Add More","name":"save_to_file","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"timeout":{"_input_type":"IntInput","advanced":true,"display_name":"Timeout","dynamic":false,"info":"The timeout to use for the request.","list":false,"list_add_label":"Add More","name":"timeout","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":30},"url_input":{"_input_type":"MessageTextInput","advanced":false,"display_name":"URL","dynamic":false,"info":"Enter the URL for the request.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"url_input","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""}},"tool_mode":false},"CSVtoData":{"base_classes":["Data"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Load a CSV file, CSV from a file path, or a valid CSV string and convert it to a list of Data","display_name":"Load CSV","documentation":"","edited":false,"field_order":["csv_file","csv_path","csv_string","text_key"],"frozen":false,"icon":"file-spreadsheet","legacy":true,"metadata":{"code_hash":"36c35ef2b65d","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.data.csv_to_data.CSVToDataComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Data List","group_outputs":false,"method":"load_csv_to_data","name":"data_list","selected":"Data","tool_mode":true,"types":["Data"],"value":"__UNDEFINED__"}],"pinned":false,"replacement":["data.File"],"template":{"_type":"Component","code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"import csv\nimport io\nfrom pathlib import Path\n\nfrom lfx.custom.custom_component.component import Component\nfrom lfx.io import FileInput, MessageTextInput, MultilineInput, Output\nfrom lfx.schema.data import Data\n\n\nclass CSVToDataComponent(Component):\n display_name = \"Load CSV\"\n description = \"Load a CSV file, CSV from a file path, or a valid CSV string and convert it to a list of Data\"\n icon = \"file-spreadsheet\"\n name = \"CSVtoData\"\n legacy = True\n replacement = [\"data.File\"]\n\n inputs = [\n FileInput(\n name=\"csv_file\",\n display_name=\"CSV File\",\n file_types=[\"csv\"],\n info=\"Upload a CSV file to convert to a list of Data objects\",\n ),\n MessageTextInput(\n name=\"csv_path\",\n display_name=\"CSV File Path\",\n info=\"Provide the path to the CSV file as pure text\",\n ),\n MultilineInput(\n name=\"csv_string\",\n display_name=\"CSV String\",\n info=\"Paste a CSV string directly to convert to a list of Data objects\",\n ),\n MessageTextInput(\n name=\"text_key\",\n display_name=\"Text Key\",\n info=\"The key to use for the text column. Defaults to 'text'.\",\n value=\"text\",\n ),\n ]\n\n outputs = [\n Output(name=\"data_list\", display_name=\"Data List\", method=\"load_csv_to_data\"),\n ]\n\n def load_csv_to_data(self) -> list[Data]:\n if sum(bool(field) for field in [self.csv_file, self.csv_path, self.csv_string]) != 1:\n msg = \"Please provide exactly one of: CSV file, file path, or CSV string.\"\n raise ValueError(msg)\n\n csv_data = None\n try:\n if self.csv_file:\n resolved_path = self.resolve_path(self.csv_file)\n file_path = Path(resolved_path)\n if file_path.suffix.lower() != \".csv\":\n self.status = \"The provided file must be a CSV file.\"\n else:\n with file_path.open(newline=\"\", encoding=\"utf-8\") as csvfile:\n csv_data = csvfile.read()\n\n elif self.csv_path:\n file_path = Path(self.csv_path)\n if file_path.suffix.lower() != \".csv\":\n self.status = \"The provided file must be a CSV file.\"\n else:\n with file_path.open(newline=\"\", encoding=\"utf-8\") as csvfile:\n csv_data = csvfile.read()\n\n else:\n csv_data = self.csv_string\n\n if csv_data:\n csv_reader = csv.DictReader(io.StringIO(csv_data))\n result = [Data(data=row, text_key=self.text_key) for row in csv_reader]\n\n if not result:\n self.status = \"The CSV data is empty.\"\n return []\n\n self.status = result\n return result\n\n except csv.Error as e:\n error_message = f\"CSV parsing error: {e}\"\n self.status = error_message\n raise ValueError(error_message) from e\n\n except Exception as e:\n error_message = f\"An error occurred: {e}\"\n self.status = error_message\n raise ValueError(error_message) from e\n\n # An error occurred\n raise ValueError(self.status)\n"},"csv_file":{"_input_type":"FileInput","advanced":false,"display_name":"CSV File","dynamic":false,"fileTypes":["csv"],"file_path":"","info":"Upload a CSV file to convert to a list of Data objects","list":false,"list_add_label":"Add More","name":"csv_file","placeholder":"","required":false,"show":true,"temp_file":false,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"file","value":""},"csv_path":{"_input_type":"MessageTextInput","advanced":false,"display_name":"CSV File Path","dynamic":false,"info":"Provide the path to the CSV file as pure text","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"csv_path","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"csv_string":{"_input_type":"MultilineInput","advanced":false,"copy_field":false,"display_name":"CSV String","dynamic":false,"info":"Paste a CSV string directly to convert to a list of Data objects","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"multiline":true,"name":"csv_string","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":""},"text_key":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Text Key","dynamic":false,"info":"The key to use for the text column. Defaults to 'text'.","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"text_key","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"text"}},"tool_mode":false},"Directory":{"base_classes":["DataFrame"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Recursively load files from a directory.","display_name":"Directory","documentation":"https://docs.langflow.org/components-data#directory","edited":false,"field_order":["path","types","depth","max_concurrency","load_hidden","recursive","silent_errors","use_multithreading"],"frozen":false,"icon":"folder","legacy":false,"metadata":{"code_hash":"8aa20dc71cb9","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.data.directory.DirectoryComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Loaded Files","group_outputs":false,"method":"as_dataframe","name":"dataframe","selected":"DataFrame","tool_mode":true,"types":["DataFrame"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"from lfx.base.data.utils import TEXT_FILE_TYPES, parallel_load_data, parse_text_file_to_data, retrieve_file_paths\nfrom lfx.custom.custom_component.component import Component\nfrom lfx.io import BoolInput, IntInput, MessageTextInput, MultiselectInput\nfrom lfx.schema.data import Data\nfrom lfx.schema.dataframe import DataFrame\nfrom lfx.template.field.base import Output\n\n\nclass DirectoryComponent(Component):\n display_name = \"Directory\"\n description = \"Recursively load files from a directory.\"\n documentation: str = \"https://docs.langflow.org/components-data#directory\"\n icon = \"folder\"\n name = \"Directory\"\n\n inputs = [\n MessageTextInput(\n name=\"path\",\n display_name=\"Path\",\n info=\"Path to the directory to load files from. Defaults to current directory ('.')\",\n value=\".\",\n tool_mode=True,\n ),\n MultiselectInput(\n name=\"types\",\n display_name=\"File Types\",\n info=\"File types to load. Select one or more types or leave empty to load all supported types.\",\n options=TEXT_FILE_TYPES,\n value=[],\n ),\n IntInput(\n name=\"depth\",\n display_name=\"Depth\",\n info=\"Depth to search for files.\",\n value=0,\n ),\n IntInput(\n name=\"max_concurrency\",\n display_name=\"Max Concurrency\",\n advanced=True,\n info=\"Maximum concurrency for loading files.\",\n value=2,\n ),\n BoolInput(\n name=\"load_hidden\",\n display_name=\"Load Hidden\",\n advanced=True,\n info=\"If true, hidden files will be loaded.\",\n ),\n BoolInput(\n name=\"recursive\",\n display_name=\"Recursive\",\n advanced=True,\n info=\"If true, the search will be recursive.\",\n ),\n BoolInput(\n name=\"silent_errors\",\n display_name=\"Silent Errors\",\n advanced=True,\n info=\"If true, errors will not raise an exception.\",\n ),\n BoolInput(\n name=\"use_multithreading\",\n display_name=\"Use Multithreading\",\n advanced=True,\n info=\"If true, multithreading will be used.\",\n ),\n ]\n\n outputs = [\n Output(display_name=\"Loaded Files\", name=\"dataframe\", method=\"as_dataframe\"),\n ]\n\n def load_directory(self) -> list[Data]:\n path = self.path\n types = self.types\n depth = self.depth\n max_concurrency = self.max_concurrency\n load_hidden = self.load_hidden\n recursive = self.recursive\n silent_errors = self.silent_errors\n use_multithreading = self.use_multithreading\n\n resolved_path = self.resolve_path(path)\n\n # If no types are specified, use all supported types\n if not types:\n types = TEXT_FILE_TYPES\n\n # Check if all specified types are valid\n invalid_types = [t for t in types if t not in TEXT_FILE_TYPES]\n if invalid_types:\n msg = f\"Invalid file types specified: {invalid_types}. Valid types are: {TEXT_FILE_TYPES}\"\n raise ValueError(msg)\n\n valid_types = types\n\n file_paths = retrieve_file_paths(\n resolved_path, load_hidden=load_hidden, recursive=recursive, depth=depth, types=valid_types\n )\n\n loaded_data = []\n if use_multithreading:\n loaded_data = parallel_load_data(file_paths, silent_errors=silent_errors, max_concurrency=max_concurrency)\n else:\n loaded_data = [parse_text_file_to_data(file_path, silent_errors=silent_errors) for file_path in file_paths]\n\n valid_data = [x for x in loaded_data if x is not None and isinstance(x, Data)]\n self.status = valid_data\n return valid_data\n\n def as_dataframe(self) -> DataFrame:\n return DataFrame(self.load_directory())\n"},"depth":{"_input_type":"IntInput","advanced":false,"display_name":"Depth","dynamic":false,"info":"Depth to search for files.","list":false,"list_add_label":"Add More","name":"depth","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":0},"load_hidden":{"_input_type":"BoolInput","advanced":true,"display_name":"Load Hidden","dynamic":false,"info":"If true, hidden files will be loaded.","list":false,"list_add_label":"Add More","name":"load_hidden","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"max_concurrency":{"_input_type":"IntInput","advanced":true,"display_name":"Max Concurrency","dynamic":false,"info":"Maximum concurrency for loading files.","list":false,"list_add_label":"Add More","name":"max_concurrency","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"int","value":2},"path":{"_input_type":"MessageTextInput","advanced":false,"display_name":"Path","dynamic":false,"info":"Path to the directory to load files from. Defaults to current directory ('.')","input_types":["Message"],"list":false,"list_add_label":"Add More","load_from_db":false,"name":"path","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":true,"trace_as_input":true,"trace_as_metadata":true,"type":"str","value":"."},"recursive":{"_input_type":"BoolInput","advanced":true,"display_name":"Recursive","dynamic":false,"info":"If true, the search will be recursive.","list":false,"list_add_label":"Add More","name":"recursive","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"silent_errors":{"_input_type":"BoolInput","advanced":true,"display_name":"Silent Errors","dynamic":false,"info":"If true, errors will not raise an exception.","list":false,"list_add_label":"Add More","name":"silent_errors","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"types":{"_input_type":"MultiselectInput","advanced":false,"combobox":false,"display_name":"File Types","dynamic":false,"info":"File types to load. Select one or more types or leave empty to load all supported types.","list":true,"list_add_label":"Add More","name":"types","options":["csv","json","pdf","txt","md","mdx","yaml","yml","xml","html","htm","docx","py","sh","sql","js","ts","tsx"],"placeholder":"","required":false,"show":true,"title_case":false,"toggle":false,"tool_mode":false,"trace_as_metadata":true,"type":"str","value":[]},"use_multithreading":{"_input_type":"BoolInput","advanced":true,"display_name":"Use Multithreading","dynamic":false,"info":"If true, multithreading will be used.","list":false,"list_add_label":"Add More","name":"use_multithreading","placeholder":"","required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false}},"tool_mode":false},"File":{"base_classes":["Message"],"beta":false,"conditional_paths":[],"custom_fields":{},"description":"Loads content from one or more files.","display_name":"Read File","documentation":"https://docs.langflow.org/components-data#file","edited":false,"field_order":["path","file_path","separator","silent_errors","delete_server_file_after_processing","ignore_unsupported_extensions","ignore_unspecified_files","advanced_mode","pipeline","ocr_engine","md_image_placeholder","md_page_break_placeholder","doc_key","use_multithreading","concurrency_multithreading","markdown"],"frozen":false,"icon":"file-text","legacy":false,"metadata":{"code_hash":"85abc1094130","dependencies":{"dependencies":[{"name":"lfx","version":null}],"total_dependencies":1},"module":"lfx.components.data.file.FileComponent"},"minimized":false,"output_types":[],"outputs":[{"allows_loop":false,"cache":true,"display_name":"Raw Content","group_outputs":false,"method":"load_files_message","name":"message","selected":"Message","tool_mode":true,"types":["Message"],"value":"__UNDEFINED__"}],"pinned":false,"template":{"_type":"Component","advanced_mode":{"_input_type":"BoolInput","advanced":false,"display_name":"Advanced Parser","dynamic":false,"info":"Enable advanced document processing and export with Docling for PDFs, images, and office documents. Note that advanced document processing can consume significant resources.","list":false,"list_add_label":"Add More","name":"advanced_mode","placeholder":"","real_time_refresh":true,"required":false,"show":true,"title_case":false,"tool_mode":false,"trace_as_metadata":true,"type":"bool","value":false},"code":{"advanced":true,"dynamic":true,"fileTypes":[],"file_path":"","info":"","list":false,"load_from_db":false,"multiline":true,"name":"code","password":false,"placeholder":"","required":true,"show":true,"title_case":false,"type":"code","value":"\"\"\"Enhanced file component with Docling support and process isolation.\n\nNotes:\n-----\n- ALL Docling parsing/export runs in a separate OS process to prevent memory\n growth and native library state from impacting the main Langflow process.\n- Standard text/structured parsing continues to use existing BaseFileComponent\n utilities (and optional threading via `parallel_load_data`).\n\"\"\"\n\nfrom __future__ import annotations\n\nimport json\nimport subprocess\nimport sys\nimport textwrap\nfrom copy import deepcopy\nfrom typing import Any\n\nfrom lfx.base.data.base_file import BaseFileComponent\nfrom lfx.base.data.utils import TEXT_FILE_TYPES, parallel_load_data, parse_text_file_to_data\nfrom lfx.inputs.inputs import DropdownInput, MessageTextInput, StrInput\nfrom lfx.io import BoolInput, FileInput, IntInput, Output\nfrom lfx.schema.data import Data\nfrom lfx.schema.dataframe import DataFrame # noqa: TC001\nfrom lfx.schema.message import Message\n\n\nclass FileComponent(BaseFileComponent):\n \"\"\"File component with optional Docling processing (isolated in a subprocess).\"\"\"\n\n display_name = \"Read File\"\n description = \"Loads content from one or more files.\"\n documentation: str = \"https://docs.langflow.org/components-data#file\"\n icon = \"file-text\"\n name = \"File\"\n\n # Docling-supported/compatible extensions; TEXT_FILE_TYPES are supported by the base loader.\n VALID_EXTENSIONS = [\n *TEXT_FILE_TYPES,\n \"adoc\",\n \"asciidoc\",\n \"asc\",\n \"bmp\",\n \"dotx\",\n \"dotm\",\n \"docm\",\n \"jpg\",\n \"jpeg\",\n \"png\",\n \"potx\",\n \"ppsx\",\n \"pptm\",\n \"potm\",\n \"ppsm\",\n \"pptx\",\n \"tiff\",\n \"xls\",\n \"xlsx\",\n \"xhtml\",\n \"webp\",\n ]\n\n # Fixed export settings used when markdown export is requested.\n EXPORT_FORMAT = \"Markdown\"\n IMAGE_MODE = \"placeholder\"\n\n _base_inputs = deepcopy(BaseFileComponent.get_base_inputs())\n\n for input_item in _base_inputs:\n if isinstance(input_item, FileInput) and input_item.name == \"path\":\n input_item.real_time_refresh = True\n break\n\n inputs = [\n *_base_inputs,\n BoolInput(\n name=\"advanced_mode\",\n display_name=\"Advanced Parser\",\n value=False,\n real_time_refresh=True,\n info=(\n \"Enable advanced document processing and export with Docling for PDFs, images, and office documents. \"\n \"Note that advanced document processing can consume significant resources.\"\n ),\n show=True,\n ),\n DropdownInput(\n name=\"pipeline\",\n display_name=\"Pipeline\",\n info=\"Docling pipeline to use\",\n options=[\"standard\", \"vlm\"],\n value=\"standard\",\n advanced=True,\n real_time_refresh=True,\n ),\n DropdownInput(\n name=\"ocr_engine\",\n display_name=\"OCR Engine\",\n info=\"OCR engine to use. Only available when pipeline is set to 'standard'.\",\n options=[\"None\", \"easyocr\"],\n value=\"easyocr\",\n show=False,\n advanced=True,\n ),\n StrInput(\n name=\"md_image_placeholder\",\n display_name=\"Image placeholder\",\n info=\"Specify the image placeholder for markdown exports.\",\n value=\"\",\n advanced=True,\n show=False,\n ),\n StrInput(\n name=\"md_page_break_placeholder\",\n display_name=\"Page break placeholder\",\n info=\"Add this placeholder between pages in the markdown output.\",\n value=\"\",\n advanced=True,\n show=False,\n ),\n MessageTextInput(\n name=\"doc_key\",\n display_name=\"Doc Key\",\n info=\"The key to use for the DoclingDocument column.\",\n value=\"doc\",\n advanced=True,\n show=False,\n ),\n # Deprecated input retained for backward-compatibility.\n BoolInput(\n name=\"use_multithreading\",\n display_name=\"[Deprecated] Use Multithreading\",\n advanced=True,\n value=True,\n info=\"Set 'Processing Concurrency' greater than 1 to enable multithreading.\",\n ),\n IntInput(\n name=\"concurrency_multithreading\",\n display_name=\"Processing Concurrency\",\n advanced=True,\n info=\"When multiple files are being processed, the number of files to process concurrently.\",\n value=1,\n ),\n BoolInput(\n name=\"markdown\",\n display_name=\"Markdown Export\",\n info=\"Export processed documents to Markdown format. Only available when advanced mode is enabled.\",\n value=False,\n show=False,\n ),\n ]\n\n outputs = [\n Output(display_name=\"Raw Content\", name=\"message\", method=\"load_files_message\"),\n ]\n\n # ------------------------------ UI helpers --------------------------------------\n\n def _path_value(self, template: dict) -> list[str]:\n \"\"\"Return the list of currently selected file paths from the template.\"\"\"\n return template.get(\"path\", {}).get(\"file_path\", [])\n\n def update_build_config(\n self,\n build_config: dict[str, Any],\n field_value: Any,\n field_name: str | None = None,\n ) -> dict[str, Any]:\n \"\"\"Show/hide Advanced Parser and related fields based on selection context.\"\"\"\n if field_name == \"path\":\n paths = self._path_value(build_config)\n\n # If all files can be processed by docling, do so\n allow_advanced = all(not file_path.endswith((\".csv\", \".xlsx\", \".parquet\")) for file_path in paths)\n build_config[\"advanced_mode\"][\"show\"] = allow_advanced\n if not allow_advanced:\n build_config[\"advanced_mode\"][\"value\"] = False\n for f in (\"pipeline\", \"ocr_engine\", \"doc_key\", \"md_image_placeholder\", \"md_page_break_placeholder\"):\n if f in build_config:\n build_config[f][\"show\"] = False\n\n # Docling Processing\n elif field_name == \"advanced_mode\":\n for f in (\"pipeline\", \"ocr_engine\", \"doc_key\", \"md_image_placeholder\", \"md_page_break_placeholder\"):\n if f in build_config:\n build_config[f][\"show\"] = bool(field_value)\n if f == \"pipeline\":\n build_config[f][\"advanced\"] = not bool(field_value)\n\n elif field_name == \"pipeline\":\n if field_value == \"standard\":\n build_config[\"ocr_engine\"][\"show\"] = True\n build_config[\"ocr_engine\"][\"value\"] = \"easyocr\"\n else:\n build_config[\"ocr_engine\"][\"show\"] = False\n build_config[\"ocr_engine\"][\"value\"] = \"None\"\n\n return build_config\n\n def update_outputs(self, frontend_node: dict[str, Any], field_name: str, field_value: Any) -> dict[str, Any]: # noqa: ARG002\n \"\"\"Dynamically show outputs based on file count/type and advanced mode.\"\"\"\n if field_name not in [\"path\", \"advanced_mode\", \"pipeline\"]:\n return frontend_node\n\n template = frontend_node.get(\"template\", {})\n paths = self._path_value(template)\n if not paths:\n return frontend_node\n\n frontend_node[\"outputs\"] = []\n if len(paths) == 1:\n file_path = paths[0] if field_name == \"path\" else frontend_node[\"template\"][\"path\"][\"file_path\"][0]\n if file_path.endswith((\".csv\", \".xlsx\", \".parquet\")):\n frontend_node[\"outputs\"].append(\n Output(display_name=\"Structured Content\", name=\"dataframe\", method=\"load_files_structured\"),\n )\n elif file_path.endswith(\".json\"):\n frontend_node[\"outputs\"].append(\n Output(display_name=\"Structured Content\", name=\"json\", method=\"load_files_json\"),\n )\n\n advanced_mode = frontend_node.get(\"template\", {}).get(\"advanced_mode\", {}).get(\"value\", False)\n if advanced_mode:\n frontend_node[\"outputs\"].append(\n Output(display_name=\"Structured Output\", name=\"advanced_dataframe\", method=\"load_files_dataframe\"),\n )\n frontend_node[\"outputs\"].append(\n Output(display_name=\"Markdown\", name=\"advanced_markdown\", method=\"load_files_markdown\"),\n )\n frontend_node[\"outputs\"].append(\n Output(display_name=\"File Path\", name=\"path\", method=\"load_files_path\"),\n )\n else:\n frontend_node[\"outputs\"].append(\n Output(display_name=\"Raw Content\", name=\"message\", method=\"load_files_message\"),\n )\n frontend_node[\"outputs\"].append(\n Output(display_name=\"File Path\", name=\"path\", method=\"load_files_path\"),\n )\n else:\n # Multiple files => DataFrame output; advanced parser disabled\n frontend_node[\"outputs\"].append(Output(display_name=\"Files\", name=\"dataframe\", method=\"load_files\"))\n\n return frontend_node\n\n # ------------------------------ Core processing ----------------------------------\n\n def _is_docling_compatible(self, file_path: str) -> bool:\n \"\"\"Lightweight extension gate for Docling-compatible types.\"\"\"\n docling_exts = (\n \".adoc\",\n \".asciidoc\",\n \".asc\",\n \".bmp\",\n \".csv\",\n \".dotx\",\n \".dotm\",\n \".docm\",\n \".docx\",\n \".htm\",\n \".html\",\n \".jpg\",\n \".jpeg\",\n \".json\",\n \".md\",\n \".pdf\",\n \".png\",\n \".potx\",\n \".ppsx\",\n \".pptm\",\n \".potm\",\n \".ppsm\",\n \".pptx\",\n \".tiff\",\n \".txt\",\n \".xls\",\n \".xlsx\",\n \".xhtml\",\n \".xml\",\n \".webp\",\n )\n return file_path.lower().endswith(docling_exts)\n\n def _process_docling_in_subprocess(self, file_path: str) -> Data | None:\n \"\"\"Run Docling in a separate OS process and map the result to a Data object.\n\n We avoid multiprocessing pickling by launching `python -c \"