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,126 @@
1
+ from lfx.custom.custom_component.component import Component
2
+ from lfx.io import MessageTextInput, Output, SecretStrInput
3
+ from lfx.schema.data import Data
4
+
5
+ MAX_ELEMENT_PROMPTS = 5
6
+
7
+
8
+ class JigsawStackAIScraperComponent(Component):
9
+ display_name = "AI Scraper"
10
+ description = "Scrape any website instantly and get consistent structured data \
11
+ in seconds without writing any css selector code"
12
+ documentation = "https://jigsawstack.com/docs/api-reference/ai/scrape"
13
+ icon = "JigsawStack"
14
+ name = "JigsawStackAIScraper"
15
+
16
+ inputs = [
17
+ SecretStrInput(
18
+ name="api_key",
19
+ display_name="JigsawStack API Key",
20
+ info="Your JigsawStack API key for authentication",
21
+ required=True,
22
+ ),
23
+ MessageTextInput(
24
+ name="url",
25
+ display_name="URL",
26
+ info="URL of the page to scrape. Either url or html is required, but not both.",
27
+ required=False,
28
+ tool_mode=True,
29
+ ),
30
+ MessageTextInput(
31
+ name="html",
32
+ display_name="HTML",
33
+ info="HTML content to scrape. Either url or html is required, but not both.",
34
+ required=False,
35
+ tool_mode=True,
36
+ ),
37
+ MessageTextInput(
38
+ name="element_prompts",
39
+ display_name="Element Prompts",
40
+ info="Items on the page to be scraped (maximum 5). E.g. 'Plan price', 'Plan title'",
41
+ required=True,
42
+ tool_mode=True,
43
+ ),
44
+ MessageTextInput(
45
+ name="root_element_selector",
46
+ display_name="Root Element Selector",
47
+ info="CSS selector to limit the scope of scraping to a specific element and its children",
48
+ required=False,
49
+ value="main",
50
+ ),
51
+ ]
52
+
53
+ outputs = [
54
+ Output(display_name="AI Scraper Results", name="scrape_results", method="scrape"),
55
+ ]
56
+
57
+ def scrape(self) -> Data:
58
+ try:
59
+ from jigsawstack import JigsawStack, JigsawStackError
60
+ except ImportError as e:
61
+ jigsawstack_import_error = (
62
+ "JigsawStack package not found. Please install it using: pip install jigsawstack>=0.2.7"
63
+ )
64
+ raise ImportError(jigsawstack_import_error) from e
65
+
66
+ try:
67
+ client = JigsawStack(api_key=self.api_key)
68
+
69
+ # Build request object
70
+ scrape_params: dict = {}
71
+ if self.url:
72
+ scrape_params["url"] = self.url
73
+ if self.html:
74
+ scrape_params["html"] = self.html
75
+
76
+ url_value = scrape_params.get("url", "")
77
+ html_value = scrape_params.get("html", "")
78
+ if (not url_value or not url_value.strip()) and (not html_value or not html_value.strip()):
79
+ url_or_html_error = "Either 'url' or 'html' must be provided for scraping"
80
+ raise ValueError(url_or_html_error)
81
+
82
+ # Process element_prompts with proper type handling
83
+ element_prompts_list: list[str] = []
84
+ if self.element_prompts:
85
+ element_prompts_value: str | list[str] = self.element_prompts
86
+
87
+ if isinstance(element_prompts_value, str):
88
+ if "," not in element_prompts_value:
89
+ element_prompts_list = [element_prompts_value]
90
+ else:
91
+ element_prompts_list = element_prompts_value.split(",")
92
+ elif isinstance(element_prompts_value, list):
93
+ element_prompts_list = element_prompts_value
94
+ else:
95
+ # Fallback for other types
96
+ element_prompts_list = str(element_prompts_value).split(",")
97
+
98
+ if len(element_prompts_list) > MAX_ELEMENT_PROMPTS:
99
+ max_elements_error = "Maximum of 5 element prompts allowed"
100
+ raise ValueError(max_elements_error)
101
+ if len(element_prompts_list) == 0:
102
+ invalid_elements_error = "Element prompts cannot be empty"
103
+ raise ValueError(invalid_elements_error)
104
+
105
+ scrape_params["element_prompts"] = element_prompts_list
106
+
107
+ if self.root_element_selector:
108
+ scrape_params["root_element_selector"] = self.root_element_selector
109
+
110
+ # Call web scraping
111
+ response = client.web.ai_scrape(scrape_params)
112
+
113
+ if not response.get("success", False):
114
+ fail_error = "JigsawStack API request failed."
115
+ raise ValueError(fail_error)
116
+
117
+ result_data = response
118
+
119
+ self.status = "AI scrape process is now complete."
120
+
121
+ return Data(data=result_data)
122
+
123
+ except JigsawStackError as e:
124
+ error_data = {"error": str(e), "success": False}
125
+ self.status = f"Error: {e!s}"
126
+ return Data(data=error_data)
@@ -0,0 +1,136 @@
1
+ from lfx.custom.custom_component.component import Component
2
+ from lfx.io import BoolInput, DropdownInput, Output, QueryInput, SecretStrInput
3
+ from lfx.schema.data import Data
4
+ from lfx.schema.message import Message
5
+
6
+
7
+ class JigsawStackAIWebSearchComponent(Component):
8
+ display_name = "AI Web Search"
9
+ description = "Effortlessly search the Web and get access to high-quality results powered with AI."
10
+ documentation = "https://jigsawstack.com/docs/api-reference/web/ai-search"
11
+ icon = "JigsawStack"
12
+ name = "JigsawStackAISearch"
13
+ inputs = [
14
+ SecretStrInput(
15
+ name="api_key",
16
+ display_name="JigsawStack API Key",
17
+ info="Your JigsawStack API key for authentication",
18
+ required=True,
19
+ ),
20
+ QueryInput(
21
+ name="query",
22
+ display_name="Query",
23
+ info="The search value. The maximum query character length is 400",
24
+ required=True,
25
+ tool_mode=True,
26
+ ),
27
+ BoolInput(
28
+ name="ai_overview",
29
+ display_name="AI Overview",
30
+ info="Include AI powered overview in the search results",
31
+ required=False,
32
+ value=True,
33
+ ),
34
+ DropdownInput(
35
+ name="safe_search",
36
+ display_name="Safe Search",
37
+ info="Enable safe search to filter out adult content",
38
+ required=False,
39
+ options=["moderate", "strict", "off"],
40
+ value="off",
41
+ ),
42
+ BoolInput(
43
+ name="spell_check",
44
+ display_name="Spell Check",
45
+ info="Spell check the search query",
46
+ required=False,
47
+ value=True,
48
+ ),
49
+ ]
50
+
51
+ outputs = [
52
+ Output(display_name="AI Search Results", name="search_results", method="search"),
53
+ Output(display_name="Content Text", name="content_text", method="get_content_text"),
54
+ ]
55
+
56
+ def search(self) -> Data:
57
+ try:
58
+ from jigsawstack import JigsawStack, JigsawStackError
59
+ except ImportError as e:
60
+ jigsawstack_import_error = (
61
+ "JigsawStack package not found. Please install it using: pip install jigsawstack>=0.2.7"
62
+ )
63
+ raise ImportError(jigsawstack_import_error) from e
64
+
65
+ try:
66
+ client = JigsawStack(api_key=self.api_key)
67
+
68
+ # build request object
69
+ search_params = {}
70
+ if self.query:
71
+ search_params["query"] = self.query
72
+ if self.ai_overview is not None:
73
+ search_params["ai_overview"] = self.ai_overview
74
+ if self.safe_search:
75
+ search_params["safe_search"] = self.safe_search
76
+ if self.spell_check is not None:
77
+ search_params["spell_check"] = self.spell_check
78
+
79
+ # Call web scraping
80
+ response = client.web.search(search_params)
81
+
82
+ api_error_msg = "JigsawStack API returned unsuccessful response"
83
+ if not response.get("success", False):
84
+ raise ValueError(api_error_msg)
85
+
86
+ # Create comprehensive data object
87
+ result_data = {
88
+ "query": self.query,
89
+ "ai_overview": response.get("ai_overview", ""),
90
+ "spell_fixed": response.get("spell_fixed", False),
91
+ "is_safe": response.get("is_safe", True),
92
+ "results": response.get("results", []),
93
+ "success": True,
94
+ }
95
+
96
+ self.status = f"Search complete for: {response.get('query', '')}"
97
+
98
+ return Data(data=result_data)
99
+
100
+ except JigsawStackError as e:
101
+ error_data = {"error": str(e), "success": False}
102
+ self.status = f"Error: {e!s}"
103
+ return Data(data=error_data)
104
+
105
+ def get_content_text(self) -> Message:
106
+ try:
107
+ from jigsawstack import JigsawStack, JigsawStackError
108
+ except ImportError:
109
+ return Message(text="Error: JigsawStack package not found.")
110
+
111
+ try:
112
+ # Initialize JigsawStack client
113
+ client = JigsawStack(api_key=self.api_key)
114
+ search_params = {}
115
+ if self.query:
116
+ search_params["query"] = self.query
117
+ if self.ai_overview is not None:
118
+ search_params["ai_overview"] = self.ai_overview
119
+ if self.safe_search:
120
+ search_params["safe_search"] = self.safe_search
121
+ if self.spell_check is not None:
122
+ search_params["spell_check"] = self.spell_check
123
+
124
+ # Call web scraping
125
+ response = client.web.search(search_params)
126
+
127
+ request_failed_msg = "Request Failed"
128
+ if not response.get("success", False):
129
+ raise JigsawStackError(request_failed_msg)
130
+
131
+ # Return the content as text
132
+ content = response.get("ai_overview", "")
133
+ return Message(text=content)
134
+
135
+ except JigsawStackError as e:
136
+ return Message(text=f"Error while using AI Search: {e!s}")
@@ -0,0 +1,115 @@
1
+ import tempfile
2
+
3
+ from lfx.custom.custom_component.component import Component
4
+ from lfx.io import Output, SecretStrInput, StrInput
5
+ from lfx.schema.data import Data
6
+
7
+
8
+ class JigsawStackFileReadComponent(Component):
9
+ display_name = "File Read"
10
+ description = "Read any previously uploaded file seamlessly from \
11
+ JigsawStack File Storage and use it in your AI applications."
12
+ documentation = "https://jigsawstack.com/docs/api-reference/store/file/get"
13
+ icon = "JigsawStack"
14
+ name = "JigsawStackFileRead"
15
+
16
+ inputs = [
17
+ SecretStrInput(
18
+ name="api_key",
19
+ display_name="JigsawStack API Key",
20
+ info="Your JigsawStack API key for authentication",
21
+ required=True,
22
+ ),
23
+ StrInput(
24
+ name="key",
25
+ display_name="Key",
26
+ info="The key used to retrieve the file from JigsawStack File Storage.",
27
+ required=True,
28
+ tool_mode=True,
29
+ ),
30
+ ]
31
+
32
+ outputs = [
33
+ Output(display_name="File Path", name="file_path", method="read_and_save_file"),
34
+ ]
35
+
36
+ def read_and_save_file(self) -> Data:
37
+ """Read file from JigsawStack and save to temp file, return file path."""
38
+ try:
39
+ from jigsawstack import JigsawStack, JigsawStackError
40
+ except ImportError as e:
41
+ jigsawstack_import_error = (
42
+ "JigsawStack package not found. Please install it using: pip install jigsawstack>=0.2.7"
43
+ )
44
+ raise ImportError(jigsawstack_import_error) from e
45
+
46
+ try:
47
+ client = JigsawStack(api_key=self.api_key)
48
+ if not self.key or self.key.strip() == "":
49
+ invalid_key_error = "Key is required to read a file from JigsawStack File Storage."
50
+ raise ValueError(invalid_key_error)
51
+
52
+ # Download file content
53
+ response = client.store.get(self.key)
54
+
55
+ # Determine file extension
56
+ file_extension = self._detect_file_extension(response)
57
+
58
+ # Create temporary file
59
+ with tempfile.NamedTemporaryFile(
60
+ delete=False, suffix=file_extension, prefix=f"jigsawstack_{self.key}_"
61
+ ) as temp_file:
62
+ if isinstance(response, bytes):
63
+ temp_file.write(response)
64
+ else:
65
+ # Handle string content
66
+ temp_file.write(response.encode("utf-8"))
67
+
68
+ temp_path = temp_file.name
69
+
70
+ return Data(
71
+ data={
72
+ "file_path": temp_path,
73
+ "key": self.key,
74
+ "file_extension": file_extension,
75
+ "size": len(response) if isinstance(response, bytes) else len(str(response)),
76
+ "success": True,
77
+ }
78
+ )
79
+
80
+ except JigsawStackError as e:
81
+ error_data = {"error": str(e), "success": False}
82
+ self.status = f"Error: {e!s}"
83
+ return Data(data=error_data)
84
+
85
+ def _detect_file_extension(self, content) -> str:
86
+ """Detect file extension based on content headers."""
87
+ if isinstance(content, bytes):
88
+ # Check magic numbers for common file types
89
+ if content.startswith(b"\xff\xd8\xff"):
90
+ return ".jpg"
91
+ if content.startswith(b"\x89PNG\r\n\x1a\n"):
92
+ return ".png"
93
+ if content.startswith((b"GIF87a", b"GIF89a")):
94
+ return ".gif"
95
+ if content.startswith(b"%PDF"):
96
+ return ".pdf"
97
+ if content.startswith(b"PK\x03\x04"): # ZIP/DOCX/XLSX
98
+ return ".zip"
99
+ if content.startswith(b"\x00\x00\x01\x00"): # ICO
100
+ return ".ico"
101
+ if content.startswith(b"RIFF") and b"WEBP" in content[:12]:
102
+ return ".webp"
103
+ if content.startswith((b"\xff\xfb", b"\xff\xf3", b"\xff\xf2")):
104
+ return ".mp3"
105
+ if content.startswith((b"ftypmp4", b"\x00\x00\x00\x20ftypmp4")):
106
+ return ".mp4"
107
+ # Try to decode as text
108
+ try:
109
+ content.decode("utf-8")
110
+ return ".txt" # noqa: TRY300
111
+ except UnicodeDecodeError:
112
+ return ".bin" # Binary file
113
+ else:
114
+ # String content
115
+ return ".txt"
@@ -0,0 +1,94 @@
1
+ from pathlib import Path
2
+
3
+ from lfx.custom.custom_component.component import Component
4
+ from lfx.io import BoolInput, FileInput, Output, SecretStrInput, StrInput
5
+ from lfx.schema.data import Data
6
+
7
+
8
+ class JigsawStackFileUploadComponent(Component):
9
+ display_name = "File Upload"
10
+ description = "Store any file seamlessly on JigsawStack File Storage and use it in your AI applications. \
11
+ Supports various file types including images, documents, and more."
12
+ documentation = "https://jigsawstack.com/docs/api-reference/store/file/add"
13
+ icon = "JigsawStack"
14
+ name = "JigsawStackFileUpload"
15
+
16
+ inputs = [
17
+ SecretStrInput(
18
+ name="api_key",
19
+ display_name="JigsawStack API Key",
20
+ info="Your JigsawStack API key for authentication",
21
+ required=True,
22
+ ),
23
+ FileInput(
24
+ name="file",
25
+ display_name="File",
26
+ info="Upload file to be stored on JigsawStack File Storage.",
27
+ required=True,
28
+ file_types=["pdf", "png", "jpg", "jpeg", "mp4", "mp3", "txt", "docx", "xlsx"],
29
+ ),
30
+ StrInput(
31
+ name="key",
32
+ display_name="Key",
33
+ info="The key used to store the file on JigsawStack File Storage. \
34
+ If not provided, a unique key will be generated.",
35
+ required=False,
36
+ tool_mode=True,
37
+ ),
38
+ BoolInput(
39
+ name="overwrite",
40
+ display_name="Overwrite Existing File",
41
+ info="If true, will overwrite the existing file with the same key. \
42
+ If false, will return an error if the file already exists.",
43
+ required=False,
44
+ value=True,
45
+ ),
46
+ BoolInput(
47
+ name="temp_public_url",
48
+ display_name="Return Temporary Public URL",
49
+ info="If true, will return a temporary public URL which lasts for a limited time. \
50
+ If false, will return the file store key which can only be accessed by the owner.",
51
+ required=False,
52
+ value=False,
53
+ tool_mode=True,
54
+ ),
55
+ ]
56
+
57
+ outputs = [
58
+ Output(display_name="File Store Result", name="file_upload_result", method="upload_file"),
59
+ ]
60
+
61
+ def upload_file(self) -> Data:
62
+ try:
63
+ from jigsawstack import JigsawStack, JigsawStackError
64
+ except ImportError as e:
65
+ jigsawstack_import_error = (
66
+ "JigsawStack package not found. Please install it using: pip install jigsawstack>=0.2.7"
67
+ )
68
+ raise ImportError(jigsawstack_import_error) from e
69
+
70
+ try:
71
+ client = JigsawStack(api_key=self.api_key)
72
+
73
+ file_path = Path(self.file)
74
+ with Path.open(file_path, "rb") as f:
75
+ file_content = f.read()
76
+ params = {}
77
+
78
+ if self.key:
79
+ # if key is provided, use it as the file store key
80
+ params["key"] = self.key
81
+ if self.overwrite is not None:
82
+ # if overwrite is provided, use it to determine if the file should be overwritten
83
+ params["overwrite"] = self.overwrite
84
+ if self.temp_public_url is not None:
85
+ # if temp_public_url is provided, use it to determine if a temporary public URL should
86
+ params["temp_public_url"] = self.temp_public_url
87
+
88
+ response = client.store.upload(file_content, params)
89
+ return Data(data=response)
90
+
91
+ except JigsawStackError as e:
92
+ error_data = {"error": str(e), "success": False}
93
+ self.status = f"Error: {e!s}"
94
+ return Data(data=error_data)
@@ -0,0 +1,205 @@
1
+ from lfx.custom.custom_component.component import Component
2
+ from lfx.io import DropdownInput, IntInput, MessageTextInput, Output, SecretStrInput
3
+ from lfx.schema.data import Data
4
+
5
+
6
+ class JigsawStackImageGenerationComponent(Component):
7
+ display_name = "Image Generation"
8
+ description = "Generate an image based on the given text by employing AI models like Flux, \
9
+ Stable Diffusion, and other top models."
10
+ documentation = "https://jigsawstack.com/docs/api-reference/ai/image-generation"
11
+ icon = "JigsawStack"
12
+ name = "JigsawStackImageGeneration"
13
+
14
+ inputs = [
15
+ SecretStrInput(
16
+ name="api_key",
17
+ display_name="JigsawStack API Key",
18
+ info="Your JigsawStack API key for authentication",
19
+ required=True,
20
+ ),
21
+ MessageTextInput(
22
+ name="prompt",
23
+ display_name="Prompt",
24
+ info="The text prompt to generate the image from. Must be between 1-5000 characters.",
25
+ required=True,
26
+ tool_mode=True,
27
+ ),
28
+ MessageTextInput(
29
+ name="aspect_ratio",
30
+ display_name="Aspect Ratio",
31
+ info="The aspect ratio of the generated image. Must be one of the following:\
32
+ '1:1', '16:9', '21:9', '3:2', '2:3', '4:5', '5:4', '3:4', '4:3', '9:16', '9:21' \
33
+ Default is 1:1.",
34
+ required=False,
35
+ tool_mode=True,
36
+ ),
37
+ MessageTextInput(
38
+ name="url",
39
+ display_name="URL",
40
+ info="A valid URL where the generated image will be sent.",
41
+ required=False,
42
+ ),
43
+ MessageTextInput(
44
+ name="file_store_key",
45
+ display_name="File Store Key",
46
+ info="The key used to store the image on Jigsawstack File Storage. Not required if url is specified.",
47
+ required=False,
48
+ tool_mode=True,
49
+ ),
50
+ IntInput(
51
+ name="width",
52
+ display_name="Width",
53
+ info="The width of the image. Must be between 256-1920 pixels.",
54
+ required=False,
55
+ ),
56
+ IntInput(
57
+ name="height",
58
+ display_name="Height",
59
+ info="The height of the image. Must be between 256-1920 pixels.",
60
+ required=False,
61
+ ),
62
+ IntInput(
63
+ name="steps",
64
+ display_name="Steps",
65
+ info="The number of denoising steps. Must be between 1-90. \
66
+ Higher values produce better quality images but take more time to generate.",
67
+ required=False,
68
+ ),
69
+ DropdownInput(
70
+ name="output_format",
71
+ display_name="Output Format",
72
+ info="The output format of the generated image. Must be one of the following values:\
73
+ png or svg",
74
+ required=False,
75
+ options=["png", "svg"],
76
+ value="png",
77
+ ),
78
+ MessageTextInput(
79
+ name="negative_prompt",
80
+ display_name="Negative Prompt",
81
+ info="The text prompt to avoid in the generated image. \
82
+ Must be between 1-5000 characters.",
83
+ required=False,
84
+ tool_mode=True,
85
+ advanced=True,
86
+ ),
87
+ IntInput(
88
+ name="seed",
89
+ display_name="Seed",
90
+ info="Makes generation deterministic.\
91
+ Using the same seed and set of parameters will produce identical image each time.",
92
+ required=False,
93
+ tool_mode=True,
94
+ advanced=True,
95
+ ),
96
+ IntInput(
97
+ name="guidance",
98
+ display_name="Guidance Scale",
99
+ info="Higher guidance forces the model to better follow the prompt, \
100
+ but may result in lower quality output. Must be between 1-28.",
101
+ required=False,
102
+ tool_mode=True,
103
+ advanced=True,
104
+ ),
105
+ ]
106
+
107
+ outputs = [
108
+ Output(display_name="Image Generation Results", name="image_generation_results", method="generate_image"),
109
+ ]
110
+
111
+ def generate_image(self) -> Data:
112
+ try:
113
+ from jigsawstack import JigsawStack, JigsawStackError
114
+ except ImportError as e:
115
+ jigsawstack_import_error = (
116
+ "JigsawStack package not found. Please install it using: pip install jigsawstack>=0.2.7"
117
+ )
118
+ raise ImportError(jigsawstack_import_error) from e
119
+
120
+ try:
121
+ min_character_length = 1
122
+ max_character_length = 5000
123
+ min_width = 256
124
+ max_width = 1920
125
+ min_height = 256
126
+ max_height = 1920
127
+ min_steps = 1
128
+ max_steps = 90
129
+ client = JigsawStack(api_key=self.api_key)
130
+
131
+ if not self.prompt or len(self.prompt) < min_character_length or len(self.prompt) > max_character_length:
132
+ invalid_prompt_error = f"Prompts must be between \
133
+ {min_character_length}-{max_character_length} characters."
134
+ raise ValueError(invalid_prompt_error)
135
+
136
+ if self.aspect_ratio and self.aspect_ratio not in [
137
+ "1:1",
138
+ "16:9",
139
+ "21:9",
140
+ "3:2",
141
+ "2:3",
142
+ "4:5",
143
+ "5:4",
144
+ "3:4",
145
+ "4:3",
146
+ "9:16",
147
+ "9:21",
148
+ ]:
149
+ invalid_aspect_ratio_error = (
150
+ "Aspect ratio must be one of the following: '1:1', '16:9', '21:9', '3:2', '2:3', "
151
+ "'4:5', '5:4', '3:4', '4:3', '9:16', '9:21'."
152
+ )
153
+ raise ValueError(invalid_aspect_ratio_error)
154
+ if self.width and (self.width < min_width or self.width > max_width):
155
+ invalid_width_error = f"Width must be between {min_width}-{max_width} pixels."
156
+ raise ValueError(invalid_width_error)
157
+ if self.height and (self.height < min_height or self.height > max_height):
158
+ invalid_height_error = f"Height must be between {min_height}-{max_height} pixels."
159
+ raise ValueError(invalid_height_error)
160
+ if self.steps and (self.steps < min_steps or self.steps > max_steps):
161
+ invalid_steps_error = f"Steps must be between {min_steps}-{max_steps}."
162
+ raise ValueError(invalid_steps_error)
163
+
164
+ params = {}
165
+ if self.prompt:
166
+ params["prompt"] = self.prompt.strip()
167
+ if self.aspect_ratio:
168
+ params["aspect_ratio"] = self.aspect_ratio.strip()
169
+ if self.url:
170
+ params["url"] = self.url.strip()
171
+ if self.file_store_key:
172
+ params["file_store_key"] = self.file_store_key.strip()
173
+ if self.width:
174
+ params["width"] = self.width
175
+ if self.height:
176
+ params["height"] = self.height
177
+ params["return_type"] = "url"
178
+ if self.output_format:
179
+ params["output_format"] = self.output_format.strip()
180
+ if self.steps:
181
+ params["steps"] = self.steps
182
+
183
+ # Initialize advance_config if any advanced parameters are provided
184
+ if self.negative_prompt or self.seed or self.guidance:
185
+ params["advance_config"] = {}
186
+ if self.negative_prompt:
187
+ params["advance_config"]["negative_prompt"] = self.negative_prompt
188
+ if self.seed:
189
+ params["advance_config"]["seed"] = self.seed
190
+ if self.guidance:
191
+ params["advance_config"]["guidance"] = self.guidance
192
+
193
+ # Call image generation
194
+ response = client.image_generation(params)
195
+
196
+ if response.get("url", None) is None or response.get("url", None).strip() == "":
197
+ failed_response_error = "JigsawStack API returned unsuccessful response"
198
+ raise ValueError(failed_response_error)
199
+
200
+ return Data(data=response)
201
+
202
+ except JigsawStackError as e:
203
+ error_data = {"error": str(e), "success": False}
204
+ self.status = f"Error: {e!s}"
205
+ return Data(data=error_data)