@mastra/rag 0.1.18-alpha.4 → 0.1.18-alpha.5
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.
- package/.turbo/turbo-build.log +7 -7
- package/CHANGELOG.md +6 -0
- package/dist/index.cjs +83 -14
- package/dist/index.js +83 -14
- package/package.json +1 -1
- package/src/tools/graph-rag.ts +47 -13
- package/src/tools/vector-query.ts +49 -14
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
|
|
2
|
-
> @mastra/rag@0.1.18-alpha.
|
|
2
|
+
> @mastra/rag@0.1.18-alpha.5 build /home/runner/work/mastra/mastra/packages/rag
|
|
3
3
|
> tsup src/index.ts --format esm,cjs --experimental-dts --clean --treeshake=smallest --splitting
|
|
4
4
|
|
|
5
5
|
[34mCLI[39m Building entry: src/index.ts
|
|
6
6
|
[34mCLI[39m Using tsconfig: tsconfig.json
|
|
7
7
|
[34mCLI[39m tsup v8.4.0
|
|
8
8
|
[34mTSC[39m Build start
|
|
9
|
-
[32mTSC[39m ⚡️ Build success in
|
|
9
|
+
[32mTSC[39m ⚡️ Build success in 25972ms
|
|
10
10
|
[34mDTS[39m Build start
|
|
11
11
|
[34mCLI[39m Target: es2022
|
|
12
12
|
Analysis will use the bundled TypeScript version 5.8.2
|
|
13
13
|
[36mWriting package typings: /home/runner/work/mastra/mastra/packages/rag/dist/_tsup-dts-rollup.d.ts[39m
|
|
14
14
|
Analysis will use the bundled TypeScript version 5.8.2
|
|
15
15
|
[36mWriting package typings: /home/runner/work/mastra/mastra/packages/rag/dist/_tsup-dts-rollup.d.cts[39m
|
|
16
|
-
[32mDTS[39m ⚡️ Build success in
|
|
16
|
+
[32mDTS[39m ⚡️ Build success in 37741ms
|
|
17
17
|
[34mCLI[39m Cleaning output folder
|
|
18
18
|
[34mESM[39m Build start
|
|
19
19
|
[34mCJS[39m Build start
|
|
20
|
-
[32mCJS[39m [1mdist/index.cjs [22m[
|
|
21
|
-
[32mCJS[39m ⚡️ Build success in
|
|
22
|
-
[32mESM[39m [1mdist/index.js [22m[
|
|
23
|
-
[32mESM[39m ⚡️ Build success in
|
|
20
|
+
[32mCJS[39m [1mdist/index.cjs [22m[32m96.18 KB[39m
|
|
21
|
+
[32mCJS[39m ⚡️ Build success in 2138ms
|
|
22
|
+
[32mESM[39m [1mdist/index.js [22m[32m95.46 KB[39m
|
|
23
|
+
[32mESM[39m ⚡️ Build success in 2138ms
|
package/CHANGELOG.md
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -1904,10 +1904,24 @@ var createGraphRAGTool = ({
|
|
|
1904
1904
|
}),
|
|
1905
1905
|
description: toolDescription,
|
|
1906
1906
|
execute: async ({ context: { queryText, topK, filter }, mastra }) => {
|
|
1907
|
-
const topKValue = typeof topK === "number" && !isNaN(topK) ? topK : typeof topK === "string" && !isNaN(Number(topK)) ? Number(topK) : 10;
|
|
1908
|
-
const vectorStore = mastra?.getVector(vectorStoreName);
|
|
1909
1907
|
const logger = mastra?.getLogger();
|
|
1910
|
-
if (
|
|
1908
|
+
if (!logger) {
|
|
1909
|
+
console.warn(
|
|
1910
|
+
"[GraphRAGTool] Logger not initialized: no debug or error logs will be recorded for this tool execution."
|
|
1911
|
+
);
|
|
1912
|
+
}
|
|
1913
|
+
if (logger) {
|
|
1914
|
+
logger.debug("[GraphRAGTool] execute called with:", { queryText, topK, filter });
|
|
1915
|
+
}
|
|
1916
|
+
try {
|
|
1917
|
+
const topKValue = typeof topK === "number" && !isNaN(topK) ? topK : typeof topK === "string" && !isNaN(Number(topK)) ? Number(topK) : 10;
|
|
1918
|
+
const vectorStore = mastra?.getVector(vectorStoreName);
|
|
1919
|
+
if (!vectorStore) {
|
|
1920
|
+
if (logger) {
|
|
1921
|
+
logger.error("Vector store not found", { vectorStoreName });
|
|
1922
|
+
}
|
|
1923
|
+
return { relevantContext: [] };
|
|
1924
|
+
}
|
|
1911
1925
|
let queryFilter = {};
|
|
1912
1926
|
if (enableFilter) {
|
|
1913
1927
|
queryFilter = (() => {
|
|
@@ -1922,7 +1936,7 @@ var createGraphRAGTool = ({
|
|
|
1922
1936
|
})();
|
|
1923
1937
|
}
|
|
1924
1938
|
if (logger) {
|
|
1925
|
-
logger.debug("
|
|
1939
|
+
logger.debug("Prepared vector query parameters:", { queryFilter, topK: topKValue });
|
|
1926
1940
|
}
|
|
1927
1941
|
const { results, queryEmbedding } = await vectorQuerySearch({
|
|
1928
1942
|
indexName,
|
|
@@ -1933,6 +1947,9 @@ var createGraphRAGTool = ({
|
|
|
1933
1947
|
topK: topKValue,
|
|
1934
1948
|
includeVectors: true
|
|
1935
1949
|
});
|
|
1950
|
+
if (logger) {
|
|
1951
|
+
logger.debug("vectorQuerySearch returned results", { count: results.length });
|
|
1952
|
+
}
|
|
1936
1953
|
if (!isInitialized) {
|
|
1937
1954
|
const chunks = results.map((result) => ({
|
|
1938
1955
|
text: result?.metadata?.text,
|
|
@@ -1941,8 +1958,13 @@ var createGraphRAGTool = ({
|
|
|
1941
1958
|
const embeddings = results.map((result) => ({
|
|
1942
1959
|
vector: result.vector || []
|
|
1943
1960
|
}));
|
|
1961
|
+
if (logger) {
|
|
1962
|
+
logger.debug("Initializing graph", { chunkCount: chunks.length, embeddingCount: embeddings.length });
|
|
1963
|
+
}
|
|
1944
1964
|
graphRag.createGraph(chunks, embeddings);
|
|
1945
1965
|
isInitialized = true;
|
|
1966
|
+
} else if (logger) {
|
|
1967
|
+
logger.debug("Graph already initialized, skipping graph construction");
|
|
1946
1968
|
}
|
|
1947
1969
|
const rerankedResults = graphRag.query({
|
|
1948
1970
|
query: queryEmbedding,
|
|
@@ -1950,14 +1972,26 @@ var createGraphRAGTool = ({
|
|
|
1950
1972
|
randomWalkSteps: graphOptions.randomWalkSteps,
|
|
1951
1973
|
restartProb: graphOptions.restartProb
|
|
1952
1974
|
});
|
|
1975
|
+
if (logger) {
|
|
1976
|
+
logger.debug("GraphRAG query returned results", { count: rerankedResults.length });
|
|
1977
|
+
}
|
|
1953
1978
|
const relevantChunks = rerankedResults.map((result) => result.content);
|
|
1979
|
+
if (logger) {
|
|
1980
|
+
logger.debug("Returning relevant context chunks", { count: relevantChunks.length });
|
|
1981
|
+
}
|
|
1954
1982
|
return {
|
|
1955
1983
|
relevantContext: relevantChunks
|
|
1956
1984
|
};
|
|
1985
|
+
} catch (err) {
|
|
1986
|
+
if (logger) {
|
|
1987
|
+
logger.error("Unexpected error in VectorQueryTool execute", {
|
|
1988
|
+
error: err,
|
|
1989
|
+
errorMessage: err instanceof Error ? err.message : String(err),
|
|
1990
|
+
errorStack: err instanceof Error ? err.stack : void 0
|
|
1991
|
+
});
|
|
1992
|
+
}
|
|
1993
|
+
return { relevantContext: [] };
|
|
1957
1994
|
}
|
|
1958
|
-
return {
|
|
1959
|
-
relevantContext: []
|
|
1960
|
-
};
|
|
1961
1995
|
}
|
|
1962
1996
|
});
|
|
1963
1997
|
};
|
|
@@ -1988,10 +2022,24 @@ var createVectorQueryTool = ({
|
|
|
1988
2022
|
}),
|
|
1989
2023
|
description: toolDescription,
|
|
1990
2024
|
execute: async ({ context: { queryText, topK, filter }, mastra }) => {
|
|
1991
|
-
const topKValue = typeof topK === "number" && !isNaN(topK) ? topK : typeof topK === "string" && !isNaN(Number(topK)) ? Number(topK) : 10;
|
|
1992
|
-
const vectorStore = mastra?.getVector(vectorStoreName);
|
|
1993
2025
|
const logger = mastra?.getLogger();
|
|
1994
|
-
if (
|
|
2026
|
+
if (!logger) {
|
|
2027
|
+
console.warn(
|
|
2028
|
+
"[VectorQueryTool] Logger not initialized: no debug or error logs will be recorded for this tool execution."
|
|
2029
|
+
);
|
|
2030
|
+
}
|
|
2031
|
+
if (logger) {
|
|
2032
|
+
logger.debug("[VectorQueryTool] execute called with:", { queryText, topK, filter });
|
|
2033
|
+
}
|
|
2034
|
+
try {
|
|
2035
|
+
const topKValue = typeof topK === "number" && !isNaN(topK) ? topK : typeof topK === "string" && !isNaN(Number(topK)) ? Number(topK) : 10;
|
|
2036
|
+
const vectorStore = mastra?.getVector(vectorStoreName);
|
|
2037
|
+
if (!vectorStore) {
|
|
2038
|
+
if (logger) {
|
|
2039
|
+
logger.error("Vector store not found", { vectorStoreName });
|
|
2040
|
+
}
|
|
2041
|
+
return { relevantContext: [] };
|
|
2042
|
+
}
|
|
1995
2043
|
let queryFilter = {};
|
|
1996
2044
|
if (enableFilter && filter) {
|
|
1997
2045
|
queryFilter = (() => {
|
|
@@ -2006,7 +2054,7 @@ var createVectorQueryTool = ({
|
|
|
2006
2054
|
})();
|
|
2007
2055
|
}
|
|
2008
2056
|
if (logger) {
|
|
2009
|
-
logger.debug("
|
|
2057
|
+
logger.debug("Prepared vector query parameters", { queryText, topK: topKValue, queryFilter });
|
|
2010
2058
|
}
|
|
2011
2059
|
const { results } = await vectorQuerySearch({
|
|
2012
2060
|
indexName,
|
|
@@ -2016,22 +2064,43 @@ var createVectorQueryTool = ({
|
|
|
2016
2064
|
queryFilter: Object.keys(queryFilter || {}).length > 0 ? queryFilter : void 0,
|
|
2017
2065
|
topK: topKValue
|
|
2018
2066
|
});
|
|
2067
|
+
if (logger) {
|
|
2068
|
+
logger.debug("vectorQuerySearch returned results", { count: results.length });
|
|
2069
|
+
}
|
|
2019
2070
|
if (reranker) {
|
|
2071
|
+
if (logger) {
|
|
2072
|
+
logger.debug("Reranking results", { rerankerModel: reranker.model, rerankerOptions: reranker.options });
|
|
2073
|
+
}
|
|
2020
2074
|
const rerankedResults = await rerank(results, queryText, reranker.model, {
|
|
2021
2075
|
...reranker.options,
|
|
2022
2076
|
topK: reranker.options?.topK || topKValue
|
|
2023
2077
|
});
|
|
2078
|
+
if (logger) {
|
|
2079
|
+
logger.debug("Reranking complete", { rerankedCount: rerankedResults.length });
|
|
2080
|
+
}
|
|
2024
2081
|
const relevantChunks2 = rerankedResults.map(({ result }) => result?.metadata);
|
|
2082
|
+
if (logger) {
|
|
2083
|
+
logger.debug("Returning reranked relevant context chunks", { count: relevantChunks2.length });
|
|
2084
|
+
}
|
|
2025
2085
|
return { relevantContext: relevantChunks2 };
|
|
2026
2086
|
}
|
|
2027
2087
|
const relevantChunks = results.map((result) => result?.metadata);
|
|
2088
|
+
if (logger) {
|
|
2089
|
+
logger.debug("Returning relevant context chunks", { count: relevantChunks.length });
|
|
2090
|
+
}
|
|
2028
2091
|
return {
|
|
2029
2092
|
relevantContext: relevantChunks
|
|
2030
2093
|
};
|
|
2094
|
+
} catch (err) {
|
|
2095
|
+
if (logger) {
|
|
2096
|
+
logger.error("Unexpected error in VectorQueryTool execute", {
|
|
2097
|
+
error: err,
|
|
2098
|
+
errorMessage: err instanceof Error ? err.message : String(err),
|
|
2099
|
+
errorStack: err instanceof Error ? err.stack : void 0
|
|
2100
|
+
});
|
|
2101
|
+
}
|
|
2102
|
+
return { relevantContext: [] };
|
|
2031
2103
|
}
|
|
2032
|
-
return {
|
|
2033
|
-
relevantContext: []
|
|
2034
|
-
};
|
|
2035
2104
|
}
|
|
2036
2105
|
});
|
|
2037
2106
|
};
|
package/dist/index.js
CHANGED
|
@@ -1902,10 +1902,24 @@ var createGraphRAGTool = ({
|
|
|
1902
1902
|
}),
|
|
1903
1903
|
description: toolDescription,
|
|
1904
1904
|
execute: async ({ context: { queryText, topK, filter }, mastra }) => {
|
|
1905
|
-
const topKValue = typeof topK === "number" && !isNaN(topK) ? topK : typeof topK === "string" && !isNaN(Number(topK)) ? Number(topK) : 10;
|
|
1906
|
-
const vectorStore = mastra?.getVector(vectorStoreName);
|
|
1907
1905
|
const logger = mastra?.getLogger();
|
|
1908
|
-
if (
|
|
1906
|
+
if (!logger) {
|
|
1907
|
+
console.warn(
|
|
1908
|
+
"[GraphRAGTool] Logger not initialized: no debug or error logs will be recorded for this tool execution."
|
|
1909
|
+
);
|
|
1910
|
+
}
|
|
1911
|
+
if (logger) {
|
|
1912
|
+
logger.debug("[GraphRAGTool] execute called with:", { queryText, topK, filter });
|
|
1913
|
+
}
|
|
1914
|
+
try {
|
|
1915
|
+
const topKValue = typeof topK === "number" && !isNaN(topK) ? topK : typeof topK === "string" && !isNaN(Number(topK)) ? Number(topK) : 10;
|
|
1916
|
+
const vectorStore = mastra?.getVector(vectorStoreName);
|
|
1917
|
+
if (!vectorStore) {
|
|
1918
|
+
if (logger) {
|
|
1919
|
+
logger.error("Vector store not found", { vectorStoreName });
|
|
1920
|
+
}
|
|
1921
|
+
return { relevantContext: [] };
|
|
1922
|
+
}
|
|
1909
1923
|
let queryFilter = {};
|
|
1910
1924
|
if (enableFilter) {
|
|
1911
1925
|
queryFilter = (() => {
|
|
@@ -1920,7 +1934,7 @@ var createGraphRAGTool = ({
|
|
|
1920
1934
|
})();
|
|
1921
1935
|
}
|
|
1922
1936
|
if (logger) {
|
|
1923
|
-
logger.debug("
|
|
1937
|
+
logger.debug("Prepared vector query parameters:", { queryFilter, topK: topKValue });
|
|
1924
1938
|
}
|
|
1925
1939
|
const { results, queryEmbedding } = await vectorQuerySearch({
|
|
1926
1940
|
indexName,
|
|
@@ -1931,6 +1945,9 @@ var createGraphRAGTool = ({
|
|
|
1931
1945
|
topK: topKValue,
|
|
1932
1946
|
includeVectors: true
|
|
1933
1947
|
});
|
|
1948
|
+
if (logger) {
|
|
1949
|
+
logger.debug("vectorQuerySearch returned results", { count: results.length });
|
|
1950
|
+
}
|
|
1934
1951
|
if (!isInitialized) {
|
|
1935
1952
|
const chunks = results.map((result) => ({
|
|
1936
1953
|
text: result?.metadata?.text,
|
|
@@ -1939,8 +1956,13 @@ var createGraphRAGTool = ({
|
|
|
1939
1956
|
const embeddings = results.map((result) => ({
|
|
1940
1957
|
vector: result.vector || []
|
|
1941
1958
|
}));
|
|
1959
|
+
if (logger) {
|
|
1960
|
+
logger.debug("Initializing graph", { chunkCount: chunks.length, embeddingCount: embeddings.length });
|
|
1961
|
+
}
|
|
1942
1962
|
graphRag.createGraph(chunks, embeddings);
|
|
1943
1963
|
isInitialized = true;
|
|
1964
|
+
} else if (logger) {
|
|
1965
|
+
logger.debug("Graph already initialized, skipping graph construction");
|
|
1944
1966
|
}
|
|
1945
1967
|
const rerankedResults = graphRag.query({
|
|
1946
1968
|
query: queryEmbedding,
|
|
@@ -1948,14 +1970,26 @@ var createGraphRAGTool = ({
|
|
|
1948
1970
|
randomWalkSteps: graphOptions.randomWalkSteps,
|
|
1949
1971
|
restartProb: graphOptions.restartProb
|
|
1950
1972
|
});
|
|
1973
|
+
if (logger) {
|
|
1974
|
+
logger.debug("GraphRAG query returned results", { count: rerankedResults.length });
|
|
1975
|
+
}
|
|
1951
1976
|
const relevantChunks = rerankedResults.map((result) => result.content);
|
|
1977
|
+
if (logger) {
|
|
1978
|
+
logger.debug("Returning relevant context chunks", { count: relevantChunks.length });
|
|
1979
|
+
}
|
|
1952
1980
|
return {
|
|
1953
1981
|
relevantContext: relevantChunks
|
|
1954
1982
|
};
|
|
1983
|
+
} catch (err) {
|
|
1984
|
+
if (logger) {
|
|
1985
|
+
logger.error("Unexpected error in VectorQueryTool execute", {
|
|
1986
|
+
error: err,
|
|
1987
|
+
errorMessage: err instanceof Error ? err.message : String(err),
|
|
1988
|
+
errorStack: err instanceof Error ? err.stack : void 0
|
|
1989
|
+
});
|
|
1990
|
+
}
|
|
1991
|
+
return { relevantContext: [] };
|
|
1955
1992
|
}
|
|
1956
|
-
return {
|
|
1957
|
-
relevantContext: []
|
|
1958
|
-
};
|
|
1959
1993
|
}
|
|
1960
1994
|
});
|
|
1961
1995
|
};
|
|
@@ -1986,10 +2020,24 @@ var createVectorQueryTool = ({
|
|
|
1986
2020
|
}),
|
|
1987
2021
|
description: toolDescription,
|
|
1988
2022
|
execute: async ({ context: { queryText, topK, filter }, mastra }) => {
|
|
1989
|
-
const topKValue = typeof topK === "number" && !isNaN(topK) ? topK : typeof topK === "string" && !isNaN(Number(topK)) ? Number(topK) : 10;
|
|
1990
|
-
const vectorStore = mastra?.getVector(vectorStoreName);
|
|
1991
2023
|
const logger = mastra?.getLogger();
|
|
1992
|
-
if (
|
|
2024
|
+
if (!logger) {
|
|
2025
|
+
console.warn(
|
|
2026
|
+
"[VectorQueryTool] Logger not initialized: no debug or error logs will be recorded for this tool execution."
|
|
2027
|
+
);
|
|
2028
|
+
}
|
|
2029
|
+
if (logger) {
|
|
2030
|
+
logger.debug("[VectorQueryTool] execute called with:", { queryText, topK, filter });
|
|
2031
|
+
}
|
|
2032
|
+
try {
|
|
2033
|
+
const topKValue = typeof topK === "number" && !isNaN(topK) ? topK : typeof topK === "string" && !isNaN(Number(topK)) ? Number(topK) : 10;
|
|
2034
|
+
const vectorStore = mastra?.getVector(vectorStoreName);
|
|
2035
|
+
if (!vectorStore) {
|
|
2036
|
+
if (logger) {
|
|
2037
|
+
logger.error("Vector store not found", { vectorStoreName });
|
|
2038
|
+
}
|
|
2039
|
+
return { relevantContext: [] };
|
|
2040
|
+
}
|
|
1993
2041
|
let queryFilter = {};
|
|
1994
2042
|
if (enableFilter && filter) {
|
|
1995
2043
|
queryFilter = (() => {
|
|
@@ -2004,7 +2052,7 @@ var createVectorQueryTool = ({
|
|
|
2004
2052
|
})();
|
|
2005
2053
|
}
|
|
2006
2054
|
if (logger) {
|
|
2007
|
-
logger.debug("
|
|
2055
|
+
logger.debug("Prepared vector query parameters", { queryText, topK: topKValue, queryFilter });
|
|
2008
2056
|
}
|
|
2009
2057
|
const { results } = await vectorQuerySearch({
|
|
2010
2058
|
indexName,
|
|
@@ -2014,22 +2062,43 @@ var createVectorQueryTool = ({
|
|
|
2014
2062
|
queryFilter: Object.keys(queryFilter || {}).length > 0 ? queryFilter : void 0,
|
|
2015
2063
|
topK: topKValue
|
|
2016
2064
|
});
|
|
2065
|
+
if (logger) {
|
|
2066
|
+
logger.debug("vectorQuerySearch returned results", { count: results.length });
|
|
2067
|
+
}
|
|
2017
2068
|
if (reranker) {
|
|
2069
|
+
if (logger) {
|
|
2070
|
+
logger.debug("Reranking results", { rerankerModel: reranker.model, rerankerOptions: reranker.options });
|
|
2071
|
+
}
|
|
2018
2072
|
const rerankedResults = await rerank(results, queryText, reranker.model, {
|
|
2019
2073
|
...reranker.options,
|
|
2020
2074
|
topK: reranker.options?.topK || topKValue
|
|
2021
2075
|
});
|
|
2076
|
+
if (logger) {
|
|
2077
|
+
logger.debug("Reranking complete", { rerankedCount: rerankedResults.length });
|
|
2078
|
+
}
|
|
2022
2079
|
const relevantChunks2 = rerankedResults.map(({ result }) => result?.metadata);
|
|
2080
|
+
if (logger) {
|
|
2081
|
+
logger.debug("Returning reranked relevant context chunks", { count: relevantChunks2.length });
|
|
2082
|
+
}
|
|
2023
2083
|
return { relevantContext: relevantChunks2 };
|
|
2024
2084
|
}
|
|
2025
2085
|
const relevantChunks = results.map((result) => result?.metadata);
|
|
2086
|
+
if (logger) {
|
|
2087
|
+
logger.debug("Returning relevant context chunks", { count: relevantChunks.length });
|
|
2088
|
+
}
|
|
2026
2089
|
return {
|
|
2027
2090
|
relevantContext: relevantChunks
|
|
2028
2091
|
};
|
|
2092
|
+
} catch (err) {
|
|
2093
|
+
if (logger) {
|
|
2094
|
+
logger.error("Unexpected error in VectorQueryTool execute", {
|
|
2095
|
+
error: err,
|
|
2096
|
+
errorMessage: err instanceof Error ? err.message : String(err),
|
|
2097
|
+
errorStack: err instanceof Error ? err.stack : void 0
|
|
2098
|
+
});
|
|
2099
|
+
}
|
|
2100
|
+
return { relevantContext: [] };
|
|
2029
2101
|
}
|
|
2030
|
-
return {
|
|
2031
|
-
relevantContext: []
|
|
2032
|
-
};
|
|
2033
2102
|
}
|
|
2034
2103
|
});
|
|
2035
2104
|
};
|
package/package.json
CHANGED
package/src/tools/graph-rag.ts
CHANGED
|
@@ -64,16 +64,31 @@ export const createGraphRAGTool = ({
|
|
|
64
64
|
}),
|
|
65
65
|
description: toolDescription,
|
|
66
66
|
execute: async ({ context: { queryText, topK, filter }, mastra }) => {
|
|
67
|
-
const topKValue =
|
|
68
|
-
typeof topK === 'number' && !isNaN(topK)
|
|
69
|
-
? topK
|
|
70
|
-
: typeof topK === 'string' && !isNaN(Number(topK))
|
|
71
|
-
? Number(topK)
|
|
72
|
-
: 10;
|
|
73
|
-
const vectorStore = mastra?.getVector(vectorStoreName);
|
|
74
67
|
const logger = mastra?.getLogger();
|
|
68
|
+
if (!logger) {
|
|
69
|
+
console.warn(
|
|
70
|
+
'[GraphRAGTool] Logger not initialized: no debug or error logs will be recorded for this tool execution.',
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
if (logger) {
|
|
74
|
+
logger.debug('[GraphRAGTool] execute called with:', { queryText, topK, filter });
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
const topKValue =
|
|
78
|
+
typeof topK === 'number' && !isNaN(topK)
|
|
79
|
+
? topK
|
|
80
|
+
: typeof topK === 'string' && !isNaN(Number(topK))
|
|
81
|
+
? Number(topK)
|
|
82
|
+
: 10;
|
|
83
|
+
const vectorStore = mastra?.getVector(vectorStoreName);
|
|
84
|
+
|
|
85
|
+
if (!vectorStore) {
|
|
86
|
+
if (logger) {
|
|
87
|
+
logger.error('Vector store not found', { vectorStoreName });
|
|
88
|
+
}
|
|
89
|
+
return { relevantContext: [] };
|
|
90
|
+
}
|
|
75
91
|
|
|
76
|
-
if (vectorStore) {
|
|
77
92
|
let queryFilter = {};
|
|
78
93
|
if (enableFilter) {
|
|
79
94
|
queryFilter = (() => {
|
|
@@ -89,7 +104,7 @@ export const createGraphRAGTool = ({
|
|
|
89
104
|
})();
|
|
90
105
|
}
|
|
91
106
|
if (logger) {
|
|
92
|
-
logger.debug('
|
|
107
|
+
logger.debug('Prepared vector query parameters:', { queryFilter, topK: topKValue });
|
|
93
108
|
}
|
|
94
109
|
const { results, queryEmbedding } = await vectorQuerySearch({
|
|
95
110
|
indexName,
|
|
@@ -100,6 +115,9 @@ export const createGraphRAGTool = ({
|
|
|
100
115
|
topK: topKValue,
|
|
101
116
|
includeVectors: true,
|
|
102
117
|
});
|
|
118
|
+
if (logger) {
|
|
119
|
+
logger.debug('vectorQuerySearch returned results', { count: results.length });
|
|
120
|
+
}
|
|
103
121
|
|
|
104
122
|
// Initialize graph if not done yet
|
|
105
123
|
if (!isInitialized) {
|
|
@@ -112,8 +130,13 @@ export const createGraphRAGTool = ({
|
|
|
112
130
|
vector: result.vector || [],
|
|
113
131
|
}));
|
|
114
132
|
|
|
133
|
+
if (logger) {
|
|
134
|
+
logger.debug('Initializing graph', { chunkCount: chunks.length, embeddingCount: embeddings.length });
|
|
135
|
+
}
|
|
115
136
|
graphRag.createGraph(chunks, embeddings);
|
|
116
137
|
isInitialized = true;
|
|
138
|
+
} else if (logger) {
|
|
139
|
+
logger.debug('Graph already initialized, skipping graph construction');
|
|
117
140
|
}
|
|
118
141
|
|
|
119
142
|
// Get reranked results using GraphRAG
|
|
@@ -123,16 +146,27 @@ export const createGraphRAGTool = ({
|
|
|
123
146
|
randomWalkSteps: graphOptions.randomWalkSteps,
|
|
124
147
|
restartProb: graphOptions.restartProb,
|
|
125
148
|
});
|
|
126
|
-
|
|
149
|
+
if (logger) {
|
|
150
|
+
logger.debug('GraphRAG query returned results', { count: rerankedResults.length });
|
|
151
|
+
}
|
|
127
152
|
// Extract and combine relevant chunks
|
|
128
153
|
const relevantChunks = rerankedResults.map(result => result.content);
|
|
154
|
+
if (logger) {
|
|
155
|
+
logger.debug('Returning relevant context chunks', { count: relevantChunks.length });
|
|
156
|
+
}
|
|
129
157
|
return {
|
|
130
158
|
relevantContext: relevantChunks,
|
|
131
159
|
};
|
|
160
|
+
} catch (err) {
|
|
161
|
+
if (logger) {
|
|
162
|
+
logger.error('Unexpected error in VectorQueryTool execute', {
|
|
163
|
+
error: err,
|
|
164
|
+
errorMessage: err instanceof Error ? err.message : String(err),
|
|
165
|
+
errorStack: err instanceof Error ? err.stack : undefined,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
return { relevantContext: [] };
|
|
132
169
|
}
|
|
133
|
-
return {
|
|
134
|
-
relevantContext: [],
|
|
135
|
-
};
|
|
136
170
|
},
|
|
137
171
|
});
|
|
138
172
|
};
|
|
@@ -52,18 +52,32 @@ export const createVectorQueryTool = ({
|
|
|
52
52
|
}),
|
|
53
53
|
description: toolDescription,
|
|
54
54
|
execute: async ({ context: { queryText, topK, filter }, mastra }) => {
|
|
55
|
-
const topKValue =
|
|
56
|
-
typeof topK === 'number' && !isNaN(topK)
|
|
57
|
-
? topK
|
|
58
|
-
: typeof topK === 'string' && !isNaN(Number(topK))
|
|
59
|
-
? Number(topK)
|
|
60
|
-
: 10;
|
|
61
|
-
|
|
62
|
-
const vectorStore = mastra?.getVector(vectorStoreName);
|
|
63
55
|
const logger = mastra?.getLogger();
|
|
56
|
+
if (!logger) {
|
|
57
|
+
console.warn(
|
|
58
|
+
'[VectorQueryTool] Logger not initialized: no debug or error logs will be recorded for this tool execution.',
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
if (logger) {
|
|
62
|
+
logger.debug('[VectorQueryTool] execute called with:', { queryText, topK, filter });
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
const topKValue =
|
|
66
|
+
typeof topK === 'number' && !isNaN(topK)
|
|
67
|
+
? topK
|
|
68
|
+
: typeof topK === 'string' && !isNaN(Number(topK))
|
|
69
|
+
? Number(topK)
|
|
70
|
+
: 10;
|
|
64
71
|
|
|
65
|
-
|
|
66
|
-
|
|
72
|
+
const vectorStore = mastra?.getVector(vectorStoreName);
|
|
73
|
+
|
|
74
|
+
if (!vectorStore) {
|
|
75
|
+
if (logger) {
|
|
76
|
+
logger.error('Vector store not found', { vectorStoreName });
|
|
77
|
+
}
|
|
78
|
+
return { relevantContext: [] };
|
|
79
|
+
}
|
|
80
|
+
// Get relevant chunks from the vector database
|
|
67
81
|
let queryFilter = {};
|
|
68
82
|
if (enableFilter && filter) {
|
|
69
83
|
queryFilter = (() => {
|
|
@@ -79,7 +93,7 @@ export const createVectorQueryTool = ({
|
|
|
79
93
|
})();
|
|
80
94
|
}
|
|
81
95
|
if (logger) {
|
|
82
|
-
logger.debug('
|
|
96
|
+
logger.debug('Prepared vector query parameters', { queryText, topK: topKValue, queryFilter });
|
|
83
97
|
}
|
|
84
98
|
|
|
85
99
|
const { results } = await vectorQuerySearch({
|
|
@@ -90,23 +104,44 @@ export const createVectorQueryTool = ({
|
|
|
90
104
|
queryFilter: Object.keys(queryFilter || {}).length > 0 ? queryFilter : undefined,
|
|
91
105
|
topK: topKValue,
|
|
92
106
|
});
|
|
107
|
+
if (logger) {
|
|
108
|
+
logger.debug('vectorQuerySearch returned results', { count: results.length });
|
|
109
|
+
}
|
|
93
110
|
if (reranker) {
|
|
111
|
+
if (logger) {
|
|
112
|
+
logger.debug('Reranking results', { rerankerModel: reranker.model, rerankerOptions: reranker.options });
|
|
113
|
+
}
|
|
94
114
|
const rerankedResults = await rerank(results, queryText, reranker.model, {
|
|
95
115
|
...reranker.options,
|
|
96
116
|
topK: reranker.options?.topK || topKValue,
|
|
97
117
|
});
|
|
118
|
+
if (logger) {
|
|
119
|
+
logger.debug('Reranking complete', { rerankedCount: rerankedResults.length });
|
|
120
|
+
}
|
|
98
121
|
const relevantChunks = rerankedResults.map(({ result }) => result?.metadata);
|
|
122
|
+
if (logger) {
|
|
123
|
+
logger.debug('Returning reranked relevant context chunks', { count: relevantChunks.length });
|
|
124
|
+
}
|
|
99
125
|
return { relevantContext: relevantChunks };
|
|
100
126
|
}
|
|
101
127
|
|
|
102
128
|
const relevantChunks = results.map(result => result?.metadata);
|
|
129
|
+
if (logger) {
|
|
130
|
+
logger.debug('Returning relevant context chunks', { count: relevantChunks.length });
|
|
131
|
+
}
|
|
103
132
|
return {
|
|
104
133
|
relevantContext: relevantChunks,
|
|
105
134
|
};
|
|
135
|
+
} catch (err) {
|
|
136
|
+
if (logger) {
|
|
137
|
+
logger.error('Unexpected error in VectorQueryTool execute', {
|
|
138
|
+
error: err,
|
|
139
|
+
errorMessage: err instanceof Error ? err.message : String(err),
|
|
140
|
+
errorStack: err instanceof Error ? err.stack : undefined,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
return { relevantContext: [] };
|
|
106
144
|
}
|
|
107
|
-
return {
|
|
108
|
-
relevantContext: [],
|
|
109
|
-
};
|
|
110
145
|
},
|
|
111
146
|
});
|
|
112
147
|
};
|