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,135 @@
1
+ from typing import Any
2
+
3
+ import requests
4
+ from ibm_watsonx_ai import APIClient, Credentials
5
+ from ibm_watsonx_ai.metanames import EmbedTextParamsMetaNames
6
+ from langchain_ibm import WatsonxEmbeddings
7
+ from pydantic.v1 import SecretStr
8
+
9
+ from lfx.base.embeddings.model import LCEmbeddingsModel
10
+ from lfx.field_typing import Embeddings
11
+ from lfx.io import BoolInput, DropdownInput, IntInput, SecretStrInput, StrInput
12
+ from lfx.log.logger import logger
13
+ from lfx.schema.dotdict import dotdict
14
+
15
+
16
+ class WatsonxEmbeddingsComponent(LCEmbeddingsModel):
17
+ display_name = "IBM watsonx.ai Embeddings"
18
+ description = "Generate embeddings using IBM watsonx.ai models."
19
+ icon = "WatsonxAI"
20
+ name = "WatsonxEmbeddingsComponent"
21
+
22
+ # models present in all the regions
23
+ _default_models = [
24
+ "sentence-transformers/all-minilm-l12-v2",
25
+ "ibm/slate-125m-english-rtrvr-v2",
26
+ "ibm/slate-30m-english-rtrvr-v2",
27
+ "intfloat/multilingual-e5-large",
28
+ ]
29
+
30
+ inputs = [
31
+ DropdownInput(
32
+ name="url",
33
+ display_name="watsonx API Endpoint",
34
+ info="The base URL of the API.",
35
+ value=None,
36
+ options=[
37
+ "https://us-south.ml.cloud.ibm.com",
38
+ "https://eu-de.ml.cloud.ibm.com",
39
+ "https://eu-gb.ml.cloud.ibm.com",
40
+ "https://au-syd.ml.cloud.ibm.com",
41
+ "https://jp-tok.ml.cloud.ibm.com",
42
+ "https://ca-tor.ml.cloud.ibm.com",
43
+ ],
44
+ real_time_refresh=True,
45
+ ),
46
+ StrInput(
47
+ name="project_id",
48
+ display_name="watsonx project id",
49
+ info="The project ID or deployment space ID that is associated with the foundation model.",
50
+ required=True,
51
+ ),
52
+ SecretStrInput(
53
+ name="api_key",
54
+ display_name="API Key",
55
+ info="The API Key to use for the model.",
56
+ required=True,
57
+ ),
58
+ DropdownInput(
59
+ name="model_name",
60
+ display_name="Model Name",
61
+ options=[],
62
+ value=None,
63
+ dynamic=True,
64
+ required=True,
65
+ ),
66
+ IntInput(
67
+ name="truncate_input_tokens",
68
+ display_name="Truncate Input Tokens",
69
+ advanced=True,
70
+ value=200,
71
+ ),
72
+ BoolInput(
73
+ name="input_text",
74
+ display_name="Include the original text in the output",
75
+ value=True,
76
+ advanced=True,
77
+ ),
78
+ ]
79
+
80
+ @staticmethod
81
+ def fetch_models(base_url: str) -> list[str]:
82
+ """Fetch available models from the watsonx.ai API."""
83
+ try:
84
+ endpoint = f"{base_url}/ml/v1/foundation_model_specs"
85
+ params = {
86
+ "version": "2024-09-16",
87
+ "filters": "function_embedding,!lifecycle_withdrawn:and",
88
+ }
89
+ response = requests.get(endpoint, params=params, timeout=10)
90
+ response.raise_for_status()
91
+ data = response.json()
92
+ models = [model["model_id"] for model in data.get("resources", [])]
93
+ return sorted(models)
94
+ except Exception: # noqa: BLE001
95
+ logger.exception("Error fetching models")
96
+ return WatsonxEmbeddingsComponent._default_models
97
+
98
+ def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None):
99
+ """Update model options when URL or API key changes."""
100
+ logger.debug(
101
+ "Updating build config. Field name: %s, Field value: %s",
102
+ field_name,
103
+ field_value,
104
+ )
105
+
106
+ if field_name == "url" and field_value:
107
+ try:
108
+ models = self.fetch_models(base_url=build_config.url.value)
109
+ build_config.model_name.options = models
110
+ if build_config.model_name.value:
111
+ build_config.model_name.value = models[0]
112
+ info_message = f"Updated model options: {len(models)} models found in {build_config.url.value}"
113
+ logger.info(info_message)
114
+ except Exception: # noqa: BLE001
115
+ logger.exception("Error updating model options.")
116
+
117
+ def build_embeddings(self) -> Embeddings:
118
+ credentials = Credentials(
119
+ api_key=SecretStr(self.api_key).get_secret_value(),
120
+ url=self.url,
121
+ )
122
+
123
+ api_client = APIClient(credentials)
124
+
125
+ params = {
126
+ EmbedTextParamsMetaNames.TRUNCATE_INPUT_TOKENS: self.truncate_input_tokens,
127
+ EmbedTextParamsMetaNames.RETURN_OPTIONS: {"input_text": self.input_text},
128
+ }
129
+
130
+ return WatsonxEmbeddings(
131
+ model_id=self.model_name,
132
+ params=params,
133
+ watsonx_client=api_client,
134
+ project_id=self.project_id,
135
+ )
@@ -0,0 +1,5 @@
1
+ from .combinatorial_reasoner import CombinatorialReasonerComponent
2
+
3
+ __all__ = [
4
+ "CombinatorialReasonerComponent",
5
+ ]
@@ -0,0 +1,84 @@
1
+ import requests
2
+ from requests.auth import HTTPBasicAuth
3
+
4
+ from lfx.base.models.openai_constants import OPENAI_CHAT_MODEL_NAMES
5
+ from lfx.custom.custom_component.component import Component
6
+ from lfx.inputs.inputs import DropdownInput, SecretStrInput, StrInput
7
+ from lfx.io import MessageTextInput, Output
8
+ from lfx.schema.data import Data
9
+ from lfx.schema.message import Message
10
+
11
+
12
+ class CombinatorialReasonerComponent(Component):
13
+ display_name = "Combinatorial Reasoner"
14
+ description = "Uses Combinatorial Optimization to construct an optimal prompt with embedded reasons. Sign up here:\nhttps://forms.gle/oWNv2NKjBNaqqvCx6"
15
+ icon = "Icosa"
16
+ name = "Combinatorial Reasoner"
17
+
18
+ inputs = [
19
+ MessageTextInput(name="prompt", display_name="Prompt", required=True),
20
+ SecretStrInput(
21
+ name="openai_api_key",
22
+ display_name="OpenAI API Key",
23
+ info="The OpenAI API Key to use for the OpenAI model.",
24
+ advanced=False,
25
+ value="OPENAI_API_KEY",
26
+ required=True,
27
+ ),
28
+ StrInput(
29
+ name="username",
30
+ display_name="Username",
31
+ info="Username to authenticate access to Icosa CR API",
32
+ advanced=False,
33
+ required=True,
34
+ ),
35
+ SecretStrInput(
36
+ name="password",
37
+ display_name="Password",
38
+ info="Password to authenticate access to Icosa CR API.",
39
+ advanced=False,
40
+ required=True,
41
+ ),
42
+ DropdownInput(
43
+ name="model_name",
44
+ display_name="Model Name",
45
+ advanced=False,
46
+ options=OPENAI_CHAT_MODEL_NAMES,
47
+ value=OPENAI_CHAT_MODEL_NAMES[0],
48
+ ),
49
+ ]
50
+
51
+ outputs = [
52
+ Output(
53
+ display_name="Optimized Prompt",
54
+ name="optimized_prompt",
55
+ method="build_prompt",
56
+ ),
57
+ Output(display_name="Selected Reasons", name="reasons", method="build_reasons"),
58
+ ]
59
+
60
+ def build_prompt(self) -> Message:
61
+ params = {
62
+ "prompt": self.prompt,
63
+ "apiKey": self.openai_api_key,
64
+ "model": self.model_name,
65
+ }
66
+
67
+ creds = HTTPBasicAuth(self.username, password=self.password)
68
+ response = requests.post(
69
+ "https://cr-api.icosacomputing.com/cr/langflow",
70
+ json=params,
71
+ auth=creds,
72
+ timeout=100,
73
+ )
74
+ response.raise_for_status()
75
+
76
+ prompt = response.json()["prompt"]
77
+
78
+ self.reasons = response.json()["finalReasons"]
79
+ return prompt
80
+
81
+ def build_reasons(self) -> Data:
82
+ # list of selected reasons
83
+ final_reasons = [reason[0] for reason in self.reasons]
84
+ return Data(value=final_reasons)
@@ -0,0 +1,38 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING, Any
4
+
5
+ from lfx.components._importing import import_mod
6
+
7
+ if TYPE_CHECKING:
8
+ from lfx.components.input_output.chat import ChatInput
9
+ from lfx.components.input_output.chat_output import ChatOutput
10
+ from lfx.components.input_output.text import TextInputComponent
11
+ from lfx.components.input_output.text_output import TextOutputComponent
12
+
13
+ _dynamic_imports = {
14
+ "ChatInput": "chat",
15
+ "ChatOutput": "chat_output",
16
+ "TextInputComponent": "text",
17
+ "TextOutputComponent": "text_output",
18
+ }
19
+
20
+ __all__ = ["ChatInput", "ChatOutput", "TextInputComponent", "TextOutputComponent"]
21
+
22
+
23
+ def __getattr__(attr_name: str) -> Any:
24
+ """Lazily import input/output components on attribute access."""
25
+ if attr_name not in _dynamic_imports:
26
+ msg = f"module '{__name__}' has no attribute '{attr_name}'"
27
+ raise AttributeError(msg)
28
+ try:
29
+ result = import_mod(attr_name, _dynamic_imports[attr_name], __spec__.parent)
30
+ except (ModuleNotFoundError, ImportError, AttributeError) as e:
31
+ msg = f"Could not import '{attr_name}' from '{__name__}': {e}"
32
+ raise AttributeError(msg) from e
33
+ globals()[attr_name] = result
34
+ return result
35
+
36
+
37
+ def __dir__() -> list[str]:
38
+ return list(__all__)
@@ -0,0 +1,120 @@
1
+ from lfx.base.data.utils import IMG_FILE_TYPES, TEXT_FILE_TYPES
2
+ from lfx.base.io.chat import ChatComponent
3
+ from lfx.inputs.inputs import BoolInput
4
+ from lfx.io import (
5
+ DropdownInput,
6
+ FileInput,
7
+ MessageTextInput,
8
+ MultilineInput,
9
+ Output,
10
+ )
11
+ from lfx.schema.message import Message
12
+ from lfx.utils.constants import (
13
+ MESSAGE_SENDER_AI,
14
+ MESSAGE_SENDER_NAME_USER,
15
+ MESSAGE_SENDER_USER,
16
+ )
17
+
18
+
19
+ class ChatInput(ChatComponent):
20
+ display_name = "Chat Input"
21
+ description = "Get chat inputs from the Playground."
22
+ documentation: str = "https://docs.langflow.org/components-io#chat-input"
23
+ icon = "MessagesSquare"
24
+ name = "ChatInput"
25
+ minimized = True
26
+
27
+ inputs = [
28
+ MultilineInput(
29
+ name="input_value",
30
+ display_name="Input Text",
31
+ value="",
32
+ info="Message to be passed as input.",
33
+ input_types=[],
34
+ ),
35
+ BoolInput(
36
+ name="should_store_message",
37
+ display_name="Store Messages",
38
+ info="Store the message in the history.",
39
+ value=True,
40
+ advanced=True,
41
+ ),
42
+ DropdownInput(
43
+ name="sender",
44
+ display_name="Sender Type",
45
+ options=[MESSAGE_SENDER_AI, MESSAGE_SENDER_USER],
46
+ value=MESSAGE_SENDER_USER,
47
+ info="Type of sender.",
48
+ advanced=True,
49
+ ),
50
+ MessageTextInput(
51
+ name="sender_name",
52
+ display_name="Sender Name",
53
+ info="Name of the sender.",
54
+ value=MESSAGE_SENDER_NAME_USER,
55
+ advanced=True,
56
+ ),
57
+ MessageTextInput(
58
+ name="session_id",
59
+ display_name="Session ID",
60
+ info="The session ID of the chat. If empty, the current session ID parameter will be used.",
61
+ advanced=True,
62
+ ),
63
+ FileInput(
64
+ name="files",
65
+ display_name="Files",
66
+ file_types=TEXT_FILE_TYPES + IMG_FILE_TYPES,
67
+ info="Files to be sent with the message.",
68
+ advanced=True,
69
+ is_list=True,
70
+ temp_file=True,
71
+ ),
72
+ MessageTextInput(
73
+ name="background_color",
74
+ display_name="Background Color",
75
+ info="The background color of the icon.",
76
+ advanced=True,
77
+ ),
78
+ MessageTextInput(
79
+ name="chat_icon",
80
+ display_name="Icon",
81
+ info="The icon of the message.",
82
+ advanced=True,
83
+ ),
84
+ MessageTextInput(
85
+ name="text_color",
86
+ display_name="Text Color",
87
+ info="The text color of the name",
88
+ advanced=True,
89
+ ),
90
+ ]
91
+ outputs = [
92
+ Output(display_name="Chat Message", name="message", method="message_response"),
93
+ ]
94
+
95
+ async def message_response(self) -> Message:
96
+ background_color = self.background_color
97
+ text_color = self.text_color
98
+ icon = self.chat_icon
99
+
100
+ message = await Message.create(
101
+ text=self.input_value,
102
+ sender=self.sender,
103
+ sender_name=self.sender_name,
104
+ session_id=self.session_id,
105
+ files=self.files,
106
+ properties={
107
+ "background_color": background_color,
108
+ "text_color": text_color,
109
+ "icon": icon,
110
+ },
111
+ )
112
+ if self.session_id and isinstance(message, Message) and self.should_store_message:
113
+ stored_message = await self.send_message(
114
+ message,
115
+ )
116
+ self.message.value = stored_message
117
+ message = stored_message
118
+
119
+ self.status = message
120
+ return message
@@ -0,0 +1,200 @@
1
+ from collections.abc import Generator
2
+ from typing import Any
3
+
4
+ import orjson
5
+ from fastapi.encoders import jsonable_encoder
6
+
7
+ from lfx.base.io.chat import ChatComponent
8
+ from lfx.helpers.data import safe_convert
9
+ from lfx.inputs.inputs import BoolInput, DropdownInput, HandleInput, MessageTextInput
10
+ from lfx.schema.data import Data
11
+ from lfx.schema.dataframe import DataFrame
12
+ from lfx.schema.message import Message
13
+ from lfx.schema.properties import Source
14
+ from lfx.template.field.base import Output
15
+ from lfx.utils.constants import (
16
+ MESSAGE_SENDER_AI,
17
+ MESSAGE_SENDER_NAME_AI,
18
+ MESSAGE_SENDER_USER,
19
+ )
20
+
21
+
22
+ class ChatOutput(ChatComponent):
23
+ display_name = "Chat Output"
24
+ description = "Display a chat message in the Playground."
25
+ documentation: str = "https://docs.langflow.org/components-io#chat-output"
26
+ icon = "MessagesSquare"
27
+ name = "ChatOutput"
28
+ minimized = True
29
+
30
+ inputs = [
31
+ HandleInput(
32
+ name="input_value",
33
+ display_name="Inputs",
34
+ info="Message to be passed as output.",
35
+ input_types=["Data", "DataFrame", "Message"],
36
+ required=True,
37
+ ),
38
+ BoolInput(
39
+ name="should_store_message",
40
+ display_name="Store Messages",
41
+ info="Store the message in the history.",
42
+ value=True,
43
+ advanced=True,
44
+ ),
45
+ DropdownInput(
46
+ name="sender",
47
+ display_name="Sender Type",
48
+ options=[MESSAGE_SENDER_AI, MESSAGE_SENDER_USER],
49
+ value=MESSAGE_SENDER_AI,
50
+ advanced=True,
51
+ info="Type of sender.",
52
+ ),
53
+ MessageTextInput(
54
+ name="sender_name",
55
+ display_name="Sender Name",
56
+ info="Name of the sender.",
57
+ value=MESSAGE_SENDER_NAME_AI,
58
+ advanced=True,
59
+ ),
60
+ MessageTextInput(
61
+ name="session_id",
62
+ display_name="Session ID",
63
+ info="The session ID of the chat. If empty, the current session ID parameter will be used.",
64
+ advanced=True,
65
+ ),
66
+ MessageTextInput(
67
+ name="data_template",
68
+ display_name="Data Template",
69
+ value="{text}",
70
+ advanced=True,
71
+ info="Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.",
72
+ ),
73
+ MessageTextInput(
74
+ name="background_color",
75
+ display_name="Background Color",
76
+ info="The background color of the icon.",
77
+ advanced=True,
78
+ ),
79
+ MessageTextInput(
80
+ name="chat_icon",
81
+ display_name="Icon",
82
+ info="The icon of the message.",
83
+ advanced=True,
84
+ ),
85
+ MessageTextInput(
86
+ name="text_color",
87
+ display_name="Text Color",
88
+ info="The text color of the name",
89
+ advanced=True,
90
+ ),
91
+ BoolInput(
92
+ name="clean_data",
93
+ display_name="Basic Clean Data",
94
+ value=True,
95
+ info="Whether to clean the data",
96
+ advanced=True,
97
+ ),
98
+ ]
99
+ outputs = [
100
+ Output(
101
+ display_name="Output Message",
102
+ name="message",
103
+ method="message_response",
104
+ ),
105
+ ]
106
+
107
+ def _build_source(self, id_: str | None, display_name: str | None, source: str | None) -> Source:
108
+ source_dict = {}
109
+ if id_:
110
+ source_dict["id"] = id_
111
+ if display_name:
112
+ source_dict["display_name"] = display_name
113
+ if source:
114
+ # Handle case where source is a ChatOpenAI object
115
+ if hasattr(source, "model_name"):
116
+ source_dict["source"] = source.model_name
117
+ elif hasattr(source, "model"):
118
+ source_dict["source"] = str(source.model)
119
+ else:
120
+ source_dict["source"] = str(source)
121
+ return Source(**source_dict)
122
+
123
+ async def message_response(self) -> Message:
124
+ # First convert the input to string if needed
125
+ text = self.convert_to_string()
126
+
127
+ # Get source properties
128
+ source, icon, display_name, source_id = self.get_properties_from_source_component()
129
+ background_color = self.background_color
130
+ text_color = self.text_color
131
+ if self.chat_icon:
132
+ icon = self.chat_icon
133
+
134
+ # Create or use existing Message object
135
+ if isinstance(self.input_value, Message):
136
+ message = self.input_value
137
+ # Update message properties
138
+ message.text = text
139
+ else:
140
+ message = Message(text=text)
141
+
142
+ # Set message properties
143
+ message.sender = self.sender
144
+ message.sender_name = self.sender_name
145
+ message.session_id = self.session_id
146
+ message.flow_id = self.graph.flow_id if hasattr(self, "graph") else None
147
+ message.properties.source = self._build_source(source_id, display_name, source)
148
+ message.properties.icon = icon
149
+ message.properties.background_color = background_color
150
+ message.properties.text_color = text_color
151
+
152
+ # Store message if needed
153
+ if self.session_id and self.should_store_message:
154
+ stored_message = await self.send_message(message)
155
+ self.message.value = stored_message
156
+ message = stored_message
157
+
158
+ self.status = message
159
+ return message
160
+
161
+ def _serialize_data(self, data: Data) -> str:
162
+ """Serialize Data object to JSON string."""
163
+ # Convert data.data to JSON-serializable format
164
+ serializable_data = jsonable_encoder(data.data)
165
+ # Serialize with orjson, enabling pretty printing with indentation
166
+ json_bytes = orjson.dumps(serializable_data, option=orjson.OPT_INDENT_2)
167
+ # Convert bytes to string and wrap in Markdown code blocks
168
+ return "```json\n" + json_bytes.decode("utf-8") + "\n```"
169
+
170
+ def _validate_input(self) -> None:
171
+ """Validate the input data and raise ValueError if invalid."""
172
+ if self.input_value is None:
173
+ msg = "Input data cannot be None"
174
+ raise ValueError(msg)
175
+ if isinstance(self.input_value, list) and not all(
176
+ isinstance(item, Message | Data | DataFrame | str) for item in self.input_value
177
+ ):
178
+ invalid_types = [
179
+ type(item).__name__
180
+ for item in self.input_value
181
+ if not isinstance(item, Message | Data | DataFrame | str)
182
+ ]
183
+ msg = f"Expected Data or DataFrame or Message or str, got {invalid_types}"
184
+ raise TypeError(msg)
185
+ if not isinstance(
186
+ self.input_value,
187
+ Message | Data | DataFrame | str | list | Generator | type(None),
188
+ ):
189
+ type_name = type(self.input_value).__name__
190
+ msg = f"Expected Data or DataFrame or Message or str, Generator or None, got {type_name}"
191
+ raise TypeError(msg)
192
+
193
+ def convert_to_string(self) -> str | Generator[Any, None, None]:
194
+ """Convert input data to string with proper error handling."""
195
+ self._validate_input()
196
+ if isinstance(self.input_value, list):
197
+ return "\n".join([safe_convert(item, clean_data=self.clean_data) for item in self.input_value])
198
+ if isinstance(self.input_value, Generator):
199
+ return self.input_value
200
+ return safe_convert(self.input_value)
@@ -0,0 +1,27 @@
1
+ from lfx.base.io.text import TextComponent
2
+ from lfx.io import MultilineInput, Output
3
+ from lfx.schema.message import Message
4
+
5
+
6
+ class TextInputComponent(TextComponent):
7
+ display_name = "Text Input"
8
+ description = "Get user text inputs."
9
+ documentation: str = "https://docs.langflow.org/components-io#text-input"
10
+ icon = "type"
11
+ name = "TextInput"
12
+
13
+ inputs = [
14
+ MultilineInput(
15
+ name="input_value",
16
+ display_name="Text",
17
+ info="Text to be passed as input.",
18
+ ),
19
+ ]
20
+ outputs = [
21
+ Output(display_name="Output Text", name="text", method="text_response"),
22
+ ]
23
+
24
+ def text_response(self) -> Message:
25
+ return Message(
26
+ text=self.input_value,
27
+ )
@@ -0,0 +1,29 @@
1
+ from lfx.base.io.text import TextComponent
2
+ from lfx.io import MultilineInput, Output
3
+ from lfx.schema.message import Message
4
+
5
+
6
+ class TextOutputComponent(TextComponent):
7
+ display_name = "Text Output"
8
+ description = "Sends text output via API."
9
+ documentation: str = "https://docs.langflow.org/components-io#text-output"
10
+ icon = "type"
11
+ name = "TextOutput"
12
+
13
+ inputs = [
14
+ MultilineInput(
15
+ name="input_value",
16
+ display_name="Inputs",
17
+ info="Text to be passed as output.",
18
+ ),
19
+ ]
20
+ outputs = [
21
+ Output(display_name="Output Text", name="text", method="text_response"),
22
+ ]
23
+
24
+ def text_response(self) -> Message:
25
+ message = Message(
26
+ text=self.input_value,
27
+ )
28
+ self.status = self.input_value
29
+ return message
@@ -0,0 +1,23 @@
1
+ from .ai_scrape import JigsawStackAIScraperComponent
2
+ from .ai_web_search import JigsawStackAIWebSearchComponent
3
+ from .file_read import JigsawStackFileReadComponent
4
+ from .file_upload import JigsawStackFileUploadComponent
5
+ from .image_generation import JigsawStackImageGenerationComponent
6
+ from .nsfw import JigsawStackNSFWComponent
7
+ from .object_detection import JigsawStackObjectDetectionComponent
8
+ from .sentiment import JigsawStackSentimentComponent
9
+ from .text_to_sql import JigsawStackTextToSQLComponent
10
+ from .vocr import JigsawStackVOCRComponent
11
+
12
+ __all__ = [
13
+ "JigsawStackAIScraperComponent",
14
+ "JigsawStackAIWebSearchComponent",
15
+ "JigsawStackFileReadComponent",
16
+ "JigsawStackFileUploadComponent",
17
+ "JigsawStackImageGenerationComponent",
18
+ "JigsawStackNSFWComponent",
19
+ "JigsawStackObjectDetectionComponent",
20
+ "JigsawStackSentimentComponent",
21
+ "JigsawStackTextToSQLComponent",
22
+ "JigsawStackVOCRComponent",
23
+ ]