lfx-nightly 0.2.0.dev25__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.

Files changed (769) hide show
  1. lfx/__init__.py +0 -0
  2. lfx/__main__.py +25 -0
  3. lfx/_assets/component_index.json +1 -0
  4. lfx/base/__init__.py +0 -0
  5. lfx/base/agents/__init__.py +0 -0
  6. lfx/base/agents/agent.py +375 -0
  7. lfx/base/agents/altk_base_agent.py +380 -0
  8. lfx/base/agents/altk_tool_wrappers.py +565 -0
  9. lfx/base/agents/callback.py +130 -0
  10. lfx/base/agents/context.py +109 -0
  11. lfx/base/agents/crewai/__init__.py +0 -0
  12. lfx/base/agents/crewai/crew.py +231 -0
  13. lfx/base/agents/crewai/tasks.py +12 -0
  14. lfx/base/agents/default_prompts.py +23 -0
  15. lfx/base/agents/errors.py +15 -0
  16. lfx/base/agents/events.py +430 -0
  17. lfx/base/agents/utils.py +237 -0
  18. lfx/base/astra_assistants/__init__.py +0 -0
  19. lfx/base/astra_assistants/util.py +171 -0
  20. lfx/base/chains/__init__.py +0 -0
  21. lfx/base/chains/model.py +19 -0
  22. lfx/base/composio/__init__.py +0 -0
  23. lfx/base/composio/composio_base.py +2584 -0
  24. lfx/base/compressors/__init__.py +0 -0
  25. lfx/base/compressors/model.py +60 -0
  26. lfx/base/constants.py +46 -0
  27. lfx/base/curl/__init__.py +0 -0
  28. lfx/base/curl/parse.py +188 -0
  29. lfx/base/data/__init__.py +5 -0
  30. lfx/base/data/base_file.py +810 -0
  31. lfx/base/data/docling_utils.py +338 -0
  32. lfx/base/data/storage_utils.py +192 -0
  33. lfx/base/data/utils.py +362 -0
  34. lfx/base/datastax/__init__.py +5 -0
  35. lfx/base/datastax/astradb_base.py +896 -0
  36. lfx/base/document_transformers/__init__.py +0 -0
  37. lfx/base/document_transformers/model.py +43 -0
  38. lfx/base/embeddings/__init__.py +0 -0
  39. lfx/base/embeddings/aiml_embeddings.py +62 -0
  40. lfx/base/embeddings/embeddings_class.py +113 -0
  41. lfx/base/embeddings/model.py +26 -0
  42. lfx/base/flow_processing/__init__.py +0 -0
  43. lfx/base/flow_processing/utils.py +86 -0
  44. lfx/base/huggingface/__init__.py +0 -0
  45. lfx/base/huggingface/model_bridge.py +133 -0
  46. lfx/base/io/__init__.py +0 -0
  47. lfx/base/io/chat.py +21 -0
  48. lfx/base/io/text.py +22 -0
  49. lfx/base/knowledge_bases/__init__.py +3 -0
  50. lfx/base/knowledge_bases/knowledge_base_utils.py +137 -0
  51. lfx/base/langchain_utilities/__init__.py +0 -0
  52. lfx/base/langchain_utilities/model.py +35 -0
  53. lfx/base/langchain_utilities/spider_constants.py +1 -0
  54. lfx/base/langwatch/__init__.py +0 -0
  55. lfx/base/langwatch/utils.py +18 -0
  56. lfx/base/mcp/__init__.py +0 -0
  57. lfx/base/mcp/constants.py +2 -0
  58. lfx/base/mcp/util.py +1659 -0
  59. lfx/base/memory/__init__.py +0 -0
  60. lfx/base/memory/memory.py +49 -0
  61. lfx/base/memory/model.py +38 -0
  62. lfx/base/models/__init__.py +3 -0
  63. lfx/base/models/aiml_constants.py +51 -0
  64. lfx/base/models/anthropic_constants.py +51 -0
  65. lfx/base/models/aws_constants.py +151 -0
  66. lfx/base/models/chat_result.py +76 -0
  67. lfx/base/models/cometapi_constants.py +54 -0
  68. lfx/base/models/google_generative_ai_constants.py +70 -0
  69. lfx/base/models/google_generative_ai_model.py +38 -0
  70. lfx/base/models/groq_constants.py +150 -0
  71. lfx/base/models/groq_model_discovery.py +265 -0
  72. lfx/base/models/model.py +375 -0
  73. lfx/base/models/model_input_constants.py +378 -0
  74. lfx/base/models/model_metadata.py +41 -0
  75. lfx/base/models/model_utils.py +108 -0
  76. lfx/base/models/novita_constants.py +35 -0
  77. lfx/base/models/ollama_constants.py +52 -0
  78. lfx/base/models/openai_constants.py +129 -0
  79. lfx/base/models/sambanova_constants.py +18 -0
  80. lfx/base/models/watsonx_constants.py +36 -0
  81. lfx/base/processing/__init__.py +0 -0
  82. lfx/base/prompts/__init__.py +0 -0
  83. lfx/base/prompts/api_utils.py +224 -0
  84. lfx/base/prompts/utils.py +61 -0
  85. lfx/base/textsplitters/__init__.py +0 -0
  86. lfx/base/textsplitters/model.py +28 -0
  87. lfx/base/tools/__init__.py +0 -0
  88. lfx/base/tools/base.py +26 -0
  89. lfx/base/tools/component_tool.py +325 -0
  90. lfx/base/tools/constants.py +49 -0
  91. lfx/base/tools/flow_tool.py +132 -0
  92. lfx/base/tools/run_flow.py +698 -0
  93. lfx/base/vectorstores/__init__.py +0 -0
  94. lfx/base/vectorstores/model.py +193 -0
  95. lfx/base/vectorstores/utils.py +22 -0
  96. lfx/base/vectorstores/vector_store_connection_decorator.py +52 -0
  97. lfx/cli/__init__.py +5 -0
  98. lfx/cli/commands.py +327 -0
  99. lfx/cli/common.py +650 -0
  100. lfx/cli/run.py +506 -0
  101. lfx/cli/script_loader.py +289 -0
  102. lfx/cli/serve_app.py +546 -0
  103. lfx/cli/validation.py +69 -0
  104. lfx/components/FAISS/__init__.py +34 -0
  105. lfx/components/FAISS/faiss.py +111 -0
  106. lfx/components/Notion/__init__.py +19 -0
  107. lfx/components/Notion/add_content_to_page.py +269 -0
  108. lfx/components/Notion/create_page.py +94 -0
  109. lfx/components/Notion/list_database_properties.py +68 -0
  110. lfx/components/Notion/list_pages.py +122 -0
  111. lfx/components/Notion/list_users.py +77 -0
  112. lfx/components/Notion/page_content_viewer.py +93 -0
  113. lfx/components/Notion/search.py +111 -0
  114. lfx/components/Notion/update_page_property.py +114 -0
  115. lfx/components/__init__.py +428 -0
  116. lfx/components/_importing.py +42 -0
  117. lfx/components/agentql/__init__.py +3 -0
  118. lfx/components/agentql/agentql_api.py +151 -0
  119. lfx/components/aiml/__init__.py +37 -0
  120. lfx/components/aiml/aiml.py +115 -0
  121. lfx/components/aiml/aiml_embeddings.py +37 -0
  122. lfx/components/altk/__init__.py +34 -0
  123. lfx/components/altk/altk_agent.py +193 -0
  124. lfx/components/amazon/__init__.py +36 -0
  125. lfx/components/amazon/amazon_bedrock_converse.py +195 -0
  126. lfx/components/amazon/amazon_bedrock_embedding.py +109 -0
  127. lfx/components/amazon/amazon_bedrock_model.py +130 -0
  128. lfx/components/amazon/s3_bucket_uploader.py +211 -0
  129. lfx/components/anthropic/__init__.py +34 -0
  130. lfx/components/anthropic/anthropic.py +187 -0
  131. lfx/components/apify/__init__.py +5 -0
  132. lfx/components/apify/apify_actor.py +325 -0
  133. lfx/components/arxiv/__init__.py +3 -0
  134. lfx/components/arxiv/arxiv.py +169 -0
  135. lfx/components/assemblyai/__init__.py +46 -0
  136. lfx/components/assemblyai/assemblyai_get_subtitles.py +83 -0
  137. lfx/components/assemblyai/assemblyai_lemur.py +183 -0
  138. lfx/components/assemblyai/assemblyai_list_transcripts.py +95 -0
  139. lfx/components/assemblyai/assemblyai_poll_transcript.py +72 -0
  140. lfx/components/assemblyai/assemblyai_start_transcript.py +188 -0
  141. lfx/components/azure/__init__.py +37 -0
  142. lfx/components/azure/azure_openai.py +95 -0
  143. lfx/components/azure/azure_openai_embeddings.py +83 -0
  144. lfx/components/baidu/__init__.py +32 -0
  145. lfx/components/baidu/baidu_qianfan_chat.py +113 -0
  146. lfx/components/bing/__init__.py +3 -0
  147. lfx/components/bing/bing_search_api.py +61 -0
  148. lfx/components/cassandra/__init__.py +40 -0
  149. lfx/components/cassandra/cassandra.py +264 -0
  150. lfx/components/cassandra/cassandra_chat.py +92 -0
  151. lfx/components/cassandra/cassandra_graph.py +238 -0
  152. lfx/components/chains/__init__.py +3 -0
  153. lfx/components/chroma/__init__.py +34 -0
  154. lfx/components/chroma/chroma.py +169 -0
  155. lfx/components/cleanlab/__init__.py +40 -0
  156. lfx/components/cleanlab/cleanlab_evaluator.py +155 -0
  157. lfx/components/cleanlab/cleanlab_rag_evaluator.py +254 -0
  158. lfx/components/cleanlab/cleanlab_remediator.py +131 -0
  159. lfx/components/clickhouse/__init__.py +34 -0
  160. lfx/components/clickhouse/clickhouse.py +135 -0
  161. lfx/components/cloudflare/__init__.py +32 -0
  162. lfx/components/cloudflare/cloudflare.py +81 -0
  163. lfx/components/cohere/__init__.py +40 -0
  164. lfx/components/cohere/cohere_embeddings.py +81 -0
  165. lfx/components/cohere/cohere_models.py +46 -0
  166. lfx/components/cohere/cohere_rerank.py +51 -0
  167. lfx/components/cometapi/__init__.py +32 -0
  168. lfx/components/cometapi/cometapi.py +166 -0
  169. lfx/components/composio/__init__.py +222 -0
  170. lfx/components/composio/agentql_composio.py +11 -0
  171. lfx/components/composio/agiled_composio.py +11 -0
  172. lfx/components/composio/airtable_composio.py +11 -0
  173. lfx/components/composio/apollo_composio.py +11 -0
  174. lfx/components/composio/asana_composio.py +11 -0
  175. lfx/components/composio/attio_composio.py +11 -0
  176. lfx/components/composio/bitbucket_composio.py +11 -0
  177. lfx/components/composio/bolna_composio.py +11 -0
  178. lfx/components/composio/brightdata_composio.py +11 -0
  179. lfx/components/composio/calendly_composio.py +11 -0
  180. lfx/components/composio/canva_composio.py +11 -0
  181. lfx/components/composio/canvas_composio.py +11 -0
  182. lfx/components/composio/coda_composio.py +11 -0
  183. lfx/components/composio/composio_api.py +278 -0
  184. lfx/components/composio/contentful_composio.py +11 -0
  185. lfx/components/composio/digicert_composio.py +11 -0
  186. lfx/components/composio/discord_composio.py +11 -0
  187. lfx/components/composio/dropbox_compnent.py +11 -0
  188. lfx/components/composio/elevenlabs_composio.py +11 -0
  189. lfx/components/composio/exa_composio.py +11 -0
  190. lfx/components/composio/figma_composio.py +11 -0
  191. lfx/components/composio/finage_composio.py +11 -0
  192. lfx/components/composio/firecrawl_composio.py +11 -0
  193. lfx/components/composio/fireflies_composio.py +11 -0
  194. lfx/components/composio/fixer_composio.py +11 -0
  195. lfx/components/composio/flexisign_composio.py +11 -0
  196. lfx/components/composio/freshdesk_composio.py +11 -0
  197. lfx/components/composio/github_composio.py +11 -0
  198. lfx/components/composio/gmail_composio.py +38 -0
  199. lfx/components/composio/googlebigquery_composio.py +11 -0
  200. lfx/components/composio/googlecalendar_composio.py +11 -0
  201. lfx/components/composio/googleclassroom_composio.py +11 -0
  202. lfx/components/composio/googledocs_composio.py +11 -0
  203. lfx/components/composio/googlemeet_composio.py +11 -0
  204. lfx/components/composio/googlesheets_composio.py +11 -0
  205. lfx/components/composio/googletasks_composio.py +8 -0
  206. lfx/components/composio/heygen_composio.py +11 -0
  207. lfx/components/composio/instagram_composio.py +11 -0
  208. lfx/components/composio/jira_composio.py +11 -0
  209. lfx/components/composio/jotform_composio.py +11 -0
  210. lfx/components/composio/klaviyo_composio.py +11 -0
  211. lfx/components/composio/linear_composio.py +11 -0
  212. lfx/components/composio/listennotes_composio.py +11 -0
  213. lfx/components/composio/mem0_composio.py +11 -0
  214. lfx/components/composio/miro_composio.py +11 -0
  215. lfx/components/composio/missive_composio.py +11 -0
  216. lfx/components/composio/notion_composio.py +11 -0
  217. lfx/components/composio/onedrive_composio.py +11 -0
  218. lfx/components/composio/outlook_composio.py +11 -0
  219. lfx/components/composio/pandadoc_composio.py +11 -0
  220. lfx/components/composio/peopledatalabs_composio.py +11 -0
  221. lfx/components/composio/perplexityai_composio.py +11 -0
  222. lfx/components/composio/reddit_composio.py +11 -0
  223. lfx/components/composio/serpapi_composio.py +11 -0
  224. lfx/components/composio/slack_composio.py +11 -0
  225. lfx/components/composio/slackbot_composio.py +11 -0
  226. lfx/components/composio/snowflake_composio.py +11 -0
  227. lfx/components/composio/supabase_composio.py +11 -0
  228. lfx/components/composio/tavily_composio.py +11 -0
  229. lfx/components/composio/timelinesai_composio.py +11 -0
  230. lfx/components/composio/todoist_composio.py +11 -0
  231. lfx/components/composio/wrike_composio.py +11 -0
  232. lfx/components/composio/youtube_composio.py +11 -0
  233. lfx/components/confluence/__init__.py +3 -0
  234. lfx/components/confluence/confluence.py +84 -0
  235. lfx/components/couchbase/__init__.py +34 -0
  236. lfx/components/couchbase/couchbase.py +102 -0
  237. lfx/components/crewai/__init__.py +49 -0
  238. lfx/components/crewai/crewai.py +108 -0
  239. lfx/components/crewai/hierarchical_crew.py +47 -0
  240. lfx/components/crewai/hierarchical_task.py +45 -0
  241. lfx/components/crewai/sequential_crew.py +53 -0
  242. lfx/components/crewai/sequential_task.py +74 -0
  243. lfx/components/crewai/sequential_task_agent.py +144 -0
  244. lfx/components/cuga/__init__.py +34 -0
  245. lfx/components/cuga/cuga_agent.py +730 -0
  246. lfx/components/custom_component/__init__.py +34 -0
  247. lfx/components/custom_component/custom_component.py +31 -0
  248. lfx/components/data/__init__.py +114 -0
  249. lfx/components/data_source/__init__.py +58 -0
  250. lfx/components/data_source/api_request.py +577 -0
  251. lfx/components/data_source/csv_to_data.py +101 -0
  252. lfx/components/data_source/json_to_data.py +106 -0
  253. lfx/components/data_source/mock_data.py +398 -0
  254. lfx/components/data_source/news_search.py +166 -0
  255. lfx/components/data_source/rss.py +71 -0
  256. lfx/components/data_source/sql_executor.py +101 -0
  257. lfx/components/data_source/url.py +311 -0
  258. lfx/components/data_source/web_search.py +326 -0
  259. lfx/components/datastax/__init__.py +76 -0
  260. lfx/components/datastax/astradb_assistant_manager.py +307 -0
  261. lfx/components/datastax/astradb_chatmemory.py +40 -0
  262. lfx/components/datastax/astradb_cql.py +288 -0
  263. lfx/components/datastax/astradb_graph.py +217 -0
  264. lfx/components/datastax/astradb_tool.py +378 -0
  265. lfx/components/datastax/astradb_vectorize.py +122 -0
  266. lfx/components/datastax/astradb_vectorstore.py +449 -0
  267. lfx/components/datastax/create_assistant.py +59 -0
  268. lfx/components/datastax/create_thread.py +33 -0
  269. lfx/components/datastax/dotenv.py +36 -0
  270. lfx/components/datastax/get_assistant.py +38 -0
  271. lfx/components/datastax/getenvvar.py +31 -0
  272. lfx/components/datastax/graph_rag.py +141 -0
  273. lfx/components/datastax/hcd.py +315 -0
  274. lfx/components/datastax/list_assistants.py +26 -0
  275. lfx/components/datastax/run.py +90 -0
  276. lfx/components/deactivated/__init__.py +15 -0
  277. lfx/components/deactivated/amazon_kendra.py +66 -0
  278. lfx/components/deactivated/chat_litellm_model.py +158 -0
  279. lfx/components/deactivated/code_block_extractor.py +26 -0
  280. lfx/components/deactivated/documents_to_data.py +22 -0
  281. lfx/components/deactivated/embed.py +16 -0
  282. lfx/components/deactivated/extract_key_from_data.py +46 -0
  283. lfx/components/deactivated/json_document_builder.py +57 -0
  284. lfx/components/deactivated/list_flows.py +20 -0
  285. lfx/components/deactivated/mcp_sse.py +61 -0
  286. lfx/components/deactivated/mcp_stdio.py +62 -0
  287. lfx/components/deactivated/merge_data.py +93 -0
  288. lfx/components/deactivated/message.py +37 -0
  289. lfx/components/deactivated/metal.py +54 -0
  290. lfx/components/deactivated/multi_query.py +59 -0
  291. lfx/components/deactivated/retriever.py +43 -0
  292. lfx/components/deactivated/selective_passthrough.py +77 -0
  293. lfx/components/deactivated/should_run_next.py +40 -0
  294. lfx/components/deactivated/split_text.py +63 -0
  295. lfx/components/deactivated/store_message.py +24 -0
  296. lfx/components/deactivated/sub_flow.py +124 -0
  297. lfx/components/deactivated/vectara_self_query.py +76 -0
  298. lfx/components/deactivated/vector_store.py +24 -0
  299. lfx/components/deepseek/__init__.py +34 -0
  300. lfx/components/deepseek/deepseek.py +136 -0
  301. lfx/components/docling/__init__.py +43 -0
  302. lfx/components/docling/chunk_docling_document.py +186 -0
  303. lfx/components/docling/docling_inline.py +238 -0
  304. lfx/components/docling/docling_remote.py +195 -0
  305. lfx/components/docling/export_docling_document.py +117 -0
  306. lfx/components/documentloaders/__init__.py +3 -0
  307. lfx/components/duckduckgo/__init__.py +3 -0
  308. lfx/components/duckduckgo/duck_duck_go_search_run.py +92 -0
  309. lfx/components/elastic/__init__.py +37 -0
  310. lfx/components/elastic/elasticsearch.py +267 -0
  311. lfx/components/elastic/opensearch.py +789 -0
  312. lfx/components/elastic/opensearch_multimodal.py +1575 -0
  313. lfx/components/embeddings/__init__.py +37 -0
  314. lfx/components/embeddings/similarity.py +77 -0
  315. lfx/components/embeddings/text_embedder.py +65 -0
  316. lfx/components/exa/__init__.py +3 -0
  317. lfx/components/exa/exa_search.py +68 -0
  318. lfx/components/files_and_knowledge/__init__.py +47 -0
  319. lfx/components/files_and_knowledge/directory.py +113 -0
  320. lfx/components/files_and_knowledge/file.py +841 -0
  321. lfx/components/files_and_knowledge/ingestion.py +694 -0
  322. lfx/components/files_and_knowledge/retrieval.py +264 -0
  323. lfx/components/files_and_knowledge/save_file.py +746 -0
  324. lfx/components/firecrawl/__init__.py +43 -0
  325. lfx/components/firecrawl/firecrawl_crawl_api.py +88 -0
  326. lfx/components/firecrawl/firecrawl_extract_api.py +136 -0
  327. lfx/components/firecrawl/firecrawl_map_api.py +89 -0
  328. lfx/components/firecrawl/firecrawl_scrape_api.py +73 -0
  329. lfx/components/flow_controls/__init__.py +58 -0
  330. lfx/components/flow_controls/conditional_router.py +208 -0
  331. lfx/components/flow_controls/data_conditional_router.py +126 -0
  332. lfx/components/flow_controls/flow_tool.py +111 -0
  333. lfx/components/flow_controls/listen.py +29 -0
  334. lfx/components/flow_controls/loop.py +163 -0
  335. lfx/components/flow_controls/notify.py +88 -0
  336. lfx/components/flow_controls/pass_message.py +36 -0
  337. lfx/components/flow_controls/run_flow.py +108 -0
  338. lfx/components/flow_controls/sub_flow.py +115 -0
  339. lfx/components/git/__init__.py +4 -0
  340. lfx/components/git/git.py +262 -0
  341. lfx/components/git/gitextractor.py +196 -0
  342. lfx/components/glean/__init__.py +3 -0
  343. lfx/components/glean/glean_search_api.py +173 -0
  344. lfx/components/google/__init__.py +17 -0
  345. lfx/components/google/gmail.py +193 -0
  346. lfx/components/google/google_bq_sql_executor.py +157 -0
  347. lfx/components/google/google_drive.py +92 -0
  348. lfx/components/google/google_drive_search.py +152 -0
  349. lfx/components/google/google_generative_ai.py +144 -0
  350. lfx/components/google/google_generative_ai_embeddings.py +141 -0
  351. lfx/components/google/google_oauth_token.py +89 -0
  352. lfx/components/google/google_search_api_core.py +68 -0
  353. lfx/components/google/google_serper_api_core.py +74 -0
  354. lfx/components/groq/__init__.py +34 -0
  355. lfx/components/groq/groq.py +143 -0
  356. lfx/components/helpers/__init__.py +154 -0
  357. lfx/components/homeassistant/__init__.py +7 -0
  358. lfx/components/homeassistant/home_assistant_control.py +152 -0
  359. lfx/components/homeassistant/list_home_assistant_states.py +137 -0
  360. lfx/components/huggingface/__init__.py +37 -0
  361. lfx/components/huggingface/huggingface.py +199 -0
  362. lfx/components/huggingface/huggingface_inference_api.py +106 -0
  363. lfx/components/ibm/__init__.py +34 -0
  364. lfx/components/ibm/watsonx.py +207 -0
  365. lfx/components/ibm/watsonx_embeddings.py +135 -0
  366. lfx/components/icosacomputing/__init__.py +5 -0
  367. lfx/components/icosacomputing/combinatorial_reasoner.py +84 -0
  368. lfx/components/input_output/__init__.py +40 -0
  369. lfx/components/input_output/chat.py +109 -0
  370. lfx/components/input_output/chat_output.py +184 -0
  371. lfx/components/input_output/text.py +27 -0
  372. lfx/components/input_output/text_output.py +29 -0
  373. lfx/components/input_output/webhook.py +56 -0
  374. lfx/components/jigsawstack/__init__.py +23 -0
  375. lfx/components/jigsawstack/ai_scrape.py +126 -0
  376. lfx/components/jigsawstack/ai_web_search.py +136 -0
  377. lfx/components/jigsawstack/file_read.py +115 -0
  378. lfx/components/jigsawstack/file_upload.py +94 -0
  379. lfx/components/jigsawstack/image_generation.py +205 -0
  380. lfx/components/jigsawstack/nsfw.py +60 -0
  381. lfx/components/jigsawstack/object_detection.py +124 -0
  382. lfx/components/jigsawstack/sentiment.py +112 -0
  383. lfx/components/jigsawstack/text_to_sql.py +90 -0
  384. lfx/components/jigsawstack/text_translate.py +77 -0
  385. lfx/components/jigsawstack/vocr.py +107 -0
  386. lfx/components/knowledge_bases/__init__.py +89 -0
  387. lfx/components/langchain_utilities/__init__.py +109 -0
  388. lfx/components/langchain_utilities/character.py +53 -0
  389. lfx/components/langchain_utilities/conversation.py +59 -0
  390. lfx/components/langchain_utilities/csv_agent.py +175 -0
  391. lfx/components/langchain_utilities/fake_embeddings.py +26 -0
  392. lfx/components/langchain_utilities/html_link_extractor.py +35 -0
  393. lfx/components/langchain_utilities/json_agent.py +100 -0
  394. lfx/components/langchain_utilities/langchain_hub.py +126 -0
  395. lfx/components/langchain_utilities/language_recursive.py +49 -0
  396. lfx/components/langchain_utilities/language_semantic.py +138 -0
  397. lfx/components/langchain_utilities/llm_checker.py +39 -0
  398. lfx/components/langchain_utilities/llm_math.py +42 -0
  399. lfx/components/langchain_utilities/natural_language.py +61 -0
  400. lfx/components/langchain_utilities/openai_tools.py +53 -0
  401. lfx/components/langchain_utilities/openapi.py +48 -0
  402. lfx/components/langchain_utilities/recursive_character.py +60 -0
  403. lfx/components/langchain_utilities/retrieval_qa.py +83 -0
  404. lfx/components/langchain_utilities/runnable_executor.py +137 -0
  405. lfx/components/langchain_utilities/self_query.py +80 -0
  406. lfx/components/langchain_utilities/spider.py +142 -0
  407. lfx/components/langchain_utilities/sql.py +40 -0
  408. lfx/components/langchain_utilities/sql_database.py +35 -0
  409. lfx/components/langchain_utilities/sql_generator.py +78 -0
  410. lfx/components/langchain_utilities/tool_calling.py +59 -0
  411. lfx/components/langchain_utilities/vector_store_info.py +49 -0
  412. lfx/components/langchain_utilities/vector_store_router.py +33 -0
  413. lfx/components/langchain_utilities/xml_agent.py +71 -0
  414. lfx/components/langwatch/__init__.py +3 -0
  415. lfx/components/langwatch/langwatch.py +278 -0
  416. lfx/components/link_extractors/__init__.py +3 -0
  417. lfx/components/llm_operations/__init__.py +46 -0
  418. lfx/components/llm_operations/batch_run.py +205 -0
  419. lfx/components/llm_operations/lambda_filter.py +218 -0
  420. lfx/components/llm_operations/llm_conditional_router.py +421 -0
  421. lfx/components/llm_operations/llm_selector.py +499 -0
  422. lfx/components/llm_operations/structured_output.py +244 -0
  423. lfx/components/lmstudio/__init__.py +34 -0
  424. lfx/components/lmstudio/lmstudioembeddings.py +89 -0
  425. lfx/components/lmstudio/lmstudiomodel.py +133 -0
  426. lfx/components/logic/__init__.py +181 -0
  427. lfx/components/maritalk/__init__.py +32 -0
  428. lfx/components/maritalk/maritalk.py +52 -0
  429. lfx/components/mem0/__init__.py +3 -0
  430. lfx/components/mem0/mem0_chat_memory.py +147 -0
  431. lfx/components/milvus/__init__.py +34 -0
  432. lfx/components/milvus/milvus.py +115 -0
  433. lfx/components/mistral/__init__.py +37 -0
  434. lfx/components/mistral/mistral.py +114 -0
  435. lfx/components/mistral/mistral_embeddings.py +58 -0
  436. lfx/components/models/__init__.py +89 -0
  437. lfx/components/models_and_agents/__init__.py +49 -0
  438. lfx/components/models_and_agents/agent.py +644 -0
  439. lfx/components/models_and_agents/embedding_model.py +423 -0
  440. lfx/components/models_and_agents/language_model.py +398 -0
  441. lfx/components/models_and_agents/mcp_component.py +594 -0
  442. lfx/components/models_and_agents/memory.py +268 -0
  443. lfx/components/models_and_agents/prompt.py +67 -0
  444. lfx/components/mongodb/__init__.py +34 -0
  445. lfx/components/mongodb/mongodb_atlas.py +213 -0
  446. lfx/components/needle/__init__.py +3 -0
  447. lfx/components/needle/needle.py +104 -0
  448. lfx/components/notdiamond/__init__.py +34 -0
  449. lfx/components/notdiamond/notdiamond.py +228 -0
  450. lfx/components/novita/__init__.py +32 -0
  451. lfx/components/novita/novita.py +130 -0
  452. lfx/components/nvidia/__init__.py +57 -0
  453. lfx/components/nvidia/nvidia.py +151 -0
  454. lfx/components/nvidia/nvidia_embedding.py +77 -0
  455. lfx/components/nvidia/nvidia_ingest.py +317 -0
  456. lfx/components/nvidia/nvidia_rerank.py +63 -0
  457. lfx/components/nvidia/system_assist.py +65 -0
  458. lfx/components/olivya/__init__.py +3 -0
  459. lfx/components/olivya/olivya.py +116 -0
  460. lfx/components/ollama/__init__.py +37 -0
  461. lfx/components/ollama/ollama.py +548 -0
  462. lfx/components/ollama/ollama_embeddings.py +103 -0
  463. lfx/components/openai/__init__.py +37 -0
  464. lfx/components/openai/openai.py +100 -0
  465. lfx/components/openai/openai_chat_model.py +176 -0
  466. lfx/components/openrouter/__init__.py +32 -0
  467. lfx/components/openrouter/openrouter.py +104 -0
  468. lfx/components/output_parsers/__init__.py +3 -0
  469. lfx/components/perplexity/__init__.py +34 -0
  470. lfx/components/perplexity/perplexity.py +75 -0
  471. lfx/components/pgvector/__init__.py +34 -0
  472. lfx/components/pgvector/pgvector.py +72 -0
  473. lfx/components/pinecone/__init__.py +34 -0
  474. lfx/components/pinecone/pinecone.py +134 -0
  475. lfx/components/processing/__init__.py +72 -0
  476. lfx/components/processing/alter_metadata.py +109 -0
  477. lfx/components/processing/combine_text.py +40 -0
  478. lfx/components/processing/converter.py +248 -0
  479. lfx/components/processing/create_data.py +111 -0
  480. lfx/components/processing/create_list.py +40 -0
  481. lfx/components/processing/data_operations.py +528 -0
  482. lfx/components/processing/data_to_dataframe.py +71 -0
  483. lfx/components/processing/dataframe_operations.py +313 -0
  484. lfx/components/processing/dataframe_to_toolset.py +259 -0
  485. lfx/components/processing/dynamic_create_data.py +357 -0
  486. lfx/components/processing/extract_key.py +54 -0
  487. lfx/components/processing/filter_data.py +43 -0
  488. lfx/components/processing/filter_data_values.py +89 -0
  489. lfx/components/processing/json_cleaner.py +104 -0
  490. lfx/components/processing/merge_data.py +91 -0
  491. lfx/components/processing/message_to_data.py +37 -0
  492. lfx/components/processing/output_parser.py +46 -0
  493. lfx/components/processing/parse_data.py +71 -0
  494. lfx/components/processing/parse_dataframe.py +69 -0
  495. lfx/components/processing/parse_json_data.py +91 -0
  496. lfx/components/processing/parser.py +148 -0
  497. lfx/components/processing/regex.py +83 -0
  498. lfx/components/processing/select_data.py +49 -0
  499. lfx/components/processing/split_text.py +141 -0
  500. lfx/components/processing/store_message.py +91 -0
  501. lfx/components/processing/update_data.py +161 -0
  502. lfx/components/prototypes/__init__.py +35 -0
  503. lfx/components/prototypes/python_function.py +73 -0
  504. lfx/components/qdrant/__init__.py +34 -0
  505. lfx/components/qdrant/qdrant.py +109 -0
  506. lfx/components/redis/__init__.py +37 -0
  507. lfx/components/redis/redis.py +89 -0
  508. lfx/components/redis/redis_chat.py +43 -0
  509. lfx/components/sambanova/__init__.py +32 -0
  510. lfx/components/sambanova/sambanova.py +84 -0
  511. lfx/components/scrapegraph/__init__.py +40 -0
  512. lfx/components/scrapegraph/scrapegraph_markdownify_api.py +64 -0
  513. lfx/components/scrapegraph/scrapegraph_search_api.py +64 -0
  514. lfx/components/scrapegraph/scrapegraph_smart_scraper_api.py +71 -0
  515. lfx/components/searchapi/__init__.py +34 -0
  516. lfx/components/searchapi/search.py +79 -0
  517. lfx/components/serpapi/__init__.py +3 -0
  518. lfx/components/serpapi/serp.py +115 -0
  519. lfx/components/supabase/__init__.py +34 -0
  520. lfx/components/supabase/supabase.py +76 -0
  521. lfx/components/tavily/__init__.py +4 -0
  522. lfx/components/tavily/tavily_extract.py +117 -0
  523. lfx/components/tavily/tavily_search.py +212 -0
  524. lfx/components/textsplitters/__init__.py +3 -0
  525. lfx/components/toolkits/__init__.py +3 -0
  526. lfx/components/tools/__init__.py +66 -0
  527. lfx/components/tools/calculator.py +109 -0
  528. lfx/components/tools/google_search_api.py +45 -0
  529. lfx/components/tools/google_serper_api.py +115 -0
  530. lfx/components/tools/python_code_structured_tool.py +328 -0
  531. lfx/components/tools/python_repl.py +98 -0
  532. lfx/components/tools/search_api.py +88 -0
  533. lfx/components/tools/searxng.py +145 -0
  534. lfx/components/tools/serp_api.py +120 -0
  535. lfx/components/tools/tavily_search_tool.py +345 -0
  536. lfx/components/tools/wikidata_api.py +103 -0
  537. lfx/components/tools/wikipedia_api.py +50 -0
  538. lfx/components/tools/yahoo_finance.py +130 -0
  539. lfx/components/twelvelabs/__init__.py +52 -0
  540. lfx/components/twelvelabs/convert_astra_results.py +84 -0
  541. lfx/components/twelvelabs/pegasus_index.py +311 -0
  542. lfx/components/twelvelabs/split_video.py +301 -0
  543. lfx/components/twelvelabs/text_embeddings.py +57 -0
  544. lfx/components/twelvelabs/twelvelabs_pegasus.py +408 -0
  545. lfx/components/twelvelabs/video_embeddings.py +100 -0
  546. lfx/components/twelvelabs/video_file.py +191 -0
  547. lfx/components/unstructured/__init__.py +3 -0
  548. lfx/components/unstructured/unstructured.py +121 -0
  549. lfx/components/upstash/__init__.py +34 -0
  550. lfx/components/upstash/upstash.py +124 -0
  551. lfx/components/utilities/__init__.py +43 -0
  552. lfx/components/utilities/calculator_core.py +89 -0
  553. lfx/components/utilities/current_date.py +42 -0
  554. lfx/components/utilities/id_generator.py +42 -0
  555. lfx/components/utilities/python_repl_core.py +98 -0
  556. lfx/components/vectara/__init__.py +37 -0
  557. lfx/components/vectara/vectara.py +97 -0
  558. lfx/components/vectara/vectara_rag.py +164 -0
  559. lfx/components/vectorstores/__init__.py +34 -0
  560. lfx/components/vectorstores/local_db.py +270 -0
  561. lfx/components/vertexai/__init__.py +37 -0
  562. lfx/components/vertexai/vertexai.py +71 -0
  563. lfx/components/vertexai/vertexai_embeddings.py +67 -0
  564. lfx/components/vlmrun/__init__.py +34 -0
  565. lfx/components/vlmrun/vlmrun_transcription.py +224 -0
  566. lfx/components/weaviate/__init__.py +34 -0
  567. lfx/components/weaviate/weaviate.py +89 -0
  568. lfx/components/wikipedia/__init__.py +4 -0
  569. lfx/components/wikipedia/wikidata.py +86 -0
  570. lfx/components/wikipedia/wikipedia.py +53 -0
  571. lfx/components/wolframalpha/__init__.py +3 -0
  572. lfx/components/wolframalpha/wolfram_alpha_api.py +54 -0
  573. lfx/components/xai/__init__.py +32 -0
  574. lfx/components/xai/xai.py +167 -0
  575. lfx/components/yahoosearch/__init__.py +3 -0
  576. lfx/components/yahoosearch/yahoo.py +137 -0
  577. lfx/components/youtube/__init__.py +52 -0
  578. lfx/components/youtube/channel.py +227 -0
  579. lfx/components/youtube/comments.py +231 -0
  580. lfx/components/youtube/playlist.py +33 -0
  581. lfx/components/youtube/search.py +120 -0
  582. lfx/components/youtube/trending.py +285 -0
  583. lfx/components/youtube/video_details.py +263 -0
  584. lfx/components/youtube/youtube_transcripts.py +206 -0
  585. lfx/components/zep/__init__.py +3 -0
  586. lfx/components/zep/zep.py +45 -0
  587. lfx/constants.py +6 -0
  588. lfx/custom/__init__.py +7 -0
  589. lfx/custom/attributes.py +87 -0
  590. lfx/custom/code_parser/__init__.py +3 -0
  591. lfx/custom/code_parser/code_parser.py +361 -0
  592. lfx/custom/custom_component/__init__.py +0 -0
  593. lfx/custom/custom_component/base_component.py +128 -0
  594. lfx/custom/custom_component/component.py +1890 -0
  595. lfx/custom/custom_component/component_with_cache.py +8 -0
  596. lfx/custom/custom_component/custom_component.py +650 -0
  597. lfx/custom/dependency_analyzer.py +165 -0
  598. lfx/custom/directory_reader/__init__.py +3 -0
  599. lfx/custom/directory_reader/directory_reader.py +359 -0
  600. lfx/custom/directory_reader/utils.py +171 -0
  601. lfx/custom/eval.py +12 -0
  602. lfx/custom/schema.py +32 -0
  603. lfx/custom/tree_visitor.py +21 -0
  604. lfx/custom/utils.py +877 -0
  605. lfx/custom/validate.py +523 -0
  606. lfx/events/__init__.py +1 -0
  607. lfx/events/event_manager.py +110 -0
  608. lfx/exceptions/__init__.py +0 -0
  609. lfx/exceptions/component.py +15 -0
  610. lfx/field_typing/__init__.py +91 -0
  611. lfx/field_typing/constants.py +216 -0
  612. lfx/field_typing/range_spec.py +35 -0
  613. lfx/graph/__init__.py +6 -0
  614. lfx/graph/edge/__init__.py +0 -0
  615. lfx/graph/edge/base.py +300 -0
  616. lfx/graph/edge/schema.py +119 -0
  617. lfx/graph/edge/utils.py +0 -0
  618. lfx/graph/graph/__init__.py +0 -0
  619. lfx/graph/graph/ascii.py +202 -0
  620. lfx/graph/graph/base.py +2298 -0
  621. lfx/graph/graph/constants.py +63 -0
  622. lfx/graph/graph/runnable_vertices_manager.py +133 -0
  623. lfx/graph/graph/schema.py +53 -0
  624. lfx/graph/graph/state_model.py +66 -0
  625. lfx/graph/graph/utils.py +1024 -0
  626. lfx/graph/schema.py +75 -0
  627. lfx/graph/state/__init__.py +0 -0
  628. lfx/graph/state/model.py +250 -0
  629. lfx/graph/utils.py +206 -0
  630. lfx/graph/vertex/__init__.py +0 -0
  631. lfx/graph/vertex/base.py +826 -0
  632. lfx/graph/vertex/constants.py +0 -0
  633. lfx/graph/vertex/exceptions.py +4 -0
  634. lfx/graph/vertex/param_handler.py +316 -0
  635. lfx/graph/vertex/schema.py +26 -0
  636. lfx/graph/vertex/utils.py +19 -0
  637. lfx/graph/vertex/vertex_types.py +489 -0
  638. lfx/helpers/__init__.py +141 -0
  639. lfx/helpers/base_model.py +71 -0
  640. lfx/helpers/custom.py +13 -0
  641. lfx/helpers/data.py +167 -0
  642. lfx/helpers/flow.py +308 -0
  643. lfx/inputs/__init__.py +68 -0
  644. lfx/inputs/constants.py +2 -0
  645. lfx/inputs/input_mixin.py +352 -0
  646. lfx/inputs/inputs.py +718 -0
  647. lfx/inputs/validators.py +19 -0
  648. lfx/interface/__init__.py +6 -0
  649. lfx/interface/components.py +897 -0
  650. lfx/interface/importing/__init__.py +5 -0
  651. lfx/interface/importing/utils.py +39 -0
  652. lfx/interface/initialize/__init__.py +3 -0
  653. lfx/interface/initialize/loading.py +317 -0
  654. lfx/interface/listing.py +26 -0
  655. lfx/interface/run.py +16 -0
  656. lfx/interface/utils.py +111 -0
  657. lfx/io/__init__.py +63 -0
  658. lfx/io/schema.py +295 -0
  659. lfx/load/__init__.py +8 -0
  660. lfx/load/load.py +256 -0
  661. lfx/load/utils.py +99 -0
  662. lfx/log/__init__.py +5 -0
  663. lfx/log/logger.py +411 -0
  664. lfx/logging/__init__.py +11 -0
  665. lfx/logging/logger.py +24 -0
  666. lfx/memory/__init__.py +70 -0
  667. lfx/memory/stubs.py +302 -0
  668. lfx/processing/__init__.py +1 -0
  669. lfx/processing/process.py +238 -0
  670. lfx/processing/utils.py +25 -0
  671. lfx/py.typed +0 -0
  672. lfx/schema/__init__.py +66 -0
  673. lfx/schema/artifact.py +83 -0
  674. lfx/schema/content_block.py +62 -0
  675. lfx/schema/content_types.py +91 -0
  676. lfx/schema/cross_module.py +80 -0
  677. lfx/schema/data.py +309 -0
  678. lfx/schema/dataframe.py +210 -0
  679. lfx/schema/dotdict.py +74 -0
  680. lfx/schema/encoders.py +13 -0
  681. lfx/schema/graph.py +47 -0
  682. lfx/schema/image.py +184 -0
  683. lfx/schema/json_schema.py +186 -0
  684. lfx/schema/log.py +62 -0
  685. lfx/schema/message.py +493 -0
  686. lfx/schema/openai_responses_schemas.py +74 -0
  687. lfx/schema/properties.py +41 -0
  688. lfx/schema/schema.py +180 -0
  689. lfx/schema/serialize.py +13 -0
  690. lfx/schema/table.py +142 -0
  691. lfx/schema/validators.py +114 -0
  692. lfx/serialization/__init__.py +5 -0
  693. lfx/serialization/constants.py +2 -0
  694. lfx/serialization/serialization.py +314 -0
  695. lfx/services/__init__.py +26 -0
  696. lfx/services/base.py +28 -0
  697. lfx/services/cache/__init__.py +6 -0
  698. lfx/services/cache/base.py +183 -0
  699. lfx/services/cache/service.py +166 -0
  700. lfx/services/cache/utils.py +169 -0
  701. lfx/services/chat/__init__.py +1 -0
  702. lfx/services/chat/config.py +2 -0
  703. lfx/services/chat/schema.py +10 -0
  704. lfx/services/database/__init__.py +5 -0
  705. lfx/services/database/service.py +25 -0
  706. lfx/services/deps.py +194 -0
  707. lfx/services/factory.py +19 -0
  708. lfx/services/initialize.py +19 -0
  709. lfx/services/interfaces.py +103 -0
  710. lfx/services/manager.py +185 -0
  711. lfx/services/mcp_composer/__init__.py +6 -0
  712. lfx/services/mcp_composer/factory.py +16 -0
  713. lfx/services/mcp_composer/service.py +1441 -0
  714. lfx/services/schema.py +21 -0
  715. lfx/services/session.py +87 -0
  716. lfx/services/settings/__init__.py +3 -0
  717. lfx/services/settings/auth.py +133 -0
  718. lfx/services/settings/base.py +668 -0
  719. lfx/services/settings/constants.py +43 -0
  720. lfx/services/settings/factory.py +23 -0
  721. lfx/services/settings/feature_flags.py +11 -0
  722. lfx/services/settings/service.py +35 -0
  723. lfx/services/settings/utils.py +40 -0
  724. lfx/services/shared_component_cache/__init__.py +1 -0
  725. lfx/services/shared_component_cache/factory.py +30 -0
  726. lfx/services/shared_component_cache/service.py +9 -0
  727. lfx/services/storage/__init__.py +5 -0
  728. lfx/services/storage/local.py +185 -0
  729. lfx/services/storage/service.py +177 -0
  730. lfx/services/tracing/__init__.py +1 -0
  731. lfx/services/tracing/service.py +21 -0
  732. lfx/settings.py +6 -0
  733. lfx/template/__init__.py +6 -0
  734. lfx/template/field/__init__.py +0 -0
  735. lfx/template/field/base.py +260 -0
  736. lfx/template/field/prompt.py +15 -0
  737. lfx/template/frontend_node/__init__.py +6 -0
  738. lfx/template/frontend_node/base.py +214 -0
  739. lfx/template/frontend_node/constants.py +65 -0
  740. lfx/template/frontend_node/custom_components.py +79 -0
  741. lfx/template/template/__init__.py +0 -0
  742. lfx/template/template/base.py +100 -0
  743. lfx/template/utils.py +217 -0
  744. lfx/type_extraction/__init__.py +19 -0
  745. lfx/type_extraction/type_extraction.py +75 -0
  746. lfx/type_extraction.py +80 -0
  747. lfx/utils/__init__.py +1 -0
  748. lfx/utils/async_helpers.py +42 -0
  749. lfx/utils/component_utils.py +154 -0
  750. lfx/utils/concurrency.py +60 -0
  751. lfx/utils/connection_string_parser.py +11 -0
  752. lfx/utils/constants.py +233 -0
  753. lfx/utils/data_structure.py +212 -0
  754. lfx/utils/exceptions.py +22 -0
  755. lfx/utils/helpers.py +34 -0
  756. lfx/utils/image.py +79 -0
  757. lfx/utils/langflow_utils.py +52 -0
  758. lfx/utils/lazy_load.py +15 -0
  759. lfx/utils/request_utils.py +18 -0
  760. lfx/utils/schemas.py +139 -0
  761. lfx/utils/ssrf_protection.py +384 -0
  762. lfx/utils/util.py +626 -0
  763. lfx/utils/util_strings.py +56 -0
  764. lfx/utils/validate_cloud.py +26 -0
  765. lfx/utils/version.py +24 -0
  766. lfx_nightly-0.2.0.dev25.dist-info/METADATA +312 -0
  767. lfx_nightly-0.2.0.dev25.dist-info/RECORD +769 -0
  768. lfx_nightly-0.2.0.dev25.dist-info/WHEEL +4 -0
  769. lfx_nightly-0.2.0.dev25.dist-info/entry_points.txt +2 -0
@@ -0,0 +1,345 @@
1
+ from enum import Enum
2
+
3
+ import httpx
4
+ from langchain.tools import StructuredTool
5
+ from langchain_core.tools import ToolException
6
+ from pydantic import BaseModel, Field
7
+
8
+ from lfx.base.langchain_utilities.model import LCToolComponent
9
+ from lfx.field_typing import Tool
10
+ from lfx.inputs.inputs import BoolInput, DropdownInput, IntInput, MessageTextInput, SecretStrInput
11
+ from lfx.log.logger import logger
12
+ from lfx.schema.data import Data
13
+
14
+ # Add at the top with other constants
15
+ MAX_CHUNKS_PER_SOURCE = 3
16
+
17
+
18
+ class TavilySearchDepth(Enum):
19
+ BASIC = "basic"
20
+ ADVANCED = "advanced"
21
+
22
+
23
+ class TavilySearchTopic(Enum):
24
+ GENERAL = "general"
25
+ NEWS = "news"
26
+
27
+
28
+ class TavilySearchTimeRange(Enum):
29
+ DAY = "day"
30
+ WEEK = "week"
31
+ MONTH = "month"
32
+ YEAR = "year"
33
+
34
+
35
+ class TavilySearchSchema(BaseModel):
36
+ query: str = Field(..., description="The search query you want to execute with Tavily.")
37
+ search_depth: TavilySearchDepth = Field(TavilySearchDepth.BASIC, description="The depth of the search.")
38
+ topic: TavilySearchTopic = Field(TavilySearchTopic.GENERAL, description="The category of the search.")
39
+ max_results: int = Field(5, description="The maximum number of search results to return.")
40
+ include_images: bool = Field(default=False, description="Include a list of query-related images in the response.")
41
+ include_answer: bool = Field(default=False, description="Include a short answer to original query.")
42
+ chunks_per_source: int = Field(
43
+ default=MAX_CHUNKS_PER_SOURCE,
44
+ description=(
45
+ "The number of content chunks to retrieve from each source (max 500 chars each). Only for advanced search."
46
+ ),
47
+ ge=1,
48
+ le=MAX_CHUNKS_PER_SOURCE,
49
+ )
50
+ include_domains: list[str] = Field(
51
+ default=[],
52
+ description="A list of domains to specifically include in the search results.",
53
+ )
54
+ exclude_domains: list[str] = Field(
55
+ default=[],
56
+ description="A list of domains to specifically exclude from the search results.",
57
+ )
58
+ include_raw_content: bool = Field(
59
+ default=False,
60
+ description="Include the cleaned and parsed HTML content of each search result.",
61
+ )
62
+ days: int = Field(
63
+ default=7,
64
+ description="Number of days back from the current date to include. Only available if topic is news.",
65
+ ge=1,
66
+ )
67
+ time_range: TavilySearchTimeRange | None = Field(
68
+ default=None,
69
+ description="The time range back from the current date to filter results.",
70
+ )
71
+
72
+
73
+ class TavilySearchToolComponent(LCToolComponent):
74
+ display_name = "Tavily Search API"
75
+ description = """**Tavily Search API** is a search engine optimized for LLMs and RAG, \
76
+ aimed at efficient, quick, and persistent search results. It can be used independently or as an agent tool.
77
+
78
+ Note: Check 'Advanced' for all options.
79
+ """
80
+ icon = "TavilyIcon"
81
+ name = "TavilyAISearch"
82
+ documentation = "https://docs.tavily.com/"
83
+ legacy = True
84
+ replacement = ["tavily.TavilySearchComponent"]
85
+
86
+ inputs = [
87
+ SecretStrInput(
88
+ name="api_key",
89
+ display_name="Tavily API Key",
90
+ required=True,
91
+ info="Your Tavily API Key.",
92
+ ),
93
+ MessageTextInput(
94
+ name="query",
95
+ display_name="Search Query",
96
+ info="The search query you want to execute with Tavily.",
97
+ ),
98
+ DropdownInput(
99
+ name="search_depth",
100
+ display_name="Search Depth",
101
+ info="The depth of the search.",
102
+ options=list(TavilySearchDepth),
103
+ value=TavilySearchDepth.ADVANCED,
104
+ advanced=True,
105
+ ),
106
+ IntInput(
107
+ name="chunks_per_source",
108
+ display_name="Chunks Per Source",
109
+ info=("The number of content chunks to retrieve from each source (1-3). Only works with advanced search."),
110
+ value=MAX_CHUNKS_PER_SOURCE,
111
+ advanced=True,
112
+ ),
113
+ DropdownInput(
114
+ name="topic",
115
+ display_name="Search Topic",
116
+ info="The category of the search.",
117
+ options=list(TavilySearchTopic),
118
+ value=TavilySearchTopic.GENERAL,
119
+ advanced=True,
120
+ ),
121
+ IntInput(
122
+ name="days",
123
+ display_name="Days",
124
+ info="Number of days back from current date to include. Only available with news topic.",
125
+ value=7,
126
+ advanced=True,
127
+ ),
128
+ IntInput(
129
+ name="max_results",
130
+ display_name="Max Results",
131
+ info="The maximum number of search results to return.",
132
+ value=5,
133
+ advanced=True,
134
+ ),
135
+ BoolInput(
136
+ name="include_answer",
137
+ display_name="Include Answer",
138
+ info="Include a short answer to original query.",
139
+ value=True,
140
+ advanced=True,
141
+ ),
142
+ DropdownInput(
143
+ name="time_range",
144
+ display_name="Time Range",
145
+ info="The time range back from the current date to filter results.",
146
+ options=list(TavilySearchTimeRange),
147
+ value=None,
148
+ advanced=True,
149
+ ),
150
+ BoolInput(
151
+ name="include_images",
152
+ display_name="Include Images",
153
+ info="Include a list of query-related images in the response.",
154
+ value=True,
155
+ advanced=True,
156
+ ),
157
+ MessageTextInput(
158
+ name="include_domains",
159
+ display_name="Include Domains",
160
+ info="Comma-separated list of domains to include in the search results.",
161
+ advanced=True,
162
+ ),
163
+ MessageTextInput(
164
+ name="exclude_domains",
165
+ display_name="Exclude Domains",
166
+ info="Comma-separated list of domains to exclude from the search results.",
167
+ advanced=True,
168
+ ),
169
+ BoolInput(
170
+ name="include_raw_content",
171
+ display_name="Include Raw Content",
172
+ info="Include the cleaned and parsed HTML content of each search result.",
173
+ value=False,
174
+ advanced=True,
175
+ ),
176
+ ]
177
+
178
+ def run_model(self) -> list[Data]:
179
+ # Convert string values to enum instances with validation
180
+ try:
181
+ search_depth_enum = (
182
+ self.search_depth
183
+ if isinstance(self.search_depth, TavilySearchDepth)
184
+ else TavilySearchDepth(str(self.search_depth).lower())
185
+ )
186
+ except ValueError as e:
187
+ error_message = f"Invalid search depth value: {e!s}"
188
+ self.status = error_message
189
+ return [Data(data={"error": error_message})]
190
+
191
+ try:
192
+ topic_enum = (
193
+ self.topic if isinstance(self.topic, TavilySearchTopic) else TavilySearchTopic(str(self.topic).lower())
194
+ )
195
+ except ValueError as e:
196
+ error_message = f"Invalid topic value: {e!s}"
197
+ self.status = error_message
198
+ return [Data(data={"error": error_message})]
199
+
200
+ try:
201
+ time_range_enum = (
202
+ self.time_range
203
+ if isinstance(self.time_range, TavilySearchTimeRange)
204
+ else TavilySearchTimeRange(str(self.time_range).lower())
205
+ if self.time_range
206
+ else None
207
+ )
208
+ except ValueError as e:
209
+ error_message = f"Invalid time range value: {e!s}"
210
+ self.status = error_message
211
+ return [Data(data={"error": error_message})]
212
+
213
+ # Initialize domain variables as None
214
+ include_domains = None
215
+ exclude_domains = None
216
+
217
+ # Only process domains if they're provided
218
+ if self.include_domains:
219
+ include_domains = [domain.strip() for domain in self.include_domains.split(",") if domain.strip()]
220
+
221
+ if self.exclude_domains:
222
+ exclude_domains = [domain.strip() for domain in self.exclude_domains.split(",") if domain.strip()]
223
+
224
+ return self._tavily_search(
225
+ self.query,
226
+ search_depth=search_depth_enum,
227
+ topic=topic_enum,
228
+ max_results=self.max_results,
229
+ include_images=self.include_images,
230
+ include_answer=self.include_answer,
231
+ chunks_per_source=self.chunks_per_source,
232
+ include_domains=include_domains,
233
+ exclude_domains=exclude_domains,
234
+ include_raw_content=self.include_raw_content,
235
+ days=self.days,
236
+ time_range=time_range_enum,
237
+ )
238
+
239
+ def build_tool(self) -> Tool:
240
+ return StructuredTool.from_function(
241
+ name="tavily_search",
242
+ description="Perform a web search using the Tavily API.",
243
+ func=self._tavily_search,
244
+ args_schema=TavilySearchSchema,
245
+ )
246
+
247
+ def _tavily_search(
248
+ self,
249
+ query: str,
250
+ *,
251
+ search_depth: TavilySearchDepth = TavilySearchDepth.BASIC,
252
+ topic: TavilySearchTopic = TavilySearchTopic.GENERAL,
253
+ max_results: int = 5,
254
+ include_images: bool = False,
255
+ include_answer: bool = False,
256
+ chunks_per_source: int = MAX_CHUNKS_PER_SOURCE,
257
+ include_domains: list[str] | None = None,
258
+ exclude_domains: list[str] | None = None,
259
+ include_raw_content: bool = False,
260
+ days: int = 7,
261
+ time_range: TavilySearchTimeRange | None = None,
262
+ ) -> list[Data]:
263
+ # Validate enum values
264
+ if not isinstance(search_depth, TavilySearchDepth):
265
+ msg = f"Invalid search_depth value: {search_depth}"
266
+ raise TypeError(msg)
267
+ if not isinstance(topic, TavilySearchTopic):
268
+ msg = f"Invalid topic value: {topic}"
269
+ raise TypeError(msg)
270
+
271
+ # Validate chunks_per_source range
272
+ if not 1 <= chunks_per_source <= MAX_CHUNKS_PER_SOURCE:
273
+ msg = f"chunks_per_source must be between 1 and {MAX_CHUNKS_PER_SOURCE}, got {chunks_per_source}"
274
+ raise ValueError(msg)
275
+
276
+ # Validate days is positive
277
+ if days < 1:
278
+ msg = f"days must be greater than or equal to 1, got {days}"
279
+ raise ValueError(msg)
280
+
281
+ try:
282
+ url = "https://api.tavily.com/search"
283
+ headers = {
284
+ "content-type": "application/json",
285
+ "accept": "application/json",
286
+ }
287
+ payload = {
288
+ "api_key": self.api_key,
289
+ "query": query,
290
+ "search_depth": search_depth.value,
291
+ "topic": topic.value,
292
+ "max_results": max_results,
293
+ "include_images": include_images,
294
+ "include_answer": include_answer,
295
+ "chunks_per_source": chunks_per_source if search_depth == TavilySearchDepth.ADVANCED else None,
296
+ "include_domains": include_domains if include_domains else None,
297
+ "exclude_domains": exclude_domains if exclude_domains else None,
298
+ "include_raw_content": include_raw_content,
299
+ "days": days if topic == TavilySearchTopic.NEWS else None,
300
+ "time_range": time_range.value if time_range else None,
301
+ }
302
+
303
+ with httpx.Client(timeout=90.0) as client:
304
+ response = client.post(url, json=payload, headers=headers)
305
+
306
+ response.raise_for_status()
307
+ search_results = response.json()
308
+
309
+ data_results = [
310
+ Data(
311
+ data={
312
+ "title": result.get("title"),
313
+ "url": result.get("url"),
314
+ "content": result.get("content"),
315
+ "score": result.get("score"),
316
+ "raw_content": result.get("raw_content") if include_raw_content else None,
317
+ }
318
+ )
319
+ for result in search_results.get("results", [])
320
+ ]
321
+
322
+ if include_answer and search_results.get("answer"):
323
+ data_results.insert(0, Data(data={"answer": search_results["answer"]}))
324
+
325
+ if include_images and search_results.get("images"):
326
+ data_results.append(Data(data={"images": search_results["images"]}))
327
+
328
+ self.status = data_results # type: ignore[assignment]
329
+
330
+ except httpx.TimeoutException as e:
331
+ error_message = "Request timed out (90s). Please try again or adjust parameters."
332
+ logger.error(f"Timeout error: {e}")
333
+ self.status = error_message
334
+ raise ToolException(error_message) from e
335
+ except httpx.HTTPStatusError as e:
336
+ error_message = f"HTTP error: {e.response.status_code} - {e.response.text}"
337
+ logger.debug(error_message)
338
+ self.status = error_message
339
+ raise ToolException(error_message) from e
340
+ except Exception as e:
341
+ error_message = f"Unexpected error: {e}"
342
+ logger.debug("Error running Tavily Search", exc_info=True)
343
+ self.status = error_message
344
+ raise ToolException(error_message) from e
345
+ return data_results
@@ -0,0 +1,103 @@
1
+ from typing import Any
2
+
3
+ import httpx
4
+ from langchain_core.tools import StructuredTool, ToolException
5
+ from pydantic import BaseModel, Field
6
+
7
+ from lfx.base.langchain_utilities.model import LCToolComponent
8
+ from lfx.field_typing import Tool
9
+ from lfx.inputs.inputs import MultilineInput
10
+ from lfx.schema.data import Data
11
+
12
+
13
+ class WikidataSearchSchema(BaseModel):
14
+ query: str = Field(..., description="The search query for Wikidata")
15
+
16
+
17
+ class WikidataAPIWrapper(BaseModel):
18
+ """Wrapper around Wikidata API."""
19
+
20
+ wikidata_api_url: str = "https://www.wikidata.org/w/api.php"
21
+
22
+ def results(self, query: str) -> list[dict[str, Any]]:
23
+ # Define request parameters for Wikidata API
24
+ params = {
25
+ "action": "wbsearchentities",
26
+ "format": "json",
27
+ "search": query,
28
+ "language": "en",
29
+ }
30
+
31
+ # Send request to Wikidata API
32
+ response = httpx.get(self.wikidata_api_url, params=params)
33
+ response.raise_for_status()
34
+ response_json = response.json()
35
+
36
+ # Extract and return search results
37
+ return response_json.get("search", [])
38
+
39
+ def run(self, query: str) -> list[dict[str, Any]]:
40
+ try:
41
+ results = self.results(query)
42
+ if results:
43
+ return results
44
+
45
+ error_message = "No search results found for the given query."
46
+
47
+ raise ToolException(error_message)
48
+
49
+ except Exception as e:
50
+ error_message = f"Error in Wikidata Search API: {e!s}"
51
+
52
+ raise ToolException(error_message) from e
53
+
54
+
55
+ class WikidataAPIComponent(LCToolComponent):
56
+ display_name = "Wikidata API"
57
+ description = "Performs a search using the Wikidata API."
58
+ name = "WikidataAPI"
59
+ icon = "Wikipedia"
60
+ legacy = True
61
+ replacement = ["wikipedia.WikidataComponent"]
62
+
63
+ inputs = [
64
+ MultilineInput(
65
+ name="query",
66
+ display_name="Query",
67
+ info="The text query for similarity search on Wikidata.",
68
+ required=True,
69
+ ),
70
+ ]
71
+
72
+ def build_tool(self) -> Tool:
73
+ wrapper = WikidataAPIWrapper()
74
+
75
+ # Define the tool using StructuredTool and wrapper's run method
76
+ tool = StructuredTool.from_function(
77
+ name="wikidata_search_api",
78
+ description="Perform similarity search on Wikidata API",
79
+ func=wrapper.run,
80
+ args_schema=WikidataSearchSchema,
81
+ )
82
+
83
+ self.status = "Wikidata Search API Tool for Langchain"
84
+
85
+ return tool
86
+
87
+ def run_model(self) -> list[Data]:
88
+ tool = self.build_tool()
89
+
90
+ results = tool.run({"query": self.query})
91
+
92
+ # Transform the API response into Data objects
93
+ data = [
94
+ Data(
95
+ text=result["label"],
96
+ metadata=result,
97
+ )
98
+ for result in results
99
+ ]
100
+
101
+ self.status = data # type: ignore[assignment]
102
+
103
+ return data
@@ -0,0 +1,50 @@
1
+ from typing import cast
2
+
3
+ from langchain_community.tools import WikipediaQueryRun
4
+ from langchain_community.utilities.wikipedia import WikipediaAPIWrapper
5
+
6
+ from lfx.base.langchain_utilities.model import LCToolComponent
7
+ from lfx.field_typing import Tool
8
+ from lfx.inputs.inputs import BoolInput, IntInput, MessageTextInput, MultilineInput
9
+ from lfx.schema.data import Data
10
+
11
+
12
+ class WikipediaAPIComponent(LCToolComponent):
13
+ display_name = "Wikipedia API"
14
+ description = "Call Wikipedia API."
15
+ name = "WikipediaAPI"
16
+ icon = "Wikipedia"
17
+ legacy = True
18
+ replacement = ["wikipedia.WikipediaComponent"]
19
+
20
+ inputs = [
21
+ MultilineInput(
22
+ name="input_value",
23
+ display_name="Input",
24
+ ),
25
+ MessageTextInput(name="lang", display_name="Language", value="en"),
26
+ IntInput(name="k", display_name="Number of results", value=4, required=True),
27
+ BoolInput(name="load_all_available_meta", display_name="Load all available meta", value=False, advanced=True),
28
+ IntInput(
29
+ name="doc_content_chars_max", display_name="Document content characters max", value=4000, advanced=True
30
+ ),
31
+ ]
32
+
33
+ def run_model(self) -> list[Data]:
34
+ wrapper = self._build_wrapper()
35
+ docs = wrapper.load(self.input_value)
36
+ data = [Data.from_document(doc) for doc in docs]
37
+ self.status = data
38
+ return data
39
+
40
+ def build_tool(self) -> Tool:
41
+ wrapper = self._build_wrapper()
42
+ return cast("Tool", WikipediaQueryRun(api_wrapper=wrapper))
43
+
44
+ def _build_wrapper(self) -> WikipediaAPIWrapper:
45
+ return WikipediaAPIWrapper(
46
+ top_k_results=self.k,
47
+ lang=self.lang,
48
+ load_all_available_meta=self.load_all_available_meta,
49
+ doc_content_chars_max=self.doc_content_chars_max,
50
+ )
@@ -0,0 +1,130 @@
1
+ import ast
2
+ import pprint
3
+ from enum import Enum
4
+
5
+ from langchain.tools import StructuredTool
6
+ from langchain_core.tools import ToolException
7
+ from pydantic import BaseModel, Field
8
+
9
+ from lfx.base.langchain_utilities.model import LCToolComponent
10
+ from lfx.field_typing import Tool
11
+ from lfx.inputs.inputs import DropdownInput, IntInput, MessageTextInput
12
+ from lfx.log.logger import logger
13
+ from lfx.schema.data import Data
14
+
15
+
16
+ class YahooFinanceMethod(Enum):
17
+ GET_INFO = "get_info"
18
+ GET_NEWS = "get_news"
19
+ GET_ACTIONS = "get_actions"
20
+ GET_ANALYSIS = "get_analysis"
21
+ GET_BALANCE_SHEET = "get_balance_sheet"
22
+ GET_CALENDAR = "get_calendar"
23
+ GET_CASHFLOW = "get_cashflow"
24
+ GET_INSTITUTIONAL_HOLDERS = "get_institutional_holders"
25
+ GET_RECOMMENDATIONS = "get_recommendations"
26
+ GET_SUSTAINABILITY = "get_sustainability"
27
+ GET_MAJOR_HOLDERS = "get_major_holders"
28
+ GET_MUTUALFUND_HOLDERS = "get_mutualfund_holders"
29
+ GET_INSIDER_PURCHASES = "get_insider_purchases"
30
+ GET_INSIDER_TRANSACTIONS = "get_insider_transactions"
31
+ GET_INSIDER_ROSTER_HOLDERS = "get_insider_roster_holders"
32
+ GET_DIVIDENDS = "get_dividends"
33
+ GET_CAPITAL_GAINS = "get_capital_gains"
34
+ GET_SPLITS = "get_splits"
35
+ GET_SHARES = "get_shares"
36
+ GET_FAST_INFO = "get_fast_info"
37
+ GET_SEC_FILINGS = "get_sec_filings"
38
+ GET_RECOMMENDATIONS_SUMMARY = "get_recommendations_summary"
39
+ GET_UPGRADES_DOWNGRADES = "get_upgrades_downgrades"
40
+ GET_EARNINGS = "get_earnings"
41
+ GET_INCOME_STMT = "get_income_stmt"
42
+
43
+
44
+ class YahooFinanceSchema(BaseModel):
45
+ symbol: str = Field(..., description="The stock symbol to retrieve data for.")
46
+ method: YahooFinanceMethod = Field(YahooFinanceMethod.GET_INFO, description="The type of data to retrieve.")
47
+ num_news: int | None = Field(5, description="The number of news articles to retrieve.")
48
+
49
+
50
+ class YfinanceToolComponent(LCToolComponent):
51
+ display_name = "Yahoo! Finance"
52
+ description = """Uses [yfinance](https://pypi.org/project/yfinance/) (unofficial package) \
53
+ to access financial data and market information from Yahoo! Finance."""
54
+ icon = "trending-up"
55
+ name = "YahooFinanceTool"
56
+ legacy = True
57
+ replacement = ["yahoosearch.YfinanceComponent"]
58
+
59
+ inputs = [
60
+ MessageTextInput(
61
+ name="symbol",
62
+ display_name="Stock Symbol",
63
+ info="The stock symbol to retrieve data for (e.g., AAPL, GOOG).",
64
+ ),
65
+ DropdownInput(
66
+ name="method",
67
+ display_name="Data Method",
68
+ info="The type of data to retrieve.",
69
+ options=list(YahooFinanceMethod),
70
+ value="get_news",
71
+ ),
72
+ IntInput(
73
+ name="num_news",
74
+ display_name="Number of News",
75
+ info="The number of news articles to retrieve (only applicable for get_news).",
76
+ value=5,
77
+ ),
78
+ ]
79
+
80
+ def run_model(self) -> list[Data]:
81
+ return self._yahoo_finance_tool(
82
+ self.symbol,
83
+ self.method,
84
+ self.num_news,
85
+ )
86
+
87
+ def build_tool(self) -> Tool:
88
+ return StructuredTool.from_function(
89
+ name="yahoo_finance",
90
+ description="Access financial data and market information from Yahoo! Finance.",
91
+ func=self._yahoo_finance_tool,
92
+ args_schema=YahooFinanceSchema,
93
+ )
94
+
95
+ def _yahoo_finance_tool(
96
+ self,
97
+ symbol: str,
98
+ method: YahooFinanceMethod,
99
+ num_news: int | None = 5,
100
+ ) -> list[Data]:
101
+ try:
102
+ import yfinance as yf
103
+ except ImportError as e:
104
+ msg = ""
105
+ raise ImportError(msg) from e
106
+
107
+ ticker = yf.Ticker(symbol)
108
+
109
+ try:
110
+ if method == YahooFinanceMethod.GET_INFO:
111
+ result = ticker.info
112
+ elif method == YahooFinanceMethod.GET_NEWS:
113
+ result = ticker.news[:num_news]
114
+ else:
115
+ result = getattr(ticker, method.value)()
116
+
117
+ result = pprint.pformat(result)
118
+
119
+ if method == YahooFinanceMethod.GET_NEWS:
120
+ data_list = [Data(data=article) for article in ast.literal_eval(result)]
121
+ else:
122
+ data_list = [Data(data={"result": result})]
123
+
124
+ except Exception as e:
125
+ error_message = f"Error retrieving data: {e}"
126
+ logger.debug(error_message)
127
+ self.status = error_message
128
+ raise ToolException(error_message) from e
129
+
130
+ return data_list
@@ -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 .convert_astra_results import ConvertAstraToTwelveLabs
9
+ from .pegasus_index import PegasusIndexVideo
10
+ from .split_video import SplitVideoComponent
11
+ from .text_embeddings import TwelveLabsTextEmbeddingsComponent
12
+ from .twelvelabs_pegasus import TwelveLabsPegasus
13
+ from .video_embeddings import TwelveLabsVideoEmbeddingsComponent
14
+ from .video_file import VideoFileComponent
15
+
16
+ _dynamic_imports = {
17
+ "ConvertAstraToTwelveLabs": "convert_astra_results",
18
+ "PegasusIndexVideo": "pegasus_index",
19
+ "SplitVideoComponent": "split_video",
20
+ "TwelveLabsPegasus": "twelvelabs_pegasus",
21
+ "TwelveLabsTextEmbeddingsComponent": "text_embeddings",
22
+ "TwelveLabsVideoEmbeddingsComponent": "video_embeddings",
23
+ "VideoFileComponent": "video_file",
24
+ }
25
+
26
+ __all__ = [
27
+ "ConvertAstraToTwelveLabs",
28
+ "PegasusIndexVideo",
29
+ "SplitVideoComponent",
30
+ "TwelveLabsPegasus",
31
+ "TwelveLabsTextEmbeddingsComponent",
32
+ "TwelveLabsVideoEmbeddingsComponent",
33
+ "VideoFileComponent",
34
+ ]
35
+
36
+
37
+ def __getattr__(attr_name: str) -> Any:
38
+ """Lazily import twelvelabs 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__)