lfx-nightly 0.2.0.dev25__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of lfx-nightly might be problematic. Click here for more details.

Files changed (769) hide show
  1. lfx/__init__.py +0 -0
  2. lfx/__main__.py +25 -0
  3. lfx/_assets/component_index.json +1 -0
  4. lfx/base/__init__.py +0 -0
  5. lfx/base/agents/__init__.py +0 -0
  6. lfx/base/agents/agent.py +375 -0
  7. lfx/base/agents/altk_base_agent.py +380 -0
  8. lfx/base/agents/altk_tool_wrappers.py +565 -0
  9. lfx/base/agents/callback.py +130 -0
  10. lfx/base/agents/context.py +109 -0
  11. lfx/base/agents/crewai/__init__.py +0 -0
  12. lfx/base/agents/crewai/crew.py +231 -0
  13. lfx/base/agents/crewai/tasks.py +12 -0
  14. lfx/base/agents/default_prompts.py +23 -0
  15. lfx/base/agents/errors.py +15 -0
  16. lfx/base/agents/events.py +430 -0
  17. lfx/base/agents/utils.py +237 -0
  18. lfx/base/astra_assistants/__init__.py +0 -0
  19. lfx/base/astra_assistants/util.py +171 -0
  20. lfx/base/chains/__init__.py +0 -0
  21. lfx/base/chains/model.py +19 -0
  22. lfx/base/composio/__init__.py +0 -0
  23. lfx/base/composio/composio_base.py +2584 -0
  24. lfx/base/compressors/__init__.py +0 -0
  25. lfx/base/compressors/model.py +60 -0
  26. lfx/base/constants.py +46 -0
  27. lfx/base/curl/__init__.py +0 -0
  28. lfx/base/curl/parse.py +188 -0
  29. lfx/base/data/__init__.py +5 -0
  30. lfx/base/data/base_file.py +810 -0
  31. lfx/base/data/docling_utils.py +338 -0
  32. lfx/base/data/storage_utils.py +192 -0
  33. lfx/base/data/utils.py +362 -0
  34. lfx/base/datastax/__init__.py +5 -0
  35. lfx/base/datastax/astradb_base.py +896 -0
  36. lfx/base/document_transformers/__init__.py +0 -0
  37. lfx/base/document_transformers/model.py +43 -0
  38. lfx/base/embeddings/__init__.py +0 -0
  39. lfx/base/embeddings/aiml_embeddings.py +62 -0
  40. lfx/base/embeddings/embeddings_class.py +113 -0
  41. lfx/base/embeddings/model.py +26 -0
  42. lfx/base/flow_processing/__init__.py +0 -0
  43. lfx/base/flow_processing/utils.py +86 -0
  44. lfx/base/huggingface/__init__.py +0 -0
  45. lfx/base/huggingface/model_bridge.py +133 -0
  46. lfx/base/io/__init__.py +0 -0
  47. lfx/base/io/chat.py +21 -0
  48. lfx/base/io/text.py +22 -0
  49. lfx/base/knowledge_bases/__init__.py +3 -0
  50. lfx/base/knowledge_bases/knowledge_base_utils.py +137 -0
  51. lfx/base/langchain_utilities/__init__.py +0 -0
  52. lfx/base/langchain_utilities/model.py +35 -0
  53. lfx/base/langchain_utilities/spider_constants.py +1 -0
  54. lfx/base/langwatch/__init__.py +0 -0
  55. lfx/base/langwatch/utils.py +18 -0
  56. lfx/base/mcp/__init__.py +0 -0
  57. lfx/base/mcp/constants.py +2 -0
  58. lfx/base/mcp/util.py +1659 -0
  59. lfx/base/memory/__init__.py +0 -0
  60. lfx/base/memory/memory.py +49 -0
  61. lfx/base/memory/model.py +38 -0
  62. lfx/base/models/__init__.py +3 -0
  63. lfx/base/models/aiml_constants.py +51 -0
  64. lfx/base/models/anthropic_constants.py +51 -0
  65. lfx/base/models/aws_constants.py +151 -0
  66. lfx/base/models/chat_result.py +76 -0
  67. lfx/base/models/cometapi_constants.py +54 -0
  68. lfx/base/models/google_generative_ai_constants.py +70 -0
  69. lfx/base/models/google_generative_ai_model.py +38 -0
  70. lfx/base/models/groq_constants.py +150 -0
  71. lfx/base/models/groq_model_discovery.py +265 -0
  72. lfx/base/models/model.py +375 -0
  73. lfx/base/models/model_input_constants.py +378 -0
  74. lfx/base/models/model_metadata.py +41 -0
  75. lfx/base/models/model_utils.py +108 -0
  76. lfx/base/models/novita_constants.py +35 -0
  77. lfx/base/models/ollama_constants.py +52 -0
  78. lfx/base/models/openai_constants.py +129 -0
  79. lfx/base/models/sambanova_constants.py +18 -0
  80. lfx/base/models/watsonx_constants.py +36 -0
  81. lfx/base/processing/__init__.py +0 -0
  82. lfx/base/prompts/__init__.py +0 -0
  83. lfx/base/prompts/api_utils.py +224 -0
  84. lfx/base/prompts/utils.py +61 -0
  85. lfx/base/textsplitters/__init__.py +0 -0
  86. lfx/base/textsplitters/model.py +28 -0
  87. lfx/base/tools/__init__.py +0 -0
  88. lfx/base/tools/base.py +26 -0
  89. lfx/base/tools/component_tool.py +325 -0
  90. lfx/base/tools/constants.py +49 -0
  91. lfx/base/tools/flow_tool.py +132 -0
  92. lfx/base/tools/run_flow.py +698 -0
  93. lfx/base/vectorstores/__init__.py +0 -0
  94. lfx/base/vectorstores/model.py +193 -0
  95. lfx/base/vectorstores/utils.py +22 -0
  96. lfx/base/vectorstores/vector_store_connection_decorator.py +52 -0
  97. lfx/cli/__init__.py +5 -0
  98. lfx/cli/commands.py +327 -0
  99. lfx/cli/common.py +650 -0
  100. lfx/cli/run.py +506 -0
  101. lfx/cli/script_loader.py +289 -0
  102. lfx/cli/serve_app.py +546 -0
  103. lfx/cli/validation.py +69 -0
  104. lfx/components/FAISS/__init__.py +34 -0
  105. lfx/components/FAISS/faiss.py +111 -0
  106. lfx/components/Notion/__init__.py +19 -0
  107. lfx/components/Notion/add_content_to_page.py +269 -0
  108. lfx/components/Notion/create_page.py +94 -0
  109. lfx/components/Notion/list_database_properties.py +68 -0
  110. lfx/components/Notion/list_pages.py +122 -0
  111. lfx/components/Notion/list_users.py +77 -0
  112. lfx/components/Notion/page_content_viewer.py +93 -0
  113. lfx/components/Notion/search.py +111 -0
  114. lfx/components/Notion/update_page_property.py +114 -0
  115. lfx/components/__init__.py +428 -0
  116. lfx/components/_importing.py +42 -0
  117. lfx/components/agentql/__init__.py +3 -0
  118. lfx/components/agentql/agentql_api.py +151 -0
  119. lfx/components/aiml/__init__.py +37 -0
  120. lfx/components/aiml/aiml.py +115 -0
  121. lfx/components/aiml/aiml_embeddings.py +37 -0
  122. lfx/components/altk/__init__.py +34 -0
  123. lfx/components/altk/altk_agent.py +193 -0
  124. lfx/components/amazon/__init__.py +36 -0
  125. lfx/components/amazon/amazon_bedrock_converse.py +195 -0
  126. lfx/components/amazon/amazon_bedrock_embedding.py +109 -0
  127. lfx/components/amazon/amazon_bedrock_model.py +130 -0
  128. lfx/components/amazon/s3_bucket_uploader.py +211 -0
  129. lfx/components/anthropic/__init__.py +34 -0
  130. lfx/components/anthropic/anthropic.py +187 -0
  131. lfx/components/apify/__init__.py +5 -0
  132. lfx/components/apify/apify_actor.py +325 -0
  133. lfx/components/arxiv/__init__.py +3 -0
  134. lfx/components/arxiv/arxiv.py +169 -0
  135. lfx/components/assemblyai/__init__.py +46 -0
  136. lfx/components/assemblyai/assemblyai_get_subtitles.py +83 -0
  137. lfx/components/assemblyai/assemblyai_lemur.py +183 -0
  138. lfx/components/assemblyai/assemblyai_list_transcripts.py +95 -0
  139. lfx/components/assemblyai/assemblyai_poll_transcript.py +72 -0
  140. lfx/components/assemblyai/assemblyai_start_transcript.py +188 -0
  141. lfx/components/azure/__init__.py +37 -0
  142. lfx/components/azure/azure_openai.py +95 -0
  143. lfx/components/azure/azure_openai_embeddings.py +83 -0
  144. lfx/components/baidu/__init__.py +32 -0
  145. lfx/components/baidu/baidu_qianfan_chat.py +113 -0
  146. lfx/components/bing/__init__.py +3 -0
  147. lfx/components/bing/bing_search_api.py +61 -0
  148. lfx/components/cassandra/__init__.py +40 -0
  149. lfx/components/cassandra/cassandra.py +264 -0
  150. lfx/components/cassandra/cassandra_chat.py +92 -0
  151. lfx/components/cassandra/cassandra_graph.py +238 -0
  152. lfx/components/chains/__init__.py +3 -0
  153. lfx/components/chroma/__init__.py +34 -0
  154. lfx/components/chroma/chroma.py +169 -0
  155. lfx/components/cleanlab/__init__.py +40 -0
  156. lfx/components/cleanlab/cleanlab_evaluator.py +155 -0
  157. lfx/components/cleanlab/cleanlab_rag_evaluator.py +254 -0
  158. lfx/components/cleanlab/cleanlab_remediator.py +131 -0
  159. lfx/components/clickhouse/__init__.py +34 -0
  160. lfx/components/clickhouse/clickhouse.py +135 -0
  161. lfx/components/cloudflare/__init__.py +32 -0
  162. lfx/components/cloudflare/cloudflare.py +81 -0
  163. lfx/components/cohere/__init__.py +40 -0
  164. lfx/components/cohere/cohere_embeddings.py +81 -0
  165. lfx/components/cohere/cohere_models.py +46 -0
  166. lfx/components/cohere/cohere_rerank.py +51 -0
  167. lfx/components/cometapi/__init__.py +32 -0
  168. lfx/components/cometapi/cometapi.py +166 -0
  169. lfx/components/composio/__init__.py +222 -0
  170. lfx/components/composio/agentql_composio.py +11 -0
  171. lfx/components/composio/agiled_composio.py +11 -0
  172. lfx/components/composio/airtable_composio.py +11 -0
  173. lfx/components/composio/apollo_composio.py +11 -0
  174. lfx/components/composio/asana_composio.py +11 -0
  175. lfx/components/composio/attio_composio.py +11 -0
  176. lfx/components/composio/bitbucket_composio.py +11 -0
  177. lfx/components/composio/bolna_composio.py +11 -0
  178. lfx/components/composio/brightdata_composio.py +11 -0
  179. lfx/components/composio/calendly_composio.py +11 -0
  180. lfx/components/composio/canva_composio.py +11 -0
  181. lfx/components/composio/canvas_composio.py +11 -0
  182. lfx/components/composio/coda_composio.py +11 -0
  183. lfx/components/composio/composio_api.py +278 -0
  184. lfx/components/composio/contentful_composio.py +11 -0
  185. lfx/components/composio/digicert_composio.py +11 -0
  186. lfx/components/composio/discord_composio.py +11 -0
  187. lfx/components/composio/dropbox_compnent.py +11 -0
  188. lfx/components/composio/elevenlabs_composio.py +11 -0
  189. lfx/components/composio/exa_composio.py +11 -0
  190. lfx/components/composio/figma_composio.py +11 -0
  191. lfx/components/composio/finage_composio.py +11 -0
  192. lfx/components/composio/firecrawl_composio.py +11 -0
  193. lfx/components/composio/fireflies_composio.py +11 -0
  194. lfx/components/composio/fixer_composio.py +11 -0
  195. lfx/components/composio/flexisign_composio.py +11 -0
  196. lfx/components/composio/freshdesk_composio.py +11 -0
  197. lfx/components/composio/github_composio.py +11 -0
  198. lfx/components/composio/gmail_composio.py +38 -0
  199. lfx/components/composio/googlebigquery_composio.py +11 -0
  200. lfx/components/composio/googlecalendar_composio.py +11 -0
  201. lfx/components/composio/googleclassroom_composio.py +11 -0
  202. lfx/components/composio/googledocs_composio.py +11 -0
  203. lfx/components/composio/googlemeet_composio.py +11 -0
  204. lfx/components/composio/googlesheets_composio.py +11 -0
  205. lfx/components/composio/googletasks_composio.py +8 -0
  206. lfx/components/composio/heygen_composio.py +11 -0
  207. lfx/components/composio/instagram_composio.py +11 -0
  208. lfx/components/composio/jira_composio.py +11 -0
  209. lfx/components/composio/jotform_composio.py +11 -0
  210. lfx/components/composio/klaviyo_composio.py +11 -0
  211. lfx/components/composio/linear_composio.py +11 -0
  212. lfx/components/composio/listennotes_composio.py +11 -0
  213. lfx/components/composio/mem0_composio.py +11 -0
  214. lfx/components/composio/miro_composio.py +11 -0
  215. lfx/components/composio/missive_composio.py +11 -0
  216. lfx/components/composio/notion_composio.py +11 -0
  217. lfx/components/composio/onedrive_composio.py +11 -0
  218. lfx/components/composio/outlook_composio.py +11 -0
  219. lfx/components/composio/pandadoc_composio.py +11 -0
  220. lfx/components/composio/peopledatalabs_composio.py +11 -0
  221. lfx/components/composio/perplexityai_composio.py +11 -0
  222. lfx/components/composio/reddit_composio.py +11 -0
  223. lfx/components/composio/serpapi_composio.py +11 -0
  224. lfx/components/composio/slack_composio.py +11 -0
  225. lfx/components/composio/slackbot_composio.py +11 -0
  226. lfx/components/composio/snowflake_composio.py +11 -0
  227. lfx/components/composio/supabase_composio.py +11 -0
  228. lfx/components/composio/tavily_composio.py +11 -0
  229. lfx/components/composio/timelinesai_composio.py +11 -0
  230. lfx/components/composio/todoist_composio.py +11 -0
  231. lfx/components/composio/wrike_composio.py +11 -0
  232. lfx/components/composio/youtube_composio.py +11 -0
  233. lfx/components/confluence/__init__.py +3 -0
  234. lfx/components/confluence/confluence.py +84 -0
  235. lfx/components/couchbase/__init__.py +34 -0
  236. lfx/components/couchbase/couchbase.py +102 -0
  237. lfx/components/crewai/__init__.py +49 -0
  238. lfx/components/crewai/crewai.py +108 -0
  239. lfx/components/crewai/hierarchical_crew.py +47 -0
  240. lfx/components/crewai/hierarchical_task.py +45 -0
  241. lfx/components/crewai/sequential_crew.py +53 -0
  242. lfx/components/crewai/sequential_task.py +74 -0
  243. lfx/components/crewai/sequential_task_agent.py +144 -0
  244. lfx/components/cuga/__init__.py +34 -0
  245. lfx/components/cuga/cuga_agent.py +730 -0
  246. lfx/components/custom_component/__init__.py +34 -0
  247. lfx/components/custom_component/custom_component.py +31 -0
  248. lfx/components/data/__init__.py +114 -0
  249. lfx/components/data_source/__init__.py +58 -0
  250. lfx/components/data_source/api_request.py +577 -0
  251. lfx/components/data_source/csv_to_data.py +101 -0
  252. lfx/components/data_source/json_to_data.py +106 -0
  253. lfx/components/data_source/mock_data.py +398 -0
  254. lfx/components/data_source/news_search.py +166 -0
  255. lfx/components/data_source/rss.py +71 -0
  256. lfx/components/data_source/sql_executor.py +101 -0
  257. lfx/components/data_source/url.py +311 -0
  258. lfx/components/data_source/web_search.py +326 -0
  259. lfx/components/datastax/__init__.py +76 -0
  260. lfx/components/datastax/astradb_assistant_manager.py +307 -0
  261. lfx/components/datastax/astradb_chatmemory.py +40 -0
  262. lfx/components/datastax/astradb_cql.py +288 -0
  263. lfx/components/datastax/astradb_graph.py +217 -0
  264. lfx/components/datastax/astradb_tool.py +378 -0
  265. lfx/components/datastax/astradb_vectorize.py +122 -0
  266. lfx/components/datastax/astradb_vectorstore.py +449 -0
  267. lfx/components/datastax/create_assistant.py +59 -0
  268. lfx/components/datastax/create_thread.py +33 -0
  269. lfx/components/datastax/dotenv.py +36 -0
  270. lfx/components/datastax/get_assistant.py +38 -0
  271. lfx/components/datastax/getenvvar.py +31 -0
  272. lfx/components/datastax/graph_rag.py +141 -0
  273. lfx/components/datastax/hcd.py +315 -0
  274. lfx/components/datastax/list_assistants.py +26 -0
  275. lfx/components/datastax/run.py +90 -0
  276. lfx/components/deactivated/__init__.py +15 -0
  277. lfx/components/deactivated/amazon_kendra.py +66 -0
  278. lfx/components/deactivated/chat_litellm_model.py +158 -0
  279. lfx/components/deactivated/code_block_extractor.py +26 -0
  280. lfx/components/deactivated/documents_to_data.py +22 -0
  281. lfx/components/deactivated/embed.py +16 -0
  282. lfx/components/deactivated/extract_key_from_data.py +46 -0
  283. lfx/components/deactivated/json_document_builder.py +57 -0
  284. lfx/components/deactivated/list_flows.py +20 -0
  285. lfx/components/deactivated/mcp_sse.py +61 -0
  286. lfx/components/deactivated/mcp_stdio.py +62 -0
  287. lfx/components/deactivated/merge_data.py +93 -0
  288. lfx/components/deactivated/message.py +37 -0
  289. lfx/components/deactivated/metal.py +54 -0
  290. lfx/components/deactivated/multi_query.py +59 -0
  291. lfx/components/deactivated/retriever.py +43 -0
  292. lfx/components/deactivated/selective_passthrough.py +77 -0
  293. lfx/components/deactivated/should_run_next.py +40 -0
  294. lfx/components/deactivated/split_text.py +63 -0
  295. lfx/components/deactivated/store_message.py +24 -0
  296. lfx/components/deactivated/sub_flow.py +124 -0
  297. lfx/components/deactivated/vectara_self_query.py +76 -0
  298. lfx/components/deactivated/vector_store.py +24 -0
  299. lfx/components/deepseek/__init__.py +34 -0
  300. lfx/components/deepseek/deepseek.py +136 -0
  301. lfx/components/docling/__init__.py +43 -0
  302. lfx/components/docling/chunk_docling_document.py +186 -0
  303. lfx/components/docling/docling_inline.py +238 -0
  304. lfx/components/docling/docling_remote.py +195 -0
  305. lfx/components/docling/export_docling_document.py +117 -0
  306. lfx/components/documentloaders/__init__.py +3 -0
  307. lfx/components/duckduckgo/__init__.py +3 -0
  308. lfx/components/duckduckgo/duck_duck_go_search_run.py +92 -0
  309. lfx/components/elastic/__init__.py +37 -0
  310. lfx/components/elastic/elasticsearch.py +267 -0
  311. lfx/components/elastic/opensearch.py +789 -0
  312. lfx/components/elastic/opensearch_multimodal.py +1575 -0
  313. lfx/components/embeddings/__init__.py +37 -0
  314. lfx/components/embeddings/similarity.py +77 -0
  315. lfx/components/embeddings/text_embedder.py +65 -0
  316. lfx/components/exa/__init__.py +3 -0
  317. lfx/components/exa/exa_search.py +68 -0
  318. lfx/components/files_and_knowledge/__init__.py +47 -0
  319. lfx/components/files_and_knowledge/directory.py +113 -0
  320. lfx/components/files_and_knowledge/file.py +841 -0
  321. lfx/components/files_and_knowledge/ingestion.py +694 -0
  322. lfx/components/files_and_knowledge/retrieval.py +264 -0
  323. lfx/components/files_and_knowledge/save_file.py +746 -0
  324. lfx/components/firecrawl/__init__.py +43 -0
  325. lfx/components/firecrawl/firecrawl_crawl_api.py +88 -0
  326. lfx/components/firecrawl/firecrawl_extract_api.py +136 -0
  327. lfx/components/firecrawl/firecrawl_map_api.py +89 -0
  328. lfx/components/firecrawl/firecrawl_scrape_api.py +73 -0
  329. lfx/components/flow_controls/__init__.py +58 -0
  330. lfx/components/flow_controls/conditional_router.py +208 -0
  331. lfx/components/flow_controls/data_conditional_router.py +126 -0
  332. lfx/components/flow_controls/flow_tool.py +111 -0
  333. lfx/components/flow_controls/listen.py +29 -0
  334. lfx/components/flow_controls/loop.py +163 -0
  335. lfx/components/flow_controls/notify.py +88 -0
  336. lfx/components/flow_controls/pass_message.py +36 -0
  337. lfx/components/flow_controls/run_flow.py +108 -0
  338. lfx/components/flow_controls/sub_flow.py +115 -0
  339. lfx/components/git/__init__.py +4 -0
  340. lfx/components/git/git.py +262 -0
  341. lfx/components/git/gitextractor.py +196 -0
  342. lfx/components/glean/__init__.py +3 -0
  343. lfx/components/glean/glean_search_api.py +173 -0
  344. lfx/components/google/__init__.py +17 -0
  345. lfx/components/google/gmail.py +193 -0
  346. lfx/components/google/google_bq_sql_executor.py +157 -0
  347. lfx/components/google/google_drive.py +92 -0
  348. lfx/components/google/google_drive_search.py +152 -0
  349. lfx/components/google/google_generative_ai.py +144 -0
  350. lfx/components/google/google_generative_ai_embeddings.py +141 -0
  351. lfx/components/google/google_oauth_token.py +89 -0
  352. lfx/components/google/google_search_api_core.py +68 -0
  353. lfx/components/google/google_serper_api_core.py +74 -0
  354. lfx/components/groq/__init__.py +34 -0
  355. lfx/components/groq/groq.py +143 -0
  356. lfx/components/helpers/__init__.py +154 -0
  357. lfx/components/homeassistant/__init__.py +7 -0
  358. lfx/components/homeassistant/home_assistant_control.py +152 -0
  359. lfx/components/homeassistant/list_home_assistant_states.py +137 -0
  360. lfx/components/huggingface/__init__.py +37 -0
  361. lfx/components/huggingface/huggingface.py +199 -0
  362. lfx/components/huggingface/huggingface_inference_api.py +106 -0
  363. lfx/components/ibm/__init__.py +34 -0
  364. lfx/components/ibm/watsonx.py +207 -0
  365. lfx/components/ibm/watsonx_embeddings.py +135 -0
  366. lfx/components/icosacomputing/__init__.py +5 -0
  367. lfx/components/icosacomputing/combinatorial_reasoner.py +84 -0
  368. lfx/components/input_output/__init__.py +40 -0
  369. lfx/components/input_output/chat.py +109 -0
  370. lfx/components/input_output/chat_output.py +184 -0
  371. lfx/components/input_output/text.py +27 -0
  372. lfx/components/input_output/text_output.py +29 -0
  373. lfx/components/input_output/webhook.py +56 -0
  374. lfx/components/jigsawstack/__init__.py +23 -0
  375. lfx/components/jigsawstack/ai_scrape.py +126 -0
  376. lfx/components/jigsawstack/ai_web_search.py +136 -0
  377. lfx/components/jigsawstack/file_read.py +115 -0
  378. lfx/components/jigsawstack/file_upload.py +94 -0
  379. lfx/components/jigsawstack/image_generation.py +205 -0
  380. lfx/components/jigsawstack/nsfw.py +60 -0
  381. lfx/components/jigsawstack/object_detection.py +124 -0
  382. lfx/components/jigsawstack/sentiment.py +112 -0
  383. lfx/components/jigsawstack/text_to_sql.py +90 -0
  384. lfx/components/jigsawstack/text_translate.py +77 -0
  385. lfx/components/jigsawstack/vocr.py +107 -0
  386. lfx/components/knowledge_bases/__init__.py +89 -0
  387. lfx/components/langchain_utilities/__init__.py +109 -0
  388. lfx/components/langchain_utilities/character.py +53 -0
  389. lfx/components/langchain_utilities/conversation.py +59 -0
  390. lfx/components/langchain_utilities/csv_agent.py +175 -0
  391. lfx/components/langchain_utilities/fake_embeddings.py +26 -0
  392. lfx/components/langchain_utilities/html_link_extractor.py +35 -0
  393. lfx/components/langchain_utilities/json_agent.py +100 -0
  394. lfx/components/langchain_utilities/langchain_hub.py +126 -0
  395. lfx/components/langchain_utilities/language_recursive.py +49 -0
  396. lfx/components/langchain_utilities/language_semantic.py +138 -0
  397. lfx/components/langchain_utilities/llm_checker.py +39 -0
  398. lfx/components/langchain_utilities/llm_math.py +42 -0
  399. lfx/components/langchain_utilities/natural_language.py +61 -0
  400. lfx/components/langchain_utilities/openai_tools.py +53 -0
  401. lfx/components/langchain_utilities/openapi.py +48 -0
  402. lfx/components/langchain_utilities/recursive_character.py +60 -0
  403. lfx/components/langchain_utilities/retrieval_qa.py +83 -0
  404. lfx/components/langchain_utilities/runnable_executor.py +137 -0
  405. lfx/components/langchain_utilities/self_query.py +80 -0
  406. lfx/components/langchain_utilities/spider.py +142 -0
  407. lfx/components/langchain_utilities/sql.py +40 -0
  408. lfx/components/langchain_utilities/sql_database.py +35 -0
  409. lfx/components/langchain_utilities/sql_generator.py +78 -0
  410. lfx/components/langchain_utilities/tool_calling.py +59 -0
  411. lfx/components/langchain_utilities/vector_store_info.py +49 -0
  412. lfx/components/langchain_utilities/vector_store_router.py +33 -0
  413. lfx/components/langchain_utilities/xml_agent.py +71 -0
  414. lfx/components/langwatch/__init__.py +3 -0
  415. lfx/components/langwatch/langwatch.py +278 -0
  416. lfx/components/link_extractors/__init__.py +3 -0
  417. lfx/components/llm_operations/__init__.py +46 -0
  418. lfx/components/llm_operations/batch_run.py +205 -0
  419. lfx/components/llm_operations/lambda_filter.py +218 -0
  420. lfx/components/llm_operations/llm_conditional_router.py +421 -0
  421. lfx/components/llm_operations/llm_selector.py +499 -0
  422. lfx/components/llm_operations/structured_output.py +244 -0
  423. lfx/components/lmstudio/__init__.py +34 -0
  424. lfx/components/lmstudio/lmstudioembeddings.py +89 -0
  425. lfx/components/lmstudio/lmstudiomodel.py +133 -0
  426. lfx/components/logic/__init__.py +181 -0
  427. lfx/components/maritalk/__init__.py +32 -0
  428. lfx/components/maritalk/maritalk.py +52 -0
  429. lfx/components/mem0/__init__.py +3 -0
  430. lfx/components/mem0/mem0_chat_memory.py +147 -0
  431. lfx/components/milvus/__init__.py +34 -0
  432. lfx/components/milvus/milvus.py +115 -0
  433. lfx/components/mistral/__init__.py +37 -0
  434. lfx/components/mistral/mistral.py +114 -0
  435. lfx/components/mistral/mistral_embeddings.py +58 -0
  436. lfx/components/models/__init__.py +89 -0
  437. lfx/components/models_and_agents/__init__.py +49 -0
  438. lfx/components/models_and_agents/agent.py +644 -0
  439. lfx/components/models_and_agents/embedding_model.py +423 -0
  440. lfx/components/models_and_agents/language_model.py +398 -0
  441. lfx/components/models_and_agents/mcp_component.py +594 -0
  442. lfx/components/models_and_agents/memory.py +268 -0
  443. lfx/components/models_and_agents/prompt.py +67 -0
  444. lfx/components/mongodb/__init__.py +34 -0
  445. lfx/components/mongodb/mongodb_atlas.py +213 -0
  446. lfx/components/needle/__init__.py +3 -0
  447. lfx/components/needle/needle.py +104 -0
  448. lfx/components/notdiamond/__init__.py +34 -0
  449. lfx/components/notdiamond/notdiamond.py +228 -0
  450. lfx/components/novita/__init__.py +32 -0
  451. lfx/components/novita/novita.py +130 -0
  452. lfx/components/nvidia/__init__.py +57 -0
  453. lfx/components/nvidia/nvidia.py +151 -0
  454. lfx/components/nvidia/nvidia_embedding.py +77 -0
  455. lfx/components/nvidia/nvidia_ingest.py +317 -0
  456. lfx/components/nvidia/nvidia_rerank.py +63 -0
  457. lfx/components/nvidia/system_assist.py +65 -0
  458. lfx/components/olivya/__init__.py +3 -0
  459. lfx/components/olivya/olivya.py +116 -0
  460. lfx/components/ollama/__init__.py +37 -0
  461. lfx/components/ollama/ollama.py +548 -0
  462. lfx/components/ollama/ollama_embeddings.py +103 -0
  463. lfx/components/openai/__init__.py +37 -0
  464. lfx/components/openai/openai.py +100 -0
  465. lfx/components/openai/openai_chat_model.py +176 -0
  466. lfx/components/openrouter/__init__.py +32 -0
  467. lfx/components/openrouter/openrouter.py +104 -0
  468. lfx/components/output_parsers/__init__.py +3 -0
  469. lfx/components/perplexity/__init__.py +34 -0
  470. lfx/components/perplexity/perplexity.py +75 -0
  471. lfx/components/pgvector/__init__.py +34 -0
  472. lfx/components/pgvector/pgvector.py +72 -0
  473. lfx/components/pinecone/__init__.py +34 -0
  474. lfx/components/pinecone/pinecone.py +134 -0
  475. lfx/components/processing/__init__.py +72 -0
  476. lfx/components/processing/alter_metadata.py +109 -0
  477. lfx/components/processing/combine_text.py +40 -0
  478. lfx/components/processing/converter.py +248 -0
  479. lfx/components/processing/create_data.py +111 -0
  480. lfx/components/processing/create_list.py +40 -0
  481. lfx/components/processing/data_operations.py +528 -0
  482. lfx/components/processing/data_to_dataframe.py +71 -0
  483. lfx/components/processing/dataframe_operations.py +313 -0
  484. lfx/components/processing/dataframe_to_toolset.py +259 -0
  485. lfx/components/processing/dynamic_create_data.py +357 -0
  486. lfx/components/processing/extract_key.py +54 -0
  487. lfx/components/processing/filter_data.py +43 -0
  488. lfx/components/processing/filter_data_values.py +89 -0
  489. lfx/components/processing/json_cleaner.py +104 -0
  490. lfx/components/processing/merge_data.py +91 -0
  491. lfx/components/processing/message_to_data.py +37 -0
  492. lfx/components/processing/output_parser.py +46 -0
  493. lfx/components/processing/parse_data.py +71 -0
  494. lfx/components/processing/parse_dataframe.py +69 -0
  495. lfx/components/processing/parse_json_data.py +91 -0
  496. lfx/components/processing/parser.py +148 -0
  497. lfx/components/processing/regex.py +83 -0
  498. lfx/components/processing/select_data.py +49 -0
  499. lfx/components/processing/split_text.py +141 -0
  500. lfx/components/processing/store_message.py +91 -0
  501. lfx/components/processing/update_data.py +161 -0
  502. lfx/components/prototypes/__init__.py +35 -0
  503. lfx/components/prototypes/python_function.py +73 -0
  504. lfx/components/qdrant/__init__.py +34 -0
  505. lfx/components/qdrant/qdrant.py +109 -0
  506. lfx/components/redis/__init__.py +37 -0
  507. lfx/components/redis/redis.py +89 -0
  508. lfx/components/redis/redis_chat.py +43 -0
  509. lfx/components/sambanova/__init__.py +32 -0
  510. lfx/components/sambanova/sambanova.py +84 -0
  511. lfx/components/scrapegraph/__init__.py +40 -0
  512. lfx/components/scrapegraph/scrapegraph_markdownify_api.py +64 -0
  513. lfx/components/scrapegraph/scrapegraph_search_api.py +64 -0
  514. lfx/components/scrapegraph/scrapegraph_smart_scraper_api.py +71 -0
  515. lfx/components/searchapi/__init__.py +34 -0
  516. lfx/components/searchapi/search.py +79 -0
  517. lfx/components/serpapi/__init__.py +3 -0
  518. lfx/components/serpapi/serp.py +115 -0
  519. lfx/components/supabase/__init__.py +34 -0
  520. lfx/components/supabase/supabase.py +76 -0
  521. lfx/components/tavily/__init__.py +4 -0
  522. lfx/components/tavily/tavily_extract.py +117 -0
  523. lfx/components/tavily/tavily_search.py +212 -0
  524. lfx/components/textsplitters/__init__.py +3 -0
  525. lfx/components/toolkits/__init__.py +3 -0
  526. lfx/components/tools/__init__.py +66 -0
  527. lfx/components/tools/calculator.py +109 -0
  528. lfx/components/tools/google_search_api.py +45 -0
  529. lfx/components/tools/google_serper_api.py +115 -0
  530. lfx/components/tools/python_code_structured_tool.py +328 -0
  531. lfx/components/tools/python_repl.py +98 -0
  532. lfx/components/tools/search_api.py +88 -0
  533. lfx/components/tools/searxng.py +145 -0
  534. lfx/components/tools/serp_api.py +120 -0
  535. lfx/components/tools/tavily_search_tool.py +345 -0
  536. lfx/components/tools/wikidata_api.py +103 -0
  537. lfx/components/tools/wikipedia_api.py +50 -0
  538. lfx/components/tools/yahoo_finance.py +130 -0
  539. lfx/components/twelvelabs/__init__.py +52 -0
  540. lfx/components/twelvelabs/convert_astra_results.py +84 -0
  541. lfx/components/twelvelabs/pegasus_index.py +311 -0
  542. lfx/components/twelvelabs/split_video.py +301 -0
  543. lfx/components/twelvelabs/text_embeddings.py +57 -0
  544. lfx/components/twelvelabs/twelvelabs_pegasus.py +408 -0
  545. lfx/components/twelvelabs/video_embeddings.py +100 -0
  546. lfx/components/twelvelabs/video_file.py +191 -0
  547. lfx/components/unstructured/__init__.py +3 -0
  548. lfx/components/unstructured/unstructured.py +121 -0
  549. lfx/components/upstash/__init__.py +34 -0
  550. lfx/components/upstash/upstash.py +124 -0
  551. lfx/components/utilities/__init__.py +43 -0
  552. lfx/components/utilities/calculator_core.py +89 -0
  553. lfx/components/utilities/current_date.py +42 -0
  554. lfx/components/utilities/id_generator.py +42 -0
  555. lfx/components/utilities/python_repl_core.py +98 -0
  556. lfx/components/vectara/__init__.py +37 -0
  557. lfx/components/vectara/vectara.py +97 -0
  558. lfx/components/vectara/vectara_rag.py +164 -0
  559. lfx/components/vectorstores/__init__.py +34 -0
  560. lfx/components/vectorstores/local_db.py +270 -0
  561. lfx/components/vertexai/__init__.py +37 -0
  562. lfx/components/vertexai/vertexai.py +71 -0
  563. lfx/components/vertexai/vertexai_embeddings.py +67 -0
  564. lfx/components/vlmrun/__init__.py +34 -0
  565. lfx/components/vlmrun/vlmrun_transcription.py +224 -0
  566. lfx/components/weaviate/__init__.py +34 -0
  567. lfx/components/weaviate/weaviate.py +89 -0
  568. lfx/components/wikipedia/__init__.py +4 -0
  569. lfx/components/wikipedia/wikidata.py +86 -0
  570. lfx/components/wikipedia/wikipedia.py +53 -0
  571. lfx/components/wolframalpha/__init__.py +3 -0
  572. lfx/components/wolframalpha/wolfram_alpha_api.py +54 -0
  573. lfx/components/xai/__init__.py +32 -0
  574. lfx/components/xai/xai.py +167 -0
  575. lfx/components/yahoosearch/__init__.py +3 -0
  576. lfx/components/yahoosearch/yahoo.py +137 -0
  577. lfx/components/youtube/__init__.py +52 -0
  578. lfx/components/youtube/channel.py +227 -0
  579. lfx/components/youtube/comments.py +231 -0
  580. lfx/components/youtube/playlist.py +33 -0
  581. lfx/components/youtube/search.py +120 -0
  582. lfx/components/youtube/trending.py +285 -0
  583. lfx/components/youtube/video_details.py +263 -0
  584. lfx/components/youtube/youtube_transcripts.py +206 -0
  585. lfx/components/zep/__init__.py +3 -0
  586. lfx/components/zep/zep.py +45 -0
  587. lfx/constants.py +6 -0
  588. lfx/custom/__init__.py +7 -0
  589. lfx/custom/attributes.py +87 -0
  590. lfx/custom/code_parser/__init__.py +3 -0
  591. lfx/custom/code_parser/code_parser.py +361 -0
  592. lfx/custom/custom_component/__init__.py +0 -0
  593. lfx/custom/custom_component/base_component.py +128 -0
  594. lfx/custom/custom_component/component.py +1890 -0
  595. lfx/custom/custom_component/component_with_cache.py +8 -0
  596. lfx/custom/custom_component/custom_component.py +650 -0
  597. lfx/custom/dependency_analyzer.py +165 -0
  598. lfx/custom/directory_reader/__init__.py +3 -0
  599. lfx/custom/directory_reader/directory_reader.py +359 -0
  600. lfx/custom/directory_reader/utils.py +171 -0
  601. lfx/custom/eval.py +12 -0
  602. lfx/custom/schema.py +32 -0
  603. lfx/custom/tree_visitor.py +21 -0
  604. lfx/custom/utils.py +877 -0
  605. lfx/custom/validate.py +523 -0
  606. lfx/events/__init__.py +1 -0
  607. lfx/events/event_manager.py +110 -0
  608. lfx/exceptions/__init__.py +0 -0
  609. lfx/exceptions/component.py +15 -0
  610. lfx/field_typing/__init__.py +91 -0
  611. lfx/field_typing/constants.py +216 -0
  612. lfx/field_typing/range_spec.py +35 -0
  613. lfx/graph/__init__.py +6 -0
  614. lfx/graph/edge/__init__.py +0 -0
  615. lfx/graph/edge/base.py +300 -0
  616. lfx/graph/edge/schema.py +119 -0
  617. lfx/graph/edge/utils.py +0 -0
  618. lfx/graph/graph/__init__.py +0 -0
  619. lfx/graph/graph/ascii.py +202 -0
  620. lfx/graph/graph/base.py +2298 -0
  621. lfx/graph/graph/constants.py +63 -0
  622. lfx/graph/graph/runnable_vertices_manager.py +133 -0
  623. lfx/graph/graph/schema.py +53 -0
  624. lfx/graph/graph/state_model.py +66 -0
  625. lfx/graph/graph/utils.py +1024 -0
  626. lfx/graph/schema.py +75 -0
  627. lfx/graph/state/__init__.py +0 -0
  628. lfx/graph/state/model.py +250 -0
  629. lfx/graph/utils.py +206 -0
  630. lfx/graph/vertex/__init__.py +0 -0
  631. lfx/graph/vertex/base.py +826 -0
  632. lfx/graph/vertex/constants.py +0 -0
  633. lfx/graph/vertex/exceptions.py +4 -0
  634. lfx/graph/vertex/param_handler.py +316 -0
  635. lfx/graph/vertex/schema.py +26 -0
  636. lfx/graph/vertex/utils.py +19 -0
  637. lfx/graph/vertex/vertex_types.py +489 -0
  638. lfx/helpers/__init__.py +141 -0
  639. lfx/helpers/base_model.py +71 -0
  640. lfx/helpers/custom.py +13 -0
  641. lfx/helpers/data.py +167 -0
  642. lfx/helpers/flow.py +308 -0
  643. lfx/inputs/__init__.py +68 -0
  644. lfx/inputs/constants.py +2 -0
  645. lfx/inputs/input_mixin.py +352 -0
  646. lfx/inputs/inputs.py +718 -0
  647. lfx/inputs/validators.py +19 -0
  648. lfx/interface/__init__.py +6 -0
  649. lfx/interface/components.py +897 -0
  650. lfx/interface/importing/__init__.py +5 -0
  651. lfx/interface/importing/utils.py +39 -0
  652. lfx/interface/initialize/__init__.py +3 -0
  653. lfx/interface/initialize/loading.py +317 -0
  654. lfx/interface/listing.py +26 -0
  655. lfx/interface/run.py +16 -0
  656. lfx/interface/utils.py +111 -0
  657. lfx/io/__init__.py +63 -0
  658. lfx/io/schema.py +295 -0
  659. lfx/load/__init__.py +8 -0
  660. lfx/load/load.py +256 -0
  661. lfx/load/utils.py +99 -0
  662. lfx/log/__init__.py +5 -0
  663. lfx/log/logger.py +411 -0
  664. lfx/logging/__init__.py +11 -0
  665. lfx/logging/logger.py +24 -0
  666. lfx/memory/__init__.py +70 -0
  667. lfx/memory/stubs.py +302 -0
  668. lfx/processing/__init__.py +1 -0
  669. lfx/processing/process.py +238 -0
  670. lfx/processing/utils.py +25 -0
  671. lfx/py.typed +0 -0
  672. lfx/schema/__init__.py +66 -0
  673. lfx/schema/artifact.py +83 -0
  674. lfx/schema/content_block.py +62 -0
  675. lfx/schema/content_types.py +91 -0
  676. lfx/schema/cross_module.py +80 -0
  677. lfx/schema/data.py +309 -0
  678. lfx/schema/dataframe.py +210 -0
  679. lfx/schema/dotdict.py +74 -0
  680. lfx/schema/encoders.py +13 -0
  681. lfx/schema/graph.py +47 -0
  682. lfx/schema/image.py +184 -0
  683. lfx/schema/json_schema.py +186 -0
  684. lfx/schema/log.py +62 -0
  685. lfx/schema/message.py +493 -0
  686. lfx/schema/openai_responses_schemas.py +74 -0
  687. lfx/schema/properties.py +41 -0
  688. lfx/schema/schema.py +180 -0
  689. lfx/schema/serialize.py +13 -0
  690. lfx/schema/table.py +142 -0
  691. lfx/schema/validators.py +114 -0
  692. lfx/serialization/__init__.py +5 -0
  693. lfx/serialization/constants.py +2 -0
  694. lfx/serialization/serialization.py +314 -0
  695. lfx/services/__init__.py +26 -0
  696. lfx/services/base.py +28 -0
  697. lfx/services/cache/__init__.py +6 -0
  698. lfx/services/cache/base.py +183 -0
  699. lfx/services/cache/service.py +166 -0
  700. lfx/services/cache/utils.py +169 -0
  701. lfx/services/chat/__init__.py +1 -0
  702. lfx/services/chat/config.py +2 -0
  703. lfx/services/chat/schema.py +10 -0
  704. lfx/services/database/__init__.py +5 -0
  705. lfx/services/database/service.py +25 -0
  706. lfx/services/deps.py +194 -0
  707. lfx/services/factory.py +19 -0
  708. lfx/services/initialize.py +19 -0
  709. lfx/services/interfaces.py +103 -0
  710. lfx/services/manager.py +185 -0
  711. lfx/services/mcp_composer/__init__.py +6 -0
  712. lfx/services/mcp_composer/factory.py +16 -0
  713. lfx/services/mcp_composer/service.py +1441 -0
  714. lfx/services/schema.py +21 -0
  715. lfx/services/session.py +87 -0
  716. lfx/services/settings/__init__.py +3 -0
  717. lfx/services/settings/auth.py +133 -0
  718. lfx/services/settings/base.py +668 -0
  719. lfx/services/settings/constants.py +43 -0
  720. lfx/services/settings/factory.py +23 -0
  721. lfx/services/settings/feature_flags.py +11 -0
  722. lfx/services/settings/service.py +35 -0
  723. lfx/services/settings/utils.py +40 -0
  724. lfx/services/shared_component_cache/__init__.py +1 -0
  725. lfx/services/shared_component_cache/factory.py +30 -0
  726. lfx/services/shared_component_cache/service.py +9 -0
  727. lfx/services/storage/__init__.py +5 -0
  728. lfx/services/storage/local.py +185 -0
  729. lfx/services/storage/service.py +177 -0
  730. lfx/services/tracing/__init__.py +1 -0
  731. lfx/services/tracing/service.py +21 -0
  732. lfx/settings.py +6 -0
  733. lfx/template/__init__.py +6 -0
  734. lfx/template/field/__init__.py +0 -0
  735. lfx/template/field/base.py +260 -0
  736. lfx/template/field/prompt.py +15 -0
  737. lfx/template/frontend_node/__init__.py +6 -0
  738. lfx/template/frontend_node/base.py +214 -0
  739. lfx/template/frontend_node/constants.py +65 -0
  740. lfx/template/frontend_node/custom_components.py +79 -0
  741. lfx/template/template/__init__.py +0 -0
  742. lfx/template/template/base.py +100 -0
  743. lfx/template/utils.py +217 -0
  744. lfx/type_extraction/__init__.py +19 -0
  745. lfx/type_extraction/type_extraction.py +75 -0
  746. lfx/type_extraction.py +80 -0
  747. lfx/utils/__init__.py +1 -0
  748. lfx/utils/async_helpers.py +42 -0
  749. lfx/utils/component_utils.py +154 -0
  750. lfx/utils/concurrency.py +60 -0
  751. lfx/utils/connection_string_parser.py +11 -0
  752. lfx/utils/constants.py +233 -0
  753. lfx/utils/data_structure.py +212 -0
  754. lfx/utils/exceptions.py +22 -0
  755. lfx/utils/helpers.py +34 -0
  756. lfx/utils/image.py +79 -0
  757. lfx/utils/langflow_utils.py +52 -0
  758. lfx/utils/lazy_load.py +15 -0
  759. lfx/utils/request_utils.py +18 -0
  760. lfx/utils/schemas.py +139 -0
  761. lfx/utils/ssrf_protection.py +384 -0
  762. lfx/utils/util.py +626 -0
  763. lfx/utils/util_strings.py +56 -0
  764. lfx/utils/validate_cloud.py +26 -0
  765. lfx/utils/version.py +24 -0
  766. lfx_nightly-0.2.0.dev25.dist-info/METADATA +312 -0
  767. lfx_nightly-0.2.0.dev25.dist-info/RECORD +769 -0
  768. lfx_nightly-0.2.0.dev25.dist-info/WHEEL +4 -0
  769. lfx_nightly-0.2.0.dev25.dist-info/entry_points.txt +2 -0
@@ -0,0 +1,254 @@
1
+ from cleanlab_tlm import TrustworthyRAG, get_default_evals
2
+
3
+ from lfx.custom import Component
4
+ from lfx.io import (
5
+ BoolInput,
6
+ DropdownInput,
7
+ MessageTextInput,
8
+ Output,
9
+ SecretStrInput,
10
+ )
11
+ from lfx.schema.message import Message
12
+
13
+
14
+ class CleanlabRAGEvaluator(Component):
15
+ """A component that evaluates the quality of RAG (Retrieval-Augmented Generation) outputs using Cleanlab.
16
+
17
+ This component takes a query, retrieved context, and generated response from a RAG pipeline,
18
+ and uses Cleanlab's evaluation algorithms to assess various aspects of the RAG system's performance.
19
+
20
+ The component can evaluate:
21
+ - Overall trustworthiness of the LLM generated response
22
+ - Context sufficiency (whether the retrieved context contains information needed to answer the query)
23
+ - Response groundedness (whether the response is supported directly by the context)
24
+ - Response helpfulness (whether the response effectively addresses the user's query)
25
+ - Query ease (whether the user query seems easy for an AI system to properly handle, useful to diagnose
26
+ queries that are: complex, vague, tricky, or disgruntled-sounding)
27
+
28
+ Outputs:
29
+ - Trust Score: A score between 0-1 corresponding to the trustworthiness of the response. A higher score
30
+ indicates a higher confidence that the response is correct/good.
31
+ - Explanation: An LLM generated explanation of the trustworthiness assessment
32
+ - Other Evals: Additional evaluation metrics for selected evaluation types in the "Controls" tab
33
+ - Evaluation Summary: A comprehensive summary of context, query, response, and selected evaluation results
34
+
35
+ This component works well in conjunction with the CleanlabRemediator to create a complete trust evaluation
36
+ and remediation pipeline.
37
+
38
+ More details on the evaluation metrics can be found here: https://help.cleanlab.ai/tlm/use-cases/tlm_rag/
39
+ """
40
+
41
+ display_name = "Cleanlab RAG Evaluator"
42
+ description = "Evaluates context, query, and response from a RAG pipeline using Cleanlab and outputs trust metrics."
43
+ icon = "Cleanlab"
44
+ name = "CleanlabRAGEvaluator"
45
+
46
+ inputs = [
47
+ SecretStrInput(
48
+ name="api_key",
49
+ display_name="Cleanlab API Key",
50
+ info="Your Cleanlab API key.",
51
+ required=True,
52
+ ),
53
+ DropdownInput(
54
+ name="model",
55
+ display_name="Cleanlab Evaluation Model",
56
+ options=[
57
+ "gpt-4.1",
58
+ "gpt-4.1-mini",
59
+ "gpt-4.1-nano",
60
+ "o4-mini",
61
+ "o3",
62
+ "gpt-4.5-preview",
63
+ "gpt-4o-mini",
64
+ "gpt-4o",
65
+ "o3-mini",
66
+ "o1",
67
+ "o1-mini",
68
+ "gpt-4",
69
+ "gpt-3.5-turbo-16k",
70
+ "claude-3.7-sonnet",
71
+ "claude-3.5-sonnet-v2",
72
+ "claude-3.5-sonnet",
73
+ "claude-3.5-haiku",
74
+ "claude-3-haiku",
75
+ "nova-micro",
76
+ "nova-lite",
77
+ "nova-pro",
78
+ ],
79
+ info="The model Cleanlab uses to evaluate the context, query, and response. This does NOT need to be "
80
+ "the same model that generated the response.",
81
+ value="gpt-4o-mini",
82
+ required=True,
83
+ advanced=True,
84
+ ),
85
+ DropdownInput(
86
+ name="quality_preset",
87
+ display_name="Quality Preset",
88
+ options=["base", "low", "medium"],
89
+ value="medium",
90
+ info="This determines the accuracy, latency, and cost of the evaluation. Higher quality is generally "
91
+ "slower but more accurate.",
92
+ required=True,
93
+ advanced=True,
94
+ ),
95
+ MessageTextInput(
96
+ name="context",
97
+ display_name="Context",
98
+ info="The context retrieved for the given query.",
99
+ required=True,
100
+ ),
101
+ MessageTextInput(
102
+ name="query",
103
+ display_name="Query",
104
+ info="The user's query.",
105
+ required=True,
106
+ ),
107
+ MessageTextInput(
108
+ name="response",
109
+ display_name="Response",
110
+ info="The response generated by the LLM.",
111
+ required=True,
112
+ ),
113
+ BoolInput(
114
+ name="run_context_sufficiency",
115
+ display_name="Run Context Sufficiency",
116
+ value=False,
117
+ advanced=True,
118
+ ),
119
+ BoolInput(
120
+ name="run_response_groundedness",
121
+ display_name="Run Response Groundedness",
122
+ value=False,
123
+ advanced=True,
124
+ ),
125
+ BoolInput(
126
+ name="run_response_helpfulness",
127
+ display_name="Run Response Helpfulness",
128
+ value=False,
129
+ advanced=True,
130
+ ),
131
+ BoolInput(
132
+ name="run_query_ease",
133
+ display_name="Run Query Ease",
134
+ value=False,
135
+ advanced=True,
136
+ ),
137
+ ]
138
+
139
+ outputs = [
140
+ Output(display_name="Response", name="response_passthrough", method="pass_response", types=["Message"]),
141
+ Output(display_name="Trust Score", name="trust_score", method="get_trust_score", types=["number"]),
142
+ Output(display_name="Explanation", name="trust_explanation", method="get_trust_explanation", types=["Message"]),
143
+ Output(display_name="Other Evals", name="other_scores", method="get_other_scores", types=["Data"]),
144
+ Output(
145
+ display_name="Evaluation Summary",
146
+ name="evaluation_summary",
147
+ method="get_evaluation_summary",
148
+ types=["Message"],
149
+ ),
150
+ ]
151
+
152
+ def _evaluate_once(self):
153
+ if not hasattr(self, "_cached_result"):
154
+ try:
155
+ self.status = "Configuring selected evals..."
156
+ default_evals = get_default_evals()
157
+ enabled_names = []
158
+ if self.run_context_sufficiency:
159
+ enabled_names.append("context_sufficiency")
160
+ if self.run_response_groundedness:
161
+ enabled_names.append("response_groundedness")
162
+ if self.run_response_helpfulness:
163
+ enabled_names.append("response_helpfulness")
164
+ if self.run_query_ease:
165
+ enabled_names.append("query_ease")
166
+
167
+ selected_evals = [e for e in default_evals if e.name in enabled_names]
168
+
169
+ validator = TrustworthyRAG(
170
+ api_key=self.api_key,
171
+ quality_preset=self.quality_preset,
172
+ options={"log": ["explanation"], "model": self.model},
173
+ evals=selected_evals,
174
+ )
175
+
176
+ self.status = f"Running evals: {[e.name for e in selected_evals]}"
177
+ self._cached_result = validator.score(
178
+ query=self.query,
179
+ context=self.context,
180
+ response=self.response,
181
+ )
182
+ self.status = "Evaluation complete."
183
+
184
+ except Exception as e: # noqa: BLE001
185
+ self.status = f"Evaluation failed: {e!s}"
186
+ self._cached_result = {}
187
+ return self._cached_result
188
+
189
+ def pass_response(self) -> Message:
190
+ self.status = "Passing through response."
191
+ return Message(text=self.response)
192
+
193
+ def get_trust_score(self) -> float:
194
+ score = self._evaluate_once().get("trustworthiness", {}).get("score", 0.0)
195
+ self.status = f"Trust Score: {score:.3f}"
196
+ return score
197
+
198
+ def get_trust_explanation(self) -> Message:
199
+ explanation = self._evaluate_once().get("trustworthiness", {}).get("log", {}).get("explanation", "")
200
+ self.status = "Trust explanation extracted."
201
+ return Message(text=explanation)
202
+
203
+ def get_other_scores(self) -> dict:
204
+ result = self._evaluate_once()
205
+
206
+ selected = {
207
+ "context_sufficiency": self.run_context_sufficiency,
208
+ "response_groundedness": self.run_response_groundedness,
209
+ "response_helpfulness": self.run_response_helpfulness,
210
+ "query_ease": self.run_query_ease,
211
+ }
212
+
213
+ filtered_scores = {key: result[key]["score"] for key, include in selected.items() if include and key in result}
214
+
215
+ self.status = f"{len(filtered_scores)} other evals returned."
216
+ return filtered_scores
217
+
218
+ def get_evaluation_summary(self) -> Message:
219
+ result = self._evaluate_once()
220
+
221
+ query_text = self.query.strip()
222
+ context_text = self.context.strip()
223
+ response_text = self.response.strip()
224
+
225
+ trust = result.get("trustworthiness", {}).get("score", 0.0)
226
+ trust_exp = result.get("trustworthiness", {}).get("log", {}).get("explanation", "")
227
+
228
+ selected = {
229
+ "context_sufficiency": self.run_context_sufficiency,
230
+ "response_groundedness": self.run_response_groundedness,
231
+ "response_helpfulness": self.run_response_helpfulness,
232
+ "query_ease": self.run_query_ease,
233
+ }
234
+
235
+ other_scores = {key: result[key]["score"] for key, include in selected.items() if include and key in result}
236
+
237
+ metrics = f"Trustworthiness: {trust:.3f}"
238
+ if trust_exp:
239
+ metrics += f"\nExplanation: {trust_exp}"
240
+ if other_scores:
241
+ metrics += "\n" + "\n".join(f"{k.replace('_', ' ').title()}: {v:.3f}" for k, v in other_scores.items())
242
+
243
+ summary = (
244
+ f"Query:\n{query_text}\n"
245
+ "-----\n"
246
+ f"Context:\n{context_text}\n"
247
+ "-----\n"
248
+ f"Response:\n{response_text}\n"
249
+ "------------------------------\n"
250
+ f"{metrics}"
251
+ )
252
+
253
+ self.status = "Evaluation summary built."
254
+ return Message(text=summary)
@@ -0,0 +1,131 @@
1
+ from lfx.custom import Component
2
+ from lfx.field_typing.range_spec import RangeSpec
3
+ from lfx.io import BoolInput, FloatInput, HandleInput, MessageTextInput, Output, PromptInput
4
+ from lfx.schema.message import Message
5
+
6
+
7
+ class CleanlabRemediator(Component):
8
+ """Remediates potentially untrustworthy LLM responses based on trust scores computed by the Cleanlab Evaluator.
9
+
10
+ This component takes a response and its associated trust score,
11
+ and applies remediation strategies based on configurable thresholds and settings.
12
+
13
+ Inputs:
14
+ - response (MessageTextInput): The original LLM-generated response to be evaluated and possibly remediated.
15
+ The CleanlabEvaluator passes this response through.
16
+ - score (HandleInput): The trust score output from CleanlabEvaluator (expected to be a float between 0 and 1).
17
+ - explanation (MessageTextInput): Optional textual explanation for the trust score, to be included in the
18
+ output.
19
+ - threshold (Input[float]): Minimum trust score required to accept the response. If the score is lower, the
20
+ response is remediated.
21
+ - show_untrustworthy_response (BoolInput): If true, returns the original response with a warning; if false,
22
+ returns fallback text.
23
+ - untrustworthy_warning_text (PromptInput): Text warning to append to responses deemed untrustworthy (when
24
+ showing them).
25
+ - fallback_text (PromptInput): Replacement message returned if the response is untrustworthy and should be
26
+ hidden.
27
+
28
+ Outputs:
29
+ - remediated_response (Message): Either:
30
+ • the original response,
31
+ • the original response with appended warning, or
32
+ • the fallback response,
33
+ depending on the trust score and configuration.
34
+
35
+ This component is typically used downstream of CleanlabEvaluator or CleanlabRagValidator
36
+ to take appropriate action on low-trust responses and inform users accordingly.
37
+ """
38
+
39
+ display_name = "Cleanlab Remediator"
40
+ description = (
41
+ "Remediates an untrustworthy response based on trust score from the Cleanlab Evaluator, "
42
+ "score threshold, and message handling settings."
43
+ )
44
+ icon = "Cleanlab"
45
+ name = "CleanlabRemediator"
46
+
47
+ inputs = [
48
+ MessageTextInput(
49
+ name="response",
50
+ display_name="Response",
51
+ info="The response to the user's query.",
52
+ required=True,
53
+ ),
54
+ HandleInput(
55
+ name="score",
56
+ display_name="Trust Score",
57
+ info="The trustworthiness score output from the Cleanlab Evaluator.",
58
+ input_types=["number"],
59
+ required=True,
60
+ ),
61
+ MessageTextInput(
62
+ name="explanation",
63
+ display_name="Explanation",
64
+ info="The explanation from the Cleanlab Evaluator.",
65
+ required=False,
66
+ ),
67
+ FloatInput(
68
+ name="threshold",
69
+ display_name="Threshold",
70
+ field_type="float",
71
+ value=0.7,
72
+ range_spec=RangeSpec(min=0.0, max=1.0, step=0.05),
73
+ info="Minimum score required to show the response unmodified. Reponses with scores above this threshold "
74
+ "are considered trustworthy. Reponses with scores below this threshold are considered untrustworthy and "
75
+ "will be remediated based on the settings below.",
76
+ required=True,
77
+ show=True,
78
+ ),
79
+ BoolInput(
80
+ name="show_untrustworthy_response",
81
+ display_name="Show Untrustworthy Response",
82
+ info="If enabled, and the trust score is below the threshold, the original response is shown with the "
83
+ "added warning. If disabled, and the trust score is below the threshold, the fallback answer is returned.",
84
+ value=True,
85
+ ),
86
+ PromptInput(
87
+ name="untrustworthy_warning_text",
88
+ display_name="Warning for Untrustworthy Response",
89
+ info="Warning to append to the response if Show Untrustworthy Response is enabled and trust score is "
90
+ "below the threshold.",
91
+ value="⚠️ WARNING: The following response is potentially untrustworthy.",
92
+ ),
93
+ PromptInput(
94
+ name="fallback_text",
95
+ display_name="Fallback Answer",
96
+ info="Response returned if the trust score is below the threshold and 'Show Untrustworthy Response' is "
97
+ "disabled.",
98
+ value="Based on the available information, I cannot provide a complete answer to this question.",
99
+ ),
100
+ ]
101
+
102
+ outputs = [
103
+ Output(
104
+ display_name="Remediated Message",
105
+ name="remediated_response",
106
+ method="remediate_response",
107
+ types=["Message"],
108
+ ),
109
+ ]
110
+
111
+ def remediate_response(self) -> Message:
112
+ if self.score >= self.threshold:
113
+ self.status = f"Score {self.score:.2f} ≥ threshold {self.threshold:.2f} → accepted"
114
+ return Message(
115
+ text=f"{self.response}\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n**Trust Score:** {self.score:.2f}"
116
+ )
117
+
118
+ self.status = f"Score {self.score:.2f} < threshold {self.threshold:.2f} → flagged"
119
+
120
+ if self.show_untrustworthy_response:
121
+ parts = [
122
+ self.response,
123
+ "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━",
124
+ f"**{self.untrustworthy_warning_text.strip()}**",
125
+ f"**Trust Score:** {self.score:.2f}",
126
+ ]
127
+ if self.explanation:
128
+ parts.append(f"**Explanation:** {self.explanation}")
129
+ return Message(text="\n\n".join(parts))
130
+
131
+ return Message(text=self.fallback_text)
@@ -0,0 +1,34 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING, Any
4
+
5
+ from lfx.components._importing import import_mod
6
+
7
+ if TYPE_CHECKING:
8
+ from .clickhouse import ClickhouseVectorStoreComponent
9
+
10
+ _dynamic_imports = {
11
+ "ClickhouseVectorStoreComponent": "clickhouse",
12
+ }
13
+
14
+ __all__ = [
15
+ "ClickhouseVectorStoreComponent",
16
+ ]
17
+
18
+
19
+ def __getattr__(attr_name: str) -> Any:
20
+ """Lazily import ClickHouse components on attribute access."""
21
+ if attr_name not in _dynamic_imports:
22
+ msg = f"module '{__name__}' has no attribute '{attr_name}'"
23
+ raise AttributeError(msg)
24
+ try:
25
+ result = import_mod(attr_name, _dynamic_imports[attr_name], __spec__.parent)
26
+ except (ModuleNotFoundError, ImportError, AttributeError) as e:
27
+ msg = f"Could not import '{attr_name}' from '{__name__}': {e}"
28
+ raise AttributeError(msg) from e
29
+ globals()[attr_name] = result
30
+ return result
31
+
32
+
33
+ def __dir__() -> list[str]:
34
+ return list(__all__)
@@ -0,0 +1,135 @@
1
+ from langchain_community.vectorstores import Clickhouse, ClickhouseSettings
2
+
3
+ from lfx.base.vectorstores.model import LCVectorStoreComponent, check_cached_vector_store
4
+ from lfx.helpers.data import docs_to_data
5
+ from lfx.inputs.inputs import BoolInput, FloatInput
6
+ from lfx.io import (
7
+ DictInput,
8
+ DropdownInput,
9
+ HandleInput,
10
+ IntInput,
11
+ SecretStrInput,
12
+ StrInput,
13
+ )
14
+ from lfx.schema.data import Data
15
+
16
+
17
+ class ClickhouseVectorStoreComponent(LCVectorStoreComponent):
18
+ display_name = "ClickHouse"
19
+ description = "ClickHouse Vector Store with search capabilities"
20
+ name = "Clickhouse"
21
+ icon = "Clickhouse"
22
+
23
+ inputs = [
24
+ StrInput(name="host", display_name="hostname", required=True, value="localhost"),
25
+ IntInput(name="port", display_name="port", required=True, value=8123),
26
+ StrInput(name="database", display_name="database", required=True),
27
+ StrInput(name="table", display_name="Table name", required=True),
28
+ StrInput(name="username", display_name="The ClickHouse user name.", required=True),
29
+ SecretStrInput(name="password", display_name="Clickhouse Password", required=True),
30
+ DropdownInput(
31
+ name="index_type",
32
+ display_name="index_type",
33
+ options=["annoy", "vector_similarity"],
34
+ info="Type of the index.",
35
+ value="annoy",
36
+ advanced=True,
37
+ ),
38
+ DropdownInput(
39
+ name="metric",
40
+ display_name="metric",
41
+ options=["angular", "euclidean", "manhattan", "hamming", "dot"],
42
+ info="Metric to compute distance.",
43
+ value="angular",
44
+ advanced=True,
45
+ ),
46
+ BoolInput(
47
+ name="secure",
48
+ display_name="Use https/TLS. This overrides inferred values from the interface or port arguments.",
49
+ value=False,
50
+ advanced=True,
51
+ ),
52
+ StrInput(name="index_param", display_name="Param of the index", value="100,'L2Distance'", advanced=True),
53
+ DictInput(name="index_query_params", display_name="index query params", advanced=True),
54
+ *LCVectorStoreComponent.inputs,
55
+ HandleInput(name="embedding", display_name="Embedding", input_types=["Embeddings"]),
56
+ IntInput(
57
+ name="number_of_results",
58
+ display_name="Number of Results",
59
+ info="Number of results to return.",
60
+ value=4,
61
+ advanced=True,
62
+ ),
63
+ FloatInput(name="score_threshold", display_name="Score threshold", advanced=True),
64
+ ]
65
+
66
+ @check_cached_vector_store
67
+ def build_vector_store(self) -> Clickhouse:
68
+ try:
69
+ import clickhouse_connect
70
+ except ImportError as e:
71
+ msg = (
72
+ "Failed to import ClickHouse dependencies. "
73
+ "Install it using `uv pip install langflow[clickhouse-connect] --pre`"
74
+ )
75
+ raise ImportError(msg) from e
76
+
77
+ try:
78
+ client = clickhouse_connect.get_client(
79
+ host=self.host, port=self.port, username=self.username, password=self.password
80
+ )
81
+ client.command("SELECT 1")
82
+ except Exception as e:
83
+ msg = f"Failed to connect to Clickhouse: {e}"
84
+ raise ValueError(msg) from e
85
+
86
+ # Convert DataFrame to Data if needed using parent's method
87
+ self.ingest_data = self._prepare_ingest_data()
88
+
89
+ documents = []
90
+ for _input in self.ingest_data or []:
91
+ if isinstance(_input, Data):
92
+ documents.append(_input.to_lc_document())
93
+ else:
94
+ documents.append(_input)
95
+
96
+ kwargs = {}
97
+ if self.index_param:
98
+ kwargs["index_param"] = self.index_param.split(",")
99
+ if self.index_query_params:
100
+ kwargs["index_query_params"] = self.index_query_params
101
+
102
+ settings = ClickhouseSettings(
103
+ table=self.table,
104
+ database=self.database,
105
+ host=self.host,
106
+ index_type=self.index_type,
107
+ metric=self.metric,
108
+ password=self.password,
109
+ port=self.port,
110
+ secure=self.secure,
111
+ username=self.username,
112
+ **kwargs,
113
+ )
114
+ if documents:
115
+ clickhouse_vs = Clickhouse.from_documents(documents=documents, embedding=self.embedding, config=settings)
116
+
117
+ else:
118
+ clickhouse_vs = Clickhouse(embedding=self.embedding, config=settings)
119
+
120
+ return clickhouse_vs
121
+
122
+ def search_documents(self) -> list[Data]:
123
+ vector_store = self.build_vector_store()
124
+
125
+ if self.search_query and isinstance(self.search_query, str) and self.search_query.strip():
126
+ kwargs = {}
127
+ if self.score_threshold:
128
+ kwargs["score_threshold"] = self.score_threshold
129
+
130
+ docs = vector_store.similarity_search(query=self.search_query, k=self.number_of_results, **kwargs)
131
+
132
+ data = docs_to_data(docs)
133
+ self.status = data
134
+ return data
135
+ return []
@@ -0,0 +1,32 @@
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.cloudflare.cloudflare import CloudflareWorkersAIEmbeddingsComponent
9
+
10
+ _dynamic_imports = {
11
+ "CloudflareWorkersAIEmbeddingsComponent": "cloudflare",
12
+ }
13
+
14
+ __all__ = ["CloudflareWorkersAIEmbeddingsComponent"]
15
+
16
+
17
+ def __getattr__(attr_name: str) -> Any:
18
+ """Lazily import cloudflare components on attribute access."""
19
+ if attr_name not in _dynamic_imports:
20
+ msg = f"module '{__name__}' has no attribute '{attr_name}'"
21
+ raise AttributeError(msg)
22
+ try:
23
+ result = import_mod(attr_name, _dynamic_imports[attr_name], __spec__.parent)
24
+ except (ModuleNotFoundError, ImportError, AttributeError) as e:
25
+ msg = f"Could not import '{attr_name}' from '{__name__}': {e}"
26
+ raise AttributeError(msg) from e
27
+ globals()[attr_name] = result
28
+ return result
29
+
30
+
31
+ def __dir__() -> list[str]:
32
+ return list(__all__)
@@ -0,0 +1,81 @@
1
+ from langchain_community.embeddings.cloudflare_workersai import CloudflareWorkersAIEmbeddings
2
+
3
+ from lfx.base.models.model import LCModelComponent
4
+ from lfx.field_typing import Embeddings
5
+ from lfx.io import BoolInput, DictInput, IntInput, MessageTextInput, Output, SecretStrInput
6
+
7
+
8
+ class CloudflareWorkersAIEmbeddingsComponent(LCModelComponent):
9
+ display_name: str = "Cloudflare Workers AI Embeddings"
10
+ description: str = "Generate embeddings using Cloudflare Workers AI models."
11
+ documentation: str = "https://python.langchain.com/docs/integrations/text_embedding/cloudflare_workersai/"
12
+ icon = "Cloudflare"
13
+ name = "CloudflareWorkersAIEmbeddings"
14
+
15
+ inputs = [
16
+ MessageTextInput(
17
+ name="account_id",
18
+ display_name="Cloudflare account ID",
19
+ info="Find your account ID https://developers.cloudflare.com/fundamentals/setup/find-account-and-zone-ids/#find-account-id-workers-and-pages",
20
+ required=True,
21
+ ),
22
+ SecretStrInput(
23
+ name="api_token",
24
+ display_name="Cloudflare API token",
25
+ info="Create an API token https://developers.cloudflare.com/fundamentals/api/get-started/create-token/",
26
+ required=True,
27
+ ),
28
+ MessageTextInput(
29
+ name="model_name",
30
+ display_name="Model Name",
31
+ info="List of supported models https://developers.cloudflare.com/workers-ai/models/#text-embeddings",
32
+ required=True,
33
+ value="@cf/baai/bge-base-en-v1.5",
34
+ ),
35
+ BoolInput(
36
+ name="strip_new_lines",
37
+ display_name="Strip New Lines",
38
+ advanced=True,
39
+ value=True,
40
+ ),
41
+ IntInput(
42
+ name="batch_size",
43
+ display_name="Batch Size",
44
+ advanced=True,
45
+ value=50,
46
+ ),
47
+ MessageTextInput(
48
+ name="api_base_url",
49
+ display_name="Cloudflare API base URL",
50
+ advanced=True,
51
+ value="https://api.cloudflare.com/client/v4/accounts",
52
+ ),
53
+ DictInput(
54
+ name="headers",
55
+ display_name="Headers",
56
+ info="Additional request headers",
57
+ is_list=True,
58
+ advanced=True,
59
+ ),
60
+ ]
61
+
62
+ outputs = [
63
+ Output(display_name="Embeddings", name="embeddings", method="build_embeddings"),
64
+ ]
65
+
66
+ def build_embeddings(self) -> Embeddings:
67
+ try:
68
+ embeddings = CloudflareWorkersAIEmbeddings(
69
+ account_id=self.account_id,
70
+ api_base_url=self.api_base_url,
71
+ api_token=self.api_token,
72
+ batch_size=self.batch_size,
73
+ headers=self.headers,
74
+ model_name=self.model_name,
75
+ strip_new_lines=self.strip_new_lines,
76
+ )
77
+ except Exception as e:
78
+ msg = f"Could not connect to CloudflareWorkersAIEmbeddings API: {e!s}"
79
+ raise ValueError(msg) from e
80
+
81
+ return embeddings