lfx-nightly 0.1.11.dev0__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.
Files changed (699) hide show
  1. lfx/__init__.py +0 -0
  2. lfx/__main__.py +25 -0
  3. lfx/base/__init__.py +0 -0
  4. lfx/base/agents/__init__.py +0 -0
  5. lfx/base/agents/agent.py +268 -0
  6. lfx/base/agents/callback.py +130 -0
  7. lfx/base/agents/context.py +109 -0
  8. lfx/base/agents/crewai/__init__.py +0 -0
  9. lfx/base/agents/crewai/crew.py +231 -0
  10. lfx/base/agents/crewai/tasks.py +12 -0
  11. lfx/base/agents/default_prompts.py +23 -0
  12. lfx/base/agents/errors.py +15 -0
  13. lfx/base/agents/events.py +346 -0
  14. lfx/base/agents/utils.py +205 -0
  15. lfx/base/astra_assistants/__init__.py +0 -0
  16. lfx/base/astra_assistants/util.py +171 -0
  17. lfx/base/chains/__init__.py +0 -0
  18. lfx/base/chains/model.py +19 -0
  19. lfx/base/composio/__init__.py +0 -0
  20. lfx/base/composio/composio_base.py +1291 -0
  21. lfx/base/compressors/__init__.py +0 -0
  22. lfx/base/compressors/model.py +60 -0
  23. lfx/base/constants.py +46 -0
  24. lfx/base/curl/__init__.py +0 -0
  25. lfx/base/curl/parse.py +188 -0
  26. lfx/base/data/__init__.py +5 -0
  27. lfx/base/data/base_file.py +685 -0
  28. lfx/base/data/docling_utils.py +245 -0
  29. lfx/base/data/utils.py +198 -0
  30. lfx/base/document_transformers/__init__.py +0 -0
  31. lfx/base/document_transformers/model.py +43 -0
  32. lfx/base/embeddings/__init__.py +0 -0
  33. lfx/base/embeddings/aiml_embeddings.py +62 -0
  34. lfx/base/embeddings/model.py +26 -0
  35. lfx/base/flow_processing/__init__.py +0 -0
  36. lfx/base/flow_processing/utils.py +86 -0
  37. lfx/base/huggingface/__init__.py +0 -0
  38. lfx/base/huggingface/model_bridge.py +133 -0
  39. lfx/base/io/__init__.py +0 -0
  40. lfx/base/io/chat.py +20 -0
  41. lfx/base/io/text.py +22 -0
  42. lfx/base/langchain_utilities/__init__.py +0 -0
  43. lfx/base/langchain_utilities/model.py +35 -0
  44. lfx/base/langchain_utilities/spider_constants.py +1 -0
  45. lfx/base/langwatch/__init__.py +0 -0
  46. lfx/base/langwatch/utils.py +18 -0
  47. lfx/base/mcp/__init__.py +0 -0
  48. lfx/base/mcp/constants.py +2 -0
  49. lfx/base/mcp/util.py +1398 -0
  50. lfx/base/memory/__init__.py +0 -0
  51. lfx/base/memory/memory.py +49 -0
  52. lfx/base/memory/model.py +38 -0
  53. lfx/base/models/__init__.py +3 -0
  54. lfx/base/models/aiml_constants.py +51 -0
  55. lfx/base/models/anthropic_constants.py +47 -0
  56. lfx/base/models/aws_constants.py +151 -0
  57. lfx/base/models/chat_result.py +76 -0
  58. lfx/base/models/google_generative_ai_constants.py +70 -0
  59. lfx/base/models/groq_constants.py +134 -0
  60. lfx/base/models/model.py +375 -0
  61. lfx/base/models/model_input_constants.py +307 -0
  62. lfx/base/models/model_metadata.py +41 -0
  63. lfx/base/models/model_utils.py +8 -0
  64. lfx/base/models/novita_constants.py +35 -0
  65. lfx/base/models/ollama_constants.py +49 -0
  66. lfx/base/models/openai_constants.py +122 -0
  67. lfx/base/models/sambanova_constants.py +18 -0
  68. lfx/base/processing/__init__.py +0 -0
  69. lfx/base/prompts/__init__.py +0 -0
  70. lfx/base/prompts/api_utils.py +224 -0
  71. lfx/base/prompts/utils.py +61 -0
  72. lfx/base/textsplitters/__init__.py +0 -0
  73. lfx/base/textsplitters/model.py +28 -0
  74. lfx/base/tools/__init__.py +0 -0
  75. lfx/base/tools/base.py +26 -0
  76. lfx/base/tools/component_tool.py +325 -0
  77. lfx/base/tools/constants.py +49 -0
  78. lfx/base/tools/flow_tool.py +132 -0
  79. lfx/base/tools/run_flow.py +224 -0
  80. lfx/base/vectorstores/__init__.py +0 -0
  81. lfx/base/vectorstores/model.py +193 -0
  82. lfx/base/vectorstores/utils.py +22 -0
  83. lfx/base/vectorstores/vector_store_connection_decorator.py +52 -0
  84. lfx/cli/__init__.py +5 -0
  85. lfx/cli/commands.py +319 -0
  86. lfx/cli/common.py +650 -0
  87. lfx/cli/run.py +441 -0
  88. lfx/cli/script_loader.py +247 -0
  89. lfx/cli/serve_app.py +546 -0
  90. lfx/cli/validation.py +69 -0
  91. lfx/components/FAISS/__init__.py +34 -0
  92. lfx/components/FAISS/faiss.py +111 -0
  93. lfx/components/Notion/__init__.py +19 -0
  94. lfx/components/Notion/add_content_to_page.py +269 -0
  95. lfx/components/Notion/create_page.py +94 -0
  96. lfx/components/Notion/list_database_properties.py +68 -0
  97. lfx/components/Notion/list_pages.py +122 -0
  98. lfx/components/Notion/list_users.py +77 -0
  99. lfx/components/Notion/page_content_viewer.py +93 -0
  100. lfx/components/Notion/search.py +111 -0
  101. lfx/components/Notion/update_page_property.py +114 -0
  102. lfx/components/__init__.py +411 -0
  103. lfx/components/_importing.py +42 -0
  104. lfx/components/agentql/__init__.py +3 -0
  105. lfx/components/agentql/agentql_api.py +151 -0
  106. lfx/components/agents/__init__.py +34 -0
  107. lfx/components/agents/agent.py +558 -0
  108. lfx/components/agents/mcp_component.py +501 -0
  109. lfx/components/aiml/__init__.py +37 -0
  110. lfx/components/aiml/aiml.py +112 -0
  111. lfx/components/aiml/aiml_embeddings.py +37 -0
  112. lfx/components/amazon/__init__.py +36 -0
  113. lfx/components/amazon/amazon_bedrock_embedding.py +109 -0
  114. lfx/components/amazon/amazon_bedrock_model.py +124 -0
  115. lfx/components/amazon/s3_bucket_uploader.py +211 -0
  116. lfx/components/anthropic/__init__.py +34 -0
  117. lfx/components/anthropic/anthropic.py +187 -0
  118. lfx/components/apify/__init__.py +5 -0
  119. lfx/components/apify/apify_actor.py +325 -0
  120. lfx/components/arxiv/__init__.py +3 -0
  121. lfx/components/arxiv/arxiv.py +163 -0
  122. lfx/components/assemblyai/__init__.py +46 -0
  123. lfx/components/assemblyai/assemblyai_get_subtitles.py +83 -0
  124. lfx/components/assemblyai/assemblyai_lemur.py +183 -0
  125. lfx/components/assemblyai/assemblyai_list_transcripts.py +95 -0
  126. lfx/components/assemblyai/assemblyai_poll_transcript.py +72 -0
  127. lfx/components/assemblyai/assemblyai_start_transcript.py +188 -0
  128. lfx/components/azure/__init__.py +37 -0
  129. lfx/components/azure/azure_openai.py +95 -0
  130. lfx/components/azure/azure_openai_embeddings.py +83 -0
  131. lfx/components/baidu/__init__.py +32 -0
  132. lfx/components/baidu/baidu_qianfan_chat.py +113 -0
  133. lfx/components/bing/__init__.py +3 -0
  134. lfx/components/bing/bing_search_api.py +61 -0
  135. lfx/components/cassandra/__init__.py +40 -0
  136. lfx/components/cassandra/cassandra.py +264 -0
  137. lfx/components/cassandra/cassandra_chat.py +92 -0
  138. lfx/components/cassandra/cassandra_graph.py +238 -0
  139. lfx/components/chains/__init__.py +3 -0
  140. lfx/components/chroma/__init__.py +34 -0
  141. lfx/components/chroma/chroma.py +167 -0
  142. lfx/components/cleanlab/__init__.py +40 -0
  143. lfx/components/cleanlab/cleanlab_evaluator.py +155 -0
  144. lfx/components/cleanlab/cleanlab_rag_evaluator.py +254 -0
  145. lfx/components/cleanlab/cleanlab_remediator.py +131 -0
  146. lfx/components/clickhouse/__init__.py +34 -0
  147. lfx/components/clickhouse/clickhouse.py +135 -0
  148. lfx/components/cloudflare/__init__.py +32 -0
  149. lfx/components/cloudflare/cloudflare.py +81 -0
  150. lfx/components/cohere/__init__.py +40 -0
  151. lfx/components/cohere/cohere_embeddings.py +81 -0
  152. lfx/components/cohere/cohere_models.py +46 -0
  153. lfx/components/cohere/cohere_rerank.py +51 -0
  154. lfx/components/composio/__init__.py +74 -0
  155. lfx/components/composio/composio_api.py +268 -0
  156. lfx/components/composio/dropbox_compnent.py +11 -0
  157. lfx/components/composio/github_composio.py +11 -0
  158. lfx/components/composio/gmail_composio.py +38 -0
  159. lfx/components/composio/googlecalendar_composio.py +11 -0
  160. lfx/components/composio/googlemeet_composio.py +11 -0
  161. lfx/components/composio/googletasks_composio.py +8 -0
  162. lfx/components/composio/linear_composio.py +11 -0
  163. lfx/components/composio/outlook_composio.py +11 -0
  164. lfx/components/composio/reddit_composio.py +11 -0
  165. lfx/components/composio/slack_composio.py +582 -0
  166. lfx/components/composio/slackbot_composio.py +11 -0
  167. lfx/components/composio/supabase_composio.py +11 -0
  168. lfx/components/composio/todoist_composio.py +11 -0
  169. lfx/components/composio/youtube_composio.py +11 -0
  170. lfx/components/confluence/__init__.py +3 -0
  171. lfx/components/confluence/confluence.py +84 -0
  172. lfx/components/couchbase/__init__.py +34 -0
  173. lfx/components/couchbase/couchbase.py +102 -0
  174. lfx/components/crewai/__init__.py +49 -0
  175. lfx/components/crewai/crewai.py +107 -0
  176. lfx/components/crewai/hierarchical_crew.py +46 -0
  177. lfx/components/crewai/hierarchical_task.py +44 -0
  178. lfx/components/crewai/sequential_crew.py +52 -0
  179. lfx/components/crewai/sequential_task.py +73 -0
  180. lfx/components/crewai/sequential_task_agent.py +143 -0
  181. lfx/components/custom_component/__init__.py +34 -0
  182. lfx/components/custom_component/custom_component.py +31 -0
  183. lfx/components/data/__init__.py +64 -0
  184. lfx/components/data/api_request.py +544 -0
  185. lfx/components/data/csv_to_data.py +95 -0
  186. lfx/components/data/directory.py +113 -0
  187. lfx/components/data/file.py +577 -0
  188. lfx/components/data/json_to_data.py +98 -0
  189. lfx/components/data/news_search.py +164 -0
  190. lfx/components/data/rss.py +69 -0
  191. lfx/components/data/sql_executor.py +101 -0
  192. lfx/components/data/url.py +311 -0
  193. lfx/components/data/web_search.py +112 -0
  194. lfx/components/data/webhook.py +56 -0
  195. lfx/components/datastax/__init__.py +70 -0
  196. lfx/components/datastax/astra_assistant_manager.py +306 -0
  197. lfx/components/datastax/astra_db.py +75 -0
  198. lfx/components/datastax/astra_vectorize.py +124 -0
  199. lfx/components/datastax/astradb.py +1285 -0
  200. lfx/components/datastax/astradb_cql.py +314 -0
  201. lfx/components/datastax/astradb_graph.py +330 -0
  202. lfx/components/datastax/astradb_tool.py +414 -0
  203. lfx/components/datastax/astradb_vectorstore.py +1285 -0
  204. lfx/components/datastax/cassandra.py +92 -0
  205. lfx/components/datastax/create_assistant.py +58 -0
  206. lfx/components/datastax/create_thread.py +32 -0
  207. lfx/components/datastax/dotenv.py +35 -0
  208. lfx/components/datastax/get_assistant.py +37 -0
  209. lfx/components/datastax/getenvvar.py +30 -0
  210. lfx/components/datastax/graph_rag.py +141 -0
  211. lfx/components/datastax/hcd.py +314 -0
  212. lfx/components/datastax/list_assistants.py +25 -0
  213. lfx/components/datastax/run.py +89 -0
  214. lfx/components/deactivated/__init__.py +15 -0
  215. lfx/components/deactivated/amazon_kendra.py +66 -0
  216. lfx/components/deactivated/chat_litellm_model.py +158 -0
  217. lfx/components/deactivated/code_block_extractor.py +26 -0
  218. lfx/components/deactivated/documents_to_data.py +22 -0
  219. lfx/components/deactivated/embed.py +16 -0
  220. lfx/components/deactivated/extract_key_from_data.py +46 -0
  221. lfx/components/deactivated/json_document_builder.py +57 -0
  222. lfx/components/deactivated/list_flows.py +20 -0
  223. lfx/components/deactivated/mcp_sse.py +61 -0
  224. lfx/components/deactivated/mcp_stdio.py +62 -0
  225. lfx/components/deactivated/merge_data.py +93 -0
  226. lfx/components/deactivated/message.py +37 -0
  227. lfx/components/deactivated/metal.py +54 -0
  228. lfx/components/deactivated/multi_query.py +59 -0
  229. lfx/components/deactivated/retriever.py +43 -0
  230. lfx/components/deactivated/selective_passthrough.py +77 -0
  231. lfx/components/deactivated/should_run_next.py +40 -0
  232. lfx/components/deactivated/split_text.py +63 -0
  233. lfx/components/deactivated/store_message.py +24 -0
  234. lfx/components/deactivated/sub_flow.py +124 -0
  235. lfx/components/deactivated/vectara_self_query.py +76 -0
  236. lfx/components/deactivated/vector_store.py +24 -0
  237. lfx/components/deepseek/__init__.py +34 -0
  238. lfx/components/deepseek/deepseek.py +136 -0
  239. lfx/components/docling/__init__.py +43 -0
  240. lfx/components/docling/chunk_docling_document.py +186 -0
  241. lfx/components/docling/docling_inline.py +231 -0
  242. lfx/components/docling/docling_remote.py +193 -0
  243. lfx/components/docling/export_docling_document.py +117 -0
  244. lfx/components/documentloaders/__init__.py +3 -0
  245. lfx/components/duckduckgo/__init__.py +3 -0
  246. lfx/components/duckduckgo/duck_duck_go_search_run.py +92 -0
  247. lfx/components/elastic/__init__.py +37 -0
  248. lfx/components/elastic/elasticsearch.py +267 -0
  249. lfx/components/elastic/opensearch.py +243 -0
  250. lfx/components/embeddings/__init__.py +37 -0
  251. lfx/components/embeddings/similarity.py +76 -0
  252. lfx/components/embeddings/text_embedder.py +64 -0
  253. lfx/components/exa/__init__.py +3 -0
  254. lfx/components/exa/exa_search.py +68 -0
  255. lfx/components/firecrawl/__init__.py +43 -0
  256. lfx/components/firecrawl/firecrawl_crawl_api.py +88 -0
  257. lfx/components/firecrawl/firecrawl_extract_api.py +136 -0
  258. lfx/components/firecrawl/firecrawl_map_api.py +89 -0
  259. lfx/components/firecrawl/firecrawl_scrape_api.py +73 -0
  260. lfx/components/git/__init__.py +4 -0
  261. lfx/components/git/git.py +262 -0
  262. lfx/components/git/gitextractor.py +196 -0
  263. lfx/components/glean/__init__.py +3 -0
  264. lfx/components/glean/glean_search_api.py +173 -0
  265. lfx/components/google/__init__.py +17 -0
  266. lfx/components/google/gmail.py +192 -0
  267. lfx/components/google/google_bq_sql_executor.py +157 -0
  268. lfx/components/google/google_drive.py +92 -0
  269. lfx/components/google/google_drive_search.py +152 -0
  270. lfx/components/google/google_generative_ai.py +147 -0
  271. lfx/components/google/google_generative_ai_embeddings.py +141 -0
  272. lfx/components/google/google_oauth_token.py +89 -0
  273. lfx/components/google/google_search_api_core.py +68 -0
  274. lfx/components/google/google_serper_api_core.py +74 -0
  275. lfx/components/groq/__init__.py +34 -0
  276. lfx/components/groq/groq.py +136 -0
  277. lfx/components/helpers/__init__.py +52 -0
  278. lfx/components/helpers/calculator_core.py +89 -0
  279. lfx/components/helpers/create_list.py +40 -0
  280. lfx/components/helpers/current_date.py +42 -0
  281. lfx/components/helpers/id_generator.py +42 -0
  282. lfx/components/helpers/memory.py +251 -0
  283. lfx/components/helpers/output_parser.py +45 -0
  284. lfx/components/helpers/store_message.py +90 -0
  285. lfx/components/homeassistant/__init__.py +7 -0
  286. lfx/components/homeassistant/home_assistant_control.py +152 -0
  287. lfx/components/homeassistant/list_home_assistant_states.py +137 -0
  288. lfx/components/huggingface/__init__.py +37 -0
  289. lfx/components/huggingface/huggingface.py +197 -0
  290. lfx/components/huggingface/huggingface_inference_api.py +106 -0
  291. lfx/components/ibm/__init__.py +34 -0
  292. lfx/components/ibm/watsonx.py +203 -0
  293. lfx/components/ibm/watsonx_embeddings.py +135 -0
  294. lfx/components/icosacomputing/__init__.py +5 -0
  295. lfx/components/icosacomputing/combinatorial_reasoner.py +84 -0
  296. lfx/components/input_output/__init__.py +38 -0
  297. lfx/components/input_output/chat.py +120 -0
  298. lfx/components/input_output/chat_output.py +200 -0
  299. lfx/components/input_output/text.py +27 -0
  300. lfx/components/input_output/text_output.py +29 -0
  301. lfx/components/jigsawstack/__init__.py +23 -0
  302. lfx/components/jigsawstack/ai_scrape.py +126 -0
  303. lfx/components/jigsawstack/ai_web_search.py +136 -0
  304. lfx/components/jigsawstack/file_read.py +115 -0
  305. lfx/components/jigsawstack/file_upload.py +94 -0
  306. lfx/components/jigsawstack/image_generation.py +205 -0
  307. lfx/components/jigsawstack/nsfw.py +60 -0
  308. lfx/components/jigsawstack/object_detection.py +124 -0
  309. lfx/components/jigsawstack/sentiment.py +112 -0
  310. lfx/components/jigsawstack/text_to_sql.py +90 -0
  311. lfx/components/jigsawstack/text_translate.py +77 -0
  312. lfx/components/jigsawstack/vocr.py +107 -0
  313. lfx/components/langchain_utilities/__init__.py +109 -0
  314. lfx/components/langchain_utilities/character.py +53 -0
  315. lfx/components/langchain_utilities/conversation.py +59 -0
  316. lfx/components/langchain_utilities/csv_agent.py +107 -0
  317. lfx/components/langchain_utilities/fake_embeddings.py +26 -0
  318. lfx/components/langchain_utilities/html_link_extractor.py +35 -0
  319. lfx/components/langchain_utilities/json_agent.py +45 -0
  320. lfx/components/langchain_utilities/langchain_hub.py +126 -0
  321. lfx/components/langchain_utilities/language_recursive.py +49 -0
  322. lfx/components/langchain_utilities/language_semantic.py +138 -0
  323. lfx/components/langchain_utilities/llm_checker.py +39 -0
  324. lfx/components/langchain_utilities/llm_math.py +42 -0
  325. lfx/components/langchain_utilities/natural_language.py +61 -0
  326. lfx/components/langchain_utilities/openai_tools.py +53 -0
  327. lfx/components/langchain_utilities/openapi.py +48 -0
  328. lfx/components/langchain_utilities/recursive_character.py +60 -0
  329. lfx/components/langchain_utilities/retrieval_qa.py +83 -0
  330. lfx/components/langchain_utilities/runnable_executor.py +137 -0
  331. lfx/components/langchain_utilities/self_query.py +80 -0
  332. lfx/components/langchain_utilities/spider.py +142 -0
  333. lfx/components/langchain_utilities/sql.py +40 -0
  334. lfx/components/langchain_utilities/sql_database.py +35 -0
  335. lfx/components/langchain_utilities/sql_generator.py +78 -0
  336. lfx/components/langchain_utilities/tool_calling.py +59 -0
  337. lfx/components/langchain_utilities/vector_store_info.py +49 -0
  338. lfx/components/langchain_utilities/vector_store_router.py +33 -0
  339. lfx/components/langchain_utilities/xml_agent.py +71 -0
  340. lfx/components/langwatch/__init__.py +3 -0
  341. lfx/components/langwatch/langwatch.py +278 -0
  342. lfx/components/link_extractors/__init__.py +3 -0
  343. lfx/components/lmstudio/__init__.py +34 -0
  344. lfx/components/lmstudio/lmstudioembeddings.py +89 -0
  345. lfx/components/lmstudio/lmstudiomodel.py +129 -0
  346. lfx/components/logic/__init__.py +52 -0
  347. lfx/components/logic/conditional_router.py +171 -0
  348. lfx/components/logic/data_conditional_router.py +125 -0
  349. lfx/components/logic/flow_tool.py +110 -0
  350. lfx/components/logic/listen.py +29 -0
  351. lfx/components/logic/loop.py +125 -0
  352. lfx/components/logic/notify.py +88 -0
  353. lfx/components/logic/pass_message.py +35 -0
  354. lfx/components/logic/run_flow.py +71 -0
  355. lfx/components/logic/sub_flow.py +114 -0
  356. lfx/components/maritalk/__init__.py +32 -0
  357. lfx/components/maritalk/maritalk.py +52 -0
  358. lfx/components/mem0/__init__.py +3 -0
  359. lfx/components/mem0/mem0_chat_memory.py +136 -0
  360. lfx/components/milvus/__init__.py +34 -0
  361. lfx/components/milvus/milvus.py +115 -0
  362. lfx/components/mistral/__init__.py +37 -0
  363. lfx/components/mistral/mistral.py +114 -0
  364. lfx/components/mistral/mistral_embeddings.py +58 -0
  365. lfx/components/models/__init__.py +34 -0
  366. lfx/components/models/embedding_model.py +114 -0
  367. lfx/components/models/language_model.py +144 -0
  368. lfx/components/mongodb/__init__.py +34 -0
  369. lfx/components/mongodb/mongodb_atlas.py +213 -0
  370. lfx/components/needle/__init__.py +3 -0
  371. lfx/components/needle/needle.py +104 -0
  372. lfx/components/notdiamond/__init__.py +34 -0
  373. lfx/components/notdiamond/notdiamond.py +228 -0
  374. lfx/components/novita/__init__.py +32 -0
  375. lfx/components/novita/novita.py +130 -0
  376. lfx/components/nvidia/__init__.py +57 -0
  377. lfx/components/nvidia/nvidia.py +157 -0
  378. lfx/components/nvidia/nvidia_embedding.py +77 -0
  379. lfx/components/nvidia/nvidia_ingest.py +317 -0
  380. lfx/components/nvidia/nvidia_rerank.py +63 -0
  381. lfx/components/nvidia/system_assist.py +65 -0
  382. lfx/components/olivya/__init__.py +3 -0
  383. lfx/components/olivya/olivya.py +116 -0
  384. lfx/components/ollama/__init__.py +37 -0
  385. lfx/components/ollama/ollama.py +330 -0
  386. lfx/components/ollama/ollama_embeddings.py +106 -0
  387. lfx/components/openai/__init__.py +37 -0
  388. lfx/components/openai/openai.py +100 -0
  389. lfx/components/openai/openai_chat_model.py +176 -0
  390. lfx/components/openrouter/__init__.py +32 -0
  391. lfx/components/openrouter/openrouter.py +202 -0
  392. lfx/components/output_parsers/__init__.py +3 -0
  393. lfx/components/perplexity/__init__.py +34 -0
  394. lfx/components/perplexity/perplexity.py +75 -0
  395. lfx/components/pgvector/__init__.py +34 -0
  396. lfx/components/pgvector/pgvector.py +72 -0
  397. lfx/components/pinecone/__init__.py +34 -0
  398. lfx/components/pinecone/pinecone.py +134 -0
  399. lfx/components/processing/__init__.py +117 -0
  400. lfx/components/processing/alter_metadata.py +108 -0
  401. lfx/components/processing/batch_run.py +205 -0
  402. lfx/components/processing/combine_text.py +39 -0
  403. lfx/components/processing/converter.py +159 -0
  404. lfx/components/processing/create_data.py +110 -0
  405. lfx/components/processing/data_operations.py +438 -0
  406. lfx/components/processing/data_to_dataframe.py +70 -0
  407. lfx/components/processing/dataframe_operations.py +313 -0
  408. lfx/components/processing/extract_key.py +53 -0
  409. lfx/components/processing/filter_data.py +42 -0
  410. lfx/components/processing/filter_data_values.py +88 -0
  411. lfx/components/processing/json_cleaner.py +103 -0
  412. lfx/components/processing/lambda_filter.py +154 -0
  413. lfx/components/processing/llm_router.py +499 -0
  414. lfx/components/processing/merge_data.py +90 -0
  415. lfx/components/processing/message_to_data.py +36 -0
  416. lfx/components/processing/parse_data.py +70 -0
  417. lfx/components/processing/parse_dataframe.py +68 -0
  418. lfx/components/processing/parse_json_data.py +90 -0
  419. lfx/components/processing/parser.py +143 -0
  420. lfx/components/processing/prompt.py +67 -0
  421. lfx/components/processing/python_repl_core.py +98 -0
  422. lfx/components/processing/regex.py +82 -0
  423. lfx/components/processing/save_file.py +225 -0
  424. lfx/components/processing/select_data.py +48 -0
  425. lfx/components/processing/split_text.py +141 -0
  426. lfx/components/processing/structured_output.py +202 -0
  427. lfx/components/processing/update_data.py +160 -0
  428. lfx/components/prototypes/__init__.py +34 -0
  429. lfx/components/prototypes/python_function.py +73 -0
  430. lfx/components/qdrant/__init__.py +34 -0
  431. lfx/components/qdrant/qdrant.py +109 -0
  432. lfx/components/redis/__init__.py +37 -0
  433. lfx/components/redis/redis.py +89 -0
  434. lfx/components/redis/redis_chat.py +43 -0
  435. lfx/components/sambanova/__init__.py +32 -0
  436. lfx/components/sambanova/sambanova.py +84 -0
  437. lfx/components/scrapegraph/__init__.py +40 -0
  438. lfx/components/scrapegraph/scrapegraph_markdownify_api.py +64 -0
  439. lfx/components/scrapegraph/scrapegraph_search_api.py +64 -0
  440. lfx/components/scrapegraph/scrapegraph_smart_scraper_api.py +71 -0
  441. lfx/components/searchapi/__init__.py +34 -0
  442. lfx/components/searchapi/search.py +79 -0
  443. lfx/components/serpapi/__init__.py +3 -0
  444. lfx/components/serpapi/serp.py +115 -0
  445. lfx/components/supabase/__init__.py +34 -0
  446. lfx/components/supabase/supabase.py +76 -0
  447. lfx/components/tavily/__init__.py +4 -0
  448. lfx/components/tavily/tavily_extract.py +117 -0
  449. lfx/components/tavily/tavily_search.py +212 -0
  450. lfx/components/textsplitters/__init__.py +3 -0
  451. lfx/components/toolkits/__init__.py +3 -0
  452. lfx/components/tools/__init__.py +72 -0
  453. lfx/components/tools/calculator.py +108 -0
  454. lfx/components/tools/google_search_api.py +45 -0
  455. lfx/components/tools/google_serper_api.py +115 -0
  456. lfx/components/tools/python_code_structured_tool.py +327 -0
  457. lfx/components/tools/python_repl.py +97 -0
  458. lfx/components/tools/search_api.py +87 -0
  459. lfx/components/tools/searxng.py +145 -0
  460. lfx/components/tools/serp_api.py +119 -0
  461. lfx/components/tools/tavily_search_tool.py +344 -0
  462. lfx/components/tools/wikidata_api.py +102 -0
  463. lfx/components/tools/wikipedia_api.py +49 -0
  464. lfx/components/tools/yahoo_finance.py +129 -0
  465. lfx/components/twelvelabs/__init__.py +52 -0
  466. lfx/components/twelvelabs/convert_astra_results.py +84 -0
  467. lfx/components/twelvelabs/pegasus_index.py +311 -0
  468. lfx/components/twelvelabs/split_video.py +291 -0
  469. lfx/components/twelvelabs/text_embeddings.py +57 -0
  470. lfx/components/twelvelabs/twelvelabs_pegasus.py +408 -0
  471. lfx/components/twelvelabs/video_embeddings.py +100 -0
  472. lfx/components/twelvelabs/video_file.py +179 -0
  473. lfx/components/unstructured/__init__.py +3 -0
  474. lfx/components/unstructured/unstructured.py +121 -0
  475. lfx/components/upstash/__init__.py +34 -0
  476. lfx/components/upstash/upstash.py +124 -0
  477. lfx/components/vectara/__init__.py +37 -0
  478. lfx/components/vectara/vectara.py +97 -0
  479. lfx/components/vectara/vectara_rag.py +164 -0
  480. lfx/components/vectorstores/__init__.py +40 -0
  481. lfx/components/vectorstores/astradb.py +1285 -0
  482. lfx/components/vectorstores/astradb_graph.py +319 -0
  483. lfx/components/vectorstores/cassandra.py +264 -0
  484. lfx/components/vectorstores/cassandra_graph.py +238 -0
  485. lfx/components/vectorstores/chroma.py +167 -0
  486. lfx/components/vectorstores/clickhouse.py +135 -0
  487. lfx/components/vectorstores/couchbase.py +102 -0
  488. lfx/components/vectorstores/elasticsearch.py +267 -0
  489. lfx/components/vectorstores/faiss.py +111 -0
  490. lfx/components/vectorstores/graph_rag.py +141 -0
  491. lfx/components/vectorstores/hcd.py +314 -0
  492. lfx/components/vectorstores/local_db.py +261 -0
  493. lfx/components/vectorstores/milvus.py +115 -0
  494. lfx/components/vectorstores/mongodb_atlas.py +213 -0
  495. lfx/components/vectorstores/opensearch.py +243 -0
  496. lfx/components/vectorstores/pgvector.py +72 -0
  497. lfx/components/vectorstores/pinecone.py +134 -0
  498. lfx/components/vectorstores/qdrant.py +109 -0
  499. lfx/components/vectorstores/supabase.py +76 -0
  500. lfx/components/vectorstores/upstash.py +124 -0
  501. lfx/components/vectorstores/vectara.py +97 -0
  502. lfx/components/vectorstores/vectara_rag.py +164 -0
  503. lfx/components/vectorstores/weaviate.py +89 -0
  504. lfx/components/vertexai/__init__.py +37 -0
  505. lfx/components/vertexai/vertexai.py +71 -0
  506. lfx/components/vertexai/vertexai_embeddings.py +67 -0
  507. lfx/components/weaviate/__init__.py +34 -0
  508. lfx/components/weaviate/weaviate.py +89 -0
  509. lfx/components/wikipedia/__init__.py +4 -0
  510. lfx/components/wikipedia/wikidata.py +86 -0
  511. lfx/components/wikipedia/wikipedia.py +53 -0
  512. lfx/components/wolframalpha/__init__.py +3 -0
  513. lfx/components/wolframalpha/wolfram_alpha_api.py +54 -0
  514. lfx/components/xai/__init__.py +32 -0
  515. lfx/components/xai/xai.py +167 -0
  516. lfx/components/yahoosearch/__init__.py +3 -0
  517. lfx/components/yahoosearch/yahoo.py +137 -0
  518. lfx/components/youtube/__init__.py +52 -0
  519. lfx/components/youtube/channel.py +227 -0
  520. lfx/components/youtube/comments.py +231 -0
  521. lfx/components/youtube/playlist.py +33 -0
  522. lfx/components/youtube/search.py +120 -0
  523. lfx/components/youtube/trending.py +285 -0
  524. lfx/components/youtube/video_details.py +263 -0
  525. lfx/components/youtube/youtube_transcripts.py +118 -0
  526. lfx/components/zep/__init__.py +3 -0
  527. lfx/components/zep/zep.py +44 -0
  528. lfx/constants.py +6 -0
  529. lfx/custom/__init__.py +7 -0
  530. lfx/custom/attributes.py +86 -0
  531. lfx/custom/code_parser/__init__.py +3 -0
  532. lfx/custom/code_parser/code_parser.py +361 -0
  533. lfx/custom/custom_component/__init__.py +0 -0
  534. lfx/custom/custom_component/base_component.py +128 -0
  535. lfx/custom/custom_component/component.py +1808 -0
  536. lfx/custom/custom_component/component_with_cache.py +8 -0
  537. lfx/custom/custom_component/custom_component.py +588 -0
  538. lfx/custom/dependency_analyzer.py +165 -0
  539. lfx/custom/directory_reader/__init__.py +3 -0
  540. lfx/custom/directory_reader/directory_reader.py +359 -0
  541. lfx/custom/directory_reader/utils.py +171 -0
  542. lfx/custom/eval.py +12 -0
  543. lfx/custom/schema.py +32 -0
  544. lfx/custom/tree_visitor.py +21 -0
  545. lfx/custom/utils.py +877 -0
  546. lfx/custom/validate.py +488 -0
  547. lfx/events/__init__.py +1 -0
  548. lfx/events/event_manager.py +110 -0
  549. lfx/exceptions/__init__.py +0 -0
  550. lfx/exceptions/component.py +15 -0
  551. lfx/field_typing/__init__.py +91 -0
  552. lfx/field_typing/constants.py +215 -0
  553. lfx/field_typing/range_spec.py +35 -0
  554. lfx/graph/__init__.py +6 -0
  555. lfx/graph/edge/__init__.py +0 -0
  556. lfx/graph/edge/base.py +277 -0
  557. lfx/graph/edge/schema.py +119 -0
  558. lfx/graph/edge/utils.py +0 -0
  559. lfx/graph/graph/__init__.py +0 -0
  560. lfx/graph/graph/ascii.py +202 -0
  561. lfx/graph/graph/base.py +2238 -0
  562. lfx/graph/graph/constants.py +63 -0
  563. lfx/graph/graph/runnable_vertices_manager.py +133 -0
  564. lfx/graph/graph/schema.py +52 -0
  565. lfx/graph/graph/state_model.py +66 -0
  566. lfx/graph/graph/utils.py +1024 -0
  567. lfx/graph/schema.py +75 -0
  568. lfx/graph/state/__init__.py +0 -0
  569. lfx/graph/state/model.py +237 -0
  570. lfx/graph/utils.py +200 -0
  571. lfx/graph/vertex/__init__.py +0 -0
  572. lfx/graph/vertex/base.py +823 -0
  573. lfx/graph/vertex/constants.py +0 -0
  574. lfx/graph/vertex/exceptions.py +4 -0
  575. lfx/graph/vertex/param_handler.py +264 -0
  576. lfx/graph/vertex/schema.py +26 -0
  577. lfx/graph/vertex/utils.py +19 -0
  578. lfx/graph/vertex/vertex_types.py +489 -0
  579. lfx/helpers/__init__.py +1 -0
  580. lfx/helpers/base_model.py +71 -0
  581. lfx/helpers/custom.py +13 -0
  582. lfx/helpers/data.py +167 -0
  583. lfx/helpers/flow.py +194 -0
  584. lfx/inputs/__init__.py +68 -0
  585. lfx/inputs/constants.py +2 -0
  586. lfx/inputs/input_mixin.py +328 -0
  587. lfx/inputs/inputs.py +714 -0
  588. lfx/inputs/validators.py +19 -0
  589. lfx/interface/__init__.py +6 -0
  590. lfx/interface/components.py +489 -0
  591. lfx/interface/importing/__init__.py +5 -0
  592. lfx/interface/importing/utils.py +39 -0
  593. lfx/interface/initialize/__init__.py +3 -0
  594. lfx/interface/initialize/loading.py +224 -0
  595. lfx/interface/listing.py +26 -0
  596. lfx/interface/run.py +16 -0
  597. lfx/interface/utils.py +111 -0
  598. lfx/io/__init__.py +63 -0
  599. lfx/io/schema.py +289 -0
  600. lfx/load/__init__.py +8 -0
  601. lfx/load/load.py +256 -0
  602. lfx/load/utils.py +99 -0
  603. lfx/log/__init__.py +5 -0
  604. lfx/log/logger.py +385 -0
  605. lfx/memory/__init__.py +90 -0
  606. lfx/memory/stubs.py +283 -0
  607. lfx/processing/__init__.py +1 -0
  608. lfx/processing/process.py +238 -0
  609. lfx/processing/utils.py +25 -0
  610. lfx/py.typed +0 -0
  611. lfx/schema/__init__.py +66 -0
  612. lfx/schema/artifact.py +83 -0
  613. lfx/schema/content_block.py +62 -0
  614. lfx/schema/content_types.py +91 -0
  615. lfx/schema/data.py +308 -0
  616. lfx/schema/dataframe.py +210 -0
  617. lfx/schema/dotdict.py +74 -0
  618. lfx/schema/encoders.py +13 -0
  619. lfx/schema/graph.py +47 -0
  620. lfx/schema/image.py +131 -0
  621. lfx/schema/json_schema.py +141 -0
  622. lfx/schema/log.py +61 -0
  623. lfx/schema/message.py +473 -0
  624. lfx/schema/openai_responses_schemas.py +74 -0
  625. lfx/schema/properties.py +41 -0
  626. lfx/schema/schema.py +171 -0
  627. lfx/schema/serialize.py +13 -0
  628. lfx/schema/table.py +140 -0
  629. lfx/schema/validators.py +114 -0
  630. lfx/serialization/__init__.py +5 -0
  631. lfx/serialization/constants.py +2 -0
  632. lfx/serialization/serialization.py +314 -0
  633. lfx/services/__init__.py +23 -0
  634. lfx/services/base.py +28 -0
  635. lfx/services/cache/__init__.py +6 -0
  636. lfx/services/cache/base.py +183 -0
  637. lfx/services/cache/service.py +166 -0
  638. lfx/services/cache/utils.py +169 -0
  639. lfx/services/chat/__init__.py +1 -0
  640. lfx/services/chat/config.py +2 -0
  641. lfx/services/chat/schema.py +10 -0
  642. lfx/services/deps.py +129 -0
  643. lfx/services/factory.py +19 -0
  644. lfx/services/initialize.py +19 -0
  645. lfx/services/interfaces.py +103 -0
  646. lfx/services/manager.py +172 -0
  647. lfx/services/schema.py +20 -0
  648. lfx/services/session.py +82 -0
  649. lfx/services/settings/__init__.py +3 -0
  650. lfx/services/settings/auth.py +130 -0
  651. lfx/services/settings/base.py +539 -0
  652. lfx/services/settings/constants.py +31 -0
  653. lfx/services/settings/factory.py +23 -0
  654. lfx/services/settings/feature_flags.py +12 -0
  655. lfx/services/settings/service.py +35 -0
  656. lfx/services/settings/utils.py +40 -0
  657. lfx/services/shared_component_cache/__init__.py +1 -0
  658. lfx/services/shared_component_cache/factory.py +30 -0
  659. lfx/services/shared_component_cache/service.py +9 -0
  660. lfx/services/storage/__init__.py +5 -0
  661. lfx/services/storage/local.py +155 -0
  662. lfx/services/storage/service.py +54 -0
  663. lfx/services/tracing/__init__.py +1 -0
  664. lfx/services/tracing/service.py +21 -0
  665. lfx/settings.py +6 -0
  666. lfx/template/__init__.py +6 -0
  667. lfx/template/field/__init__.py +0 -0
  668. lfx/template/field/base.py +257 -0
  669. lfx/template/field/prompt.py +15 -0
  670. lfx/template/frontend_node/__init__.py +6 -0
  671. lfx/template/frontend_node/base.py +212 -0
  672. lfx/template/frontend_node/constants.py +65 -0
  673. lfx/template/frontend_node/custom_components.py +79 -0
  674. lfx/template/template/__init__.py +0 -0
  675. lfx/template/template/base.py +100 -0
  676. lfx/template/utils.py +217 -0
  677. lfx/type_extraction/__init__.py +19 -0
  678. lfx/type_extraction/type_extraction.py +75 -0
  679. lfx/type_extraction.py +80 -0
  680. lfx/utils/__init__.py +1 -0
  681. lfx/utils/async_helpers.py +42 -0
  682. lfx/utils/component_utils.py +154 -0
  683. lfx/utils/concurrency.py +60 -0
  684. lfx/utils/connection_string_parser.py +11 -0
  685. lfx/utils/constants.py +205 -0
  686. lfx/utils/data_structure.py +212 -0
  687. lfx/utils/exceptions.py +22 -0
  688. lfx/utils/helpers.py +28 -0
  689. lfx/utils/image.py +73 -0
  690. lfx/utils/lazy_load.py +15 -0
  691. lfx/utils/request_utils.py +18 -0
  692. lfx/utils/schemas.py +139 -0
  693. lfx/utils/util.py +481 -0
  694. lfx/utils/util_strings.py +56 -0
  695. lfx/utils/version.py +24 -0
  696. lfx_nightly-0.1.11.dev0.dist-info/METADATA +293 -0
  697. lfx_nightly-0.1.11.dev0.dist-info/RECORD +699 -0
  698. lfx_nightly-0.1.11.dev0.dist-info/WHEEL +4 -0
  699. lfx_nightly-0.1.11.dev0.dist-info/entry_points.txt +2 -0
@@ -0,0 +1,89 @@
1
+ import json
2
+ import re
3
+ from pathlib import Path
4
+
5
+ from google.auth.transport.requests import Request
6
+ from google.oauth2.credentials import Credentials
7
+ from google_auth_oauthlib.flow import InstalledAppFlow
8
+
9
+ from lfx.custom.custom_component.component import Component
10
+ from lfx.io import FileInput, MultilineInput, Output
11
+ from lfx.schema.data import Data
12
+
13
+
14
+ class GoogleOAuthToken(Component):
15
+ display_name = "Google OAuth Token"
16
+ description = "Generates a JSON string with your Google OAuth token."
17
+ documentation: str = "https://developers.google.com/identity/protocols/oauth2/web-server?hl=pt-br#python_1"
18
+ icon = "Google"
19
+ name = "GoogleOAuthToken"
20
+ legacy: bool = True
21
+ inputs = [
22
+ MultilineInput(
23
+ name="scopes",
24
+ display_name="Scopes",
25
+ info="Input scopes for your application.",
26
+ required=True,
27
+ ),
28
+ FileInput(
29
+ name="oauth_credentials",
30
+ display_name="Credentials File",
31
+ info="Input OAuth Credentials file (e.g. credentials.json).",
32
+ file_types=["json"],
33
+ required=True,
34
+ ),
35
+ ]
36
+
37
+ outputs = [
38
+ Output(display_name="Output", name="output", method="build_output"),
39
+ ]
40
+
41
+ def validate_scopes(self, scopes):
42
+ pattern = (
43
+ r"^(https://www\.googleapis\.com/auth/[\w\.\-]+"
44
+ r"|mail\.google\.com/"
45
+ r"|www\.google\.com/calendar/feeds"
46
+ r"|www\.google\.com/m8/feeds)"
47
+ r"(,\s*https://www\.googleapis\.com/auth/[\w\.\-]+"
48
+ r"|mail\.google\.com/"
49
+ r"|www\.google\.com/calendar/feeds"
50
+ r"|www\.google\.com/m8/feeds)*$"
51
+ )
52
+ if not re.match(pattern, scopes):
53
+ error_message = "Invalid scope format."
54
+ raise ValueError(error_message)
55
+
56
+ def build_output(self) -> Data:
57
+ self.validate_scopes(self.scopes)
58
+
59
+ user_scopes = [scope.strip() for scope in self.scopes.split(",")]
60
+ if self.scopes:
61
+ scopes = user_scopes
62
+ else:
63
+ error_message = "Incorrect scope, check the scopes field."
64
+ raise ValueError(error_message)
65
+
66
+ creds = None
67
+ token_path = Path("token.json")
68
+
69
+ if token_path.exists():
70
+ creds = Credentials.from_authorized_user_file(str(token_path), scopes)
71
+
72
+ if not creds or not creds.valid:
73
+ if creds and creds.expired and creds.refresh_token:
74
+ creds.refresh(Request())
75
+ else:
76
+ if self.oauth_credentials:
77
+ client_secret_file = self.oauth_credentials
78
+ else:
79
+ error_message = "OAuth 2.0 Credentials file not provided."
80
+ raise ValueError(error_message)
81
+
82
+ flow = InstalledAppFlow.from_client_secrets_file(client_secret_file, scopes)
83
+ creds = flow.run_local_server(port=0)
84
+
85
+ token_path.write_text(creds.to_json(), encoding="utf-8")
86
+
87
+ creds_json = json.loads(creds.to_json())
88
+
89
+ return Data(data=creds_json)
@@ -0,0 +1,68 @@
1
+ from langchain_google_community import GoogleSearchAPIWrapper
2
+
3
+ from lfx.custom.custom_component.component import Component
4
+ from lfx.io import IntInput, MultilineInput, Output, SecretStrInput
5
+ from lfx.schema.dataframe import DataFrame
6
+
7
+
8
+ class GoogleSearchAPICore(Component):
9
+ display_name = "Google Search API"
10
+ description = "Call Google Search API and return results as a DataFrame."
11
+ icon = "Google"
12
+
13
+ inputs = [
14
+ SecretStrInput(
15
+ name="google_api_key",
16
+ display_name="Google API Key",
17
+ required=True,
18
+ ),
19
+ SecretStrInput(
20
+ name="google_cse_id",
21
+ display_name="Google CSE ID",
22
+ required=True,
23
+ ),
24
+ MultilineInput(
25
+ name="input_value",
26
+ display_name="Input",
27
+ tool_mode=True,
28
+ ),
29
+ IntInput(
30
+ name="k",
31
+ display_name="Number of results",
32
+ value=4,
33
+ required=True,
34
+ ),
35
+ ]
36
+
37
+ outputs = [
38
+ Output(
39
+ display_name="Results",
40
+ name="results",
41
+ type_=DataFrame,
42
+ method="search_google",
43
+ ),
44
+ ]
45
+
46
+ def search_google(self) -> DataFrame:
47
+ """Search Google using the provided query."""
48
+ if not self.google_api_key:
49
+ return DataFrame([{"error": "Invalid Google API Key"}])
50
+
51
+ if not self.google_cse_id:
52
+ return DataFrame([{"error": "Invalid Google CSE ID"}])
53
+
54
+ try:
55
+ wrapper = GoogleSearchAPIWrapper(
56
+ google_api_key=self.google_api_key, google_cse_id=self.google_cse_id, k=self.k
57
+ )
58
+ results = wrapper.results(query=self.input_value, num_results=self.k)
59
+ return DataFrame(results)
60
+ except (ValueError, KeyError) as e:
61
+ return DataFrame([{"error": f"Invalid configuration: {e!s}"}])
62
+ except ConnectionError as e:
63
+ return DataFrame([{"error": f"Connection error: {e!s}"}])
64
+ except RuntimeError as e:
65
+ return DataFrame([{"error": f"Error occurred while searching: {e!s}"}])
66
+
67
+ def build(self):
68
+ return self.search_google
@@ -0,0 +1,74 @@
1
+ from langchain_community.utilities.google_serper import GoogleSerperAPIWrapper
2
+
3
+ from lfx.custom.custom_component.component import Component
4
+ from lfx.io import IntInput, MultilineInput, Output, SecretStrInput
5
+ from lfx.schema.dataframe import DataFrame
6
+ from lfx.schema.message import Message
7
+
8
+
9
+ class GoogleSerperAPICore(Component):
10
+ display_name = "Google Serper API"
11
+ description = "Call the Serper.dev Google Search API."
12
+ icon = "Serper"
13
+
14
+ inputs = [
15
+ SecretStrInput(
16
+ name="serper_api_key",
17
+ display_name="Serper API Key",
18
+ required=True,
19
+ ),
20
+ MultilineInput(
21
+ name="input_value",
22
+ display_name="Input",
23
+ tool_mode=True,
24
+ ),
25
+ IntInput(
26
+ name="k",
27
+ display_name="Number of results",
28
+ value=4,
29
+ required=True,
30
+ ),
31
+ ]
32
+
33
+ outputs = [
34
+ Output(
35
+ display_name="Results",
36
+ name="results",
37
+ type_=DataFrame,
38
+ method="search_serper",
39
+ ),
40
+ ]
41
+
42
+ def search_serper(self) -> DataFrame:
43
+ try:
44
+ wrapper = self._build_wrapper()
45
+ results = wrapper.results(query=self.input_value)
46
+ list_results = results.get("organic", [])
47
+
48
+ # Convert results to DataFrame using list comprehension
49
+ df_data = [
50
+ {
51
+ "title": result.get("title", ""),
52
+ "link": result.get("link", ""),
53
+ "snippet": result.get("snippet", ""),
54
+ }
55
+ for result in list_results
56
+ ]
57
+
58
+ return DataFrame(df_data)
59
+ except (ValueError, KeyError, ConnectionError) as e:
60
+ error_message = f"Error occurred while searching: {e!s}"
61
+ self.status = error_message
62
+ # Return DataFrame with error as a list of dictionaries
63
+ return DataFrame([{"error": error_message}])
64
+
65
+ def text_search_serper(self) -> Message:
66
+ search_results = self.search_serper()
67
+ text_result = search_results.to_string(index=False) if not search_results.empty else "No results found."
68
+ return Message(text=text_result)
69
+
70
+ def _build_wrapper(self):
71
+ return GoogleSerperAPIWrapper(serper_api_key=self.serper_api_key, k=self.k)
72
+
73
+ def build(self):
74
+ return self.search_serper
@@ -0,0 +1,34 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING, Any
4
+
5
+ from lfx.components._importing import import_mod
6
+
7
+ if TYPE_CHECKING:
8
+ from .groq import GroqModel
9
+
10
+ _dynamic_imports = {
11
+ "GroqModel": "groq",
12
+ }
13
+
14
+ __all__ = [
15
+ "GroqModel",
16
+ ]
17
+
18
+
19
+ def __getattr__(attr_name: str) -> Any:
20
+ """Lazily import groq components on attribute access."""
21
+ if attr_name not in _dynamic_imports:
22
+ msg = f"module '{__name__}' has no attribute '{attr_name}'"
23
+ raise AttributeError(msg)
24
+ try:
25
+ result = import_mod(attr_name, _dynamic_imports[attr_name], __spec__.parent)
26
+ except (ModuleNotFoundError, ImportError, AttributeError) as e:
27
+ msg = f"Could not import '{attr_name}' from '{__name__}': {e}"
28
+ raise AttributeError(msg) from e
29
+ globals()[attr_name] = result
30
+ return result
31
+
32
+
33
+ def __dir__() -> list[str]:
34
+ return list(__all__)
@@ -0,0 +1,136 @@
1
+ import requests
2
+ from pydantic.v1 import SecretStr
3
+
4
+ from lfx.base.models.groq_constants import GROQ_MODELS, TOOL_CALLING_UNSUPPORTED_GROQ_MODELS, UNSUPPORTED_GROQ_MODELS
5
+ from lfx.base.models.model import LCModelComponent
6
+ from lfx.field_typing import LanguageModel
7
+ from lfx.field_typing.range_spec import RangeSpec
8
+ from lfx.io import BoolInput, DropdownInput, IntInput, MessageTextInput, SecretStrInput, SliderInput
9
+ from lfx.log.logger import logger
10
+
11
+
12
+ class GroqModel(LCModelComponent):
13
+ display_name: str = "Groq"
14
+ description: str = "Generate text using Groq."
15
+ icon = "Groq"
16
+ name = "GroqModel"
17
+
18
+ inputs = [
19
+ *LCModelComponent.get_base_inputs(),
20
+ SecretStrInput(
21
+ name="api_key", display_name="Groq API Key", info="API key for the Groq API.", real_time_refresh=True
22
+ ),
23
+ MessageTextInput(
24
+ name="base_url",
25
+ display_name="Groq API Base",
26
+ info="Base URL path for API requests, leave blank if not using a proxy or service emulator.",
27
+ advanced=True,
28
+ value="https://api.groq.com",
29
+ real_time_refresh=True,
30
+ ),
31
+ IntInput(
32
+ name="max_tokens",
33
+ display_name="Max Output Tokens",
34
+ info="The maximum number of tokens to generate.",
35
+ advanced=True,
36
+ ),
37
+ SliderInput(
38
+ name="temperature",
39
+ display_name="Temperature",
40
+ value=0.1,
41
+ info="Run inference with this temperature. Must by in the closed interval [0.0, 1.0].",
42
+ range_spec=RangeSpec(min=0, max=1, step=0.01),
43
+ advanced=True,
44
+ ),
45
+ IntInput(
46
+ name="n",
47
+ display_name="N",
48
+ info="Number of chat completions to generate for each prompt. "
49
+ "Note that the API may not return the full n completions if duplicates are generated.",
50
+ advanced=True,
51
+ ),
52
+ DropdownInput(
53
+ name="model_name",
54
+ display_name="Model",
55
+ info="The name of the model to use.",
56
+ options=GROQ_MODELS,
57
+ value=GROQ_MODELS[0],
58
+ refresh_button=True,
59
+ combobox=True,
60
+ ),
61
+ BoolInput(
62
+ name="tool_model_enabled",
63
+ display_name="Enable Tool Models",
64
+ info=(
65
+ "Select if you want to use models that can work with tools. If yes, only those models will be shown."
66
+ ),
67
+ advanced=False,
68
+ value=False,
69
+ real_time_refresh=True,
70
+ ),
71
+ ]
72
+
73
+ def get_models(self, *, tool_model_enabled: bool | None = None) -> list[str]:
74
+ try:
75
+ url = f"{self.base_url}/openai/v1/models"
76
+ headers = {"Authorization": f"Bearer {self.api_key}", "Content-Type": "application/json"}
77
+
78
+ response = requests.get(url, headers=headers, timeout=10)
79
+ response.raise_for_status()
80
+ model_list = response.json()
81
+ model_ids = [
82
+ model["id"] for model in model_list.get("data", []) if model["id"] not in UNSUPPORTED_GROQ_MODELS
83
+ ]
84
+ except (ImportError, ValueError, requests.exceptions.RequestException) as e:
85
+ logger.exception(f"Error getting model names: {e}")
86
+ model_ids = GROQ_MODELS
87
+ if tool_model_enabled:
88
+ try:
89
+ from langchain_groq import ChatGroq
90
+ except ImportError as e:
91
+ msg = "langchain_groq is not installed. Please install it with `pip install langchain_groq`."
92
+ raise ImportError(msg) from e
93
+ for model in model_ids:
94
+ model_with_tool = ChatGroq(
95
+ model=model,
96
+ api_key=self.api_key,
97
+ base_url=self.base_url,
98
+ )
99
+ if not self.supports_tool_calling(model_with_tool) or model in TOOL_CALLING_UNSUPPORTED_GROQ_MODELS:
100
+ model_ids.remove(model)
101
+ return model_ids
102
+ return model_ids
103
+
104
+ def update_build_config(self, build_config: dict, field_value: str, field_name: str | None = None):
105
+ if field_name in {"base_url", "model_name", "tool_model_enabled", "api_key"} and field_value:
106
+ try:
107
+ if len(self.api_key) != 0:
108
+ try:
109
+ ids = self.get_models(tool_model_enabled=self.tool_model_enabled)
110
+ except (ImportError, ValueError, requests.exceptions.RequestException) as e:
111
+ logger.exception(f"Error getting model names: {e}")
112
+ ids = GROQ_MODELS
113
+ build_config.setdefault("model_name", {})
114
+ build_config["model_name"]["options"] = ids
115
+ build_config["model_name"].setdefault("value", ids[0])
116
+ except Exception as e:
117
+ msg = f"Error getting model names: {e}"
118
+ raise ValueError(msg) from e
119
+ return build_config
120
+
121
+ def build_model(self) -> LanguageModel: # type: ignore[type-var]
122
+ try:
123
+ from langchain_groq import ChatGroq
124
+ except ImportError as e:
125
+ msg = "langchain-groq is not installed. Please install it with `pip install langchain-groq`."
126
+ raise ImportError(msg) from e
127
+
128
+ return ChatGroq(
129
+ model=self.model_name,
130
+ max_tokens=self.max_tokens or None,
131
+ temperature=self.temperature,
132
+ base_url=self.base_url,
133
+ n=self.n or 1,
134
+ api_key=SecretStr(self.api_key).get_secret_value(),
135
+ streaming=self.stream,
136
+ )
@@ -0,0 +1,52 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING, Any
4
+
5
+ from lfx.components._importing import import_mod
6
+
7
+ if TYPE_CHECKING:
8
+ from lfx.components.helpers.calculator_core import CalculatorComponent
9
+ from lfx.components.helpers.create_list import CreateListComponent
10
+ from lfx.components.helpers.current_date import CurrentDateComponent
11
+ from lfx.components.helpers.id_generator import IDGeneratorComponent
12
+ from lfx.components.helpers.memory import MemoryComponent
13
+ from lfx.components.helpers.output_parser import OutputParserComponent
14
+ from lfx.components.helpers.store_message import MessageStoreComponent
15
+
16
+ _dynamic_imports = {
17
+ "CalculatorComponent": "calculator_core",
18
+ "CreateListComponent": "create_list",
19
+ "CurrentDateComponent": "current_date",
20
+ "IDGeneratorComponent": "id_generator",
21
+ "MemoryComponent": "memory",
22
+ "OutputParserComponent": "output_parser",
23
+ "MessageStoreComponent": "store_message",
24
+ }
25
+
26
+ __all__ = [
27
+ "CalculatorComponent",
28
+ "CreateListComponent",
29
+ "CurrentDateComponent",
30
+ "IDGeneratorComponent",
31
+ "MemoryComponent",
32
+ "MessageStoreComponent",
33
+ "OutputParserComponent",
34
+ ]
35
+
36
+
37
+ def __getattr__(attr_name: str) -> Any:
38
+ """Lazily import helper components on attribute access."""
39
+ if attr_name not in _dynamic_imports:
40
+ msg = f"module '{__name__}' has no attribute '{attr_name}'"
41
+ raise AttributeError(msg)
42
+ try:
43
+ result = import_mod(attr_name, _dynamic_imports[attr_name], __spec__.parent)
44
+ except (ModuleNotFoundError, ImportError, AttributeError) as e:
45
+ msg = f"Could not import '{attr_name}' from '{__name__}': {e}"
46
+ raise AttributeError(msg) from e
47
+ globals()[attr_name] = result
48
+ return result
49
+
50
+
51
+ def __dir__() -> list[str]:
52
+ return list(__all__)
@@ -0,0 +1,89 @@
1
+ import ast
2
+ import operator
3
+ from collections.abc import Callable
4
+
5
+ from lfx.custom.custom_component.component import Component
6
+ from lfx.inputs.inputs import MessageTextInput
7
+ from lfx.io import Output
8
+ from lfx.schema.data import Data
9
+
10
+
11
+ class CalculatorComponent(Component):
12
+ display_name = "Calculator"
13
+ description = "Perform basic arithmetic operations on a given expression."
14
+ documentation: str = "https://docs.langflow.org/components-helpers#calculator"
15
+ icon = "calculator"
16
+
17
+ # Cache operators dictionary as a class variable
18
+ OPERATORS: dict[type[ast.operator], Callable] = {
19
+ ast.Add: operator.add,
20
+ ast.Sub: operator.sub,
21
+ ast.Mult: operator.mul,
22
+ ast.Div: operator.truediv,
23
+ ast.Pow: operator.pow,
24
+ }
25
+
26
+ inputs = [
27
+ MessageTextInput(
28
+ name="expression",
29
+ display_name="Expression",
30
+ info="The arithmetic expression to evaluate (e.g., '4*4*(33/22)+12-20').",
31
+ tool_mode=True,
32
+ ),
33
+ ]
34
+
35
+ outputs = [
36
+ Output(display_name="Data", name="result", type_=Data, method="evaluate_expression"),
37
+ ]
38
+
39
+ def _eval_expr(self, node: ast.AST) -> float:
40
+ """Evaluate an AST node recursively."""
41
+ if isinstance(node, ast.Constant):
42
+ if isinstance(node.value, int | float):
43
+ return float(node.value)
44
+ error_msg = f"Unsupported constant type: {type(node.value).__name__}"
45
+ raise TypeError(error_msg)
46
+ if isinstance(node, ast.Num): # For backwards compatibility
47
+ if isinstance(node.n, int | float):
48
+ return float(node.n)
49
+ error_msg = f"Unsupported number type: {type(node.n).__name__}"
50
+ raise TypeError(error_msg)
51
+
52
+ if isinstance(node, ast.BinOp):
53
+ op_type = type(node.op)
54
+ if op_type not in self.OPERATORS:
55
+ error_msg = f"Unsupported binary operator: {op_type.__name__}"
56
+ raise TypeError(error_msg)
57
+
58
+ left = self._eval_expr(node.left)
59
+ right = self._eval_expr(node.right)
60
+ return self.OPERATORS[op_type](left, right)
61
+
62
+ error_msg = f"Unsupported operation or expression type: {type(node).__name__}"
63
+ raise TypeError(error_msg)
64
+
65
+ def evaluate_expression(self) -> Data:
66
+ """Evaluate the mathematical expression and return the result."""
67
+ try:
68
+ tree = ast.parse(self.expression, mode="eval")
69
+ result = self._eval_expr(tree.body)
70
+
71
+ formatted_result = f"{float(result):.6f}".rstrip("0").rstrip(".")
72
+ self.log(f"Calculation result: {formatted_result}")
73
+
74
+ self.status = formatted_result
75
+ return Data(data={"result": formatted_result})
76
+
77
+ except ZeroDivisionError:
78
+ error_message = "Error: Division by zero"
79
+ self.status = error_message
80
+ return Data(data={"error": error_message, "input": self.expression})
81
+
82
+ except (SyntaxError, TypeError, KeyError, ValueError, AttributeError, OverflowError) as e:
83
+ error_message = f"Invalid expression: {e!s}"
84
+ self.status = error_message
85
+ return Data(data={"error": error_message, "input": self.expression})
86
+
87
+ def build(self):
88
+ """Return the main evaluation function."""
89
+ return self.evaluate_expression
@@ -0,0 +1,40 @@
1
+ from lfx.custom.custom_component.component import Component
2
+ from lfx.inputs.inputs import StrInput
3
+ from lfx.schema.data import Data
4
+ from lfx.schema.dataframe import DataFrame
5
+ from lfx.template.field.base import Output
6
+
7
+
8
+ class CreateListComponent(Component):
9
+ display_name = "Create List"
10
+ description = "Creates a list of texts."
11
+ icon = "list"
12
+ name = "CreateList"
13
+ legacy = True
14
+
15
+ inputs = [
16
+ StrInput(
17
+ name="texts",
18
+ display_name="Texts",
19
+ info="Enter one or more texts.",
20
+ is_list=True,
21
+ ),
22
+ ]
23
+
24
+ outputs = [
25
+ Output(display_name="Data List", name="list", method="create_list"),
26
+ Output(display_name="DataFrame", name="dataframe", method="as_dataframe"),
27
+ ]
28
+
29
+ def create_list(self) -> list[Data]:
30
+ data = [Data(text=text) for text in self.texts]
31
+ self.status = data
32
+ return data
33
+
34
+ def as_dataframe(self) -> DataFrame:
35
+ """Convert the list of Data objects into a DataFrame.
36
+
37
+ Returns:
38
+ DataFrame: A DataFrame containing the list data.
39
+ """
40
+ return DataFrame(self.create_list())
@@ -0,0 +1,42 @@
1
+ from datetime import datetime
2
+ from zoneinfo import ZoneInfo, available_timezones
3
+
4
+ from lfx.custom.custom_component.component import Component
5
+ from lfx.io import DropdownInput, Output
6
+ from lfx.log.logger import logger
7
+ from lfx.schema.message import Message
8
+
9
+
10
+ class CurrentDateComponent(Component):
11
+ display_name = "Current Date"
12
+ description = "Returns the current date and time in the selected timezone."
13
+ documentation: str = "https://docs.langflow.org/components-helpers#current-date"
14
+ icon = "clock"
15
+ name = "CurrentDate"
16
+
17
+ inputs = [
18
+ DropdownInput(
19
+ name="timezone",
20
+ display_name="Timezone",
21
+ options=list(available_timezones()),
22
+ value="UTC",
23
+ info="Select the timezone for the current date and time.",
24
+ tool_mode=True,
25
+ ),
26
+ ]
27
+ outputs = [
28
+ Output(display_name="Current Date", name="current_date", method="get_current_date"),
29
+ ]
30
+
31
+ def get_current_date(self) -> Message:
32
+ try:
33
+ tz = ZoneInfo(self.timezone)
34
+ current_date = datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S %Z")
35
+ result = f"Current date and time in {self.timezone}: {current_date}"
36
+ self.status = result
37
+ return Message(text=result)
38
+ except Exception as e: # noqa: BLE001
39
+ logger.debug("Error getting current date", exc_info=True)
40
+ error_message = f"Error: {e}"
41
+ self.status = error_message
42
+ return Message(text=error_message)
@@ -0,0 +1,42 @@
1
+ import uuid
2
+ from typing import Any
3
+
4
+ from typing_extensions import override
5
+
6
+ from lfx.custom.custom_component.component import Component
7
+ from lfx.io import MessageTextInput, Output
8
+ from lfx.schema.dotdict import dotdict
9
+ from lfx.schema.message import Message
10
+
11
+
12
+ class IDGeneratorComponent(Component):
13
+ display_name = "ID Generator"
14
+ description = "Generates a unique ID."
15
+ icon = "fingerprint"
16
+ name = "IDGenerator"
17
+ legacy = True
18
+
19
+ inputs = [
20
+ MessageTextInput(
21
+ name="unique_id",
22
+ display_name="Value",
23
+ info="The generated unique ID.",
24
+ refresh_button=True,
25
+ tool_mode=True,
26
+ ),
27
+ ]
28
+
29
+ outputs = [
30
+ Output(display_name="ID", name="id", method="generate_id"),
31
+ ]
32
+
33
+ @override
34
+ def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None):
35
+ if field_name == "unique_id":
36
+ build_config[field_name]["value"] = str(uuid.uuid4())
37
+ return build_config
38
+
39
+ def generate_id(self) -> Message:
40
+ unique_id = self.unique_id or str(uuid.uuid4())
41
+ self.status = f"Generated ID: {unique_id}"
42
+ return Message(text=unique_id)