langflow-base-nightly 0.5.0.dev30__py3-none-any.whl → 0.5.0.dev32__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. langflow/__main__.py +130 -30
  2. langflow/api/router.py +2 -0
  3. langflow/api/v1/__init__.py +2 -0
  4. langflow/api/v1/knowledge_bases.py +437 -0
  5. langflow/base/data/kb_utils.py +104 -0
  6. langflow/components/data/__init__.py +4 -0
  7. langflow/components/data/kb_ingest.py +585 -0
  8. langflow/components/data/kb_retrieval.py +254 -0
  9. langflow/components/processing/save_file.py +1 -1
  10. langflow/frontend/assets/{SlackIcon-D2PxMQjX.js → SlackIcon-Bikuxo8x.js} +1 -1
  11. langflow/frontend/assets/{Wikipedia-BNM0lBPs.js → Wikipedia-B6aCFf5-.js} +1 -1
  12. langflow/frontend/assets/{Wolfram-COQyGyeC.js → Wolfram-CekL_M-a.js} +1 -1
  13. langflow/frontend/assets/{index-CTpfN0Cy.js → index-09CVJwsY.js} +1 -1
  14. langflow/frontend/assets/{index-DWUG3nTC.js → index-1MEYR1La.js} +1 -1
  15. langflow/frontend/assets/{index-Ds9y6kEK.js → index-2vQdFIK_.js} +1 -1
  16. langflow/frontend/assets/{index-DRdKSzTn.js → index-4Tl3Nxdo.js} +1 -1
  17. langflow/frontend/assets/{index-O_vPh7iD.js → index-5G402gB8.js} +1 -1
  18. langflow/frontend/assets/{index-D15h4ir2.js → index-5hW8VleF.js} +1 -1
  19. langflow/frontend/assets/{index-BydnMWnM.js → index-6GWpsedd.js} +1 -1
  20. langflow/frontend/assets/{index-4vIU43o6.js → index-7x3wNZ-4.js} +1 -1
  21. langflow/frontend/assets/{index-DrFpyu9Z.js → index-9gkURvG2.js} +1 -1
  22. langflow/frontend/assets/{index-DRe5h2N_.js → index-AOX7bbjJ.js} +1 -1
  23. langflow/frontend/assets/{index-fJyq3ZWN.js → index-B20KmxhS.js} +1 -1
  24. langflow/frontend/assets/{index-D_sHnnuS.js → index-B2EmwqKj.js} +1 -1
  25. langflow/frontend/assets/{index-DEc_2ba8.js → index-B4AtFbkN.js} +1 -1
  26. langflow/frontend/assets/{index-D_zQiboE.js → index-B4xLpgbM.js} +1 -1
  27. langflow/frontend/assets/{index-Db8Xgs-K.js → index-B9KRIJFi.js} +1 -1
  28. langflow/frontend/assets/{index-BzCZNz2f.js → index-B9uOBe6Y.js} +1 -1
  29. langflow/frontend/assets/{index-pFTvwRsJ.js → index-BDmbsLY2.js} +1 -1
  30. langflow/frontend/assets/{index-CGef2axA.js → index-BIKbxmIh.js} +1 -1
  31. langflow/frontend/assets/{index-BTl_mLju.js → index-BIjUtp6d.js} +1 -1
  32. langflow/frontend/assets/{index-Jze67eTW.js → index-BJIsQS8D.js} +1 -1
  33. langflow/frontend/assets/{index-DV-gdr7l.js → index-BO4fl1uU.js} +1 -1
  34. langflow/frontend/assets/{index-BUVmswbg.js → index-BRE8A4Q_.js} +1 -1
  35. langflow/frontend/assets/{index-CTzWsu8S.js → index-BRNhftot.js} +1 -1
  36. langflow/frontend/assets/{index-DFYBo38q.js → index-BRizlHaN.js} +1 -1
  37. langflow/frontend/assets/{index-DbPP5vss.js → index-BRwkzs92.js} +1 -1
  38. langflow/frontend/assets/{index-BzE7oL1n.js → index-BZCt_UnJ.js} +1 -1
  39. langflow/frontend/assets/{index-BhRSkpxu.js → index-B_ytx_iA.js} +1 -1
  40. langflow/frontend/assets/{index-ByCunkn4.js → index-BcqeL_f4.js} +1 -1
  41. langflow/frontend/assets/{index-CAAZbdRp.js → index-Bgd7yLoW.js} +1 -1
  42. langflow/frontend/assets/{index-DpDbxNdQ.js → index-BlRTHXW5.js} +1 -1
  43. langflow/frontend/assets/{index-jXSPQ_JS.js → index-BllNr21U.js} +1 -1
  44. langflow/frontend/assets/{index-fpMcQS2L.js → index-Bm7a2vMS.js} +1 -1
  45. langflow/frontend/assets/{index-BFQzmLDT.js → index-Bn4HAVDG.js} +1 -1
  46. langflow/frontend/assets/{index-D8EpAMC3.js → index-BwlYjc56.js} +1 -1
  47. langflow/frontend/assets/{index-BcCN9mpu.js → index-BzCjyHto.js} +1 -1
  48. langflow/frontend/assets/{index-D6-jZ4sc.js → index-C3RZz8WE.js} +1 -1
  49. langflow/frontend/assets/{index-D66JmFlL.js → index-C69gdJqw.js} +1 -1
  50. langflow/frontend/assets/{index-pYD0BTGu.js → index-C6P0vvSP.js} +1 -1
  51. langflow/frontend/assets/{index-CIjw_ZkP.js → index-C7wDSVVH.js} +1 -1
  52. langflow/frontend/assets/{index-BCTEK38J.js → index-CAzSTGAM.js} +1 -1
  53. langflow/frontend/assets/{index-8FjgS_Vj.js → index-CEn_71Wk.js} +1 -1
  54. langflow/frontend/assets/{index-BFiCUM5l.js → index-CGVDXKtN.js} +1 -1
  55. langflow/frontend/assets/{index-BIH2K0v8.js → index-CIYzjH2y.js} +1 -1
  56. langflow/frontend/assets/{index-gM8j2Wvk.js → index-COqjpsdy.js} +1 -1
  57. langflow/frontend/assets/{index-2q8IFBNP.js → index-CP0tFKwN.js} +1 -1
  58. langflow/frontend/assets/{index-CXpZa4H9.js → index-CPIdMJkX.js} +1 -1
  59. langflow/frontend/assets/{index-B-YjnRWx.js → index-CSRizl2S.js} +1 -1
  60. langflow/frontend/assets/{index-DFo0yfS5.js → index-CUe1ivTn.js} +1 -1
  61. langflow/frontend/assets/{index-C2x5hzgY.js → index-CVphnxXi.js} +1 -1
  62. langflow/frontend/assets/{index-Bz3QnhLZ.js → index-CY6LUi4V.js} +1 -1
  63. langflow/frontend/assets/{index-Cq6gk34q.js → index-C_2G2ZqJ.js} +1 -1
  64. langflow/frontend/assets/{index-CSXUVElo.js → index-C_K6Tof7.js} +1 -1
  65. langflow/frontend/assets/{index-1D7jZ8vz.js → index-C_UkF-RJ.js} +1 -1
  66. langflow/frontend/assets/{index-BVGZcHHC.js → index-Cbwk3f-p.js} +1 -1
  67. langflow/frontend/assets/{index-kiqvo0Zi.js → index-CdwjD4IX.js} +1 -1
  68. langflow/frontend/assets/{index-BNy3Al2s.js → index-CgbINWS8.js} +1 -1
  69. langflow/frontend/assets/{index-BXJpd9hg.js → index-CglSqvB5.js} +1 -1
  70. langflow/frontend/assets/{index-D9CF_54p.js → index-CmiRgF_-.js} +1 -1
  71. langflow/frontend/assets/{index-ez1EW657.js → index-Cp7Pmn03.js} +1 -1
  72. langflow/frontend/assets/{index-aypzjPzG.js → index-Cq30cQcP.js} +1 -1
  73. langflow/frontend/assets/index-CqS7zir1.css +1 -0
  74. langflow/frontend/assets/{index-DKv0y9Dp.js → index-Cr2oy5K2.js} +1 -1
  75. langflow/frontend/assets/{index-DrfwVxtD.js → index-Crq_yhkG.js} +1 -1
  76. langflow/frontend/assets/{index-CzJzRS6i.js → index-Cs_jt3dj.js} +1 -1
  77. langflow/frontend/assets/{index-DO0mS8FQ.js → index-Cy-ZEfWh.js} +1 -1
  78. langflow/frontend/assets/{index-Q0bwuTZY.js → index-Cyk3aCmP.js} +1 -1
  79. langflow/frontend/assets/{index-DToZROdu.js → index-D-HTZ68O.js} +1 -1
  80. langflow/frontend/assets/{index-C0AEZF1v.js → index-D1RgjMON.js} +1 -1
  81. langflow/frontend/assets/{index-DilRRF2S.js → index-D29n5mus.js} +1 -1
  82. langflow/frontend/assets/{index-CKLOrtrx.js → index-D2nHdRne.js} +1 -1
  83. langflow/frontend/assets/{index-sfFDGjjd.js → index-D7Vx6mgS.js} +1 -1
  84. langflow/frontend/assets/{index-BAHhLqW9.js → index-D7nFs6oq.js} +1 -1
  85. langflow/frontend/assets/{index-C7jY4x98.js → index-DAJafn16.js} +1 -1
  86. langflow/frontend/assets/{index-BefwTGbP.js → index-DDcpxWU4.js} +1 -1
  87. langflow/frontend/assets/{index-CTZ9iXFr.js → index-DEuXrfXH.js} +1 -1
  88. langflow/frontend/assets/{index-DFfr0xSt.js → index-DF0oWRdd.js} +1 -1
  89. langflow/frontend/assets/{index-Bh5pQAZC.js → index-DI0zAExi.js} +1 -1
  90. langflow/frontend/assets/{index-CG-Suo0F.js → index-DJs6FoYC.js} +1 -1
  91. langflow/frontend/assets/{index-dvTTQhKz.js → index-DNS4La1f.js} +1 -1
  92. langflow/frontend/assets/{index-nLDaeeZg.js → index-DOI0ceS-.js} +1 -1
  93. langflow/frontend/assets/{index-DakdEtbq.js → index-DOb9c2bf.js} +1 -1
  94. langflow/frontend/assets/{index-CEVnRp4_.js → index-DS4F_Phe.js} +1 -1
  95. langflow/frontend/assets/{index-DGRg2M1l.js → index-DTJX3yQa.js} +1 -1
  96. langflow/frontend/assets/{index-BjAsd-Vo.js → index-DVV_etfW.js} +1 -1
  97. langflow/frontend/assets/{index-BrIuZD2A.js → index-DX_InNVT.js} +1 -1
  98. langflow/frontend/assets/{index-jG-zLXRN.js → index-DbmqjLy6.js} +1 -1
  99. langflow/frontend/assets/{index-DSvOFGJR.js → index-Dc0p1Oxl.js} +1 -1
  100. langflow/frontend/assets/{index-87GFtXu5.js → index-DkJCCraf.js} +1 -1
  101. langflow/frontend/assets/{index-BXidWkLM.js → index-DlMAYATX.js} +1 -1
  102. langflow/frontend/assets/{index-sbTxhltT.js → index-DmaQAn3K.js} +1 -1
  103. langflow/frontend/assets/{index-DkC5vMvx.js → index-DmvjdU1N.js} +1 -1
  104. langflow/frontend/assets/{index-CSUglByd.js → index-DnusMCK1.js} +1 -1
  105. langflow/frontend/assets/{index-DZOTHXs0.js → index-DoFlaGDx.js} +1 -1
  106. langflow/frontend/assets/{index-CZkMjaa8.js → index-DqDQk0Cu.js} +1 -1
  107. langflow/frontend/assets/{index-lc10GnwG.js → index-DrvRK4_i.js} +1 -1
  108. langflow/frontend/assets/{index-BNm-yAYc.js → index-DtCsjX48.js} +1 -1
  109. langflow/frontend/assets/{index-BeLnhfG-.js → index-Dy7ehgeV.js} +1 -1
  110. langflow/frontend/assets/{index-RGG9hk9J.js → index-Dz0r9Idb.js} +1 -1
  111. langflow/frontend/assets/{index-Bcq2yA-p.js → index-DzDNhMMW.js} +1 -1
  112. langflow/frontend/assets/{index-P3f-GeAm.js → index-FYcoJPMP.js} +1 -1
  113. langflow/frontend/assets/{index-DQwvl_Rp.js → index-Iamzh9ZT.js} +1 -1
  114. langflow/frontend/assets/{index-Cy6n8tA9.js → index-J0pvFqLk.js} +1 -1
  115. langflow/frontend/assets/{index-D1XTMye3.js → index-J98sU-1p.js} +1 -1
  116. langflow/frontend/assets/{index-BZ0rL0tK.js → index-JHCxbvlW.js} +1 -1
  117. langflow/frontend/assets/{index-DmSH63k1.js → index-KnS52ylc.js} +1 -1
  118. langflow/frontend/assets/{index-WGZ88ShH.js → index-L7FKc9QN.js} +1 -1
  119. langflow/frontend/assets/{index-BIoFnUtx.js → index-RveG4dl9.js} +1 -1
  120. langflow/frontend/assets/{index-BDdkPrzu.js → index-T2jJOG85.js} +1 -1
  121. langflow/frontend/assets/{index-2839k6WO.js → index-TRyDa01A.js} +1 -1
  122. langflow/frontend/assets/{index-DvOdMz35.js → index-U7J1YiWE.js} +1 -1
  123. langflow/frontend/assets/{index-DzUx1-Bl.js → index-UI2ws3qp.js} +1984 -1984
  124. langflow/frontend/assets/{index-8Fx5I2fx.js → index-VO-pk-Hg.js} +1 -1
  125. langflow/frontend/assets/{index-e-RKmhti.js → index-_3qag0I4.js} +1 -1
  126. langflow/frontend/assets/{index-X67tRPXo.js → index-dfaj9-hY.js} +1 -1
  127. langflow/frontend/assets/{index-CHexGuNQ.js → index-eJwu5YEi.js} +1 -1
  128. langflow/frontend/assets/{index-Dz5YIK1W.js → index-in188l0A.js} +1 -1
  129. langflow/frontend/assets/{index-CTwkLLMr.js → index-pkOi9P45.js} +1 -1
  130. langflow/frontend/assets/{index-D6BaTmee.js → index-qXcoVIRo.js} +1 -1
  131. langflow/frontend/assets/{index-euS8RcNY.js → index-xVx59Op-.js} +1 -1
  132. langflow/frontend/assets/{index-C4WueQ4k.js → index-yIh6-LZT.js} +1 -1
  133. langflow/frontend/assets/lazyIconImports-kvf_Kak2.js +2 -0
  134. langflow/frontend/assets/{use-post-add-user-CA-_peAV.js → use-post-add-user-Bt6vZvvT.js} +1 -1
  135. langflow/frontend/index.html +2 -2
  136. langflow/initial_setup/starter_projects/Knowledge Ingestion.json +1052 -0
  137. langflow/initial_setup/starter_projects/Knowledge Retrieval.json +709 -0
  138. langflow/initial_setup/starter_projects/News Aggregator.json +4 -4
  139. langflow/services/database/models/user/crud.py +7 -0
  140. langflow/services/settings/auth.py +14 -1
  141. langflow/services/settings/base.py +3 -0
  142. langflow/services/utils.py +8 -3
  143. {langflow_base_nightly-0.5.0.dev30.dist-info → langflow_base_nightly-0.5.0.dev32.dist-info}/METADATA +2 -1
  144. {langflow_base_nightly-0.5.0.dev30.dist-info → langflow_base_nightly-0.5.0.dev32.dist-info}/RECORD +146 -140
  145. langflow/frontend/assets/index-DIcdzk44.css +0 -1
  146. langflow/frontend/assets/lazyIconImports-lnczjBhY.js +0 -2
  147. {langflow_base_nightly-0.5.0.dev30.dist-info → langflow_base_nightly-0.5.0.dev32.dist-info}/WHEEL +0 -0
  148. {langflow_base_nightly-0.5.0.dev30.dist-info → langflow_base_nightly-0.5.0.dev32.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,104 @@
1
+ import math
2
+ from collections import Counter
3
+
4
+
5
+ def compute_tfidf(documents: list[str], query_terms: list[str]) -> list[float]:
6
+ """Compute TF-IDF scores for query terms across a collection of documents.
7
+
8
+ Args:
9
+ documents: List of document strings
10
+ query_terms: List of query terms to score
11
+
12
+ Returns:
13
+ List of TF-IDF scores for each document
14
+ """
15
+ # Tokenize documents (simple whitespace splitting)
16
+ tokenized_docs = [doc.lower().split() for doc in documents]
17
+ n_docs = len(documents)
18
+
19
+ # Calculate document frequency for each term
20
+ document_frequencies = {}
21
+ for term in query_terms:
22
+ document_frequencies[term] = sum(1 for doc in tokenized_docs if term.lower() in doc)
23
+
24
+ scores = []
25
+
26
+ for doc_tokens in tokenized_docs:
27
+ doc_score = 0.0
28
+ doc_length = len(doc_tokens)
29
+ term_counts = Counter(doc_tokens)
30
+
31
+ for term in query_terms:
32
+ term_lower = term.lower()
33
+
34
+ # Term frequency (TF)
35
+ tf = term_counts[term_lower] / doc_length if doc_length > 0 else 0
36
+
37
+ # Inverse document frequency (IDF)
38
+ idf = math.log(n_docs / document_frequencies[term]) if document_frequencies[term] > 0 else 0
39
+
40
+ # TF-IDF score
41
+ doc_score += tf * idf
42
+
43
+ scores.append(doc_score)
44
+
45
+ return scores
46
+
47
+
48
+ def compute_bm25(documents: list[str], query_terms: list[str], k1: float = 1.2, b: float = 0.75) -> list[float]:
49
+ """Compute BM25 scores for query terms across a collection of documents.
50
+
51
+ Args:
52
+ documents: List of document strings
53
+ query_terms: List of query terms to score
54
+ k1: Controls term frequency scaling (default: 1.2)
55
+ b: Controls document length normalization (default: 0.75)
56
+
57
+ Returns:
58
+ List of BM25 scores for each document
59
+ """
60
+ # Tokenize documents
61
+ tokenized_docs = [doc.lower().split() for doc in documents]
62
+ n_docs = len(documents)
63
+
64
+ # Calculate average document length
65
+ avg_doc_length = sum(len(doc) for doc in tokenized_docs) / n_docs if n_docs > 0 else 0
66
+
67
+ # Handle edge case where all documents are empty
68
+ if avg_doc_length == 0:
69
+ return [0.0] * n_docs
70
+
71
+ # Calculate document frequency for each term
72
+ document_frequencies = {}
73
+ for term in query_terms:
74
+ document_frequencies[term] = sum(1 for doc in tokenized_docs if term.lower() in doc)
75
+
76
+ scores = []
77
+
78
+ for doc_tokens in tokenized_docs:
79
+ doc_score = 0.0
80
+ doc_length = len(doc_tokens)
81
+ term_counts = Counter(doc_tokens)
82
+
83
+ for term in query_terms:
84
+ term_lower = term.lower()
85
+
86
+ # Term frequency in document
87
+ tf = term_counts[term_lower]
88
+
89
+ # Inverse document frequency (IDF)
90
+ # Use standard BM25 IDF formula that ensures non-negative values
91
+ idf = math.log(n_docs / document_frequencies[term]) if document_frequencies[term] > 0 else 0
92
+
93
+ # BM25 score calculation
94
+ numerator = tf * (k1 + 1)
95
+ denominator = tf + k1 * (1 - b + b * (doc_length / avg_doc_length))
96
+
97
+ # Handle division by zero when tf=0 and k1=0
98
+ term_score = 0 if denominator == 0 else idf * (numerator / denominator)
99
+
100
+ doc_score += term_score
101
+
102
+ scores.append(doc_score)
103
+
104
+ return scores
@@ -3,6 +3,8 @@ from .csv_to_data import CSVToDataComponent
3
3
  from .directory import DirectoryComponent
4
4
  from .file import FileComponent
5
5
  from .json_to_data import JSONToDataComponent
6
+ from .kb_ingest import KBIngestionComponent
7
+ from .kb_retrieval import KBRetrievalComponent
6
8
  from .news_search import NewsSearchComponent
7
9
  from .rss import RSSReaderComponent
8
10
  from .sql_executor import SQLComponent
@@ -16,6 +18,8 @@ __all__ = [
16
18
  "DirectoryComponent",
17
19
  "FileComponent",
18
20
  "JSONToDataComponent",
21
+ "KBIngestionComponent",
22
+ "KBRetrievalComponent",
19
23
  "NewsSearchComponent",
20
24
  "RSSReaderComponent",
21
25
  "SQLComponent",