lfx-nightly 0.1.12.dev10__py3-none-any.whl → 0.1.12.dev11__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of lfx-nightly might be problematic. Click here for more details.

lfx/base/agents/agent.py CHANGED
@@ -254,7 +254,7 @@ class LCToolsAgentComponent(LCAgentComponent):
254
254
  tools_names = ", ".join([tool.name for tool in self.tools])
255
255
  return tools_names
256
256
 
257
- def _get_tools(self) -> list[Tool]:
257
+ async def _get_tools(self) -> list[Tool]:
258
258
  component_toolkit = _get_component_toolkit()
259
259
  tools_names = self._build_tools_names()
260
260
  agent_description = self.get_tool_description()
@@ -1950,7 +1950,7 @@ class ComposioBaseComponent(Component):
1950
1950
  configured_tools.append(tool)
1951
1951
  return configured_tools
1952
1952
 
1953
- def _get_tools(self) -> list[Tool]:
1953
+ async def _get_tools(self) -> list[Tool]:
1954
1954
  """Get tools with cached results and optimized name sanitization."""
1955
1955
  composio = self._build_wrapper()
1956
1956
  self.set_default_tools()
@@ -179,7 +179,7 @@ class AgentComponent(ToolCallingAgentComponent):
179
179
  if self.add_current_date_tool:
180
180
  if not isinstance(self.tools, list): # type: ignore[has-type]
181
181
  self.tools = []
182
- current_date_tool = (CurrentDateComponent(**self.get_base_args()).to_toolkit()).pop(0)
182
+ current_date_tool = (await CurrentDateComponent(**self.get_base_args()).to_toolkit()).pop(0)
183
183
  if not isinstance(current_date_tool, StructuredTool):
184
184
  msg = "CurrentDateComponent must be converted to a StructuredTool"
185
185
  raise TypeError(msg)
@@ -544,7 +544,7 @@ class AgentComponent(ToolCallingAgentComponent):
544
544
  )
545
545
  return dotdict({k: v.to_dict() if hasattr(v, "to_dict") else v for k, v in build_config.items()})
546
546
 
547
- def _get_tools(self) -> list[Tool]:
547
+ async def _get_tools(self) -> list[Tool]:
548
548
  component_toolkit = get_component_toolkit()
549
549
  tools_names = self._build_tools_names()
550
550
  agent_description = self.get_tool_description()
@@ -5,19 +5,33 @@ from typing import TYPE_CHECKING, Any
5
5
  from lfx.components._importing import import_mod
6
6
 
7
7
  if TYPE_CHECKING:
8
+ from .airtable_composio import ComposioAirtableAPIComponent
9
+ from .asana_composio import ComposioAsanaAPIComponent
10
+ from .attio_composio import ComposioAttioAPIComponent
11
+ from .calendly_composio import ComposioCalendlyAPIComponent
8
12
  from .composio_api import ComposioAPIComponent
13
+ from .contentful_composio import ComposioContentfulAPIComponent
14
+ from .discord_composio import ComposioDiscordAPIComponent
15
+ from .figma_composio import ComposioFigmaAPIComponent
9
16
  from .github_composio import ComposioGitHubAPIComponent
10
17
  from .gmail_composio import ComposioGmailAPIComponent
11
18
  from .googlecalendar_composio import ComposioGoogleCalendarAPIComponent
19
+ from .googledocs_composio import ComposioGoogleDocsAPIComponent
12
20
  from .googlemeet_composio import ComposioGooglemeetAPIComponent
21
+ from .googlesheets_composio import ComposioGoogleSheetsAPIComponent
13
22
  from .googletasks_composio import ComposioGoogleTasksAPIComponent
23
+ from .klaviyo_composio import ComposioKlaviyoAPIComponent
14
24
  from .linear_composio import ComposioLinearAPIComponent
25
+ from .miro_composio import ComposioMiroAPIComponent
26
+ from .notion_composio import ComposioNotionAPIComponent
27
+ from .onedrive_composio import ComposioOneDriveAPIComponent
15
28
  from .outlook_composio import ComposioOutlookAPIComponent
16
29
  from .reddit_composio import ComposioRedditAPIComponent
17
30
  from .slack_composio import ComposioSlackAPIComponent
18
31
  from .slackbot_composio import ComposioSlackbotAPIComponent
19
32
  from .supabase_composio import ComposioSupabaseAPIComponent
20
33
  from .todoist_composio import ComposioTodoistAPIComponent
34
+ from .wrike_composio import ComposioWrikeAPIComponent
21
35
  from .youtube_composio import ComposioYoutubeAPIComponent
22
36
 
23
37
  _dynamic_imports = {
@@ -35,23 +49,51 @@ _dynamic_imports = {
35
49
  "ComposioSupabaseAPIComponent": "supabase_composio",
36
50
  "ComposioTodoistAPIComponent": "todoist_composio",
37
51
  "ComposioYoutubeAPIComponent": "youtube_composio",
52
+ "ComposioGoogleDocsAPIComponent": "googledocs_composio",
53
+ "ComposioGoogleSheetsAPIComponent": "googlesheets_composio",
54
+ "ComposioKlaviyoAPIComponent": "klaviyo_composio",
55
+ "ComposioNotionAPIComponent": "notion_composio",
56
+ "ComposioOneDriveAPIComponent": "onedrive_composio",
57
+ "ComposioAirtableAPIComponent": "airtable_composio",
58
+ "ComposioAsanaAPIComponent": "asana_composio",
59
+ "ComposioAttioAPIComponent": "attio_composio",
60
+ "ComposioCalendlyAPIComponent": "calendly_composio",
61
+ "ComposioContentfulAPIComponent": "contentful_composio",
62
+ "ComposioDiscordAPIComponent": "discord_composio",
63
+ "ComposioFigmaAPIComponent": "figma_composio",
64
+ "ComposioMiroAPIComponent": "miro_composio",
65
+ "ComposioWrikeAPIComponent": "wrike_composio",
38
66
  }
39
67
 
40
68
  # Always expose all components - individual failures will be handled on import
41
69
  __all__ = [
42
70
  "ComposioAPIComponent",
71
+ "ComposioAirtableAPIComponent",
72
+ "ComposioAsanaAPIComponent",
73
+ "ComposioAttioAPIComponent",
74
+ "ComposioCalendlyAPIComponent",
75
+ "ComposioContentfulAPIComponent",
76
+ "ComposioDiscordAPIComponent",
77
+ "ComposioFigmaAPIComponent",
43
78
  "ComposioGitHubAPIComponent",
44
79
  "ComposioGmailAPIComponent",
45
80
  "ComposioGoogleCalendarAPIComponent",
81
+ "ComposioGoogleDocsAPIComponent",
82
+ "ComposioGoogleSheetsAPIComponent",
46
83
  "ComposioGoogleTasksAPIComponent",
47
84
  "ComposioGooglemeetAPIComponent",
85
+ "ComposioKlaviyoAPIComponent",
48
86
  "ComposioLinearAPIComponent",
87
+ "ComposioMiroAPIComponent",
88
+ "ComposioNotionAPIComponent",
89
+ "ComposioOneDriveAPIComponent",
49
90
  "ComposioOutlookAPIComponent",
50
91
  "ComposioRedditAPIComponent",
51
92
  "ComposioSlackAPIComponent",
52
93
  "ComposioSlackbotAPIComponent",
53
94
  "ComposioSupabaseAPIComponent",
54
95
  "ComposioTodoistAPIComponent",
96
+ "ComposioWrikeAPIComponent",
55
97
  "ComposioYoutubeAPIComponent",
56
98
  ]
57
99
 
@@ -0,0 +1,11 @@
1
+ from lfx.base.composio.composio_base import ComposioBaseComponent
2
+
3
+
4
+ class ComposioAirtableAPIComponent(ComposioBaseComponent):
5
+ display_name: str = "Airtable"
6
+ icon = "Airtable"
7
+ documentation: str = "https://docs.composio.dev"
8
+ app_name = "airtable"
9
+
10
+ def set_default_tools(self):
11
+ """Set the default tools for Airtable component."""
@@ -0,0 +1,11 @@
1
+ from lfx.base.composio.composio_base import ComposioBaseComponent
2
+
3
+
4
+ class ComposioAsanaAPIComponent(ComposioBaseComponent):
5
+ display_name: str = "Asana"
6
+ icon = "Asana"
7
+ documentation: str = "https://docs.composio.dev"
8
+ app_name = "asana"
9
+
10
+ def set_default_tools(self):
11
+ """Set the default tools for Asana component."""
@@ -0,0 +1,11 @@
1
+ from lfx.base.composio.composio_base import ComposioBaseComponent
2
+
3
+
4
+ class ComposioAttioAPIComponent(ComposioBaseComponent):
5
+ display_name: str = "Attio"
6
+ icon = "Attio"
7
+ documentation: str = "https://docs.composio.dev"
8
+ app_name = "attio"
9
+
10
+ def set_default_tools(self):
11
+ """Set the default tools for Attio component."""
@@ -0,0 +1,11 @@
1
+ from lfx.base.composio.composio_base import ComposioBaseComponent
2
+
3
+
4
+ class ComposioCalendlyAPIComponent(ComposioBaseComponent):
5
+ display_name: str = "Calendly"
6
+ icon = "Calendly"
7
+ documentation: str = "https://docs.composio.dev"
8
+ app_name = "calendly"
9
+
10
+ def set_default_tools(self):
11
+ """Set the default tools for Calendly component."""
@@ -0,0 +1,11 @@
1
+ from lfx.base.composio.composio_base import ComposioBaseComponent
2
+
3
+
4
+ class ComposioContentfulAPIComponent(ComposioBaseComponent):
5
+ display_name: str = "Contentful"
6
+ icon = "Contentful"
7
+ documentation: str = "https://docs.composio.dev"
8
+ app_name = "contentful"
9
+
10
+ def set_default_tools(self):
11
+ """Set the default tools for Contentful component."""
@@ -0,0 +1,11 @@
1
+ from lfx.base.composio.composio_base import ComposioBaseComponent
2
+
3
+
4
+ class ComposioDiscordAPIComponent(ComposioBaseComponent):
5
+ display_name: str = "Discord"
6
+ icon = "Discord"
7
+ documentation: str = "https://docs.composio.dev"
8
+ app_name = "discord"
9
+
10
+ def set_default_tools(self):
11
+ """Set the default tools for Discord component."""
@@ -0,0 +1,11 @@
1
+ from lfx.base.composio.composio_base import ComposioBaseComponent
2
+
3
+
4
+ class ComposioFigmaAPIComponent(ComposioBaseComponent):
5
+ display_name: str = "Figma"
6
+ icon = "Figma"
7
+ documentation: str = "https://docs.composio.dev"
8
+ app_name = "figma"
9
+
10
+ def set_default_tools(self):
11
+ """Set the default tools for Figma component."""
@@ -0,0 +1,11 @@
1
+ from lfx.base.composio.composio_base import ComposioBaseComponent
2
+
3
+
4
+ class ComposioGoogleDocsAPIComponent(ComposioBaseComponent):
5
+ display_name: str = "Google Docs"
6
+ icon = "Googledocs"
7
+ documentation: str = "https://docs.composio.dev"
8
+ app_name = "googledocs"
9
+
10
+ def set_default_tools(self):
11
+ """Set the default tools for Google Docs component."""
@@ -0,0 +1,11 @@
1
+ from lfx.base.composio.composio_base import ComposioBaseComponent
2
+
3
+
4
+ class ComposioGoogleSheetsAPIComponent(ComposioBaseComponent):
5
+ display_name: str = "Google Sheets"
6
+ icon = "Googlesheets"
7
+ documentation: str = "https://docs.composio.dev"
8
+ app_name = "googlesheets"
9
+
10
+ def set_default_tools(self):
11
+ """Set the default tools for Google Sheets component."""
@@ -0,0 +1,11 @@
1
+ from lfx.base.composio.composio_base import ComposioBaseComponent
2
+
3
+
4
+ class ComposioKlaviyoAPIComponent(ComposioBaseComponent):
5
+ display_name: str = "Klaviyo"
6
+ icon = "Klaviyo"
7
+ documentation: str = "https://docs.composio.dev"
8
+ app_name = "klaviyo"
9
+
10
+ def set_default_tools(self):
11
+ """Set the default tools for Klaviyo component."""
@@ -0,0 +1,11 @@
1
+ from lfx.base.composio.composio_base import ComposioBaseComponent
2
+
3
+
4
+ class ComposioMiroAPIComponent(ComposioBaseComponent):
5
+ display_name: str = "Miro"
6
+ icon = "Miro"
7
+ documentation: str = "https://docs.composio.dev"
8
+ app_name = "miro"
9
+
10
+ def set_default_tools(self):
11
+ """Set the default tools for Miro component."""
@@ -0,0 +1,11 @@
1
+ from lfx.base.composio.composio_base import ComposioBaseComponent
2
+
3
+
4
+ class ComposioNotionAPIComponent(ComposioBaseComponent):
5
+ display_name: str = "Notion"
6
+ icon = "Notion"
7
+ documentation: str = "https://docs.composio.dev"
8
+ app_name = "notion"
9
+
10
+ def set_default_tools(self):
11
+ """Set the default tools for Notion component."""
@@ -0,0 +1,11 @@
1
+ from lfx.base.composio.composio_base import ComposioBaseComponent
2
+
3
+
4
+ class ComposioOneDriveAPIComponent(ComposioBaseComponent):
5
+ display_name: str = "OneDrive"
6
+ icon = "One_Drive"
7
+ documentation: str = "https://docs.composio.dev"
8
+ app_name = "one_drive"
9
+
10
+ def set_default_tools(self):
11
+ """Set the default tools for OneDrive component."""
@@ -0,0 +1,11 @@
1
+ from lfx.base.composio.composio_base import ComposioBaseComponent
2
+
3
+
4
+ class ComposioWrikeAPIComponent(ComposioBaseComponent):
5
+ display_name: str = "Wrike"
6
+ icon = "Wrike"
7
+ documentation: str = "https://docs.composio.dev"
8
+ app_name = "wrike"
9
+
10
+ def set_default_tools(self):
11
+ """Set the default tools for Wrike component."""
@@ -1,9 +1,12 @@
1
+ import json
1
2
  from typing import Any
2
3
 
3
4
  from lfx.custom import Component
4
- from lfx.io import HandleInput, Output, TabInput
5
+ from lfx.io import BoolInput, HandleInput, Output, TabInput
5
6
  from lfx.schema import Data, DataFrame, Message
6
7
 
8
+ MIN_CSV_LINES = 2
9
+
7
10
 
8
11
  def convert_to_message(v) -> Message:
9
12
  """Convert input to Message type.
@@ -17,11 +20,12 @@ def convert_to_message(v) -> Message:
17
20
  return v if isinstance(v, Message) else v.to_message()
18
21
 
19
22
 
20
- def convert_to_data(v: DataFrame | Data | Message | dict) -> Data:
23
+ def convert_to_data(v: DataFrame | Data | Message | dict, *, auto_parse: bool) -> Data:
21
24
  """Convert input to Data type.
22
25
 
23
26
  Args:
24
27
  v: Input to convert (Message, Data, DataFrame, or dict)
28
+ auto_parse: Enable automatic parsing of structured data (JSON/CSV)
25
29
 
26
30
  Returns:
27
31
  Data: Converted Data object
@@ -29,15 +33,18 @@ def convert_to_data(v: DataFrame | Data | Message | dict) -> Data:
29
33
  if isinstance(v, dict):
30
34
  return Data(v)
31
35
  if isinstance(v, Message):
32
- return v.to_data()
36
+ data = Data(data={"text": v.data["text"]})
37
+ return parse_structured_data(data) if auto_parse else data
38
+
33
39
  return v if isinstance(v, Data) else v.to_data()
34
40
 
35
41
 
36
- def convert_to_dataframe(v: DataFrame | Data | Message | dict) -> DataFrame:
42
+ def convert_to_dataframe(v: DataFrame | Data | Message | dict, *, auto_parse: bool) -> DataFrame:
37
43
  """Convert input to DataFrame type.
38
44
 
39
45
  Args:
40
46
  v: Input to convert (Message, Data, DataFrame, or dict)
47
+ auto_parse: Enable automatic parsing of structured data (JSON/CSV)
41
48
 
42
49
  Returns:
43
50
  DataFrame: Converted DataFrame object
@@ -52,10 +59,84 @@ def convert_to_dataframe(v: DataFrame | Data | Message | dict) -> DataFrame:
52
59
  if isinstance(v, pd.DataFrame):
53
60
  # Convert pandas DataFrame to our DataFrame by creating Data objects
54
61
  return DataFrame(data=v)
62
+
63
+ if isinstance(v, Message):
64
+ data = Data(data={"text": v.data["text"]})
65
+ return parse_structured_data(data).to_dataframe() if auto_parse else data.to_dataframe()
55
66
  # For other types, call to_dataframe method
56
67
  return v.to_dataframe()
57
68
 
58
69
 
70
+ def parse_structured_data(data: Data) -> Data:
71
+ """Parse structured data (JSON, CSV) from Data's text field.
72
+
73
+ Args:
74
+ data: Data object with text content to parse
75
+
76
+ Returns:
77
+ Data: Modified Data object with parsed content or original if parsing fails
78
+ """
79
+ raw_text = data.get_text() or ""
80
+ text = raw_text.lstrip("\ufeff").strip()
81
+
82
+ # Try JSON parsing first
83
+ parsed_json = _try_parse_json(text)
84
+ if parsed_json is not None:
85
+ return parsed_json
86
+
87
+ # Try CSV parsing
88
+ if _looks_like_csv(text):
89
+ try:
90
+ return _parse_csv_to_data(text)
91
+ except Exception: # noqa: BLE001
92
+ # Heuristic misfire or malformed CSV — keep original data
93
+ return data
94
+
95
+ # Return original data if no parsing succeeded
96
+ return data
97
+
98
+
99
+ def _try_parse_json(text: str) -> Data | None:
100
+ """Try to parse text as JSON and return Data object."""
101
+ try:
102
+ parsed = json.loads(text)
103
+
104
+ if isinstance(parsed, dict):
105
+ # Single JSON object
106
+ return Data(data=parsed)
107
+ if isinstance(parsed, list) and all(isinstance(item, dict) for item in parsed):
108
+ # Array of JSON objects - create Data with the list
109
+ return Data(data={"records": parsed})
110
+
111
+ except (json.JSONDecodeError, ValueError):
112
+ pass
113
+
114
+ return None
115
+
116
+
117
+ def _looks_like_csv(text: str) -> bool:
118
+ """Simple heuristic to detect CSV content."""
119
+ lines = text.strip().split("\n")
120
+ if len(lines) < MIN_CSV_LINES:
121
+ return False
122
+
123
+ header_line = lines[0]
124
+ return "," in header_line and len(lines) > 1
125
+
126
+
127
+ def _parse_csv_to_data(text: str) -> Data:
128
+ """Parse CSV text and return Data object."""
129
+ from io import StringIO
130
+
131
+ import pandas as pd
132
+
133
+ # Parse CSV to DataFrame, then convert to list of dicts
134
+ parsed_df = pd.read_csv(StringIO(text))
135
+ records = parsed_df.to_dict(orient="records")
136
+
137
+ return Data(data={"records": records})
138
+
139
+
59
140
  class TypeConverterComponent(Component):
60
141
  display_name = "Type Convert"
61
142
  description = "Convert between different types (Message, Data, DataFrame)"
@@ -70,6 +151,14 @@ class TypeConverterComponent(Component):
70
151
  info="Accept Message, Data or DataFrame as input",
71
152
  required=True,
72
153
  ),
154
+ BoolInput(
155
+ name="auto_parse",
156
+ display_name="Auto Parse",
157
+ info="Detect and convert JSON/CSV strings automatically.",
158
+ advanced=True,
159
+ value=False,
160
+ required=False,
161
+ ),
73
162
  TabInput(
74
163
  name="output_type",
75
164
  display_name="Output Type",
@@ -142,7 +231,7 @@ class TypeConverterComponent(Component):
142
231
  if isinstance(input_value, str):
143
232
  input_value = Message(text=input_value)
144
233
 
145
- result = convert_to_data(input_value)
234
+ result = convert_to_data(input_value, auto_parse=self.auto_parse)
146
235
  self.status = result
147
236
  return result
148
237
 
@@ -154,6 +243,6 @@ class TypeConverterComponent(Component):
154
243
  if isinstance(input_value, str):
155
244
  input_value = Message(text=input_value)
156
245
 
157
- result = convert_to_dataframe(input_value)
246
+ result = convert_to_dataframe(input_value, auto_parse=self.auto_parse)
158
247
  self.status = result
159
248
  return result
@@ -1311,7 +1311,7 @@ class Component(CustomComponent):
1311
1311
  def _get_fallback_input(self, **kwargs):
1312
1312
  return Input(**kwargs)
1313
1313
 
1314
- def to_toolkit(self) -> list[Tool]:
1314
+ async def to_toolkit(self) -> list[Tool]:
1315
1315
  """Convert component to a list of tools.
1316
1316
 
1317
1317
  This is a template method that defines the skeleton of the toolkit creation
@@ -1325,7 +1325,7 @@ class Component(CustomComponent):
1325
1325
  - tags: List of tags associated with the tool
1326
1326
  """
1327
1327
  # Get tools from subclass implementation
1328
- tools = self._get_tools()
1328
+ tools = await self._get_tools()
1329
1329
 
1330
1330
  if hasattr(self, TOOLS_METADATA_INPUT_NAME):
1331
1331
  tools = self._filter_tools_by_status(tools=tools, metadata=self.tools_metadata)
@@ -1334,7 +1334,7 @@ class Component(CustomComponent):
1334
1334
  # If no metadata exists yet, filter based on enabled_tools
1335
1335
  return self._filter_tools_by_status(tools=tools, metadata=None)
1336
1336
 
1337
- def _get_tools(self) -> list[Tool]:
1337
+ async def _get_tools(self) -> list[Tool]:
1338
1338
  """Get the list of tools for this component.
1339
1339
 
1340
1340
  This method can be overridden by subclasses to provide custom tool implementations.
@@ -1421,6 +1421,7 @@ class Component(CustomComponent):
1421
1421
  tools = []
1422
1422
  try:
1423
1423
  # Handle both sync and async _get_tools methods
1424
+ # TODO: this check can be remomved ince get tools is async
1424
1425
  if asyncio.iscoroutinefunction(self._get_tools):
1425
1426
  tools = await self._get_tools()
1426
1427
  else:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lfx-nightly
3
- Version: 0.1.12.dev10
3
+ Version: 0.1.12.dev11
4
4
  Summary: Langflow Executor - A lightweight CLI tool for executing and serving Langflow AI flows
5
5
  Author-email: Gabriel Luiz Freitas Almeida <gabriel@langflow.org>
6
6
  Requires-Python: <3.14,>=3.10
@@ -7,7 +7,7 @@ lfx/type_extraction.py,sha256=eCZNl9nAQivKdaPv_9BK71N0JV9Rtr--veAht0dnQ4A,2921
7
7
  lfx/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  lfx/base/constants.py,sha256=iY5A_Rbcvoa7j0noeSmOQemebTQDWju0j5bprVCTAnY,1212
9
9
  lfx/base/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- lfx/base/agents/agent.py,sha256=AkTjt9EBT7ZMF2WkfRvcHfXu9A9dbjO56UrtN1nWKts,10962
10
+ lfx/base/agents/agent.py,sha256=ZePHU8aGDP3_oVXDMFh2SHA44KlRtJU6irkV9cqBq5M,10968
11
11
  lfx/base/agents/callback.py,sha256=mjlT9ukBMVrfjYrHsJowqpY4g9hVGBVBIYhncLWr3tQ,3692
12
12
  lfx/base/agents/context.py,sha256=u0wboX1aRR22Ia8gY14WF12RjhE0Rxv9hPBiixT9DtQ,3916
13
13
  lfx/base/agents/default_prompts.py,sha256=tUjfczwt4D5R1KozNOl1uSL2V2rSCZeUMS-cfV4Gwn0,955
@@ -22,7 +22,7 @@ lfx/base/astra_assistants/util.py,sha256=T_W44VFoOXBF3m-0eCSrHvzbKx1gdyBF9IAWKMX
22
22
  lfx/base/chains/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
23
  lfx/base/chains/model.py,sha256=QSYJBc0Ygpx2Ko273u1idL_gPK2xpvRQgJb4oTx8x8s,766
24
24
  lfx/base/composio/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
- lfx/base/composio/composio_base.py,sha256=f3wimGWa6KoTkApb0vjUBKn-n_Pr1EcewE7TYTDXMyk,113162
25
+ lfx/base/composio/composio_base.py,sha256=mzNoTjiBbxVTquJPzLgcJPCA3DTtFME4Ql0Zz2ztuOI,113168
26
26
  lfx/base/compressors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
27
  lfx/base/compressors/model.py,sha256=-FFBAPAy9bAgvklIo7x_uwShZR5NoMHakF6f_hNnLHg,2098
28
28
  lfx/base/curl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -108,7 +108,7 @@ lfx/components/Notion/update_page_property.py,sha256=tgmPMbD1eX58dQQNXv1w5FzDec7
108
108
  lfx/components/agentql/__init__.py,sha256=Erl669Dzsk-SegsDPWTtkKbprMXVuv8UTCo5REzZGTc,56
109
109
  lfx/components/agentql/agentql_api.py,sha256=uIrIr7q0timgDwRCHt1DF_usbQTmctv3sIm-XXKF9k8,5561
110
110
  lfx/components/agents/__init__.py,sha256=u1PH9Ui0dUgTdTZVP7cdVysCv4extdusKS_brcbE7Eg,1049
111
- lfx/components/agents/agent.py,sha256=GkvA9in-kQzs3s8O4kqKdo0IuTFE8H2TcjMCKQpzSzg,25422
111
+ lfx/components/agents/agent.py,sha256=Ut2oIFPAMPq9eMCmo4Qc9Xdh8zmCG5yQNWAb6X39BYk,25434
112
112
  lfx/components/agents/mcp_component.py,sha256=pfnQAVIQnvc39V6aBZC3sz-Or4YnnpYOTpV5eWCc1As,22826
113
113
  lfx/components/aiml/__init__.py,sha256=DNKB-HMFGFYmsdkON-s8557ttgBXVXADmS-BcuSQiIQ,1087
114
114
  lfx/components/aiml/aiml.py,sha256=qYx-nYYlInB9Lk1mGJF1m1AAYFeDmK8QC-Gg6hKCqMY,3840
@@ -155,21 +155,35 @@ lfx/components/cohere/__init__.py,sha256=MSTeplsNIXTVm_dUcJETy6YGb-fw7-dplC9jzAo
155
155
  lfx/components/cohere/cohere_embeddings.py,sha256=nA9BOixk534yJZymJaukBrQYBj_uB2nyYvzJPd_3aUc,3083
156
156
  lfx/components/cohere/cohere_models.py,sha256=egoo3kuUhgRq8fF4dyF2DuVjrMtzxp_6N9gQwIhJTNQ,1586
157
157
  lfx/components/cohere/cohere_rerank.py,sha256=qUoNEe6sjUnvkTHkCzwayBuLDoH957BBEgb-Qu_k9Yk,1554
158
- lfx/components/composio/__init__.py,sha256=Bsjf0BBThD9boYxOsehZWgp3LC4lvG44htbDea_OJtw,3037
158
+ lfx/components/composio/__init__.py,sha256=DVYKV9JyGTAWYDpAV7TeEKp_efltoOiyblQmL-qq4Ok,5175
159
+ lfx/components/composio/airtable_composio.py,sha256=5HrQEcM8bW7xv4AE5NIWyBzfgopxf9SIIpdcQHuy978,357
160
+ lfx/components/composio/asana_composio.py,sha256=KQ1tYdBJKOhtOqI11r8x2HxA0X21F7YaU-KEs3BOqAE,342
161
+ lfx/components/composio/attio_composio.py,sha256=3kOzz1Zx4_sXEqGY26l3r0nYK6c-RxCYchUwBGZ_vG0,342
162
+ lfx/components/composio/calendly_composio.py,sha256=SiguQT1VKiQ1F_sJs0ZGtNR6qoRYVCtpGbwYelmwU2A,357
159
163
  lfx/components/composio/composio_api.py,sha256=xBzxP4T_mPToP5teroP2C4vDiJiyK-tzclDKHxdPRHM,10667
164
+ lfx/components/composio/contentful_composio.py,sha256=Nr77Hsj8R-B_QALVY4aabas4bEjD_xfVdsVdh9_bGu4,367
165
+ lfx/components/composio/discord_composio.py,sha256=3X4b7Wun7N4yt7KV6Hd120t_keNXm3cIMRWajeHSfsM,352
160
166
  lfx/components/composio/dropbox_compnent.py,sha256=0FglWZ3vZYQFNo8OJcIMoIE8HQi3N5w2JY8FBhrS4sg,352
167
+ lfx/components/composio/figma_composio.py,sha256=dEPSE1RrJMFuW63R9KPc3HKi3v-ztfHUDHspgagvE-w,342
161
168
  lfx/components/composio/github_composio.py,sha256=-KutXeX95w3uUyBufvVmLMYuwHhSPxswLMpI6YrUgWs,347
162
169
  lfx/components/composio/gmail_composio.py,sha256=VQiEIi3hWIj4tWzFD2yARqhn2uCifp_rdsJzCjSIyKg,1342
163
170
  lfx/components/composio/googlecalendar_composio.py,sha256=hyMyC2yblNCQb8sxa2t2tnke_zE5Uq1OkEAvd_kfIE4,389
171
+ lfx/components/composio/googledocs_composio.py,sha256=_EIPZqeAPWD5ptTb3h9-Yxaajr_zQo26ZSBzpwBwVyo,369
164
172
  lfx/components/composio/googlemeet_composio.py,sha256=xU25iiHRMW0rcCNq0fxmuiEQN7mv1K7NnRqgTg7SBCI,373
173
+ lfx/components/composio/googlesheets_composio.py,sha256=o-84aBcIgQd7md5WdUwRV8tF3QBzTms3Idko2ybgAMA,379
165
174
  lfx/components/composio/googletasks_composio.py,sha256=3bmyDAX8OwB6KryAiAitue6rHdeZBoDfJ6q6rzuwOcs,276
175
+ lfx/components/composio/klaviyo_composio.py,sha256=O-fopeP-_RoTdZLHlRlcS5S5jTb3JkT7nE-BIYqIISk,352
166
176
  lfx/components/composio/linear_composio.py,sha256=visuu-6nQizgbEM2C6GwvHXYY59_mfGx-rhS4QvQjIA,347
177
+ lfx/components/composio/miro_composio.py,sha256=HpxCHhrEGXD8pCPzI9BX3pomIw2tysDCCmzRo_y9i48,337
178
+ lfx/components/composio/notion_composio.py,sha256=WQqm_zDRxMtiqomYuzH0Q4hM2ceNJHiHJVr6l-aviKY,347
179
+ lfx/components/composio/onedrive_composio.py,sha256=SXzEYlEhyHNxPu_1_GuQF0FykO5twCpkDy-G3hHlcOQ,359
167
180
  lfx/components/composio/outlook_composio.py,sha256=v2mY1gtjUYsTDBD2TdKAUo8E-Y_2YT4ZOBLrv2qrkww,350
168
181
  lfx/components/composio/reddit_composio.py,sha256=qGeUBzwiUlk_ojDhuMfXpK2pPUXdLPLOA9LXq8W-zE4,347
169
182
  lfx/components/composio/slack_composio.py,sha256=21re5KgNjtKTqHLJ9Bc7Y87lr5UAHejgCFY2UkBNnck,27453
170
183
  lfx/components/composio/slackbot_composio.py,sha256=sTL6VbzuW-Y0rbLEP8O6ypAWoT7pNUC35JhnvP5f4mQ,354
171
184
  lfx/components/composio/supabase_composio.py,sha256=etWM40zAwrCmLQrQeN-Pa4i9YU8hr7VIf0BhYKNH1Cg,357
172
185
  lfx/components/composio/todoist_composio.py,sha256=TdmFLyBYBxTa88Hq18ZaFmS1_UjPXp2I-lRvEJcbEyI,352
186
+ lfx/components/composio/wrike_composio.py,sha256=pfLPAMoI39rY8aFtFpnSyK29vZZvdXn3Tp50HyIXncs,342
173
187
  lfx/components/composio/youtube_composio.py,sha256=EaW3f8Cthza9IkHebwjld5u2Vvwa3SyoStplCDVWy00,352
174
188
  lfx/components/confluence/__init__.py,sha256=nKM7IdrQWMVnw3vF532SNEvG5vkre9B5NXXtkjICfLo,79
175
189
  lfx/components/confluence/confluence.py,sha256=wn2TNiVaUGHLC14o7keyrVJzgiLokKyDMhJaZz8-u9Q,3076
@@ -405,7 +419,7 @@ lfx/components/processing/__init__.py,sha256=3h2cXRaJ1o7l3OQ9u2jH6HQmVDy_6wMBVy4
405
419
  lfx/components/processing/alter_metadata.py,sha256=KB2Wy5yE8v3z2Q8YSR_AcryOEd6cIOkayFvo490P2Nc,3783
406
420
  lfx/components/processing/batch_run.py,sha256=KZtEaQMuSEUsQ5qwiU-dJPMAqNE5LA83HoLk-Y646hg,7861
407
421
  lfx/components/processing/combine_text.py,sha256=Zwh0F0v8vaTzmNK0T2D1c5LaixUKVINRZE8ulPjumKg,1242
408
- lfx/components/processing/converter.py,sha256=leNULEhmnkmB5dGfOmvlqGfY50870cebjTBfFFHAnX4,5140
422
+ lfx/components/processing/converter.py,sha256=qsI7gHGCcUXqZZLjjx7meY0XvwCnttXCbG6labTFiZg,7912
409
423
  lfx/components/processing/create_data.py,sha256=PdoGU7hmDnLAtBxTTZQH72_B3mOdl8GDGcGgzrzsEkg,4422
410
424
  lfx/components/processing/data_operations.py,sha256=9dloD4ZEvwlpQwpV2Tig6sGwWTOxWXb9gMX6RO_hiL0,21515
411
425
  lfx/components/processing/data_to_dataframe.py,sha256=5RT98DzwOHEzX0VHr1376sDiSw0GVpdLmF4zYT4XuVU,2323
@@ -542,7 +556,7 @@ lfx/custom/code_parser/__init__.py,sha256=qIwZQdEp1z7ldn0z-GY44wmwRaywN3L6VPoPt6
542
556
  lfx/custom/code_parser/code_parser.py,sha256=QAqsp4QF607319dClK60BsaiwZLV55n0xeGR-DthSoE,14280
543
557
  lfx/custom/custom_component/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
544
558
  lfx/custom/custom_component/base_component.py,sha256=Pxi-qCocrGIwcG0x5fu-7ty1Py71bl_KG9Fku5SeO_M,4053
545
- lfx/custom/custom_component/component.py,sha256=fQFBZ-LrlMQBMZkwABYFUG943AjKpbRibeICjHPJnL4,74260
559
+ lfx/custom/custom_component/component.py,sha256=dhsRmVp5i8Q6NUZ2Ac5FReP68OhW8mbYn7MzQlJdxWI,74349
546
560
  lfx/custom/custom_component/component_with_cache.py,sha256=por6CiPL3EHdLp_DvfI7qz1n4tc1KkqMOJNbsxoqVaI,313
547
561
  lfx/custom/custom_component/custom_component.py,sha256=u330P-UbRXKeO-ughl2rCyvEbgdq-igTNFYEoKQLJzI,22306
548
562
  lfx/custom/directory_reader/__init__.py,sha256=eFjlhKjpt2Kha_sJ2EqWofLRbpvfOTjvDSCpdpaTqWk,77
@@ -694,7 +708,7 @@ lfx/utils/schemas.py,sha256=NbOtVQBrn4d0BAu-0H_eCTZI2CXkKZlRY37XCSmuJwc,3865
694
708
  lfx/utils/util.py,sha256=xGR32XDRr_TtruhjnXfI7lEWmk-vgywHAy3kz5SBowc,15725
695
709
  lfx/utils/util_strings.py,sha256=nU_IcdphNaj6bAPbjeL-c1cInQPfTBit8mp5Y57lwQk,1686
696
710
  lfx/utils/version.py,sha256=cHpbO0OJD2JQAvVaTH_6ibYeFbHJV0QDHs_YXXZ-bT8,671
697
- lfx_nightly-0.1.12.dev10.dist-info/METADATA,sha256=XrIP__1NjLO3AeNC4MExusj2l9Vwtj6_FwdaHXxB5Ho,8068
698
- lfx_nightly-0.1.12.dev10.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
699
- lfx_nightly-0.1.12.dev10.dist-info/entry_points.txt,sha256=1724p3RHDQRT2CKx_QRzEIa7sFuSVO0Ux70YfXfoMT4,42
700
- lfx_nightly-0.1.12.dev10.dist-info/RECORD,,
711
+ lfx_nightly-0.1.12.dev11.dist-info/METADATA,sha256=MP9pZfyJCZ0ArjAdz5fuYy6GGeErHGt35bRi4qR68Ws,8068
712
+ lfx_nightly-0.1.12.dev11.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
713
+ lfx_nightly-0.1.12.dev11.dist-info/entry_points.txt,sha256=1724p3RHDQRT2CKx_QRzEIa7sFuSVO0Ux70YfXfoMT4,42
714
+ lfx_nightly-0.1.12.dev11.dist-info/RECORD,,