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.
- langflow/__main__.py +130 -30
- langflow/api/router.py +2 -0
- langflow/api/v1/__init__.py +2 -0
- langflow/api/v1/knowledge_bases.py +437 -0
- langflow/base/data/kb_utils.py +104 -0
- langflow/components/data/__init__.py +4 -0
- langflow/components/data/kb_ingest.py +585 -0
- langflow/components/data/kb_retrieval.py +254 -0
- langflow/components/processing/save_file.py +1 -1
- langflow/frontend/assets/{SlackIcon-D2PxMQjX.js → SlackIcon-Bikuxo8x.js} +1 -1
- langflow/frontend/assets/{Wikipedia-BNM0lBPs.js → Wikipedia-B6aCFf5-.js} +1 -1
- langflow/frontend/assets/{Wolfram-COQyGyeC.js → Wolfram-CekL_M-a.js} +1 -1
- langflow/frontend/assets/{index-CTpfN0Cy.js → index-09CVJwsY.js} +1 -1
- langflow/frontend/assets/{index-DWUG3nTC.js → index-1MEYR1La.js} +1 -1
- langflow/frontend/assets/{index-Ds9y6kEK.js → index-2vQdFIK_.js} +1 -1
- langflow/frontend/assets/{index-DRdKSzTn.js → index-4Tl3Nxdo.js} +1 -1
- langflow/frontend/assets/{index-O_vPh7iD.js → index-5G402gB8.js} +1 -1
- langflow/frontend/assets/{index-D15h4ir2.js → index-5hW8VleF.js} +1 -1
- langflow/frontend/assets/{index-BydnMWnM.js → index-6GWpsedd.js} +1 -1
- langflow/frontend/assets/{index-4vIU43o6.js → index-7x3wNZ-4.js} +1 -1
- langflow/frontend/assets/{index-DrFpyu9Z.js → index-9gkURvG2.js} +1 -1
- langflow/frontend/assets/{index-DRe5h2N_.js → index-AOX7bbjJ.js} +1 -1
- langflow/frontend/assets/{index-fJyq3ZWN.js → index-B20KmxhS.js} +1 -1
- langflow/frontend/assets/{index-D_sHnnuS.js → index-B2EmwqKj.js} +1 -1
- langflow/frontend/assets/{index-DEc_2ba8.js → index-B4AtFbkN.js} +1 -1
- langflow/frontend/assets/{index-D_zQiboE.js → index-B4xLpgbM.js} +1 -1
- langflow/frontend/assets/{index-Db8Xgs-K.js → index-B9KRIJFi.js} +1 -1
- langflow/frontend/assets/{index-BzCZNz2f.js → index-B9uOBe6Y.js} +1 -1
- langflow/frontend/assets/{index-pFTvwRsJ.js → index-BDmbsLY2.js} +1 -1
- langflow/frontend/assets/{index-CGef2axA.js → index-BIKbxmIh.js} +1 -1
- langflow/frontend/assets/{index-BTl_mLju.js → index-BIjUtp6d.js} +1 -1
- langflow/frontend/assets/{index-Jze67eTW.js → index-BJIsQS8D.js} +1 -1
- langflow/frontend/assets/{index-DV-gdr7l.js → index-BO4fl1uU.js} +1 -1
- langflow/frontend/assets/{index-BUVmswbg.js → index-BRE8A4Q_.js} +1 -1
- langflow/frontend/assets/{index-CTzWsu8S.js → index-BRNhftot.js} +1 -1
- langflow/frontend/assets/{index-DFYBo38q.js → index-BRizlHaN.js} +1 -1
- langflow/frontend/assets/{index-DbPP5vss.js → index-BRwkzs92.js} +1 -1
- langflow/frontend/assets/{index-BzE7oL1n.js → index-BZCt_UnJ.js} +1 -1
- langflow/frontend/assets/{index-BhRSkpxu.js → index-B_ytx_iA.js} +1 -1
- langflow/frontend/assets/{index-ByCunkn4.js → index-BcqeL_f4.js} +1 -1
- langflow/frontend/assets/{index-CAAZbdRp.js → index-Bgd7yLoW.js} +1 -1
- langflow/frontend/assets/{index-DpDbxNdQ.js → index-BlRTHXW5.js} +1 -1
- langflow/frontend/assets/{index-jXSPQ_JS.js → index-BllNr21U.js} +1 -1
- langflow/frontend/assets/{index-fpMcQS2L.js → index-Bm7a2vMS.js} +1 -1
- langflow/frontend/assets/{index-BFQzmLDT.js → index-Bn4HAVDG.js} +1 -1
- langflow/frontend/assets/{index-D8EpAMC3.js → index-BwlYjc56.js} +1 -1
- langflow/frontend/assets/{index-BcCN9mpu.js → index-BzCjyHto.js} +1 -1
- langflow/frontend/assets/{index-D6-jZ4sc.js → index-C3RZz8WE.js} +1 -1
- langflow/frontend/assets/{index-D66JmFlL.js → index-C69gdJqw.js} +1 -1
- langflow/frontend/assets/{index-pYD0BTGu.js → index-C6P0vvSP.js} +1 -1
- langflow/frontend/assets/{index-CIjw_ZkP.js → index-C7wDSVVH.js} +1 -1
- langflow/frontend/assets/{index-BCTEK38J.js → index-CAzSTGAM.js} +1 -1
- langflow/frontend/assets/{index-8FjgS_Vj.js → index-CEn_71Wk.js} +1 -1
- langflow/frontend/assets/{index-BFiCUM5l.js → index-CGVDXKtN.js} +1 -1
- langflow/frontend/assets/{index-BIH2K0v8.js → index-CIYzjH2y.js} +1 -1
- langflow/frontend/assets/{index-gM8j2Wvk.js → index-COqjpsdy.js} +1 -1
- langflow/frontend/assets/{index-2q8IFBNP.js → index-CP0tFKwN.js} +1 -1
- langflow/frontend/assets/{index-CXpZa4H9.js → index-CPIdMJkX.js} +1 -1
- langflow/frontend/assets/{index-B-YjnRWx.js → index-CSRizl2S.js} +1 -1
- langflow/frontend/assets/{index-DFo0yfS5.js → index-CUe1ivTn.js} +1 -1
- langflow/frontend/assets/{index-C2x5hzgY.js → index-CVphnxXi.js} +1 -1
- langflow/frontend/assets/{index-Bz3QnhLZ.js → index-CY6LUi4V.js} +1 -1
- langflow/frontend/assets/{index-Cq6gk34q.js → index-C_2G2ZqJ.js} +1 -1
- langflow/frontend/assets/{index-CSXUVElo.js → index-C_K6Tof7.js} +1 -1
- langflow/frontend/assets/{index-1D7jZ8vz.js → index-C_UkF-RJ.js} +1 -1
- langflow/frontend/assets/{index-BVGZcHHC.js → index-Cbwk3f-p.js} +1 -1
- langflow/frontend/assets/{index-kiqvo0Zi.js → index-CdwjD4IX.js} +1 -1
- langflow/frontend/assets/{index-BNy3Al2s.js → index-CgbINWS8.js} +1 -1
- langflow/frontend/assets/{index-BXJpd9hg.js → index-CglSqvB5.js} +1 -1
- langflow/frontend/assets/{index-D9CF_54p.js → index-CmiRgF_-.js} +1 -1
- langflow/frontend/assets/{index-ez1EW657.js → index-Cp7Pmn03.js} +1 -1
- langflow/frontend/assets/{index-aypzjPzG.js → index-Cq30cQcP.js} +1 -1
- langflow/frontend/assets/index-CqS7zir1.css +1 -0
- langflow/frontend/assets/{index-DKv0y9Dp.js → index-Cr2oy5K2.js} +1 -1
- langflow/frontend/assets/{index-DrfwVxtD.js → index-Crq_yhkG.js} +1 -1
- langflow/frontend/assets/{index-CzJzRS6i.js → index-Cs_jt3dj.js} +1 -1
- langflow/frontend/assets/{index-DO0mS8FQ.js → index-Cy-ZEfWh.js} +1 -1
- langflow/frontend/assets/{index-Q0bwuTZY.js → index-Cyk3aCmP.js} +1 -1
- langflow/frontend/assets/{index-DToZROdu.js → index-D-HTZ68O.js} +1 -1
- langflow/frontend/assets/{index-C0AEZF1v.js → index-D1RgjMON.js} +1 -1
- langflow/frontend/assets/{index-DilRRF2S.js → index-D29n5mus.js} +1 -1
- langflow/frontend/assets/{index-CKLOrtrx.js → index-D2nHdRne.js} +1 -1
- langflow/frontend/assets/{index-sfFDGjjd.js → index-D7Vx6mgS.js} +1 -1
- langflow/frontend/assets/{index-BAHhLqW9.js → index-D7nFs6oq.js} +1 -1
- langflow/frontend/assets/{index-C7jY4x98.js → index-DAJafn16.js} +1 -1
- langflow/frontend/assets/{index-BefwTGbP.js → index-DDcpxWU4.js} +1 -1
- langflow/frontend/assets/{index-CTZ9iXFr.js → index-DEuXrfXH.js} +1 -1
- langflow/frontend/assets/{index-DFfr0xSt.js → index-DF0oWRdd.js} +1 -1
- langflow/frontend/assets/{index-Bh5pQAZC.js → index-DI0zAExi.js} +1 -1
- langflow/frontend/assets/{index-CG-Suo0F.js → index-DJs6FoYC.js} +1 -1
- langflow/frontend/assets/{index-dvTTQhKz.js → index-DNS4La1f.js} +1 -1
- langflow/frontend/assets/{index-nLDaeeZg.js → index-DOI0ceS-.js} +1 -1
- langflow/frontend/assets/{index-DakdEtbq.js → index-DOb9c2bf.js} +1 -1
- langflow/frontend/assets/{index-CEVnRp4_.js → index-DS4F_Phe.js} +1 -1
- langflow/frontend/assets/{index-DGRg2M1l.js → index-DTJX3yQa.js} +1 -1
- langflow/frontend/assets/{index-BjAsd-Vo.js → index-DVV_etfW.js} +1 -1
- langflow/frontend/assets/{index-BrIuZD2A.js → index-DX_InNVT.js} +1 -1
- langflow/frontend/assets/{index-jG-zLXRN.js → index-DbmqjLy6.js} +1 -1
- langflow/frontend/assets/{index-DSvOFGJR.js → index-Dc0p1Oxl.js} +1 -1
- langflow/frontend/assets/{index-87GFtXu5.js → index-DkJCCraf.js} +1 -1
- langflow/frontend/assets/{index-BXidWkLM.js → index-DlMAYATX.js} +1 -1
- langflow/frontend/assets/{index-sbTxhltT.js → index-DmaQAn3K.js} +1 -1
- langflow/frontend/assets/{index-DkC5vMvx.js → index-DmvjdU1N.js} +1 -1
- langflow/frontend/assets/{index-CSUglByd.js → index-DnusMCK1.js} +1 -1
- langflow/frontend/assets/{index-DZOTHXs0.js → index-DoFlaGDx.js} +1 -1
- langflow/frontend/assets/{index-CZkMjaa8.js → index-DqDQk0Cu.js} +1 -1
- langflow/frontend/assets/{index-lc10GnwG.js → index-DrvRK4_i.js} +1 -1
- langflow/frontend/assets/{index-BNm-yAYc.js → index-DtCsjX48.js} +1 -1
- langflow/frontend/assets/{index-BeLnhfG-.js → index-Dy7ehgeV.js} +1 -1
- langflow/frontend/assets/{index-RGG9hk9J.js → index-Dz0r9Idb.js} +1 -1
- langflow/frontend/assets/{index-Bcq2yA-p.js → index-DzDNhMMW.js} +1 -1
- langflow/frontend/assets/{index-P3f-GeAm.js → index-FYcoJPMP.js} +1 -1
- langflow/frontend/assets/{index-DQwvl_Rp.js → index-Iamzh9ZT.js} +1 -1
- langflow/frontend/assets/{index-Cy6n8tA9.js → index-J0pvFqLk.js} +1 -1
- langflow/frontend/assets/{index-D1XTMye3.js → index-J98sU-1p.js} +1 -1
- langflow/frontend/assets/{index-BZ0rL0tK.js → index-JHCxbvlW.js} +1 -1
- langflow/frontend/assets/{index-DmSH63k1.js → index-KnS52ylc.js} +1 -1
- langflow/frontend/assets/{index-WGZ88ShH.js → index-L7FKc9QN.js} +1 -1
- langflow/frontend/assets/{index-BIoFnUtx.js → index-RveG4dl9.js} +1 -1
- langflow/frontend/assets/{index-BDdkPrzu.js → index-T2jJOG85.js} +1 -1
- langflow/frontend/assets/{index-2839k6WO.js → index-TRyDa01A.js} +1 -1
- langflow/frontend/assets/{index-DvOdMz35.js → index-U7J1YiWE.js} +1 -1
- langflow/frontend/assets/{index-DzUx1-Bl.js → index-UI2ws3qp.js} +1984 -1984
- langflow/frontend/assets/{index-8Fx5I2fx.js → index-VO-pk-Hg.js} +1 -1
- langflow/frontend/assets/{index-e-RKmhti.js → index-_3qag0I4.js} +1 -1
- langflow/frontend/assets/{index-X67tRPXo.js → index-dfaj9-hY.js} +1 -1
- langflow/frontend/assets/{index-CHexGuNQ.js → index-eJwu5YEi.js} +1 -1
- langflow/frontend/assets/{index-Dz5YIK1W.js → index-in188l0A.js} +1 -1
- langflow/frontend/assets/{index-CTwkLLMr.js → index-pkOi9P45.js} +1 -1
- langflow/frontend/assets/{index-D6BaTmee.js → index-qXcoVIRo.js} +1 -1
- langflow/frontend/assets/{index-euS8RcNY.js → index-xVx59Op-.js} +1 -1
- langflow/frontend/assets/{index-C4WueQ4k.js → index-yIh6-LZT.js} +1 -1
- langflow/frontend/assets/lazyIconImports-kvf_Kak2.js +2 -0
- langflow/frontend/assets/{use-post-add-user-CA-_peAV.js → use-post-add-user-Bt6vZvvT.js} +1 -1
- langflow/frontend/index.html +2 -2
- langflow/initial_setup/starter_projects/Knowledge Ingestion.json +1052 -0
- langflow/initial_setup/starter_projects/Knowledge Retrieval.json +709 -0
- langflow/initial_setup/starter_projects/News Aggregator.json +4 -4
- langflow/services/database/models/user/crud.py +7 -0
- langflow/services/settings/auth.py +14 -1
- langflow/services/settings/base.py +3 -0
- langflow/services/utils.py +8 -3
- {langflow_base_nightly-0.5.0.dev30.dist-info → langflow_base_nightly-0.5.0.dev32.dist-info}/METADATA +2 -1
- {langflow_base_nightly-0.5.0.dev30.dist-info → langflow_base_nightly-0.5.0.dev32.dist-info}/RECORD +146 -140
- langflow/frontend/assets/index-DIcdzk44.css +0 -1
- langflow/frontend/assets/lazyIconImports-lnczjBhY.js +0 -2
- {langflow_base_nightly-0.5.0.dev30.dist-info → langflow_base_nightly-0.5.0.dev32.dist-info}/WHEEL +0 -0
- {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",
|