langflow-base-nightly 0.5.0.dev37__py3-none-any.whl → 0.5.0.dev38__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.
- langflow/__main__.py +1 -1
- langflow/alembic/versions/4e5980a44eaa_fix_date_times_again.py +24 -30
- langflow/alembic/versions/58b28437a398_modify_nullable.py +6 -6
- langflow/alembic/versions/79e675cb6752_change_datetime_type.py +24 -30
- langflow/alembic/versions/b2fa308044b5_add_unique_constraints.py +12 -13
- langflow/api/build.py +21 -26
- langflow/api/health_check_router.py +3 -3
- langflow/api/utils.py +3 -3
- langflow/api/v1/callback.py +2 -2
- langflow/api/v1/chat.py +19 -31
- langflow/api/v1/endpoints.py +10 -10
- langflow/api/v1/flows.py +1 -1
- langflow/api/v1/knowledge_bases.py +3 -3
- langflow/api/v1/mcp.py +12 -12
- langflow/api/v1/mcp_projects.py +45 -81
- langflow/api/v1/mcp_utils.py +8 -8
- langflow/api/v1/schemas.py +1 -5
- langflow/api/v1/store.py +1 -1
- langflow/api/v1/validate.py +2 -2
- langflow/api/v1/voice_mode.py +58 -62
- langflow/api/v2/files.py +2 -2
- langflow/api/v2/mcp.py +10 -9
- langflow/base/composio/composio_base.py +21 -2
- langflow/base/data/docling_utils.py +194 -0
- langflow/base/embeddings/aiml_embeddings.py +1 -1
- langflow/base/flow_processing/utils.py +1 -2
- langflow/base/io/__init__.py +0 -1
- langflow/base/langwatch/utils.py +2 -1
- langflow/base/mcp/util.py +49 -47
- langflow/base/prompts/api_utils.py +1 -1
- langflow/base/tools/flow_tool.py +2 -2
- langflow/base/tools/run_flow.py +2 -6
- langflow/components/Notion/add_content_to_page.py +2 -2
- langflow/components/Notion/list_database_properties.py +2 -2
- langflow/components/Notion/list_pages.py +2 -2
- langflow/components/Notion/page_content_viewer.py +2 -2
- langflow/components/Notion/update_page_property.py +1 -1
- langflow/components/agentql/agentql_api.py +2 -10
- langflow/components/agents/agent.py +3 -3
- langflow/components/agents/mcp_component.py +14 -14
- langflow/components/anthropic/anthropic.py +5 -4
- langflow/components/assemblyai/assemblyai_get_subtitles.py +2 -2
- langflow/components/assemblyai/assemblyai_lemur.py +2 -2
- langflow/components/assemblyai/assemblyai_list_transcripts.py +2 -2
- langflow/components/assemblyai/assemblyai_poll_transcript.py +2 -2
- langflow/components/assemblyai/assemblyai_start_transcript.py +2 -2
- langflow/components/data/file.py +575 -55
- langflow/components/data/url.py +1 -1
- langflow/components/datastax/astra_assistant_manager.py +3 -3
- langflow/components/datastax/create_assistant.py +1 -2
- langflow/components/deactivated/merge_data.py +1 -2
- langflow/components/deactivated/sub_flow.py +6 -7
- langflow/components/deactivated/vectara_self_query.py +3 -3
- langflow/components/docling/__init__.py +0 -198
- langflow/components/docling/docling_inline.py +1 -1
- langflow/components/embeddings/text_embedder.py +3 -3
- langflow/components/firecrawl/firecrawl_extract_api.py +2 -9
- langflow/components/google/gmail.py +1 -1
- langflow/components/google/google_generative_ai.py +5 -11
- langflow/components/groq/groq.py +4 -3
- langflow/components/helpers/current_date.py +2 -3
- langflow/components/helpers/memory.py +1 -1
- langflow/components/ibm/watsonx.py +1 -1
- langflow/components/ibm/watsonx_embeddings.py +1 -1
- langflow/components/langwatch/langwatch.py +3 -3
- langflow/components/logic/flow_tool.py +2 -2
- langflow/components/logic/notify.py +1 -1
- langflow/components/logic/run_flow.py +2 -3
- langflow/components/logic/sub_flow.py +4 -5
- langflow/components/mem0/mem0_chat_memory.py +2 -8
- langflow/components/nvidia/nvidia.py +3 -3
- langflow/components/olivya/olivya.py +7 -7
- langflow/components/ollama/ollama.py +8 -6
- langflow/components/processing/batch_run.py +8 -8
- langflow/components/processing/data_operations.py +2 -2
- langflow/components/processing/merge_data.py +1 -2
- langflow/components/processing/message_to_data.py +2 -3
- langflow/components/processing/parse_json_data.py +1 -1
- langflow/components/prototypes/python_function.py +2 -3
- langflow/components/serpapi/serp.py +1 -1
- langflow/components/tavily/tavily_extract.py +1 -1
- langflow/components/tavily/tavily_search.py +1 -1
- langflow/components/tools/calculator.py +2 -2
- langflow/components/tools/python_code_structured_tool.py +3 -10
- langflow/components/tools/python_repl.py +2 -2
- langflow/components/tools/searxng.py +3 -3
- langflow/components/tools/serp_api.py +2 -2
- langflow/components/tools/tavily_search_tool.py +2 -2
- langflow/components/tools/yahoo_finance.py +1 -1
- langflow/components/twelvelabs/video_embeddings.py +4 -4
- langflow/components/vectorstores/local_db.py +1 -1
- langflow/components/yahoosearch/yahoo.py +1 -1
- langflow/components/youtube/trending.py +3 -4
- langflow/custom/attributes.py +2 -1
- langflow/custom/code_parser/code_parser.py +1 -1
- langflow/custom/custom_component/base_component.py +1 -1
- langflow/custom/custom_component/component.py +16 -2
- langflow/custom/directory_reader/directory_reader.py +7 -7
- langflow/custom/directory_reader/utils.py +1 -2
- langflow/custom/utils.py +30 -30
- langflow/events/event_manager.py +1 -1
- langflow/frontend/assets/{SlackIcon-CnvyOamQ.js → SlackIcon-BhW6H3JR.js} +1 -1
- langflow/frontend/assets/{Wikipedia-nyTEXdr2.js → Wikipedia-Dx5jbiy3.js} +1 -1
- langflow/frontend/assets/{Wolfram-BYMQkNSq.js → Wolfram-CIyonzwo.js} +1 -1
- langflow/frontend/assets/{index-HK3bVMYA.js → index-0XQqYgdG.js} +1 -1
- langflow/frontend/assets/{index-BZgXW854.js → index-1Q3VBqKn.js} +1 -1
- langflow/frontend/assets/{index-BQ6NUdMY.js → index-35sspuLu.js} +1 -1
- langflow/frontend/assets/{index-DPCzHdsC.js → index-7hzXChQz.js} +1 -1
- langflow/frontend/assets/{index-CFDvOtKC.js → index-8cuhogZP.js} +1 -1
- langflow/frontend/assets/{index-CYDAYm-i.js → index-B0m53xKd.js} +1 -1
- langflow/frontend/assets/{index-Q9vDw0Xl.js → index-B1XqWJhG.js} +1 -1
- langflow/frontend/assets/{index-Gkrq-vzm.js → index-B3KCdQ91.js} +1 -1
- langflow/frontend/assets/{index-DytJENYD.js → index-B7uEuOPK.js} +1 -1
- langflow/frontend/assets/{index-DkXy1WFo.js → index-B8UR8v-Q.js} +1 -1
- langflow/frontend/assets/{index-BChjg6Az.js → index-BD7Io1hL.js} +6 -6
- langflow/frontend/assets/{index-CyPvTB63.js → index-BDQrd7Tj.js} +1 -1
- langflow/frontend/assets/{index-BbJjt5m4.js → index-BDuk0d7P.js} +1 -1
- langflow/frontend/assets/{index-BBxAPk1y.js → index-BFQ8KFK0.js} +1 -1
- langflow/frontend/assets/{index-BqPpO6KG.js → index-BFf0HTFI.js} +1 -1
- langflow/frontend/assets/{index-yCHsaqs8.js → index-BHhnpSkW.js} +1 -1
- langflow/frontend/assets/{index-Bd6WtbKA.js → index-BKKrUElc.js} +1 -1
- langflow/frontend/assets/{index-DHq8TQPB.js → index-BKeZt2hQ.js} +1 -1
- langflow/frontend/assets/{index-BCCGvqay.js → index-BKlQbl-6.js} +1 -1
- langflow/frontend/assets/{index-Boso-xEw.js → index-BLYw9MK2.js} +1 -1
- langflow/frontend/assets/{index-DmMDPoi0.js → index-BLsVo9iW.js} +1 -1
- langflow/frontend/assets/{index-Car-zdor.js → index-BNQIbda3.js} +1 -1
- langflow/frontend/assets/{index-Dg-63Si_.js → index-BPR2mEFC.js} +1 -1
- langflow/frontend/assets/{index-CTrt1Q_j.js → index-BPfdqCc_.js} +1 -1
- langflow/frontend/assets/{index-CVQmT7ZL.js → index-BQrVDjR1.js} +1 -1
- langflow/frontend/assets/{index-BB15_iOb.js → index-BRmSeoWR.js} +1 -1
- langflow/frontend/assets/{index-BX5D-USa.js → index-BUse-kxM.js} +1 -1
- langflow/frontend/assets/{index-CaQ_H9ww.js → index-BVFaF7HW.js} +1 -1
- langflow/frontend/assets/{index-C26RqKWL.js → index-BWgIWfv2.js} +1 -1
- langflow/frontend/assets/{index-DbMFlnHE.js → index-BWt5xGeA.js} +1 -1
- langflow/frontend/assets/{index-Db71w3lq.js → index-BYhcGLTV.js} +1 -1
- langflow/frontend/assets/{index-DzW2mfkK.js → index-BYjw7Gk3.js} +1 -1
- langflow/frontend/assets/{index-DJB12jIC.js → index-BZFljdMa.js} +1 -1
- langflow/frontend/assets/{index-nVwHLjuV.js → index-BcAgItH4.js} +1 -1
- langflow/frontend/assets/{index-DkelbYy7.js → index-Bct1s6__.js} +1 -1
- langflow/frontend/assets/{index-ChXJpBz4.js → index-Bhv79Zso.js} +1 -1
- langflow/frontend/assets/{index-BxEuHa76.js → index-Bj3lSwvZ.js} +1 -1
- langflow/frontend/assets/{index-BkPYpfgw.js → index-Bk4mTwnI.js} +1 -1
- langflow/frontend/assets/{index-BvT7L317.js → index-BmIx1cws.js} +1 -1
- langflow/frontend/assets/{index-DIDDfmlJ.js → index-BmYJJ5YS.js} +1 -1
- langflow/frontend/assets/{index-C7QWbnLK.js → index-BnAFhkSN.js} +1 -1
- langflow/frontend/assets/{index-CJo_cyWW.js → index-Bo-ww0Bb.js} +1 -1
- langflow/frontend/assets/{index-DjQETUy8.js → index-BpmqDOeZ.js} +1 -1
- langflow/frontend/assets/{index-ya2uXE8v.js → index-BrVhdPZb.js} +1 -1
- langflow/frontend/assets/{index-DCRk27Tp.js → index-BvGQfVBD.js} +1 -1
- langflow/frontend/assets/{index-BTrsh9LS.js → index-Bwi4flFg.js} +1 -1
- langflow/frontend/assets/{index-BRxvproo.js → index-BzoRPtTY.js} +1 -1
- langflow/frontend/assets/{index-BIQQCMvz.js → index-C--IDAyc.js} +1 -1
- langflow/frontend/assets/{index-DfngcQxO.js → index-C0E3_MIK.js} +1 -1
- langflow/frontend/assets/{index-Bvxg4_ux.js → index-C27Jj_26.js} +1 -1
- langflow/frontend/assets/{index-D8lOi1GI.js → index-C2eQmQsn.js} +1 -1
- langflow/frontend/assets/{index-rXV1G1aB.js → index-C8K0r39B.js} +1 -1
- langflow/frontend/assets/{index-B3Sur4Z3.js → index-CEJNWPhA.js} +1 -1
- langflow/frontend/assets/{index-BR0bkVqX.js → index-CFNTYfFK.js} +1 -1
- langflow/frontend/assets/{index-Bnqod3vk.js → index-CMHpjHZl.js} +1 -1
- langflow/frontend/assets/{index-BLGYN-9b.js → index-CSu8KHOi.js} +1 -1
- langflow/frontend/assets/{index-BOB_zsjl.js → index-CUKmGsI6.js} +1 -1
- langflow/frontend/assets/{index-BzEUlaw_.js → index-CWYiSeWV.js} +1 -1
- langflow/frontend/assets/{index-DVlceYFD.js → index-CY7_TBTC.js} +1 -1
- langflow/frontend/assets/{index-D3DDfngy.js → index-CbnWRlYY.js} +1 -1
- langflow/frontend/assets/{index-cvZdgWHQ.js → index-CfPBgkqg.js} +1 -1
- langflow/frontend/assets/{index-Ui4xUImO.js → index-Cg53lrYh.js} +1 -1
- langflow/frontend/assets/{index-C6jri9Wm.js → index-CgU7KF4I.js} +1 -1
- langflow/frontend/assets/{index-BVEZDXxS.js → index-CgwykVGh.js} +1 -1
- langflow/frontend/assets/{index-BOeo01QB.js → index-Ch5r0oW6.js} +1 -1
- langflow/frontend/assets/{index-D6PSjHxP.js → index-CjsommIr.js} +1 -1
- langflow/frontend/assets/{index-pCQ_yw8m.js → index-CkK25zZO.js} +1 -1
- langflow/frontend/assets/{index-BFp_O-c9.js → index-CkjwSTSM.js} +1 -1
- langflow/frontend/assets/{index-Du_18NCU.js → index-CmSFKgiD.js} +1 -1
- langflow/frontend/assets/{index-BvwZfF2i.js → index-Cr5v2ave.js} +1 -1
- langflow/frontend/assets/{index-FUxmznS-.js → index-CrAF-31Y.js} +1 -1
- langflow/frontend/assets/{index-C-2hghRJ.js → index-CsLQiWNf.js} +1 -1
- langflow/frontend/assets/{index-C_TdzfAn.js → index-CuCM7Wu7.js} +1 -1
- langflow/frontend/assets/{index-D5_DsUJc.js → index-Cxy9sEpy.js} +1 -1
- langflow/frontend/assets/{index-C_veJlEb.js → index-CyP3py8K.js} +1 -1
- langflow/frontend/assets/{index-OazXJdEl.js → index-CzHzeZuA.js} +1 -1
- langflow/frontend/assets/{index-CvcEzq4x.js → index-D1oynC8a.js} +1 -1
- langflow/frontend/assets/{index-CZQ9rXNa.js → index-D4tjMhfY.js} +1 -1
- langflow/frontend/assets/{index-B1YN7oMV.js → index-D6CSIrp1.js} +1 -1
- langflow/frontend/assets/{index-DfxYyS3M.js → index-D9kwEzPB.js} +1 -1
- langflow/frontend/assets/{index-BbRm7beF.js → index-DDXsm8tz.js} +1 -1
- langflow/frontend/assets/{index-xuIrH2Dq.js → index-DDhJVVel.js} +1 -1
- langflow/frontend/assets/{index-CmplyEaa.js → index-DH6o91_s.js} +1 -1
- langflow/frontend/assets/{index-DnEGCgih.js → index-DHngW1k8.js} +1 -1
- langflow/frontend/assets/{index-ajRge-Mg.js → index-DIKUsGLF.js} +1 -1
- langflow/frontend/assets/{index-DpClkXIV.js → index-DJESSNJi.js} +1 -1
- langflow/frontend/assets/{index-8WdfSTTz.js → index-DMCWDJOl.js} +1 -1
- langflow/frontend/assets/{index-DZTC5pdT.js → index-DOEvKC2X.js} +1 -1
- langflow/frontend/assets/{index-DysKpOuj.js → index-DOQDkSoK.js} +1 -1
- langflow/frontend/assets/{index-C82JjCPD.js → index-DXAfIEvs.js} +1 -1
- langflow/frontend/assets/{index-D8GJngXa.js → index-DZP_SaHb.js} +1 -1
- langflow/frontend/assets/{index-DIkNW9Cd.js → index-DZxUIhWh.js} +1 -1
- langflow/frontend/assets/{index-DK1Ptcc4.js → index-Dda2u_yz.js} +1 -1
- langflow/frontend/assets/{index-BWmPX4iQ.js → index-Dg8N3NSO.js} +1 -1
- langflow/frontend/assets/{index-CWdkbVsd.js → index-DkGhPNeA.js} +1 -1
- langflow/frontend/assets/{index-DF5VwgU6.js → index-Dka_Rk4-.js} +1 -1
- langflow/frontend/assets/{index-Bsa0xZyL.js → index-DljpLeCW.js} +1 -1
- langflow/frontend/assets/{index-CLPdN-q6.js → index-DnVYJtVO.js} +1 -1
- langflow/frontend/assets/{index-CxvP91st.js → index-DqbzUcI5.js} +1 -1
- langflow/frontend/assets/{index-BIzTEqFh.js → index-Dr6pVDPI.js} +1 -1
- langflow/frontend/assets/{index-tVYiABdp.js → index-DsoX2o1S.js} +1 -1
- langflow/frontend/assets/{index-CCePCqkT.js → index-DwfHWnX7.js} +1 -1
- langflow/frontend/assets/{index-BEMw2Np8.js → index-Dx-Z87KT.js} +1 -1
- langflow/frontend/assets/{index-BRYjyhAd.js → index-DyqITq51.js} +1 -1
- langflow/frontend/assets/{index-l7bzB8Ex.js → index-DzIv3RyR.js} +1 -1
- langflow/frontend/assets/{index-D-9TI74R.js → index-G4ro0MjT.js} +1 -1
- langflow/frontend/assets/{index-CCxGSSTT.js → index-H7J7w7fa.js} +1 -1
- langflow/frontend/assets/{index-_UcqeEjm.js → index-KWY77KfV.js} +1 -1
- langflow/frontend/assets/{index-Dqd4RjYA.js → index-U9GWm1eH.js} +1 -1
- langflow/frontend/assets/{index-Dq5ilsem.js → index-Un9pWxnP.js} +1 -1
- langflow/frontend/assets/{index-BzL_EoKd.js → index-Xi4TplbI.js} +1 -1
- langflow/frontend/assets/{index-LbYjHKkn.js → index-_cbGmjF4.js} +1 -1
- langflow/frontend/assets/{index-DGRMNe9n.js → index-cEXY6V06.js} +1 -1
- langflow/frontend/assets/{index-8yMsjVV2.js → index-dyXKnkMi.js} +1 -1
- langflow/frontend/assets/{index-DKHNourL.js → index-eUkS6iJM.js} +1 -1
- langflow/frontend/assets/{index-Bv8h2Z-q.js → index-ekfMOqrF.js} +1 -1
- langflow/frontend/assets/{index-B748uLP1.js → index-gdb7XMS8.js} +1 -1
- langflow/frontend/assets/{index-CpvYQ0ug.js → index-hZUcL0MZ.js} +1 -1
- langflow/frontend/assets/{index-BIXaW2aY.js → index-kkA-qHB_.js} +1 -1
- langflow/frontend/assets/{index-BhIOhlCH.js → index-mzl9ULw5.js} +1 -1
- langflow/frontend/assets/{index-CYe8Ipef.js → index-oxHBZk2v.js} +1 -1
- langflow/frontend/assets/{index-WPFivmdQ.js → index-p2kStSPe.js} +1 -1
- langflow/frontend/assets/{index-BmX5CoED.js → index-paQEWYGT.js} +1 -1
- langflow/frontend/assets/{index-CpcbQZIF.js → index-r_8gs4nL.js} +1 -1
- langflow/frontend/assets/{index-dcnYpT9N.js → index-uiKla4UR.js} +1 -1
- langflow/frontend/assets/{index-BTEW9e8P.js → index-vJOO5U8M.js} +1 -1
- langflow/frontend/assets/{index-CQMoqLAu.js → index-w72fDjpG.js} +1 -1
- langflow/frontend/assets/{index-Dsps-jKu.js → index-zV82kQ6k.js} +1 -1
- langflow/frontend/assets/lazyIconImports-DTNgvPE-.js +2 -0
- langflow/frontend/assets/{use-post-add-user-BrBYH9eR.js → use-post-add-user-CvtuazTg.js} +1 -1
- langflow/frontend/index.html +1 -1
- langflow/graph/edge/base.py +2 -3
- langflow/graph/graph/base.py +14 -12
- langflow/graph/graph/constants.py +3 -0
- langflow/graph/utils.py +6 -6
- langflow/graph/vertex/base.py +4 -5
- langflow/graph/vertex/param_handler.py +1 -1
- langflow/graph/vertex/vertex_types.py +2 -2
- langflow/helpers/flow.py +1 -1
- langflow/initial_setup/setup.py +32 -30
- langflow/initial_setup/starter_projects/Blog Writer.json +2 -2
- langflow/initial_setup/starter_projects/Custom Component Generator.json +2 -2
- langflow/initial_setup/starter_projects/Document Q&A.json +1 -1
- langflow/initial_setup/starter_projects/Instagram Copywriter.json +3 -3
- langflow/initial_setup/starter_projects/Invoice Summarizer.json +1 -1
- langflow/initial_setup/starter_projects/Knowledge Ingestion.json +2 -2
- langflow/initial_setup/starter_projects/Market Research.json +3 -3
- langflow/initial_setup/starter_projects/Meeting Summary.json +6 -6
- langflow/initial_setup/starter_projects/Memory Chatbot.json +2 -2
- langflow/initial_setup/starter_projects/News Aggregator.json +3 -3
- langflow/initial_setup/starter_projects/Nvidia Remix.json +3 -3
- langflow/initial_setup/starter_projects/Pok/303/251dex Agent.json" +1 -1
- langflow/initial_setup/starter_projects/Portfolio Website Code Generator.json +1 -1
- langflow/initial_setup/starter_projects/Price Deal Finder.json +5 -5
- langflow/initial_setup/starter_projects/Research Agent.json +3 -3
- langflow/initial_setup/starter_projects/SaaS Pricing.json +1 -1
- langflow/initial_setup/starter_projects/Search agent.json +1 -1
- langflow/initial_setup/starter_projects/Sequential Tasks Agents.json +7 -7
- langflow/initial_setup/starter_projects/Simple Agent.json +3 -3
- langflow/initial_setup/starter_projects/Social Media Agent.json +1 -1
- langflow/initial_setup/starter_projects/Text Sentiment Analysis.json +1 -1
- langflow/initial_setup/starter_projects/Travel Planning Agents.json +3 -3
- langflow/initial_setup/starter_projects/Vector Store RAG.json +1 -1
- langflow/initial_setup/starter_projects/Youtube Analysis.json +3 -3
- langflow/interface/components.py +23 -22
- langflow/interface/initialize/loading.py +5 -5
- langflow/interface/run.py +1 -1
- langflow/interface/utils.py +1 -1
- langflow/io/__init__.py +0 -1
- langflow/langflow_launcher.py +1 -1
- langflow/load/load.py +2 -7
- langflow/logging/__init__.py +0 -1
- langflow/logging/logger.py +191 -115
- langflow/logging/setup.py +1 -1
- langflow/main.py +37 -52
- langflow/memory.py +7 -7
- langflow/middleware.py +1 -1
- langflow/processing/process.py +3 -3
- langflow/schema/artifact.py +2 -2
- langflow/schema/data.py +10 -2
- langflow/schema/dataframe.py +1 -1
- langflow/schema/message.py +1 -1
- langflow/serialization/serialization.py +1 -1
- langflow/services/auth/utils.py +2 -2
- langflow/services/cache/disk.py +1 -1
- langflow/services/cache/service.py +3 -3
- langflow/services/database/models/flow/model.py +2 -7
- langflow/services/database/models/transactions/crud.py +2 -2
- langflow/services/database/models/user/crud.py +2 -2
- langflow/services/database/service.py +8 -8
- langflow/services/database/utils.py +6 -5
- langflow/services/deps.py +2 -3
- langflow/services/factory.py +1 -1
- langflow/services/flow/flow_runner.py +7 -12
- langflow/services/job_queue/service.py +16 -15
- langflow/services/manager.py +3 -4
- langflow/services/settings/auth.py +1 -1
- langflow/services/settings/base.py +3 -8
- langflow/services/settings/manager.py +1 -1
- langflow/services/settings/utils.py +1 -1
- langflow/services/socket/__init__.py +0 -1
- langflow/services/socket/service.py +3 -3
- langflow/services/socket/utils.py +4 -4
- langflow/services/state/service.py +1 -2
- langflow/services/storage/factory.py +1 -1
- langflow/services/storage/local.py +9 -8
- langflow/services/storage/s3.py +11 -10
- langflow/services/store/service.py +3 -3
- langflow/services/store/utils.py +3 -2
- langflow/services/task/temp_flow_cleanup.py +7 -7
- langflow/services/telemetry/service.py +10 -10
- langflow/services/tracing/arize_phoenix.py +2 -2
- langflow/services/tracing/langfuse.py +1 -1
- langflow/services/tracing/langsmith.py +1 -1
- langflow/services/tracing/langwatch.py +1 -1
- langflow/services/tracing/opik.py +1 -1
- langflow/services/tracing/service.py +25 -6
- langflow/services/tracing/traceloop.py +245 -0
- langflow/services/utils.py +7 -7
- langflow/services/variable/kubernetes.py +3 -3
- langflow/services/variable/kubernetes_secrets.py +2 -1
- langflow/services/variable/service.py +5 -5
- langflow/utils/component_utils.py +9 -6
- langflow/utils/util.py +5 -5
- langflow/utils/validate.py +3 -3
- langflow/utils/voice_utils.py +2 -2
- {langflow_base_nightly-0.5.0.dev37.dist-info → langflow_base_nightly-0.5.0.dev38.dist-info}/METADATA +2 -1
- {langflow_base_nightly-0.5.0.dev37.dist-info → langflow_base_nightly-0.5.0.dev38.dist-info}/RECORD +334 -333
- langflow/frontend/assets/lazyIconImports-t6wEndt1.js +0 -2
- {langflow_base_nightly-0.5.0.dev37.dist-info → langflow_base_nightly-0.5.0.dev38.dist-info}/WHEEL +0 -0
- {langflow_base_nightly-0.5.0.dev37.dist-info → langflow_base_nightly-0.5.0.dev38.dist-info}/entry_points.txt +0 -0
|
@@ -1,17 +1,11 @@
|
|
|
1
1
|
import os
|
|
2
2
|
|
|
3
|
-
from loguru import logger
|
|
4
3
|
from mem0 import Memory, MemoryClient
|
|
5
4
|
|
|
6
5
|
from langflow.base.memory.model import LCChatMemoryComponent
|
|
7
|
-
from langflow.inputs.inputs import
|
|
8
|
-
DictInput,
|
|
9
|
-
HandleInput,
|
|
10
|
-
MessageTextInput,
|
|
11
|
-
NestedDictInput,
|
|
12
|
-
SecretStrInput,
|
|
13
|
-
)
|
|
6
|
+
from langflow.inputs.inputs import DictInput, HandleInput, MessageTextInput, NestedDictInput, SecretStrInput
|
|
14
7
|
from langflow.io import Output
|
|
8
|
+
from langflow.logging.logger import logger
|
|
15
9
|
from langflow.schema.data import Data
|
|
16
10
|
|
|
17
11
|
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
from typing import Any
|
|
2
2
|
|
|
3
|
-
from loguru import logger
|
|
4
3
|
from requests.exceptions import ConnectionError # noqa: A004
|
|
5
4
|
from urllib3.exceptions import MaxRetryError, NameResolutionError
|
|
6
5
|
|
|
@@ -8,6 +7,7 @@ from langflow.base.models.model import LCModelComponent
|
|
|
8
7
|
from langflow.field_typing import LanguageModel
|
|
9
8
|
from langflow.field_typing.range_spec import RangeSpec
|
|
10
9
|
from langflow.inputs.inputs import BoolInput, DropdownInput, IntInput, MessageTextInput, SecretStrInput, SliderInput
|
|
10
|
+
from langflow.logging.logger import logger
|
|
11
11
|
from langflow.schema.dotdict import dotdict
|
|
12
12
|
|
|
13
13
|
|
|
@@ -97,7 +97,7 @@ class NVIDIAModelComponent(LCModelComponent):
|
|
|
97
97
|
),
|
|
98
98
|
]
|
|
99
99
|
|
|
100
|
-
def get_models(self, tool_model_enabled: bool | None = None) -> list[str]:
|
|
100
|
+
def get_models(self, *, tool_model_enabled: bool | None = None) -> list[str]:
|
|
101
101
|
try:
|
|
102
102
|
from langchain_nvidia_ai_endpoints import ChatNVIDIA
|
|
103
103
|
except ImportError as e:
|
|
@@ -114,7 +114,7 @@ class NVIDIAModelComponent(LCModelComponent):
|
|
|
114
114
|
def update_build_config(self, build_config: dotdict, _field_value: Any, field_name: str | None = None):
|
|
115
115
|
if field_name in {"model_name", "tool_model_enabled", "base_url", "api_key"}:
|
|
116
116
|
try:
|
|
117
|
-
ids = self.get_models(self.tool_model_enabled)
|
|
117
|
+
ids = self.get_models(tool_model_enabled=self.tool_model_enabled)
|
|
118
118
|
build_config["model_name"]["options"] = ids
|
|
119
119
|
|
|
120
120
|
if "value" not in build_config["model_name"] or build_config["model_name"]["value"] is None:
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import json
|
|
2
2
|
|
|
3
3
|
import httpx
|
|
4
|
-
from loguru import logger
|
|
5
4
|
|
|
6
5
|
from langflow.custom.custom_component.component import Component
|
|
7
6
|
from langflow.io import MessageTextInput, Output
|
|
7
|
+
from langflow.logging.logger import logger
|
|
8
8
|
from langflow.schema.data import Data
|
|
9
9
|
|
|
10
10
|
|
|
@@ -83,7 +83,7 @@ class OlivyaComponent(Component):
|
|
|
83
83
|
"Content-Type": "application/json",
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
logger.
|
|
86
|
+
await logger.ainfo("Sending POST request with payload: %s", payload)
|
|
87
87
|
|
|
88
88
|
# Send the POST request with a timeout
|
|
89
89
|
async with httpx.AsyncClient() as client:
|
|
@@ -97,19 +97,19 @@ class OlivyaComponent(Component):
|
|
|
97
97
|
|
|
98
98
|
# Parse and return the successful response
|
|
99
99
|
response_data = response.json()
|
|
100
|
-
logger.
|
|
100
|
+
await logger.ainfo("Request successful: %s", response_data)
|
|
101
101
|
|
|
102
102
|
except httpx.HTTPStatusError as http_err:
|
|
103
|
-
logger.
|
|
103
|
+
await logger.aexception("HTTP error occurred")
|
|
104
104
|
response_data = {"error": f"HTTP error occurred: {http_err}", "response_text": response.text}
|
|
105
105
|
except httpx.RequestError as req_err:
|
|
106
|
-
logger.
|
|
106
|
+
await logger.aexception("Request failed")
|
|
107
107
|
response_data = {"error": f"Request failed: {req_err}"}
|
|
108
108
|
except json.JSONDecodeError as json_err:
|
|
109
|
-
logger.
|
|
109
|
+
await logger.aexception("Response parsing failed")
|
|
110
110
|
response_data = {"error": f"Response parsing failed: {json_err}", "raw_response": response.text}
|
|
111
111
|
except Exception as e: # noqa: BLE001
|
|
112
|
-
logger.
|
|
112
|
+
await logger.aexception("An unexpected error occurred")
|
|
113
113
|
response_data = {"error": f"An unexpected error occurred: {e!s}"}
|
|
114
114
|
|
|
115
115
|
# Return the response as part of the output
|
|
@@ -245,11 +245,13 @@ class ChatOllamaComponent(LCModelComponent):
|
|
|
245
245
|
if field_name in {"model_name", "base_url", "tool_model_enabled"}:
|
|
246
246
|
if await self.is_valid_ollama_url(self.base_url):
|
|
247
247
|
tool_model_enabled = build_config["tool_model_enabled"].get("value", False) or self.tool_model_enabled
|
|
248
|
-
build_config["model_name"]["options"] = await self.get_models(
|
|
248
|
+
build_config["model_name"]["options"] = await self.get_models(
|
|
249
|
+
self.base_url, tool_model_enabled=tool_model_enabled
|
|
250
|
+
)
|
|
249
251
|
elif await self.is_valid_ollama_url(build_config["base_url"].get("value", "")):
|
|
250
252
|
tool_model_enabled = build_config["tool_model_enabled"].get("value", False) or self.tool_model_enabled
|
|
251
253
|
build_config["model_name"]["options"] = await self.get_models(
|
|
252
|
-
build_config["base_url"].get("value", ""), tool_model_enabled
|
|
254
|
+
build_config["base_url"].get("value", ""), tool_model_enabled=tool_model_enabled
|
|
253
255
|
)
|
|
254
256
|
else:
|
|
255
257
|
build_config["model_name"]["options"] = []
|
|
@@ -265,7 +267,7 @@ class ChatOllamaComponent(LCModelComponent):
|
|
|
265
267
|
|
|
266
268
|
return build_config
|
|
267
269
|
|
|
268
|
-
async def get_models(self, base_url_value: str, tool_model_enabled: bool | None = None) -> list[str]:
|
|
270
|
+
async def get_models(self, base_url_value: str, *, tool_model_enabled: bool | None = None) -> list[str]:
|
|
269
271
|
"""Fetches a list of models from the Ollama API that do not have the "embedding" capability.
|
|
270
272
|
|
|
271
273
|
Args:
|
|
@@ -298,13 +300,13 @@ class ChatOllamaComponent(LCModelComponent):
|
|
|
298
300
|
models = tags_response.json()
|
|
299
301
|
if asyncio.iscoroutine(models):
|
|
300
302
|
models = await models
|
|
301
|
-
logger.
|
|
303
|
+
await logger.adebug(f"Available models: {models}")
|
|
302
304
|
|
|
303
305
|
# Filter models that are NOT embedding models
|
|
304
306
|
model_ids = []
|
|
305
307
|
for model in models[self.JSON_MODELS_KEY]:
|
|
306
308
|
model_name = model[self.JSON_NAME_KEY]
|
|
307
|
-
logger.
|
|
309
|
+
await logger.adebug(f"Checking model: {model_name}")
|
|
308
310
|
|
|
309
311
|
payload = {"model": model_name}
|
|
310
312
|
show_response = await client.post(show_url, json=payload)
|
|
@@ -313,7 +315,7 @@ class ChatOllamaComponent(LCModelComponent):
|
|
|
313
315
|
if asyncio.iscoroutine(json_data):
|
|
314
316
|
json_data = await json_data
|
|
315
317
|
capabilities = json_data.get(self.JSON_CAPABILITIES_KEY, [])
|
|
316
|
-
logger.
|
|
318
|
+
await logger.adebug(f"Model: {model_name}, Capabilities: {capabilities}")
|
|
317
319
|
|
|
318
320
|
if self.DESIRED_CAPABILITY in capabilities and (
|
|
319
321
|
not tool_model_enabled or self.TOOL_CALLING_CAPABILITY in capabilities
|
|
@@ -3,10 +3,10 @@ from __future__ import annotations
|
|
|
3
3
|
from typing import TYPE_CHECKING, Any, cast
|
|
4
4
|
|
|
5
5
|
import toml # type: ignore[import-untyped]
|
|
6
|
-
from loguru import logger
|
|
7
6
|
|
|
8
7
|
from langflow.custom.custom_component.component import Component
|
|
9
8
|
from langflow.io import BoolInput, DataFrameInput, HandleInput, MessageTextInput, MultilineInput, Output
|
|
9
|
+
from langflow.logging.logger import logger
|
|
10
10
|
from langflow.schema.dataframe import DataFrame
|
|
11
11
|
|
|
12
12
|
if TYPE_CHECKING:
|
|
@@ -144,11 +144,11 @@ class BatchRunComponent(Component):
|
|
|
144
144
|
user_texts = df[col_name].astype(str).tolist()
|
|
145
145
|
else:
|
|
146
146
|
user_texts = [
|
|
147
|
-
self._format_row_as_toml(cast(dict[str, Any], row)) for row in df.to_dict(orient="records")
|
|
147
|
+
self._format_row_as_toml(cast("dict[str, Any]", row)) for row in df.to_dict(orient="records")
|
|
148
148
|
]
|
|
149
149
|
|
|
150
150
|
total_rows = len(user_texts)
|
|
151
|
-
logger.
|
|
151
|
+
await logger.ainfo(f"Processing {total_rows} rows with batch run")
|
|
152
152
|
|
|
153
153
|
# Prepare the batch of conversations
|
|
154
154
|
conversations = [
|
|
@@ -185,21 +185,21 @@ class BatchRunComponent(Component):
|
|
|
185
185
|
):
|
|
186
186
|
response_text = response[1].content if hasattr(response[1], "content") else str(response[1])
|
|
187
187
|
row = self._create_base_row(
|
|
188
|
-
cast(dict[str, Any], original_row), model_response=response_text, batch_index=idx
|
|
188
|
+
cast("dict[str, Any]", original_row), model_response=response_text, batch_index=idx
|
|
189
189
|
)
|
|
190
190
|
self._add_metadata(row, success=True, system_msg=system_msg)
|
|
191
191
|
rows.append(row)
|
|
192
192
|
|
|
193
193
|
# Log progress
|
|
194
194
|
if (idx + 1) % max(1, total_rows // 10) == 0:
|
|
195
|
-
logger.
|
|
195
|
+
await logger.ainfo(f"Processed {idx + 1}/{total_rows} rows")
|
|
196
196
|
|
|
197
|
-
logger.
|
|
197
|
+
await logger.ainfo("Batch processing completed successfully")
|
|
198
198
|
return DataFrame(rows)
|
|
199
199
|
|
|
200
200
|
except (KeyError, AttributeError) as e:
|
|
201
201
|
# Handle data structure and attribute access errors
|
|
202
|
-
logger.
|
|
203
|
-
error_row = self._create_base_row(
|
|
202
|
+
await logger.aerror(f"Data processing error: {e!s}")
|
|
203
|
+
error_row = self._create_base_row(dict.fromkeys(df.columns, ""), model_response="", batch_index=-1)
|
|
204
204
|
self._add_metadata(error_row, success=False, error=str(e))
|
|
205
205
|
return DataFrame([error_row])
|
|
@@ -181,7 +181,7 @@ class DataOperationsComponent(Component):
|
|
|
181
181
|
raise ValueError(msg)
|
|
182
182
|
|
|
183
183
|
# Data transformation operations
|
|
184
|
-
def select_keys(self, evaluate: bool | None = None) -> Data:
|
|
184
|
+
def select_keys(self, *, evaluate: bool | None = None) -> Data:
|
|
185
185
|
"""Select specific keys from the data dictionary."""
|
|
186
186
|
self.validate_single_data("Select Keys")
|
|
187
187
|
data_dict = self.get_normalized_data()
|
|
@@ -266,7 +266,7 @@ class DataOperationsComponent(Component):
|
|
|
266
266
|
logger.info("evaluating data")
|
|
267
267
|
return Data(**self.recursive_eval(self.get_data_dict()))
|
|
268
268
|
|
|
269
|
-
def combine_data(self, evaluate: bool | None = None) -> Data:
|
|
269
|
+
def combine_data(self, *, evaluate: bool | None = None) -> Data:
|
|
270
270
|
"""Combine multiple data objects into one."""
|
|
271
271
|
logger.info("combining data")
|
|
272
272
|
if not self.data_is_list():
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
from enum import Enum
|
|
2
2
|
from typing import cast
|
|
3
3
|
|
|
4
|
-
from loguru import logger
|
|
5
|
-
|
|
6
4
|
from langflow.custom.custom_component.component import Component
|
|
7
5
|
from langflow.io import DataInput, DropdownInput, Output
|
|
6
|
+
from langflow.logging.logger import logger
|
|
8
7
|
from langflow.schema.dataframe import DataFrame
|
|
9
8
|
|
|
10
9
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
from loguru import logger
|
|
2
|
-
|
|
3
1
|
from langflow.custom.custom_component.component import Component
|
|
4
2
|
from langflow.io import MessageInput, Output
|
|
3
|
+
from langflow.logging.logger import logger
|
|
5
4
|
from langflow.schema.data import Data
|
|
6
5
|
from langflow.schema.message import Message
|
|
7
6
|
|
|
@@ -32,6 +31,6 @@ class MessageToDataComponent(Component):
|
|
|
32
31
|
return Data(data=self.message.data)
|
|
33
32
|
|
|
34
33
|
msg = "Error converting Message to Data: Input must be a Message object"
|
|
35
|
-
logger.
|
|
34
|
+
logger.debug(msg, exc_info=True)
|
|
36
35
|
self.status = msg
|
|
37
36
|
return Data(data={"error": msg})
|
|
@@ -3,11 +3,11 @@ from json import JSONDecodeError
|
|
|
3
3
|
|
|
4
4
|
import jq
|
|
5
5
|
from json_repair import repair_json
|
|
6
|
-
from loguru import logger
|
|
7
6
|
|
|
8
7
|
from langflow.custom.custom_component.component import Component
|
|
9
8
|
from langflow.inputs.inputs import HandleInput, MessageTextInput
|
|
10
9
|
from langflow.io import Output
|
|
10
|
+
from langflow.logging.logger import logger
|
|
11
11
|
from langflow.schema.data import Data
|
|
12
12
|
from langflow.schema.message import Message
|
|
13
13
|
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
from collections.abc import Callable
|
|
2
2
|
|
|
3
|
-
from loguru import logger
|
|
4
|
-
|
|
5
3
|
from langflow.custom.custom_component.component import Component
|
|
6
4
|
from langflow.custom.utils import get_function
|
|
7
5
|
from langflow.io import CodeInput, Output
|
|
6
|
+
from langflow.logging.logger import logger
|
|
8
7
|
from langflow.schema.data import Data
|
|
9
8
|
from langflow.schema.dotdict import dotdict
|
|
10
9
|
from langflow.schema.message import Message
|
|
@@ -58,7 +57,7 @@ class PythonFunctionComponent(Component):
|
|
|
58
57
|
func = get_function(function_code)
|
|
59
58
|
return func()
|
|
60
59
|
except Exception as e: # noqa: BLE001
|
|
61
|
-
logger.
|
|
60
|
+
logger.debug("Error executing function", exc_info=True)
|
|
62
61
|
return f"Error executing function: {e}"
|
|
63
62
|
|
|
64
63
|
def execute_function_data(self) -> list[Data]:
|
|
@@ -2,12 +2,12 @@ from typing import Any
|
|
|
2
2
|
|
|
3
3
|
from langchain_community.utilities.serpapi import SerpAPIWrapper
|
|
4
4
|
from langchain_core.tools import ToolException
|
|
5
|
-
from loguru import logger
|
|
6
5
|
from pydantic import BaseModel, Field
|
|
7
6
|
|
|
8
7
|
from langflow.custom.custom_component.component import Component
|
|
9
8
|
from langflow.inputs.inputs import DictInput, IntInput, MultilineInput, SecretStrInput
|
|
10
9
|
from langflow.io import Output
|
|
10
|
+
from langflow.logging.logger import logger
|
|
11
11
|
from langflow.schema.data import Data
|
|
12
12
|
from langflow.schema.message import Message
|
|
13
13
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import httpx
|
|
2
|
-
from loguru import logger
|
|
3
2
|
|
|
4
3
|
from langflow.custom import Component
|
|
5
4
|
from langflow.io import BoolInput, DropdownInput, MessageTextInput, Output, SecretStrInput
|
|
5
|
+
from langflow.logging.logger import logger
|
|
6
6
|
from langflow.schema import Data
|
|
7
7
|
from langflow.schema.dataframe import DataFrame
|
|
8
8
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import httpx
|
|
2
|
-
from loguru import logger
|
|
3
2
|
|
|
4
3
|
from langflow.custom.custom_component.component import Component
|
|
5
4
|
from langflow.inputs.inputs import BoolInput, DropdownInput, IntInput, MessageTextInput, SecretStrInput
|
|
5
|
+
from langflow.logging.logger import logger
|
|
6
6
|
from langflow.schema.data import Data
|
|
7
7
|
from langflow.schema.dataframe import DataFrame
|
|
8
8
|
from langflow.template.field.base import Output
|
|
@@ -3,12 +3,12 @@ import operator
|
|
|
3
3
|
|
|
4
4
|
from langchain.tools import StructuredTool
|
|
5
5
|
from langchain_core.tools import ToolException
|
|
6
|
-
from loguru import logger
|
|
7
6
|
from pydantic import BaseModel, Field
|
|
8
7
|
|
|
9
8
|
from langflow.base.langchain_utilities.model import LCToolComponent
|
|
10
9
|
from langflow.field_typing import Tool
|
|
11
10
|
from langflow.inputs.inputs import MessageTextInput
|
|
11
|
+
from langflow.logging.logger import logger
|
|
12
12
|
from langflow.schema.data import Data
|
|
13
13
|
|
|
14
14
|
|
|
@@ -87,7 +87,7 @@ class CalculatorToolComponent(LCToolComponent):
|
|
|
87
87
|
self.status = error_message
|
|
88
88
|
return [Data(data={"error": error_message, "input": expression})]
|
|
89
89
|
except Exception as e: # noqa: BLE001
|
|
90
|
-
logger.
|
|
90
|
+
logger.debug("Error evaluating expression", exc_info=True)
|
|
91
91
|
error_message = f"Error: {e}"
|
|
92
92
|
self.status = error_message
|
|
93
93
|
return [Data(data={"error": error_message, "input": expression})]
|
|
@@ -4,21 +4,14 @@ from typing import Any
|
|
|
4
4
|
|
|
5
5
|
from langchain.agents import Tool
|
|
6
6
|
from langchain_core.tools import StructuredTool
|
|
7
|
-
from loguru import logger
|
|
8
7
|
from pydantic.v1 import Field, create_model
|
|
9
8
|
from pydantic.v1.fields import Undefined
|
|
10
9
|
from typing_extensions import override
|
|
11
10
|
|
|
12
11
|
from langflow.base.langchain_utilities.model import LCToolComponent
|
|
13
|
-
from langflow.inputs.inputs import
|
|
14
|
-
BoolInput,
|
|
15
|
-
DropdownInput,
|
|
16
|
-
FieldTypes,
|
|
17
|
-
HandleInput,
|
|
18
|
-
MessageTextInput,
|
|
19
|
-
MultilineInput,
|
|
20
|
-
)
|
|
12
|
+
from langflow.inputs.inputs import BoolInput, DropdownInput, FieldTypes, HandleInput, MessageTextInput, MultilineInput
|
|
21
13
|
from langflow.io import Output
|
|
14
|
+
from langflow.logging.logger import logger
|
|
22
15
|
from langflow.schema.data import Data
|
|
23
16
|
from langflow.schema.dotdict import dotdict
|
|
24
17
|
|
|
@@ -139,7 +132,7 @@ class PythonCodeStructuredTool(LCToolComponent):
|
|
|
139
132
|
build_config["tool_function"]["options"] = names
|
|
140
133
|
except Exception as e: # noqa: BLE001
|
|
141
134
|
self.status = f"Failed to extract names: {e}"
|
|
142
|
-
logger.
|
|
135
|
+
logger.debug(self.status, exc_info=True)
|
|
143
136
|
build_config["tool_function"]["options"] = ["Failed to parse", str(e)]
|
|
144
137
|
return build_config
|
|
145
138
|
|
|
@@ -3,12 +3,12 @@ import importlib
|
|
|
3
3
|
from langchain.tools import StructuredTool
|
|
4
4
|
from langchain_core.tools import ToolException
|
|
5
5
|
from langchain_experimental.utilities import PythonREPL
|
|
6
|
-
from loguru import logger
|
|
7
6
|
from pydantic import BaseModel, Field
|
|
8
7
|
|
|
9
8
|
from langflow.base.langchain_utilities.model import LCToolComponent
|
|
10
9
|
from langflow.field_typing import Tool
|
|
11
10
|
from langflow.inputs.inputs import StrInput
|
|
11
|
+
from langflow.logging.logger import logger
|
|
12
12
|
from langflow.schema.data import Data
|
|
13
13
|
|
|
14
14
|
|
|
@@ -78,7 +78,7 @@ class PythonREPLToolComponent(LCToolComponent):
|
|
|
78
78
|
try:
|
|
79
79
|
return python_repl.run(code)
|
|
80
80
|
except Exception as e:
|
|
81
|
-
logger.
|
|
81
|
+
logger.debug("Error running Python code", exc_info=True)
|
|
82
82
|
raise ToolException(str(e)) from e
|
|
83
83
|
|
|
84
84
|
tool = StructuredTool.from_function(
|
|
@@ -5,12 +5,12 @@ from typing import Any
|
|
|
5
5
|
import requests
|
|
6
6
|
from langchain.agents import Tool
|
|
7
7
|
from langchain_core.tools import StructuredTool
|
|
8
|
-
from loguru import logger
|
|
9
8
|
from pydantic.v1 import Field, create_model
|
|
10
9
|
|
|
11
10
|
from langflow.base.langchain_utilities.model import LCToolComponent
|
|
12
11
|
from langflow.inputs.inputs import DropdownInput, IntInput, MessageTextInput, MultiselectInput
|
|
13
12
|
from langflow.io import Output
|
|
13
|
+
from langflow.logging.logger import logger
|
|
14
14
|
from langflow.schema.dotdict import dotdict
|
|
15
15
|
|
|
16
16
|
|
|
@@ -76,7 +76,7 @@ class SearXNGToolComponent(LCToolComponent):
|
|
|
76
76
|
build_config["language"]["options"] = languages.copy()
|
|
77
77
|
except Exception as e: # noqa: BLE001
|
|
78
78
|
self.status = f"Failed to extract names: {e}"
|
|
79
|
-
logger.
|
|
79
|
+
logger.debug(self.status, exc_info=True)
|
|
80
80
|
build_config["categories"]["options"] = ["Failed to parse", str(e)]
|
|
81
81
|
return build_config
|
|
82
82
|
|
|
@@ -112,7 +112,7 @@ class SearXNGToolComponent(LCToolComponent):
|
|
|
112
112
|
num_results = min(SearxSearch._max_results, len(response["results"]))
|
|
113
113
|
return [response["results"][i] for i in range(num_results)]
|
|
114
114
|
except Exception as e: # noqa: BLE001
|
|
115
|
-
logger.
|
|
115
|
+
logger.debug("Error running SearXNG Search", exc_info=True)
|
|
116
116
|
return [f"Failed to search: {e}"]
|
|
117
117
|
|
|
118
118
|
SearxSearch._url = self.url
|
|
@@ -3,12 +3,12 @@ from typing import Any
|
|
|
3
3
|
from langchain.tools import StructuredTool
|
|
4
4
|
from langchain_community.utilities.serpapi import SerpAPIWrapper
|
|
5
5
|
from langchain_core.tools import ToolException
|
|
6
|
-
from loguru import logger
|
|
7
6
|
from pydantic import BaseModel, Field
|
|
8
7
|
|
|
9
8
|
from langflow.base.langchain_utilities.model import LCToolComponent
|
|
10
9
|
from langflow.field_typing import Tool
|
|
11
10
|
from langflow.inputs.inputs import DictInput, IntInput, MultilineInput, SecretStrInput
|
|
11
|
+
from langflow.logging.logger import logger
|
|
12
12
|
from langflow.schema.data import Data
|
|
13
13
|
|
|
14
14
|
|
|
@@ -111,7 +111,7 @@ class SerpAPIComponent(LCToolComponent):
|
|
|
111
111
|
data_list = [Data(data=result, text=result.get("snippet", "")) for result in results]
|
|
112
112
|
|
|
113
113
|
except Exception as e: # noqa: BLE001
|
|
114
|
-
logger.
|
|
114
|
+
logger.debug("Error running SerpAPI", exc_info=True)
|
|
115
115
|
self.status = f"Error: {e}"
|
|
116
116
|
return [Data(data={"error": str(e)}, text=str(e))]
|
|
117
117
|
|
|
@@ -3,12 +3,12 @@ from enum import Enum
|
|
|
3
3
|
import httpx
|
|
4
4
|
from langchain.tools import StructuredTool
|
|
5
5
|
from langchain_core.tools import ToolException
|
|
6
|
-
from loguru import logger
|
|
7
6
|
from pydantic import BaseModel, Field
|
|
8
7
|
|
|
9
8
|
from langflow.base.langchain_utilities.model import LCToolComponent
|
|
10
9
|
from langflow.field_typing import Tool
|
|
11
10
|
from langflow.inputs.inputs import BoolInput, DropdownInput, IntInput, MessageTextInput, SecretStrInput
|
|
11
|
+
from langflow.logging.logger import logger
|
|
12
12
|
from langflow.schema.data import Data
|
|
13
13
|
|
|
14
14
|
# Add at the top with other constants
|
|
@@ -338,7 +338,7 @@ Note: Check 'Advanced' for all options.
|
|
|
338
338
|
raise ToolException(error_message) from e
|
|
339
339
|
except Exception as e:
|
|
340
340
|
error_message = f"Unexpected error: {e}"
|
|
341
|
-
logger.
|
|
341
|
+
logger.debug("Error running Tavily Search", exc_info=True)
|
|
342
342
|
self.status = error_message
|
|
343
343
|
raise ToolException(error_message) from e
|
|
344
344
|
return data_results
|
|
@@ -5,12 +5,12 @@ from enum import Enum
|
|
|
5
5
|
import yfinance as yf
|
|
6
6
|
from langchain.tools import StructuredTool
|
|
7
7
|
from langchain_core.tools import ToolException
|
|
8
|
-
from loguru import logger
|
|
9
8
|
from pydantic import BaseModel, Field
|
|
10
9
|
|
|
11
10
|
from langflow.base.langchain_utilities.model import LCToolComponent
|
|
12
11
|
from langflow.field_typing import Tool
|
|
13
12
|
from langflow.inputs.inputs import DropdownInput, IntInput, MessageTextInput
|
|
13
|
+
from langflow.logging.logger import logger
|
|
14
14
|
from langflow.schema.data import Data
|
|
15
15
|
|
|
16
16
|
|
|
@@ -29,9 +29,9 @@ class TwelveLabsVideoEmbeddings(Embeddings):
|
|
|
29
29
|
|
|
30
30
|
# First try to use video embedding, then fall back to clip embedding if available
|
|
31
31
|
if result["video_embedding"] is not None:
|
|
32
|
-
embeddings.append(cast(list[float], result["video_embedding"]))
|
|
32
|
+
embeddings.append(cast("list[float]", result["video_embedding"]))
|
|
33
33
|
elif result["clip_embeddings"] and len(result["clip_embeddings"]) > 0:
|
|
34
|
-
embeddings.append(cast(list[float], result["clip_embeddings"][0]))
|
|
34
|
+
embeddings.append(cast("list[float]", result["clip_embeddings"][0]))
|
|
35
35
|
else:
|
|
36
36
|
# If neither is available, raise an error
|
|
37
37
|
error_msg = "No embeddings were generated for the video"
|
|
@@ -45,9 +45,9 @@ class TwelveLabsVideoEmbeddings(Embeddings):
|
|
|
45
45
|
|
|
46
46
|
# First try to use video embedding, then fall back to clip embedding if available
|
|
47
47
|
if result["video_embedding"] is not None:
|
|
48
|
-
return cast(list[float], result["video_embedding"])
|
|
48
|
+
return cast("list[float]", result["video_embedding"])
|
|
49
49
|
if result["clip_embeddings"] and len(result["clip_embeddings"]) > 0:
|
|
50
|
-
return cast(list[float], result["clip_embeddings"][0])
|
|
50
|
+
return cast("list[float]", result["clip_embeddings"][0])
|
|
51
51
|
# If neither is available, raise an error
|
|
52
52
|
error_msg = "No embeddings were generated for the video"
|
|
53
53
|
raise ValueError(error_msg)
|
|
@@ -2,13 +2,13 @@ from copy import deepcopy
|
|
|
2
2
|
from pathlib import Path
|
|
3
3
|
|
|
4
4
|
from langchain_chroma import Chroma
|
|
5
|
-
from loguru import logger
|
|
6
5
|
from typing_extensions import override
|
|
7
6
|
|
|
8
7
|
from langflow.base.vectorstores.model import LCVectorStoreComponent, check_cached_vector_store
|
|
9
8
|
from langflow.base.vectorstores.utils import chroma_collection_to_data
|
|
10
9
|
from langflow.inputs.inputs import MultilineInput
|
|
11
10
|
from langflow.io import BoolInput, DropdownInput, HandleInput, IntInput, MessageTextInput, TabInput
|
|
11
|
+
from langflow.logging.logger import logger
|
|
12
12
|
from langflow.schema.data import Data
|
|
13
13
|
from langflow.schema.dataframe import DataFrame
|
|
14
14
|
from langflow.template.field.base import Output
|
|
@@ -4,12 +4,12 @@ from enum import Enum
|
|
|
4
4
|
|
|
5
5
|
import yfinance as yf
|
|
6
6
|
from langchain_core.tools import ToolException
|
|
7
|
-
from loguru import logger
|
|
8
7
|
from pydantic import BaseModel, Field
|
|
9
8
|
|
|
10
9
|
from langflow.custom.custom_component.component import Component
|
|
11
10
|
from langflow.inputs.inputs import DropdownInput, IntInput, MessageTextInput
|
|
12
11
|
from langflow.io import Output
|
|
12
|
+
from langflow.logging.logger import logger
|
|
13
13
|
from langflow.schema.data import Data
|
|
14
14
|
from langflow.schema.dataframe import DataFrame
|
|
15
15
|
|
|
@@ -6,6 +6,7 @@ from googleapiclient.errors import HttpError
|
|
|
6
6
|
|
|
7
7
|
from langflow.custom.custom_component.component import Component
|
|
8
8
|
from langflow.inputs.inputs import BoolInput, DropdownInput, IntInput, SecretStrInput
|
|
9
|
+
from langflow.logging.logger import logger
|
|
9
10
|
from langflow.schema.dataframe import DataFrame
|
|
10
11
|
from langflow.template.field.base import Output
|
|
11
12
|
|
|
@@ -279,8 +280,6 @@ class YouTubeTrendingComponent(Component):
|
|
|
279
280
|
|
|
280
281
|
return DataFrame(pd.DataFrame({"error": [error_message]}))
|
|
281
282
|
|
|
282
|
-
except Exception as e:
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
logging.exception("An unexpected error occurred:")
|
|
283
|
+
except Exception as e: # noqa: BLE001
|
|
284
|
+
logger.exception("An unexpected error occurred:")
|
|
286
285
|
return DataFrame(pd.DataFrame({"error": [str(e)]}))
|
langflow/custom/attributes.py
CHANGED
|
@@ -8,10 +8,10 @@ from typing import Any
|
|
|
8
8
|
|
|
9
9
|
from cachetools import TTLCache, keys
|
|
10
10
|
from fastapi import HTTPException
|
|
11
|
-
from loguru import logger
|
|
12
11
|
|
|
13
12
|
from langflow.custom.eval import eval_custom_component_code
|
|
14
13
|
from langflow.custom.schema import CallableCodeDetails, ClassCodeDetails, MissingDefault
|
|
14
|
+
from langflow.logging.logger import logger
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class CodeSyntaxError(HTTPException):
|
|
@@ -5,11 +5,11 @@ from typing import TYPE_CHECKING, Any, ClassVar
|
|
|
5
5
|
|
|
6
6
|
from cachetools import TTLCache, cachedmethod
|
|
7
7
|
from fastapi import HTTPException
|
|
8
|
-
from loguru import logger
|
|
9
8
|
|
|
10
9
|
from langflow.custom.attributes import ATTR_FUNC_MAPPING
|
|
11
10
|
from langflow.custom.code_parser.code_parser import CodeParser
|
|
12
11
|
from langflow.custom.eval import eval_custom_component_code
|
|
12
|
+
from langflow.logging.logger import logger
|
|
13
13
|
from langflow.utils import validate
|
|
14
14
|
|
|
15
15
|
if TYPE_CHECKING:
|
|
@@ -3,6 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import ast
|
|
4
4
|
import asyncio
|
|
5
5
|
import inspect
|
|
6
|
+
import json
|
|
6
7
|
from collections.abc import AsyncIterator, Iterator
|
|
7
8
|
from copy import deepcopy
|
|
8
9
|
from textwrap import dedent
|
|
@@ -1019,10 +1020,23 @@ class Component(CustomComponent):
|
|
|
1019
1020
|
return {**predefined_inputs, **runtime_inputs}
|
|
1020
1021
|
|
|
1021
1022
|
def get_trace_as_metadata(self):
|
|
1023
|
+
def safe_list_values(items):
|
|
1024
|
+
return [v if isinstance(v, str | int | float | bool) or v is None else str(v) for v in items]
|
|
1025
|
+
|
|
1026
|
+
def safe_value(val):
|
|
1027
|
+
if isinstance(val, str | int | float | bool) or val is None:
|
|
1028
|
+
return val
|
|
1029
|
+
if isinstance(val, list | tuple):
|
|
1030
|
+
return safe_list_values(val)
|
|
1031
|
+
try:
|
|
1032
|
+
return json.dumps(val)
|
|
1033
|
+
except (TypeError, ValueError):
|
|
1034
|
+
return str(val)
|
|
1035
|
+
|
|
1022
1036
|
return {
|
|
1023
|
-
input_.name: input_.value
|
|
1037
|
+
input_.name: safe_value(getattr(self, input_.name, input_.value))
|
|
1024
1038
|
for input_ in self.inputs
|
|
1025
|
-
if
|
|
1039
|
+
if getattr(input_, "trace_as_metadata", False)
|
|
1026
1040
|
}
|
|
1027
1041
|
|
|
1028
1042
|
async def _build_with_tracing(self):
|