@librechat/agents 3.7.5 → 3.7.6
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/dist/cjs/tools/search/keenable-search.cjs +7 -1
- package/dist/cjs/tools/search/keenable-search.cjs.map +1 -1
- package/dist/esm/tools/search/keenable-search.mjs +7 -1
- package/dist/esm/tools/search/keenable-search.mjs.map +1 -1
- package/package.json +1 -1
- package/src/tools/search/keenable-search.ts +18 -1
|
@@ -13,6 +13,12 @@ const KEENABLE_DATE_RANGES = {
|
|
|
13
13
|
["m"]: "1mo",
|
|
14
14
|
["y"]: "1y"
|
|
15
15
|
};
|
|
16
|
+
const SNIPPET_MAX_LENGTH = 500;
|
|
17
|
+
function toSnippet(result) {
|
|
18
|
+
const snippet = (result.snippet ?? "").replace(/\s+/g, " ").trim();
|
|
19
|
+
const description = (result.description ?? "").replace(/\s+/g, " ").trim();
|
|
20
|
+
return (snippet !== "" ? snippet : description).slice(0, SNIPPET_MAX_LENGTH);
|
|
21
|
+
}
|
|
16
22
|
const createKeenableAPI = (apiKey, apiUrl, options) => {
|
|
17
23
|
const resolvedKey = apiKey ?? process.env.KEENABLE_API_KEY;
|
|
18
24
|
const hasKey = resolvedKey != null && resolvedKey !== "";
|
|
@@ -44,7 +50,7 @@ const createKeenableAPI = (apiKey, apiUrl, options) => {
|
|
|
44
50
|
data: { organic: (Array.isArray(response.data.results) ? response.data.results.slice(0, maxResults) : []).map((result) => ({
|
|
45
51
|
title: result.title ?? "",
|
|
46
52
|
link: result.url ?? "",
|
|
47
|
-
snippet: result
|
|
53
|
+
snippet: toSnippet(result),
|
|
48
54
|
date: result.published_at
|
|
49
55
|
})) }
|
|
50
56
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keenable-search.cjs","names":[],"sources":["../../../../src/tools/search/keenable-search.ts"],"mappings":";;;;;AAIA,MAAM,2BAA2B;AAIjC,MAAM,2BAA2B;AACjC,MAAM,0BAA0B;AAChC,MAAM,uBAAmD;QAC/B;QACI;QACJ;QACC;QACD;AAC1B;AAEA,MAAa,qBACX,QACA,QACA,YAGG;CACH,MAAM,cAAc,UAAU,QAAQ,IAAI;CAC1C,MAAM,SAAS,eAAe,QAAQ,gBAAgB;CACtD,MAAM,UAAU,SAAS,WAAW;CACpC,MAAM,cACJ,UACA,QAAQ,IAAI,qBACX,SAAS,2BAA2B;CAKvC,MAAM,UAAkC;EACtC,gBAAgB;EAChB,oBAAoB,SAAS,oBAAoB;CACnD;CACA,IAAI,QACF,QAAQ,eAAe;CAGzB,MAAM,aAAa,OAAO,EACxB,OACA,MACA,aAAa,QACoC;EACjD,IAAI,CAAC,MAAM,KAAK,GACd,OAAO;GAAE,SAAS;GAAO,OAAO;EAAwB;EAG1D,IAAI;GAGF,MAAM,UAAmC,EAAE,MAAM;GACjD,IAAI,SAAS,QAAQ,QAAQ,QAAQ,SAAS,IAC5C,QAAQ,OAAO,QAAQ;GAEzB,IAAI,QAAQ,MACV,QAAQ,kBAAkB,qBAAqB;GAGjD,MAAM,WAAW,MAAM,MAAA,QAAM,KAC3B,aACA,SACA;IACE;IACA;IACA,WAAW,SAAS;IACpB,YAAY,SAAS;GACvB,CACF;GAEA,MAAM,aAAa,KAAK,IACtB,KAAK,IAAI,GAAG,SAAS,cAAc,UAAU,GAC7C,EACF;GAYA,OAAO;IAAE,SAAS;IAAM,MAAM,EAAE,UAXb,MAAM,QAAQ,SAAS,KAAK,OAAO,IAClD,SAAS,KAAK,QAAQ,MAAM,GAAG,UAAU,IACzC,CAAC,EAAA,CAEyC,KAAK,YAAY;KAC7D,OAAO,OAAO,SAAS;KACvB,MAAM,OAAO,OAAO;KACpB,SAAS,
|
|
1
|
+
{"version":3,"file":"keenable-search.cjs","names":[],"sources":["../../../../src/tools/search/keenable-search.ts"],"mappings":";;;;;AAIA,MAAM,2BAA2B;AAIjC,MAAM,2BAA2B;AACjC,MAAM,0BAA0B;AAChC,MAAM,uBAAmD;QAC/B;QACI;QACJ;QACC;QACD;AAC1B;AAKA,MAAM,qBAAqB;AAO3B,SAAS,UAAU,QAAwC;CACzD,MAAM,WAAW,OAAO,WAAW,GAAA,CAAI,QAAQ,QAAQ,GAAG,CAAC,CAAC,KAAK;CACjE,MAAM,eAAe,OAAO,eAAe,GAAA,CAAI,QAAQ,QAAQ,GAAG,CAAC,CAAC,KAAK;CAEzE,QADa,YAAY,KAAK,UAAU,YAAA,CAC5B,MAAM,GAAG,kBAAkB;AACzC;AAEA,MAAa,qBACX,QACA,QACA,YAGG;CACH,MAAM,cAAc,UAAU,QAAQ,IAAI;CAC1C,MAAM,SAAS,eAAe,QAAQ,gBAAgB;CACtD,MAAM,UAAU,SAAS,WAAW;CACpC,MAAM,cACJ,UACA,QAAQ,IAAI,qBACX,SAAS,2BAA2B;CAKvC,MAAM,UAAkC;EACtC,gBAAgB;EAChB,oBAAoB,SAAS,oBAAoB;CACnD;CACA,IAAI,QACF,QAAQ,eAAe;CAGzB,MAAM,aAAa,OAAO,EACxB,OACA,MACA,aAAa,QACoC;EACjD,IAAI,CAAC,MAAM,KAAK,GACd,OAAO;GAAE,SAAS;GAAO,OAAO;EAAwB;EAG1D,IAAI;GAGF,MAAM,UAAmC,EAAE,MAAM;GACjD,IAAI,SAAS,QAAQ,QAAQ,QAAQ,SAAS,IAC5C,QAAQ,OAAO,QAAQ;GAEzB,IAAI,QAAQ,MACV,QAAQ,kBAAkB,qBAAqB;GAGjD,MAAM,WAAW,MAAM,MAAA,QAAM,KAC3B,aACA,SACA;IACE;IACA;IACA,WAAW,SAAS;IACpB,YAAY,SAAS;GACvB,CACF;GAEA,MAAM,aAAa,KAAK,IACtB,KAAK,IAAI,GAAG,SAAS,cAAc,UAAU,GAC7C,EACF;GAYA,OAAO;IAAE,SAAS;IAAM,MAAM,EAAE,UAXb,MAAM,QAAQ,SAAS,KAAK,OAAO,IAClD,SAAS,KAAK,QAAQ,MAAM,GAAG,UAAU,IACzC,CAAC,EAAA,CAEyC,KAAK,YAAY;KAC7D,OAAO,OAAO,SAAS;KACvB,MAAM,OAAO,OAAO;KACpB,SAAS,UAAU,MAAM;KACzB,MAAM,OAAO;IACf,EAEsC,EAAE;GAAE;EAC5C,SAAS,OAAO;GAGd,OAAO;IACL,SAAS;IACT,OAAO,gCAHP,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;GAIvD;EACF;CACF;CAEA,OAAO,EAAE,WAAW;AACtB"}
|
|
@@ -11,6 +11,12 @@ const KEENABLE_DATE_RANGES = {
|
|
|
11
11
|
["m"]: "1mo",
|
|
12
12
|
["y"]: "1y"
|
|
13
13
|
};
|
|
14
|
+
const SNIPPET_MAX_LENGTH = 500;
|
|
15
|
+
function toSnippet(result) {
|
|
16
|
+
const snippet = (result.snippet ?? "").replace(/\s+/g, " ").trim();
|
|
17
|
+
const description = (result.description ?? "").replace(/\s+/g, " ").trim();
|
|
18
|
+
return (snippet !== "" ? snippet : description).slice(0, SNIPPET_MAX_LENGTH);
|
|
19
|
+
}
|
|
14
20
|
const createKeenableAPI = (apiKey, apiUrl, options) => {
|
|
15
21
|
const resolvedKey = apiKey ?? process.env.KEENABLE_API_KEY;
|
|
16
22
|
const hasKey = resolvedKey != null && resolvedKey !== "";
|
|
@@ -42,7 +48,7 @@ const createKeenableAPI = (apiKey, apiUrl, options) => {
|
|
|
42
48
|
data: { organic: (Array.isArray(response.data.results) ? response.data.results.slice(0, maxResults) : []).map((result) => ({
|
|
43
49
|
title: result.title ?? "",
|
|
44
50
|
link: result.url ?? "",
|
|
45
|
-
snippet: result
|
|
51
|
+
snippet: toSnippet(result),
|
|
46
52
|
date: result.published_at
|
|
47
53
|
})) }
|
|
48
54
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keenable-search.mjs","names":[],"sources":["../../../../src/tools/search/keenable-search.ts"],"mappings":";;;AAIA,MAAM,2BAA2B;AAIjC,MAAM,2BAA2B;AACjC,MAAM,0BAA0B;AAChC,MAAM,uBAAmD;QAC/B;QACI;QACJ;QACC;QACD;AAC1B;AAEA,MAAa,qBACX,QACA,QACA,YAGG;CACH,MAAM,cAAc,UAAU,QAAQ,IAAI;CAC1C,MAAM,SAAS,eAAe,QAAQ,gBAAgB;CACtD,MAAM,UAAU,SAAS,WAAW;CACpC,MAAM,cACJ,UACA,QAAQ,IAAI,qBACX,SAAS,2BAA2B;CAKvC,MAAM,UAAkC;EACtC,gBAAgB;EAChB,oBAAoB,SAAS,oBAAoB;CACnD;CACA,IAAI,QACF,QAAQ,eAAe;CAGzB,MAAM,aAAa,OAAO,EACxB,OACA,MACA,aAAa,QACoC;EACjD,IAAI,CAAC,MAAM,KAAK,GACd,OAAO;GAAE,SAAS;GAAO,OAAO;EAAwB;EAG1D,IAAI;GAGF,MAAM,UAAmC,EAAE,MAAM;GACjD,IAAI,SAAS,QAAQ,QAAQ,QAAQ,SAAS,IAC5C,QAAQ,OAAO,QAAQ;GAEzB,IAAI,QAAQ,MACV,QAAQ,kBAAkB,qBAAqB;GAGjD,MAAM,WAAW,MAAM,MAAM,KAC3B,aACA,SACA;IACE;IACA;IACA,WAAW,SAAS;IACpB,YAAY,SAAS;GACvB,CACF;GAEA,MAAM,aAAa,KAAK,IACtB,KAAK,IAAI,GAAG,SAAS,cAAc,UAAU,GAC7C,EACF;GAYA,OAAO;IAAE,SAAS;IAAM,MAAM,EAAE,UAXb,MAAM,QAAQ,SAAS,KAAK,OAAO,IAClD,SAAS,KAAK,QAAQ,MAAM,GAAG,UAAU,IACzC,CAAC,EAAA,CAEyC,KAAK,YAAY;KAC7D,OAAO,OAAO,SAAS;KACvB,MAAM,OAAO,OAAO;KACpB,SAAS,
|
|
1
|
+
{"version":3,"file":"keenable-search.mjs","names":[],"sources":["../../../../src/tools/search/keenable-search.ts"],"mappings":";;;AAIA,MAAM,2BAA2B;AAIjC,MAAM,2BAA2B;AACjC,MAAM,0BAA0B;AAChC,MAAM,uBAAmD;QAC/B;QACI;QACJ;QACC;QACD;AAC1B;AAKA,MAAM,qBAAqB;AAO3B,SAAS,UAAU,QAAwC;CACzD,MAAM,WAAW,OAAO,WAAW,GAAA,CAAI,QAAQ,QAAQ,GAAG,CAAC,CAAC,KAAK;CACjE,MAAM,eAAe,OAAO,eAAe,GAAA,CAAI,QAAQ,QAAQ,GAAG,CAAC,CAAC,KAAK;CAEzE,QADa,YAAY,KAAK,UAAU,YAAA,CAC5B,MAAM,GAAG,kBAAkB;AACzC;AAEA,MAAa,qBACX,QACA,QACA,YAGG;CACH,MAAM,cAAc,UAAU,QAAQ,IAAI;CAC1C,MAAM,SAAS,eAAe,QAAQ,gBAAgB;CACtD,MAAM,UAAU,SAAS,WAAW;CACpC,MAAM,cACJ,UACA,QAAQ,IAAI,qBACX,SAAS,2BAA2B;CAKvC,MAAM,UAAkC;EACtC,gBAAgB;EAChB,oBAAoB,SAAS,oBAAoB;CACnD;CACA,IAAI,QACF,QAAQ,eAAe;CAGzB,MAAM,aAAa,OAAO,EACxB,OACA,MACA,aAAa,QACoC;EACjD,IAAI,CAAC,MAAM,KAAK,GACd,OAAO;GAAE,SAAS;GAAO,OAAO;EAAwB;EAG1D,IAAI;GAGF,MAAM,UAAmC,EAAE,MAAM;GACjD,IAAI,SAAS,QAAQ,QAAQ,QAAQ,SAAS,IAC5C,QAAQ,OAAO,QAAQ;GAEzB,IAAI,QAAQ,MACV,QAAQ,kBAAkB,qBAAqB;GAGjD,MAAM,WAAW,MAAM,MAAM,KAC3B,aACA,SACA;IACE;IACA;IACA,WAAW,SAAS;IACpB,YAAY,SAAS;GACvB,CACF;GAEA,MAAM,aAAa,KAAK,IACtB,KAAK,IAAI,GAAG,SAAS,cAAc,UAAU,GAC7C,EACF;GAYA,OAAO;IAAE,SAAS;IAAM,MAAM,EAAE,UAXb,MAAM,QAAQ,SAAS,KAAK,OAAO,IAClD,SAAS,KAAK,QAAQ,MAAM,GAAG,UAAU,IACzC,CAAC,EAAA,CAEyC,KAAK,YAAY;KAC7D,OAAO,OAAO,SAAS;KACvB,MAAM,OAAO,OAAO;KACpB,SAAS,UAAU,MAAM;KACzB,MAAM,OAAO;IACf,EAEsC,EAAE;GAAE;EAC5C,SAAS,OAAO;GAGd,OAAO;IACL,SAAS;IACT,OAAO,gCAHP,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;GAIvD;EACF;CACF;CAEA,OAAO,EAAE,WAAW;AACtB"}
|
package/package.json
CHANGED
|
@@ -16,6 +16,23 @@ const KEENABLE_DATE_RANGES: Record<DATE_RANGE, string> = {
|
|
|
16
16
|
[DATE_RANGE.PAST_YEAR]: '1y',
|
|
17
17
|
};
|
|
18
18
|
|
|
19
|
+
/** Characters of page text kept per result. Keenable returns the whole page on
|
|
20
|
+
* every search result, an order of magnitude more than the other providers here
|
|
21
|
+
* return, which would crowd out the reranker and the LLM output budget. */
|
|
22
|
+
const SNIPPET_MAX_LENGTH = 500;
|
|
23
|
+
|
|
24
|
+
/** Keenable sends both `description` and `snippet` on every result: `snippet`
|
|
25
|
+
* carries the page text and `description` is the page's meta description, which
|
|
26
|
+
* is empty for most pages. Either field can arrive as an empty string, so the
|
|
27
|
+
* pick is on emptiness rather than nullishness: a `??` chain would keep an empty
|
|
28
|
+
* `snippet` over a `description` that does carry text. */
|
|
29
|
+
function toSnippet(result: t.KeenableSearchResult): string {
|
|
30
|
+
const snippet = (result.snippet ?? '').replace(/\s+/g, ' ').trim();
|
|
31
|
+
const description = (result.description ?? '').replace(/\s+/g, ' ').trim();
|
|
32
|
+
const text = snippet !== '' ? snippet : description;
|
|
33
|
+
return text.slice(0, SNIPPET_MAX_LENGTH);
|
|
34
|
+
}
|
|
35
|
+
|
|
19
36
|
export const createKeenableAPI = (
|
|
20
37
|
apiKey?: string,
|
|
21
38
|
apiUrl?: string,
|
|
@@ -84,7 +101,7 @@ export const createKeenableAPI = (
|
|
|
84
101
|
const organic: t.OrganicResult[] = rawResults.map((result) => ({
|
|
85
102
|
title: result.title ?? '',
|
|
86
103
|
link: result.url ?? '',
|
|
87
|
-
snippet: result
|
|
104
|
+
snippet: toSnippet(result),
|
|
88
105
|
date: result.published_at,
|
|
89
106
|
}));
|
|
90
107
|
|