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,41 @@
1
+ from typing import TypedDict
2
+
3
+
4
+ class ModelMetadata(TypedDict, total=False):
5
+ """Simple model metadata structure."""
6
+
7
+ provider: str # Provider name (e.g., "anthropic", "groq", "openai")
8
+ name: str # Model name/ID
9
+ icon: str # Icon name for UI
10
+ tool_calling: bool # Whether model supports tool calling (defaults to False)
11
+ reasoning: bool # Reasoning models (defaults to False)
12
+ search: bool # Search models (defaults to False)
13
+ preview: bool # Whether model is in preview/beta (defaults to False)
14
+ not_supported: bool # Whether model is not supported or deprecated (defaults to False)
15
+ deprecated: bool # Whether model is deprecated (defaults to False)
16
+
17
+
18
+ def create_model_metadata(
19
+ provider: str,
20
+ name: str,
21
+ icon: str,
22
+ *,
23
+ tool_calling: bool = False,
24
+ reasoning: bool = False,
25
+ search: bool = False,
26
+ preview: bool = False,
27
+ not_supported: bool = False,
28
+ deprecated: bool = False,
29
+ ) -> ModelMetadata:
30
+ """Helper function to create ModelMetadata with explicit defaults."""
31
+ return ModelMetadata(
32
+ provider=provider,
33
+ name=name,
34
+ icon=icon,
35
+ tool_calling=tool_calling,
36
+ reasoning=reasoning,
37
+ search=search,
38
+ preview=preview,
39
+ not_supported=not_supported,
40
+ deprecated=deprecated,
41
+ )
@@ -0,0 +1,8 @@
1
+ def get_model_name(llm, display_name: str | None = "Custom"):
2
+ attributes_to_check = ["model_name", "model", "model_id", "deployment_name"]
3
+
4
+ # Use a generator expression with next() to find the first matching attribute
5
+ model_name = next((getattr(llm, attr) for attr in attributes_to_check if hasattr(llm, attr)), None)
6
+
7
+ # If no matching attribute is found, return the class name as a fallback
8
+ return model_name if model_name is not None else display_name
@@ -0,0 +1,35 @@
1
+ NOVITA_MODELS = [
2
+ "deepseek/deepseek-r1",
3
+ "deepseek/deepseek_v3",
4
+ "meta-llama/llama-3.3-70b-instruct",
5
+ "meta-llama/llama-3.1-8b-instruct",
6
+ "meta-llama/llama-3.1-70b-instruct",
7
+ "mistralai/mistral-nemo",
8
+ "Sao10K/L3-8B-Stheno-v3.2",
9
+ "gryphe/mythomax-l2-13b",
10
+ "qwen/qwen-2.5-72b-instruct",
11
+ "meta-llama/llama-3-8b-instruct",
12
+ "microsoft/wizardlm-2-8x22b",
13
+ "google/gemma-2-9b-it",
14
+ "mistralai/mistral-7b-instruct",
15
+ "meta-llama/llama-3-70b-instruct",
16
+ "openchat/openchat-7b",
17
+ "nousresearch/hermes-2-pro-llama-3-8b",
18
+ "sao10k/l3-70b-euryale-v2.1",
19
+ "cognitivecomputations/dolphin-mixtral-8x22b",
20
+ "jondurbin/airoboros-l2-70b",
21
+ "nousresearch/nous-hermes-llama2-13b",
22
+ "teknium/openhermes-2.5-mistral-7b",
23
+ "sophosympatheia/midnight-rose-70b",
24
+ "meta-llama/llama-3.1-8b-instruct-max",
25
+ "sao10k/l3-8b-lunaris",
26
+ "qwen/qwen-2-vl-72b-instruct",
27
+ "meta-llama/llama-3.2-1b-instruct",
28
+ "meta-llama/llama-3.2-11b-vision-instruct",
29
+ "meta-llama/llama-3.2-3b-instruct",
30
+ "meta-llama/llama-3.1-8b-instruct-bf16",
31
+ "sao10k/l31-70b-euryale-v2.2",
32
+ "qwen/qwen-2-7b-instruct",
33
+ "qwen/qwen-2-72b-instruct",
34
+ ]
35
+ MODEL_NAMES = NOVITA_MODELS # reverse compatibility
@@ -0,0 +1,49 @@
1
+ # https://ollama.com/search?c=embedding
2
+ OLLAMA_EMBEDDING_MODELS = [
3
+ "nomic-embed-text",
4
+ "mxbai-embed-large",
5
+ "snowflake-arctic-embed",
6
+ "all-minilm",
7
+ "bge-m3",
8
+ "bge-large",
9
+ "paraphrase-multilingual",
10
+ "granite-embedding",
11
+ "jina-embeddings-v2-base-en",
12
+ ]
13
+ # https://ollama.com/search?c=tools
14
+ OLLAMA_TOOL_MODELS_BASE = [
15
+ "llama3.3",
16
+ "qwq",
17
+ "llama3.2",
18
+ "llama3.1",
19
+ "mistral",
20
+ "qwen2",
21
+ "qwen2.5",
22
+ "qwen2.5-coder",
23
+ "mistral-nemo",
24
+ "mixtral",
25
+ "command-r",
26
+ "command-r-plus",
27
+ "mistral-large",
28
+ "smollm2",
29
+ "hermes3",
30
+ "athene-v2",
31
+ "mistral-small",
32
+ "nemotron-mini",
33
+ "nemotron",
34
+ "llama3-groq-tool-use",
35
+ "granite3-dense",
36
+ "granite3.1-dense",
37
+ "aya-expanse",
38
+ "granite3-moe",
39
+ "firefunction-v2",
40
+ "cogito",
41
+ ]
42
+
43
+
44
+ URL_LIST = [
45
+ "http://localhost:11434",
46
+ "http://host.docker.internal:11434",
47
+ "http://127.0.0.1:11434",
48
+ "http://0.0.0.0:11434",
49
+ ]
@@ -0,0 +1,122 @@
1
+ from .model_metadata import create_model_metadata
2
+
3
+ # Unified model metadata - single source of truth
4
+ OPENAI_MODELS_DETAILED = [
5
+ # GPT-5 Series
6
+ create_model_metadata(
7
+ provider="OpenAI",
8
+ name="gpt-5",
9
+ icon="OpenAI",
10
+ tool_calling=True,
11
+ reasoning=True,
12
+ ),
13
+ create_model_metadata(
14
+ provider="OpenAI",
15
+ name="gpt-5-mini",
16
+ icon="OpenAI",
17
+ tool_calling=True,
18
+ reasoning=True,
19
+ ),
20
+ create_model_metadata(
21
+ provider="OpenAI",
22
+ name="gpt-5-nano",
23
+ icon="OpenAI",
24
+ tool_calling=True,
25
+ reasoning=True,
26
+ ),
27
+ create_model_metadata(
28
+ provider="OpenAI",
29
+ name="gpt-5-chat-latest",
30
+ icon="OpenAI",
31
+ tool_calling=False,
32
+ reasoning=True,
33
+ ),
34
+ # Regular OpenAI Models
35
+ create_model_metadata(provider="OpenAI", name="gpt-4o-mini", icon="OpenAI", tool_calling=True),
36
+ create_model_metadata(provider="OpenAI", name="gpt-4o", icon="OpenAI", tool_calling=True),
37
+ create_model_metadata(provider="OpenAI", name="gpt-4.1", icon="OpenAI", tool_calling=True),
38
+ create_model_metadata(provider="OpenAI", name="gpt-4.1-mini", icon="OpenAI", tool_calling=True),
39
+ create_model_metadata(provider="OpenAI", name="gpt-4.1-nano", icon="OpenAI", tool_calling=True),
40
+ create_model_metadata(
41
+ provider="OpenAI", name="gpt-4.5-preview", icon="OpenAI", tool_calling=True, preview=True, not_supported=True
42
+ ),
43
+ create_model_metadata(provider="OpenAI", name="gpt-4-turbo", icon="OpenAI", tool_calling=True),
44
+ create_model_metadata(
45
+ provider="OpenAI", name="gpt-4-turbo-preview", icon="OpenAI", tool_calling=True, preview=True
46
+ ),
47
+ create_model_metadata(provider="OpenAI", name="gpt-4", icon="OpenAI", tool_calling=True),
48
+ create_model_metadata(provider="OpenAI", name="gpt-3.5-turbo", icon="OpenAI", tool_calling=True),
49
+ # Reasoning Models
50
+ create_model_metadata(provider="OpenAI", name="o1", icon="OpenAI", reasoning=True),
51
+ create_model_metadata(provider="OpenAI", name="o1-mini", icon="OpenAI", reasoning=True, not_supported=True),
52
+ create_model_metadata(provider="OpenAI", name="o1-pro", icon="OpenAI", reasoning=True, not_supported=True),
53
+ create_model_metadata(provider="OpenAI", name="o3-mini", icon="OpenAI", reasoning=True),
54
+ create_model_metadata(provider="OpenAI", name="o3", icon="OpenAI", reasoning=True),
55
+ create_model_metadata(provider="OpenAI", name="o3-pro", icon="OpenAI", reasoning=True),
56
+ create_model_metadata(provider="OpenAI", name="o4-mini", icon="OpenAI", reasoning=True),
57
+ create_model_metadata(provider="OpenAI", name="o4-mini-high", icon="OpenAI", reasoning=True),
58
+ # Search Models
59
+ create_model_metadata(
60
+ provider="OpenAI",
61
+ name="gpt-4o-mini-search-preview",
62
+ icon="OpenAI",
63
+ tool_calling=True,
64
+ search=True,
65
+ preview=True,
66
+ ),
67
+ create_model_metadata(
68
+ provider="OpenAI",
69
+ name="gpt-4o-search-preview",
70
+ icon="OpenAI",
71
+ tool_calling=True,
72
+ search=True,
73
+ preview=True,
74
+ ),
75
+ # Not Supported Models
76
+ create_model_metadata(
77
+ provider="OpenAI", name="computer-use-preview", icon="OpenAI", not_supported=True, preview=True
78
+ ),
79
+ create_model_metadata(
80
+ provider="OpenAI", name="gpt-4o-audio-preview", icon="OpenAI", not_supported=True, preview=True
81
+ ),
82
+ create_model_metadata(
83
+ provider="OpenAI", name="gpt-4o-realtime-preview", icon="OpenAI", not_supported=True, preview=True
84
+ ),
85
+ create_model_metadata(
86
+ provider="OpenAI", name="gpt-4o-mini-audio-preview", icon="OpenAI", not_supported=True, preview=True
87
+ ),
88
+ create_model_metadata(
89
+ provider="OpenAI", name="gpt-4o-mini-realtime-preview", icon="OpenAI", not_supported=True, preview=True
90
+ ),
91
+ ]
92
+ OPENAI_CHAT_MODEL_NAMES = [
93
+ metadata["name"]
94
+ for metadata in OPENAI_MODELS_DETAILED
95
+ if not metadata.get("not_supported", False)
96
+ and not metadata.get("reasoning", False)
97
+ and not metadata.get("search", False)
98
+ ]
99
+
100
+ OPENAI_REASONING_MODEL_NAMES = [
101
+ metadata["name"]
102
+ for metadata in OPENAI_MODELS_DETAILED
103
+ if metadata.get("reasoning", False) and not metadata.get("not_supported", False)
104
+ ]
105
+
106
+ OPENAI_SEARCH_MODEL_NAMES = [
107
+ metadata["name"]
108
+ for metadata in OPENAI_MODELS_DETAILED
109
+ if metadata.get("search", False) and not metadata.get("not_supported", False)
110
+ ]
111
+
112
+ NOT_SUPPORTED_MODELS = [metadata["name"] for metadata in OPENAI_MODELS_DETAILED if metadata.get("not_supported", False)]
113
+
114
+ OPENAI_EMBEDDING_MODEL_NAMES = [
115
+ "text-embedding-3-small",
116
+ "text-embedding-3-large",
117
+ "text-embedding-ada-002",
118
+ ]
119
+
120
+ # Backwards compatibility
121
+ MODEL_NAMES = OPENAI_CHAT_MODEL_NAMES
122
+ OPENAI_MODEL_NAMES = OPENAI_CHAT_MODEL_NAMES
@@ -0,0 +1,18 @@
1
+ SAMBANOVA_MODEL_NAMES = [
2
+ "Meta-Llama-3.3-70B-Instruct",
3
+ "Meta-Llama-3.1-8B-Instruct",
4
+ "Meta-Llama-3.1-70B-Instruct",
5
+ "Meta-Llama-3.1-405B-Instruct",
6
+ "DeepSeek-R1-Distill-Llama-70B",
7
+ "DeepSeek-R1",
8
+ "Meta-Llama-3.2-1B-Instruct",
9
+ "Meta-Llama-3.2-3B-Instruct",
10
+ "Llama-3.2-11B-Vision-Instruct",
11
+ "Llama-3.2-90B-Vision-Instruct",
12
+ "Qwen2.5-Coder-32B-Instruct",
13
+ "Qwen2.5-72B-Instruct",
14
+ "QwQ-32B-Preview",
15
+ "Qwen2-Audio-7B-Instruct",
16
+ ]
17
+
18
+ MODEL_NAMES = SAMBANOVA_MODEL_NAMES
File without changes
File without changes
@@ -0,0 +1,224 @@
1
+ from collections import defaultdict
2
+ from typing import Any
3
+
4
+ from fastapi import HTTPException
5
+ from langchain_core.prompts import PromptTemplate
6
+
7
+ from lfx.inputs.inputs import DefaultPromptField
8
+ from lfx.interface.utils import extract_input_variables_from_prompt
9
+ from lfx.log.logger import logger
10
+
11
+ _INVALID_CHARACTERS = {
12
+ " ",
13
+ ",",
14
+ ".",
15
+ ":",
16
+ ";",
17
+ "!",
18
+ "?",
19
+ "/",
20
+ "\\",
21
+ "(",
22
+ ")",
23
+ "[",
24
+ "]",
25
+ }
26
+
27
+ _INVALID_NAMES = {
28
+ "code",
29
+ "input_variables",
30
+ "output_parser",
31
+ "partial_variables",
32
+ "template",
33
+ "template_format",
34
+ "validate_template",
35
+ }
36
+
37
+
38
+ def _is_json_like(var):
39
+ if var.startswith("{{") and var.endswith("}}"):
40
+ # If it is a double brance variable
41
+ # we don't want to validate any of its content
42
+ return True
43
+ # the above doesn't work on all cases because the json string can be multiline
44
+ # or indented which can add \n or spaces at the start or end of the string
45
+ # test_case_3 new_var == '\n{{\n "test": "hello",\n "text": "world"\n}}\n'
46
+ # what we can do is to remove the \n and spaces from the start and end of the string
47
+ # and then check if the string starts with {{ and ends with }}
48
+ var = var.strip()
49
+ var = var.replace("\n", "")
50
+ var = var.replace(" ", "")
51
+ # Now it should be a valid json string
52
+ return var.startswith("{{") and var.endswith("}}")
53
+
54
+
55
+ def _fix_variable(var, invalid_chars, wrong_variables):
56
+ if not var:
57
+ return var, invalid_chars, wrong_variables
58
+ new_var = var
59
+
60
+ # Handle variables starting with a number
61
+ if var[0].isdigit():
62
+ invalid_chars.append(var[0])
63
+ new_var, invalid_chars, wrong_variables = _fix_variable(var[1:], invalid_chars, wrong_variables)
64
+
65
+ # Temporarily replace {{ and }} to avoid treating them as invalid
66
+ new_var = new_var.replace("{{", "ᴛᴇᴍᴘᴏᴘᴇɴ").replace("}}", "ᴛᴇᴍᴘᴄʟᴏsᴇ") # noqa: RUF001
67
+
68
+ # Remove invalid characters
69
+ for char in new_var:
70
+ if char in _INVALID_CHARACTERS:
71
+ invalid_chars.append(char)
72
+ new_var = new_var.replace(char, "")
73
+ if var not in wrong_variables: # Avoid duplicating entries
74
+ wrong_variables.append(var)
75
+
76
+ # Restore {{ and }}
77
+ new_var = new_var.replace("ᴛᴇᴍᴘᴏᴘᴇɴ", "{{").replace("ᴛᴇᴍᴘᴄʟᴏsᴇ", "}}") # noqa: RUF001
78
+
79
+ return new_var, invalid_chars, wrong_variables
80
+
81
+
82
+ def _check_variable(var, invalid_chars, wrong_variables, empty_variables):
83
+ if any(char in invalid_chars for char in var):
84
+ wrong_variables.append(var)
85
+ elif var == "":
86
+ empty_variables.append(var)
87
+ return wrong_variables, empty_variables
88
+
89
+
90
+ def _check_for_errors(input_variables, fixed_variables, wrong_variables, empty_variables) -> None:
91
+ if any(var for var in input_variables if var not in fixed_variables):
92
+ error_message = (
93
+ f"Error: Input variables contain invalid characters or formats. \n"
94
+ f"Invalid variables: {', '.join(wrong_variables)}.\n"
95
+ f"Empty variables: {', '.join(empty_variables)}. \n"
96
+ f"Fixed variables: {', '.join(fixed_variables)}."
97
+ )
98
+ raise ValueError(error_message)
99
+
100
+
101
+ def _check_input_variables(input_variables):
102
+ invalid_chars = []
103
+ fixed_variables = []
104
+ wrong_variables = []
105
+ empty_variables = []
106
+ variables_to_check = []
107
+
108
+ for var in input_variables:
109
+ # First, let's check if the variable is a JSON string
110
+ # because if it is, it won't be considered a variable
111
+ # and we don't need to validate it
112
+ if _is_json_like(var):
113
+ continue
114
+
115
+ new_var, wrong_variables, empty_variables = _fix_variable(var, invalid_chars, wrong_variables)
116
+ wrong_variables, empty_variables = _check_variable(var, _INVALID_CHARACTERS, wrong_variables, empty_variables)
117
+ fixed_variables.append(new_var)
118
+ variables_to_check.append(var)
119
+
120
+ _check_for_errors(variables_to_check, fixed_variables, wrong_variables, empty_variables)
121
+
122
+ return fixed_variables
123
+
124
+
125
+ def validate_prompt(prompt_template: str, *, silent_errors: bool = False) -> list[str]:
126
+ input_variables = extract_input_variables_from_prompt(prompt_template)
127
+
128
+ # Check if there are invalid characters in the input_variables
129
+ input_variables = _check_input_variables(input_variables)
130
+ if any(var in _INVALID_NAMES for var in input_variables):
131
+ msg = f"Invalid input variables. None of the variables can be named {', '.join(input_variables)}. "
132
+ raise ValueError(msg)
133
+
134
+ try:
135
+ PromptTemplate(template=prompt_template, input_variables=input_variables)
136
+ except Exception as exc:
137
+ msg = f"Invalid prompt: {exc}"
138
+ logger.exception(msg)
139
+ if not silent_errors:
140
+ raise ValueError(msg) from exc
141
+
142
+ return input_variables
143
+
144
+
145
+ def get_old_custom_fields(custom_fields, name):
146
+ try:
147
+ if len(custom_fields) == 1 and name == "":
148
+ # If there is only one custom field and the name is empty string
149
+ # then we are dealing with the first prompt request after the node was created
150
+ name = next(iter(custom_fields.keys()))
151
+
152
+ old_custom_fields = custom_fields[name]
153
+ if not old_custom_fields:
154
+ old_custom_fields = []
155
+
156
+ old_custom_fields = old_custom_fields.copy()
157
+ except KeyError:
158
+ old_custom_fields = []
159
+ custom_fields[name] = []
160
+ return old_custom_fields
161
+
162
+
163
+ def add_new_variables_to_template(input_variables, custom_fields, template, name) -> None:
164
+ for variable in input_variables:
165
+ try:
166
+ template_field = DefaultPromptField(name=variable, display_name=variable)
167
+ if variable in template:
168
+ # Set the new field with the old value
169
+ template_field.value = template[variable]["value"]
170
+
171
+ template[variable] = template_field.to_dict()
172
+
173
+ # Check if variable is not already in the list before appending
174
+ if variable not in custom_fields[name]:
175
+ custom_fields[name].append(variable)
176
+
177
+ except Exception as exc:
178
+ raise HTTPException(status_code=500, detail=str(exc)) from exc
179
+
180
+
181
+ def remove_old_variables_from_template(old_custom_fields, input_variables, custom_fields, template, name) -> None:
182
+ for variable in old_custom_fields:
183
+ if variable not in input_variables:
184
+ try:
185
+ # Remove the variable from custom_fields associated with the given name
186
+ if variable in custom_fields[name]:
187
+ custom_fields[name].remove(variable)
188
+
189
+ # Remove the variable from the template
190
+ template.pop(variable, None)
191
+
192
+ except Exception as exc:
193
+ raise HTTPException(status_code=500, detail=str(exc)) from exc
194
+
195
+
196
+ def update_input_variables_field(input_variables, template) -> None:
197
+ if "input_variables" in template:
198
+ template["input_variables"]["value"] = input_variables
199
+
200
+
201
+ def process_prompt_template(
202
+ template: str, name: str, custom_fields: dict[str, list[str]] | None, frontend_node_template: dict[str, Any]
203
+ ):
204
+ """Process and validate prompt template, update template and custom fields."""
205
+ # Validate the prompt template and extract input variables
206
+ input_variables = validate_prompt(template)
207
+
208
+ # Initialize custom_fields if None
209
+ if custom_fields is None:
210
+ custom_fields = defaultdict(list)
211
+
212
+ # Retrieve old custom fields
213
+ old_custom_fields = get_old_custom_fields(custom_fields, name)
214
+
215
+ # Add new variables to the template
216
+ add_new_variables_to_template(input_variables, custom_fields, frontend_node_template, name)
217
+
218
+ # Remove old variables from the template
219
+ remove_old_variables_from_template(old_custom_fields, input_variables, custom_fields, frontend_node_template, name)
220
+
221
+ # Update the input variables field in the template
222
+ update_input_variables_field(input_variables, frontend_node_template)
223
+
224
+ return input_variables
@@ -0,0 +1,61 @@
1
+ from copy import deepcopy
2
+
3
+ from langchain_core.documents import Document
4
+
5
+ from lfx.schema.data import Data
6
+
7
+
8
+ def data_to_string(record: Data) -> str:
9
+ """Convert a record to a string.
10
+
11
+ Args:
12
+ record (Data): The record to convert.
13
+
14
+ Returns:
15
+ str: The record as a string.
16
+ """
17
+ return record.get_text()
18
+
19
+
20
+ def dict_values_to_string(d: dict) -> dict:
21
+ """Converts the values of a dictionary to strings.
22
+
23
+ Args:
24
+ d (dict): The dictionary whose values need to be converted.
25
+
26
+ Returns:
27
+ dict: The dictionary with values converted to strings.
28
+ """
29
+ from lfx.schema.message import Message
30
+
31
+ # Do something similar to the above
32
+ d_copy = deepcopy(d)
33
+ for key, value in d_copy.items():
34
+ # it could be a list of data or documents or strings
35
+ if isinstance(value, list):
36
+ for i, item in enumerate(value):
37
+ if isinstance(item, Message):
38
+ d_copy[key][i] = item.text
39
+ elif isinstance(item, Data):
40
+ d_copy[key][i] = data_to_string(item)
41
+ elif isinstance(item, Document):
42
+ d_copy[key][i] = document_to_string(item)
43
+ elif isinstance(value, Message):
44
+ d_copy[key] = value.text
45
+ elif isinstance(value, Data):
46
+ d_copy[key] = data_to_string(value)
47
+ elif isinstance(value, Document):
48
+ d_copy[key] = document_to_string(value)
49
+ return d_copy
50
+
51
+
52
+ def document_to_string(document: Document) -> str:
53
+ """Convert a document to a string.
54
+
55
+ Args:
56
+ document (Document): The document to convert.
57
+
58
+ Returns:
59
+ str: The document as a string.
60
+ """
61
+ return document.page_content
File without changes
@@ -0,0 +1,28 @@
1
+ from abc import abstractmethod
2
+
3
+ from langchain_core.documents import BaseDocumentTransformer
4
+ from langchain_text_splitters import TextSplitter
5
+
6
+ from lfx.base.document_transformers.model import LCDocumentTransformerComponent
7
+
8
+
9
+ class LCTextSplitterComponent(LCDocumentTransformerComponent):
10
+ trace_type = "text_splitter"
11
+
12
+ def _validate_outputs(self) -> None:
13
+ required_output_methods = ["text_splitter"]
14
+ output_names = [output.name for output in self.outputs]
15
+ for method_name in required_output_methods:
16
+ if method_name not in output_names:
17
+ msg = f"Output with name '{method_name}' must be defined."
18
+ raise ValueError(msg)
19
+ if not hasattr(self, method_name):
20
+ msg = f"Method '{method_name}' must be defined."
21
+ raise ValueError(msg)
22
+
23
+ def build_document_transformer(self) -> BaseDocumentTransformer:
24
+ return self.build_text_splitter()
25
+
26
+ @abstractmethod
27
+ def build_text_splitter(self) -> TextSplitter:
28
+ """Build the text splitter."""
File without changes
lfx/base/tools/base.py ADDED
@@ -0,0 +1,26 @@
1
+ from lfx.field_typing import Tool
2
+
3
+
4
+ def build_status_from_tool(tool: Tool):
5
+ """Builds a status string representation of a tool.
6
+
7
+ Args:
8
+ tool (Tool): The tool object to build the status for.
9
+
10
+ Returns:
11
+ str: The status string representation of the tool, including its name, description, arguments (if any),
12
+ and args_schema (if any).
13
+ """
14
+ description_repr = repr(tool.description).strip("'")
15
+ args_str = "\n".join(
16
+ [
17
+ f"- {arg_name}: {arg_data['description']}"
18
+ for arg_name, arg_data in tool.args.items()
19
+ if "description" in arg_data
20
+ ]
21
+ )
22
+ # Include args_schema information
23
+ args_schema_str = repr(tool.args_schema) if tool.args_schema else "None"
24
+ status = f"Name: {tool.name}\nDescription: {description_repr}"
25
+ status += f"\nArgs Schema: {args_schema_str}"
26
+ return status + (f"\nArguments:\n{args_str}" if args_str else "")