@librechat/agents 2.4.322 → 3.0.0-rc1
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/agents/AgentContext.cjs +218 -0
- package/dist/cjs/agents/AgentContext.cjs.map +1 -0
- package/dist/cjs/common/enum.cjs +14 -5
- package/dist/cjs/common/enum.cjs.map +1 -1
- package/dist/cjs/events.cjs +10 -6
- package/dist/cjs/events.cjs.map +1 -1
- package/dist/cjs/graphs/Graph.cjs +309 -212
- package/dist/cjs/graphs/Graph.cjs.map +1 -1
- package/dist/cjs/graphs/MultiAgentGraph.cjs +322 -0
- package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -0
- package/dist/cjs/llm/anthropic/index.cjs +54 -9
- package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/types.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +52 -6
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +22 -2
- package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/tools.cjs +29 -0
- package/dist/cjs/llm/anthropic/utils/tools.cjs.map +1 -0
- package/dist/cjs/llm/google/index.cjs +144 -0
- package/dist/cjs/llm/google/index.cjs.map +1 -0
- package/dist/cjs/llm/google/utils/common.cjs +477 -0
- package/dist/cjs/llm/google/utils/common.cjs.map +1 -0
- package/dist/cjs/llm/ollama/index.cjs +67 -0
- package/dist/cjs/llm/ollama/index.cjs.map +1 -0
- package/dist/cjs/llm/ollama/utils.cjs +158 -0
- package/dist/cjs/llm/ollama/utils.cjs.map +1 -0
- package/dist/cjs/llm/openai/index.cjs +389 -3
- package/dist/cjs/llm/openai/index.cjs.map +1 -1
- package/dist/cjs/llm/openai/utils/index.cjs +672 -0
- package/dist/cjs/llm/openai/utils/index.cjs.map +1 -0
- package/dist/cjs/llm/providers.cjs +15 -15
- package/dist/cjs/llm/providers.cjs.map +1 -1
- package/dist/cjs/llm/text.cjs +14 -3
- package/dist/cjs/llm/text.cjs.map +1 -1
- package/dist/cjs/llm/vertexai/index.cjs +330 -0
- package/dist/cjs/llm/vertexai/index.cjs.map +1 -0
- package/dist/cjs/main.cjs +11 -0
- package/dist/cjs/main.cjs.map +1 -1
- package/dist/cjs/run.cjs +120 -81
- package/dist/cjs/run.cjs.map +1 -1
- package/dist/cjs/stream.cjs +85 -51
- package/dist/cjs/stream.cjs.map +1 -1
- package/dist/cjs/tools/ToolNode.cjs +10 -4
- package/dist/cjs/tools/ToolNode.cjs.map +1 -1
- package/dist/cjs/tools/handlers.cjs +119 -13
- package/dist/cjs/tools/handlers.cjs.map +1 -1
- package/dist/cjs/tools/search/anthropic.cjs +40 -0
- package/dist/cjs/tools/search/anthropic.cjs.map +1 -0
- package/dist/cjs/tools/search/firecrawl.cjs +55 -9
- package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
- package/dist/cjs/tools/search/format.cjs +6 -6
- package/dist/cjs/tools/search/format.cjs.map +1 -1
- package/dist/cjs/tools/search/rerankers.cjs +7 -29
- package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
- package/dist/cjs/tools/search/search.cjs +86 -16
- package/dist/cjs/tools/search/search.cjs.map +1 -1
- package/dist/cjs/tools/search/tool.cjs +4 -2
- package/dist/cjs/tools/search/tool.cjs.map +1 -1
- package/dist/cjs/tools/search/utils.cjs +1 -1
- package/dist/cjs/tools/search/utils.cjs.map +1 -1
- package/dist/cjs/utils/events.cjs +31 -0
- package/dist/cjs/utils/events.cjs.map +1 -0
- package/dist/cjs/utils/title.cjs +57 -21
- package/dist/cjs/utils/title.cjs.map +1 -1
- package/dist/cjs/utils/tokens.cjs +54 -7
- package/dist/cjs/utils/tokens.cjs.map +1 -1
- package/dist/esm/agents/AgentContext.mjs +216 -0
- package/dist/esm/agents/AgentContext.mjs.map +1 -0
- package/dist/esm/common/enum.mjs +15 -6
- package/dist/esm/common/enum.mjs.map +1 -1
- package/dist/esm/events.mjs +10 -6
- package/dist/esm/events.mjs.map +1 -1
- package/dist/esm/graphs/Graph.mjs +311 -214
- package/dist/esm/graphs/Graph.mjs.map +1 -1
- package/dist/esm/graphs/MultiAgentGraph.mjs +320 -0
- package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -0
- package/dist/esm/llm/anthropic/index.mjs +54 -9
- package/dist/esm/llm/anthropic/index.mjs.map +1 -1
- package/dist/esm/llm/anthropic/types.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs +52 -6
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/message_outputs.mjs +22 -2
- package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/tools.mjs +27 -0
- package/dist/esm/llm/anthropic/utils/tools.mjs.map +1 -0
- package/dist/esm/llm/google/index.mjs +142 -0
- package/dist/esm/llm/google/index.mjs.map +1 -0
- package/dist/esm/llm/google/utils/common.mjs +471 -0
- package/dist/esm/llm/google/utils/common.mjs.map +1 -0
- package/dist/esm/llm/ollama/index.mjs +65 -0
- package/dist/esm/llm/ollama/index.mjs.map +1 -0
- package/dist/esm/llm/ollama/utils.mjs +155 -0
- package/dist/esm/llm/ollama/utils.mjs.map +1 -0
- package/dist/esm/llm/openai/index.mjs +388 -4
- package/dist/esm/llm/openai/index.mjs.map +1 -1
- package/dist/esm/llm/openai/utils/index.mjs +666 -0
- package/dist/esm/llm/openai/utils/index.mjs.map +1 -0
- package/dist/esm/llm/providers.mjs +5 -5
- package/dist/esm/llm/providers.mjs.map +1 -1
- package/dist/esm/llm/text.mjs +14 -3
- package/dist/esm/llm/text.mjs.map +1 -1
- package/dist/esm/llm/vertexai/index.mjs +328 -0
- package/dist/esm/llm/vertexai/index.mjs.map +1 -0
- package/dist/esm/main.mjs +6 -5
- package/dist/esm/main.mjs.map +1 -1
- package/dist/esm/run.mjs +121 -83
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/stream.mjs +87 -54
- package/dist/esm/stream.mjs.map +1 -1
- package/dist/esm/tools/ToolNode.mjs +10 -4
- package/dist/esm/tools/ToolNode.mjs.map +1 -1
- package/dist/esm/tools/handlers.mjs +119 -15
- package/dist/esm/tools/handlers.mjs.map +1 -1
- package/dist/esm/tools/search/anthropic.mjs +37 -0
- package/dist/esm/tools/search/anthropic.mjs.map +1 -0
- package/dist/esm/tools/search/firecrawl.mjs +55 -9
- package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
- package/dist/esm/tools/search/format.mjs +7 -7
- package/dist/esm/tools/search/format.mjs.map +1 -1
- package/dist/esm/tools/search/rerankers.mjs +7 -29
- package/dist/esm/tools/search/rerankers.mjs.map +1 -1
- package/dist/esm/tools/search/search.mjs +86 -16
- package/dist/esm/tools/search/search.mjs.map +1 -1
- package/dist/esm/tools/search/tool.mjs +4 -2
- package/dist/esm/tools/search/tool.mjs.map +1 -1
- package/dist/esm/tools/search/utils.mjs +1 -1
- package/dist/esm/tools/search/utils.mjs.map +1 -1
- package/dist/esm/utils/events.mjs +29 -0
- package/dist/esm/utils/events.mjs.map +1 -0
- package/dist/esm/utils/title.mjs +57 -22
- package/dist/esm/utils/title.mjs.map +1 -1
- package/dist/esm/utils/tokens.mjs +54 -8
- package/dist/esm/utils/tokens.mjs.map +1 -1
- package/dist/types/agents/AgentContext.d.ts +91 -0
- package/dist/types/common/enum.d.ts +15 -6
- package/dist/types/events.d.ts +5 -4
- package/dist/types/graphs/Graph.d.ts +64 -67
- package/dist/types/graphs/MultiAgentGraph.d.ts +37 -0
- package/dist/types/graphs/index.d.ts +1 -0
- package/dist/types/llm/anthropic/index.d.ts +11 -0
- package/dist/types/llm/anthropic/types.d.ts +9 -3
- package/dist/types/llm/anthropic/utils/message_inputs.d.ts +1 -1
- package/dist/types/llm/anthropic/utils/output_parsers.d.ts +4 -4
- package/dist/types/llm/anthropic/utils/tools.d.ts +3 -0
- package/dist/types/llm/google/index.d.ts +13 -0
- package/dist/types/llm/google/types.d.ts +32 -0
- package/dist/types/llm/google/utils/common.d.ts +19 -0
- package/dist/types/llm/google/utils/tools.d.ts +10 -0
- package/dist/types/llm/google/utils/zod_to_genai_parameters.d.ts +14 -0
- package/dist/types/llm/ollama/index.d.ts +7 -0
- package/dist/types/llm/ollama/utils.d.ts +7 -0
- package/dist/types/llm/openai/index.d.ts +72 -3
- package/dist/types/llm/openai/types.d.ts +10 -0
- package/dist/types/llm/openai/utils/index.d.ts +20 -0
- package/dist/types/llm/text.d.ts +1 -1
- package/dist/types/llm/vertexai/index.d.ts +293 -0
- package/dist/types/messages/reducer.d.ts +9 -0
- package/dist/types/run.d.ts +19 -12
- package/dist/types/scripts/ant_web_search.d.ts +1 -0
- package/dist/types/scripts/args.d.ts +2 -1
- package/dist/types/scripts/handoff-test.d.ts +1 -0
- package/dist/types/scripts/multi-agent-conditional.d.ts +1 -0
- package/dist/types/scripts/multi-agent-parallel.d.ts +1 -0
- package/dist/types/scripts/multi-agent-sequence.d.ts +1 -0
- package/dist/types/scripts/multi-agent-test.d.ts +1 -0
- package/dist/types/stream.d.ts +10 -3
- package/dist/types/tools/CodeExecutor.d.ts +2 -2
- package/dist/types/tools/ToolNode.d.ts +1 -1
- package/dist/types/tools/handlers.d.ts +17 -4
- package/dist/types/tools/search/anthropic.d.ts +16 -0
- package/dist/types/tools/search/firecrawl.d.ts +15 -0
- package/dist/types/tools/search/rerankers.d.ts +0 -1
- package/dist/types/tools/search/types.d.ts +30 -9
- package/dist/types/types/graph.d.ts +95 -15
- package/dist/types/types/llm.d.ts +24 -10
- package/dist/types/types/run.d.ts +46 -8
- package/dist/types/types/stream.d.ts +16 -2
- package/dist/types/types/tools.d.ts +1 -1
- package/dist/types/utils/events.d.ts +6 -0
- package/dist/types/utils/title.d.ts +2 -1
- package/dist/types/utils/tokens.d.ts +24 -0
- package/package.json +33 -17
- package/src/agents/AgentContext.ts +315 -0
- package/src/common/enum.ts +14 -5
- package/src/events.ts +24 -13
- package/src/graphs/Graph.ts +495 -312
- package/src/graphs/MultiAgentGraph.ts +381 -0
- package/src/graphs/index.ts +2 -1
- package/src/llm/anthropic/Jacob_Lee_Resume_2023.pdf +0 -0
- package/src/llm/anthropic/index.ts +78 -13
- package/src/llm/anthropic/llm.spec.ts +491 -115
- package/src/llm/anthropic/types.ts +39 -3
- package/src/llm/anthropic/utils/message_inputs.ts +67 -11
- package/src/llm/anthropic/utils/message_outputs.ts +21 -2
- package/src/llm/anthropic/utils/output_parsers.ts +25 -6
- package/src/llm/anthropic/utils/tools.ts +29 -0
- package/src/llm/google/index.ts +218 -0
- package/src/llm/google/types.ts +43 -0
- package/src/llm/google/utils/common.ts +646 -0
- package/src/llm/google/utils/tools.ts +160 -0
- package/src/llm/google/utils/zod_to_genai_parameters.ts +86 -0
- package/src/llm/ollama/index.ts +89 -0
- package/src/llm/ollama/utils.ts +193 -0
- package/src/llm/openai/index.ts +600 -14
- package/src/llm/openai/types.ts +24 -0
- package/src/llm/openai/utils/index.ts +912 -0
- package/src/llm/openai/utils/isReasoningModel.test.ts +90 -0
- package/src/llm/providers.ts +10 -9
- package/src/llm/text.ts +26 -7
- package/src/llm/vertexai/index.ts +360 -0
- package/src/messages/reducer.ts +80 -0
- package/src/run.ts +181 -112
- package/src/scripts/ant_web_search.ts +158 -0
- package/src/scripts/args.ts +12 -8
- package/src/scripts/cli4.ts +29 -21
- package/src/scripts/cli5.ts +29 -21
- package/src/scripts/code_exec.ts +54 -23
- package/src/scripts/code_exec_files.ts +48 -17
- package/src/scripts/code_exec_simple.ts +46 -27
- package/src/scripts/handoff-test.ts +135 -0
- package/src/scripts/image.ts +52 -20
- package/src/scripts/multi-agent-conditional.ts +220 -0
- package/src/scripts/multi-agent-example-output.md +110 -0
- package/src/scripts/multi-agent-parallel.ts +337 -0
- package/src/scripts/multi-agent-sequence.ts +212 -0
- package/src/scripts/multi-agent-test.ts +186 -0
- package/src/scripts/search.ts +1 -9
- package/src/scripts/simple.ts +25 -10
- package/src/scripts/tools.ts +48 -18
- package/src/specs/anthropic.simple.test.ts +150 -34
- package/src/specs/azure.simple.test.ts +325 -0
- package/src/specs/openai.simple.test.ts +140 -33
- package/src/specs/openrouter.simple.test.ts +107 -0
- package/src/specs/prune.test.ts +4 -9
- package/src/specs/reasoning.test.ts +80 -44
- package/src/specs/token-memoization.test.ts +39 -0
- package/src/stream.test.ts +94 -0
- package/src/stream.ts +139 -60
- package/src/tools/ToolNode.ts +21 -7
- package/src/tools/handlers.ts +192 -18
- package/src/tools/search/anthropic.ts +51 -0
- package/src/tools/search/firecrawl.ts +69 -20
- package/src/tools/search/format.ts +6 -8
- package/src/tools/search/rerankers.ts +7 -40
- package/src/tools/search/search.ts +97 -16
- package/src/tools/search/tool.ts +5 -2
- package/src/tools/search/types.ts +30 -10
- package/src/tools/search/utils.ts +1 -1
- package/src/types/graph.ts +272 -103
- package/src/types/llm.ts +25 -12
- package/src/types/run.ts +51 -13
- package/src/types/stream.ts +22 -1
- package/src/types/tools.ts +16 -10
- package/src/utils/events.ts +32 -0
- package/src/utils/llmConfig.ts +19 -7
- package/src/utils/title.ts +104 -30
- package/src/utils/tokens.ts +69 -10
|
@@ -233,6 +233,7 @@ const createSearXNGAPI = (
|
|
|
233
233
|
const getSources = async ({
|
|
234
234
|
query,
|
|
235
235
|
numResults = 8,
|
|
236
|
+
safeSearch,
|
|
236
237
|
type,
|
|
237
238
|
}: t.GetSourcesParams): Promise<t.SearchResult> => {
|
|
238
239
|
if (!query.trim()) {
|
|
@@ -267,7 +268,7 @@ const createSearXNGAPI = (
|
|
|
267
268
|
pageno: 1,
|
|
268
269
|
categories: category,
|
|
269
270
|
language: 'all',
|
|
270
|
-
safesearch:
|
|
271
|
+
safesearch: safeSearch,
|
|
271
272
|
engines: 'google,bing,duckduckgo',
|
|
272
273
|
};
|
|
273
274
|
|
|
@@ -287,34 +288,111 @@ const createSearXNGAPI = (
|
|
|
287
288
|
|
|
288
289
|
const data = response.data;
|
|
289
290
|
|
|
291
|
+
// Helper function to identify news results since SearXNG doesn't provide that classification by default
|
|
292
|
+
const isNewsResult = (result: t.SearXNGResult): boolean => {
|
|
293
|
+
const url = result.url?.toLowerCase() ?? '';
|
|
294
|
+
const title = result.title?.toLowerCase() ?? '';
|
|
295
|
+
|
|
296
|
+
// News-related keywords in title/content
|
|
297
|
+
const newsKeywords = [
|
|
298
|
+
'breaking news',
|
|
299
|
+
'latest news',
|
|
300
|
+
'top stories',
|
|
301
|
+
'news today',
|
|
302
|
+
'developing story',
|
|
303
|
+
'trending news',
|
|
304
|
+
'news',
|
|
305
|
+
];
|
|
306
|
+
|
|
307
|
+
// Check if title/content contains news keywords
|
|
308
|
+
const hasNewsKeywords = newsKeywords.some(
|
|
309
|
+
(keyword) => title.toLowerCase().includes(keyword) // just title probably fine, content parsing is overkill for what we need: || content.includes(keyword)
|
|
310
|
+
);
|
|
311
|
+
|
|
312
|
+
// Check if URL contains news-related paths
|
|
313
|
+
const hasNewsPath =
|
|
314
|
+
url.includes('/news/') ||
|
|
315
|
+
url.includes('/world/') ||
|
|
316
|
+
url.includes('/politics/') ||
|
|
317
|
+
url.includes('/breaking/');
|
|
318
|
+
|
|
319
|
+
return hasNewsKeywords || hasNewsPath;
|
|
320
|
+
};
|
|
321
|
+
|
|
290
322
|
// Transform SearXNG results to match SerperAPI format
|
|
291
323
|
const organicResults = (data.results ?? [])
|
|
292
324
|
.slice(0, numResults)
|
|
293
|
-
.map((result: t.SearXNGResult) =>
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
325
|
+
.map((result: t.SearXNGResult, index: number) => {
|
|
326
|
+
let attribution = '';
|
|
327
|
+
try {
|
|
328
|
+
attribution = new URL(result.url ?? '').hostname;
|
|
329
|
+
} catch {
|
|
330
|
+
attribution = '';
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
return {
|
|
334
|
+
position: index + 1,
|
|
335
|
+
title: result.title ?? '',
|
|
336
|
+
link: result.url ?? '',
|
|
337
|
+
snippet: result.content ?? '',
|
|
338
|
+
date: result.publishedDate ?? '',
|
|
339
|
+
attribution,
|
|
340
|
+
};
|
|
341
|
+
});
|
|
299
342
|
|
|
300
|
-
// Extract image results if available
|
|
301
343
|
const imageResults = (data.results ?? [])
|
|
302
344
|
.filter((result: t.SearXNGResult) => result.img_src)
|
|
303
345
|
.slice(0, 6)
|
|
304
|
-
.map((result: t.SearXNGResult) => ({
|
|
346
|
+
.map((result: t.SearXNGResult, index: number) => ({
|
|
305
347
|
title: result.title ?? '',
|
|
306
348
|
imageUrl: result.img_src ?? '',
|
|
349
|
+
position: index + 1,
|
|
350
|
+
source: new URL(result.url ?? '').hostname,
|
|
351
|
+
domain: new URL(result.url ?? '').hostname,
|
|
352
|
+
link: result.url ?? '',
|
|
307
353
|
}));
|
|
308
354
|
|
|
309
|
-
//
|
|
355
|
+
// Extract news results from organic results
|
|
356
|
+
const newsResults = (data.results ?? [])
|
|
357
|
+
.filter(isNewsResult)
|
|
358
|
+
.map((result: t.SearXNGResult, index: number) => {
|
|
359
|
+
let attribution = '';
|
|
360
|
+
try {
|
|
361
|
+
attribution = new URL(result.url ?? '').hostname;
|
|
362
|
+
} catch {
|
|
363
|
+
attribution = '';
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
return {
|
|
367
|
+
title: result.title ?? '',
|
|
368
|
+
link: result.url ?? '',
|
|
369
|
+
snippet: result.content ?? '',
|
|
370
|
+
date: result.publishedDate ?? '',
|
|
371
|
+
source: attribution,
|
|
372
|
+
imageUrl: result.img_src ?? '',
|
|
373
|
+
position: index + 1,
|
|
374
|
+
};
|
|
375
|
+
});
|
|
376
|
+
|
|
377
|
+
const topStories = newsResults.slice(0, 5);
|
|
378
|
+
|
|
379
|
+
const relatedSearches = Array.isArray(data.suggestions)
|
|
380
|
+
? data.suggestions.map((suggestion: string) => ({ query: suggestion }))
|
|
381
|
+
: [];
|
|
382
|
+
|
|
310
383
|
const results: t.SearchResultData = {
|
|
311
384
|
organic: organicResults,
|
|
312
385
|
images: imageResults,
|
|
313
|
-
topStories:
|
|
314
|
-
|
|
315
|
-
relatedSearches: data.suggestions ?? [],
|
|
386
|
+
topStories: topStories, // Use first 5 extracted news as top stories
|
|
387
|
+
relatedSearches,
|
|
316
388
|
videos: [],
|
|
317
|
-
news:
|
|
389
|
+
news: newsResults,
|
|
390
|
+
// Add empty arrays for other Serper fields to maintain parity
|
|
391
|
+
places: [],
|
|
392
|
+
shopping: [],
|
|
393
|
+
peopleAlsoAsk: [],
|
|
394
|
+
knowledgeGraph: undefined,
|
|
395
|
+
answerBox: undefined,
|
|
318
396
|
};
|
|
319
397
|
|
|
320
398
|
return { success: true, data: results };
|
|
@@ -409,6 +487,10 @@ export const createSourceProcessor = (
|
|
|
409
487
|
attribution,
|
|
410
488
|
content: chunker.cleanText(content),
|
|
411
489
|
} as t.ScrapeResult;
|
|
490
|
+
} else {
|
|
491
|
+
logger_.error(
|
|
492
|
+
`Error scraping ${url}: ${response.error ?? 'Unknown error'}`
|
|
493
|
+
);
|
|
412
494
|
}
|
|
413
495
|
|
|
414
496
|
return {
|
|
@@ -422,8 +504,7 @@ export const createSourceProcessor = (
|
|
|
422
504
|
try {
|
|
423
505
|
if (result.error != null) {
|
|
424
506
|
logger_.error(
|
|
425
|
-
`Error scraping ${result.url}: ${result.content}
|
|
426
|
-
result.error
|
|
507
|
+
`Error scraping ${result.url}: ${result.content}`
|
|
427
508
|
);
|
|
428
509
|
return {
|
|
429
510
|
...result,
|
package/src/tools/search/tool.ts
CHANGED
|
@@ -346,7 +346,8 @@ export const createSearchTool = (
|
|
|
346
346
|
safeSearch = 1,
|
|
347
347
|
firecrawlApiKey,
|
|
348
348
|
firecrawlApiUrl,
|
|
349
|
-
|
|
349
|
+
firecrawlOptions,
|
|
350
|
+
scraperTimeout,
|
|
350
351
|
jinaApiKey,
|
|
351
352
|
cohereApiKey,
|
|
352
353
|
onSearchResults: _onSearchResults,
|
|
@@ -384,9 +385,11 @@ export const createSearchTool = (
|
|
|
384
385
|
});
|
|
385
386
|
|
|
386
387
|
const firecrawlScraper = createFirecrawlScraper({
|
|
388
|
+
...firecrawlOptions,
|
|
387
389
|
apiKey: firecrawlApiKey ?? process.env.FIRECRAWL_API_KEY,
|
|
388
390
|
apiUrl: firecrawlApiUrl,
|
|
389
|
-
|
|
391
|
+
timeout: scraperTimeout ?? firecrawlOptions?.timeout,
|
|
392
|
+
formats: firecrawlOptions?.formats ?? ['markdown', 'rawHtml'],
|
|
390
393
|
});
|
|
391
394
|
|
|
392
395
|
const selectedReranker = createReranker({
|
|
@@ -94,7 +94,7 @@ export interface ProcessSourcesConfig {
|
|
|
94
94
|
export interface FirecrawlConfig {
|
|
95
95
|
firecrawlApiKey?: string;
|
|
96
96
|
firecrawlApiUrl?: string;
|
|
97
|
-
|
|
97
|
+
firecrawlOptions?: FirecrawlScraperConfig;
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
export interface ScraperContentResult {
|
|
@@ -150,6 +150,7 @@ export interface SearchToolConfig
|
|
|
150
150
|
jinaApiKey?: string;
|
|
151
151
|
cohereApiKey?: string;
|
|
152
152
|
rerankerType?: RerankerType;
|
|
153
|
+
scraperTimeout?: number;
|
|
153
154
|
onSearchResults?: (
|
|
154
155
|
results: SearchResult,
|
|
155
156
|
runnableConfig?: RunnableConfig
|
|
@@ -169,15 +170,10 @@ export type UsedReferences = {
|
|
|
169
170
|
}[];
|
|
170
171
|
|
|
171
172
|
/** Firecrawl */
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
excludeTags?: string[];
|
|
177
|
-
headers?: Record<string, string>;
|
|
178
|
-
waitFor?: number;
|
|
179
|
-
timeout?: number;
|
|
180
|
-
}
|
|
173
|
+
export type FirecrawlScrapeOptions = Omit<
|
|
174
|
+
FirecrawlScraperConfig,
|
|
175
|
+
'apiKey' | 'apiUrl' | 'logger'
|
|
176
|
+
>;
|
|
181
177
|
|
|
182
178
|
export interface ScrapeMetadata {
|
|
183
179
|
// Core source information
|
|
@@ -260,6 +256,21 @@ export interface FirecrawlScraperConfig {
|
|
|
260
256
|
formats?: string[];
|
|
261
257
|
timeout?: number;
|
|
262
258
|
logger?: Logger;
|
|
259
|
+
includeTags?: string[];
|
|
260
|
+
excludeTags?: string[];
|
|
261
|
+
waitFor?: number;
|
|
262
|
+
maxAge?: number;
|
|
263
|
+
mobile?: boolean;
|
|
264
|
+
skipTlsVerification?: boolean;
|
|
265
|
+
blockAds?: boolean;
|
|
266
|
+
removeBase64Images?: boolean;
|
|
267
|
+
parsePDF?: boolean;
|
|
268
|
+
storeInCache?: boolean;
|
|
269
|
+
zeroDataRetention?: boolean;
|
|
270
|
+
headers?: Record<string, string>;
|
|
271
|
+
location?: { country?: string; languages?: string[] };
|
|
272
|
+
onlyMainContent?: boolean;
|
|
273
|
+
changeTrackingOptions?: object;
|
|
263
274
|
}
|
|
264
275
|
|
|
265
276
|
export type GetSourcesParams = {
|
|
@@ -580,6 +591,15 @@ export interface SearXNGResult {
|
|
|
580
591
|
content?: string;
|
|
581
592
|
publishedDate?: string;
|
|
582
593
|
img_src?: string;
|
|
594
|
+
score?: number;
|
|
595
|
+
engine?: string;
|
|
596
|
+
category?: string;
|
|
597
|
+
thumbnail?: string;
|
|
598
|
+
priority?: string;
|
|
599
|
+
engines?: string[];
|
|
600
|
+
positions?: number[];
|
|
601
|
+
template?: string;
|
|
602
|
+
parsed_url?: string[];
|
|
583
603
|
}
|
|
584
604
|
|
|
585
605
|
export type ProcessSourcesFields = {
|
|
@@ -25,7 +25,7 @@ export const createDefaultLogger = (): t.Logger => {
|
|
|
25
25
|
};
|
|
26
26
|
|
|
27
27
|
export const fileExtRegex =
|
|
28
|
-
/\.(pdf|jpe?g|png|gif|svg|webp|bmp|ico|tiff?|avif|heic|doc[xm]?|xls[xm]?|ppt[xm]?|zip|rar|mp[34]|mov|avi|wav)
|
|
28
|
+
/\.(pdf|jpe?g|png|gif|svg|webp|bmp|ico|tiff?|avif|heic|doc[xm]?|xls[xm]?|ppt[xm]?|zip|rar|mp[34]|mov|avi|wav)(?:\?.*)?$/i;
|
|
29
29
|
|
|
30
30
|
export const getDomainName = (
|
|
31
31
|
link: string,
|