@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.
Files changed (258) hide show
  1. package/dist/cjs/agents/AgentContext.cjs +218 -0
  2. package/dist/cjs/agents/AgentContext.cjs.map +1 -0
  3. package/dist/cjs/common/enum.cjs +14 -5
  4. package/dist/cjs/common/enum.cjs.map +1 -1
  5. package/dist/cjs/events.cjs +10 -6
  6. package/dist/cjs/events.cjs.map +1 -1
  7. package/dist/cjs/graphs/Graph.cjs +309 -212
  8. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  9. package/dist/cjs/graphs/MultiAgentGraph.cjs +322 -0
  10. package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -0
  11. package/dist/cjs/llm/anthropic/index.cjs +54 -9
  12. package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
  13. package/dist/cjs/llm/anthropic/types.cjs.map +1 -1
  14. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +52 -6
  15. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
  16. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +22 -2
  17. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -1
  18. package/dist/cjs/llm/anthropic/utils/tools.cjs +29 -0
  19. package/dist/cjs/llm/anthropic/utils/tools.cjs.map +1 -0
  20. package/dist/cjs/llm/google/index.cjs +144 -0
  21. package/dist/cjs/llm/google/index.cjs.map +1 -0
  22. package/dist/cjs/llm/google/utils/common.cjs +477 -0
  23. package/dist/cjs/llm/google/utils/common.cjs.map +1 -0
  24. package/dist/cjs/llm/ollama/index.cjs +67 -0
  25. package/dist/cjs/llm/ollama/index.cjs.map +1 -0
  26. package/dist/cjs/llm/ollama/utils.cjs +158 -0
  27. package/dist/cjs/llm/ollama/utils.cjs.map +1 -0
  28. package/dist/cjs/llm/openai/index.cjs +389 -3
  29. package/dist/cjs/llm/openai/index.cjs.map +1 -1
  30. package/dist/cjs/llm/openai/utils/index.cjs +672 -0
  31. package/dist/cjs/llm/openai/utils/index.cjs.map +1 -0
  32. package/dist/cjs/llm/providers.cjs +15 -15
  33. package/dist/cjs/llm/providers.cjs.map +1 -1
  34. package/dist/cjs/llm/text.cjs +14 -3
  35. package/dist/cjs/llm/text.cjs.map +1 -1
  36. package/dist/cjs/llm/vertexai/index.cjs +330 -0
  37. package/dist/cjs/llm/vertexai/index.cjs.map +1 -0
  38. package/dist/cjs/main.cjs +11 -0
  39. package/dist/cjs/main.cjs.map +1 -1
  40. package/dist/cjs/run.cjs +120 -81
  41. package/dist/cjs/run.cjs.map +1 -1
  42. package/dist/cjs/stream.cjs +85 -51
  43. package/dist/cjs/stream.cjs.map +1 -1
  44. package/dist/cjs/tools/ToolNode.cjs +10 -4
  45. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  46. package/dist/cjs/tools/handlers.cjs +119 -13
  47. package/dist/cjs/tools/handlers.cjs.map +1 -1
  48. package/dist/cjs/tools/search/anthropic.cjs +40 -0
  49. package/dist/cjs/tools/search/anthropic.cjs.map +1 -0
  50. package/dist/cjs/tools/search/firecrawl.cjs +55 -9
  51. package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
  52. package/dist/cjs/tools/search/format.cjs +6 -6
  53. package/dist/cjs/tools/search/format.cjs.map +1 -1
  54. package/dist/cjs/tools/search/rerankers.cjs +7 -29
  55. package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
  56. package/dist/cjs/tools/search/search.cjs +86 -16
  57. package/dist/cjs/tools/search/search.cjs.map +1 -1
  58. package/dist/cjs/tools/search/tool.cjs +4 -2
  59. package/dist/cjs/tools/search/tool.cjs.map +1 -1
  60. package/dist/cjs/tools/search/utils.cjs +1 -1
  61. package/dist/cjs/tools/search/utils.cjs.map +1 -1
  62. package/dist/cjs/utils/events.cjs +31 -0
  63. package/dist/cjs/utils/events.cjs.map +1 -0
  64. package/dist/cjs/utils/title.cjs +57 -21
  65. package/dist/cjs/utils/title.cjs.map +1 -1
  66. package/dist/cjs/utils/tokens.cjs +54 -7
  67. package/dist/cjs/utils/tokens.cjs.map +1 -1
  68. package/dist/esm/agents/AgentContext.mjs +216 -0
  69. package/dist/esm/agents/AgentContext.mjs.map +1 -0
  70. package/dist/esm/common/enum.mjs +15 -6
  71. package/dist/esm/common/enum.mjs.map +1 -1
  72. package/dist/esm/events.mjs +10 -6
  73. package/dist/esm/events.mjs.map +1 -1
  74. package/dist/esm/graphs/Graph.mjs +311 -214
  75. package/dist/esm/graphs/Graph.mjs.map +1 -1
  76. package/dist/esm/graphs/MultiAgentGraph.mjs +320 -0
  77. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -0
  78. package/dist/esm/llm/anthropic/index.mjs +54 -9
  79. package/dist/esm/llm/anthropic/index.mjs.map +1 -1
  80. package/dist/esm/llm/anthropic/types.mjs.map +1 -1
  81. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +52 -6
  82. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
  83. package/dist/esm/llm/anthropic/utils/message_outputs.mjs +22 -2
  84. package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -1
  85. package/dist/esm/llm/anthropic/utils/tools.mjs +27 -0
  86. package/dist/esm/llm/anthropic/utils/tools.mjs.map +1 -0
  87. package/dist/esm/llm/google/index.mjs +142 -0
  88. package/dist/esm/llm/google/index.mjs.map +1 -0
  89. package/dist/esm/llm/google/utils/common.mjs +471 -0
  90. package/dist/esm/llm/google/utils/common.mjs.map +1 -0
  91. package/dist/esm/llm/ollama/index.mjs +65 -0
  92. package/dist/esm/llm/ollama/index.mjs.map +1 -0
  93. package/dist/esm/llm/ollama/utils.mjs +155 -0
  94. package/dist/esm/llm/ollama/utils.mjs.map +1 -0
  95. package/dist/esm/llm/openai/index.mjs +388 -4
  96. package/dist/esm/llm/openai/index.mjs.map +1 -1
  97. package/dist/esm/llm/openai/utils/index.mjs +666 -0
  98. package/dist/esm/llm/openai/utils/index.mjs.map +1 -0
  99. package/dist/esm/llm/providers.mjs +5 -5
  100. package/dist/esm/llm/providers.mjs.map +1 -1
  101. package/dist/esm/llm/text.mjs +14 -3
  102. package/dist/esm/llm/text.mjs.map +1 -1
  103. package/dist/esm/llm/vertexai/index.mjs +328 -0
  104. package/dist/esm/llm/vertexai/index.mjs.map +1 -0
  105. package/dist/esm/main.mjs +6 -5
  106. package/dist/esm/main.mjs.map +1 -1
  107. package/dist/esm/run.mjs +121 -83
  108. package/dist/esm/run.mjs.map +1 -1
  109. package/dist/esm/stream.mjs +87 -54
  110. package/dist/esm/stream.mjs.map +1 -1
  111. package/dist/esm/tools/ToolNode.mjs +10 -4
  112. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  113. package/dist/esm/tools/handlers.mjs +119 -15
  114. package/dist/esm/tools/handlers.mjs.map +1 -1
  115. package/dist/esm/tools/search/anthropic.mjs +37 -0
  116. package/dist/esm/tools/search/anthropic.mjs.map +1 -0
  117. package/dist/esm/tools/search/firecrawl.mjs +55 -9
  118. package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
  119. package/dist/esm/tools/search/format.mjs +7 -7
  120. package/dist/esm/tools/search/format.mjs.map +1 -1
  121. package/dist/esm/tools/search/rerankers.mjs +7 -29
  122. package/dist/esm/tools/search/rerankers.mjs.map +1 -1
  123. package/dist/esm/tools/search/search.mjs +86 -16
  124. package/dist/esm/tools/search/search.mjs.map +1 -1
  125. package/dist/esm/tools/search/tool.mjs +4 -2
  126. package/dist/esm/tools/search/tool.mjs.map +1 -1
  127. package/dist/esm/tools/search/utils.mjs +1 -1
  128. package/dist/esm/tools/search/utils.mjs.map +1 -1
  129. package/dist/esm/utils/events.mjs +29 -0
  130. package/dist/esm/utils/events.mjs.map +1 -0
  131. package/dist/esm/utils/title.mjs +57 -22
  132. package/dist/esm/utils/title.mjs.map +1 -1
  133. package/dist/esm/utils/tokens.mjs +54 -8
  134. package/dist/esm/utils/tokens.mjs.map +1 -1
  135. package/dist/types/agents/AgentContext.d.ts +91 -0
  136. package/dist/types/common/enum.d.ts +15 -6
  137. package/dist/types/events.d.ts +5 -4
  138. package/dist/types/graphs/Graph.d.ts +64 -67
  139. package/dist/types/graphs/MultiAgentGraph.d.ts +37 -0
  140. package/dist/types/graphs/index.d.ts +1 -0
  141. package/dist/types/llm/anthropic/index.d.ts +11 -0
  142. package/dist/types/llm/anthropic/types.d.ts +9 -3
  143. package/dist/types/llm/anthropic/utils/message_inputs.d.ts +1 -1
  144. package/dist/types/llm/anthropic/utils/output_parsers.d.ts +4 -4
  145. package/dist/types/llm/anthropic/utils/tools.d.ts +3 -0
  146. package/dist/types/llm/google/index.d.ts +13 -0
  147. package/dist/types/llm/google/types.d.ts +32 -0
  148. package/dist/types/llm/google/utils/common.d.ts +19 -0
  149. package/dist/types/llm/google/utils/tools.d.ts +10 -0
  150. package/dist/types/llm/google/utils/zod_to_genai_parameters.d.ts +14 -0
  151. package/dist/types/llm/ollama/index.d.ts +7 -0
  152. package/dist/types/llm/ollama/utils.d.ts +7 -0
  153. package/dist/types/llm/openai/index.d.ts +72 -3
  154. package/dist/types/llm/openai/types.d.ts +10 -0
  155. package/dist/types/llm/openai/utils/index.d.ts +20 -0
  156. package/dist/types/llm/text.d.ts +1 -1
  157. package/dist/types/llm/vertexai/index.d.ts +293 -0
  158. package/dist/types/messages/reducer.d.ts +9 -0
  159. package/dist/types/run.d.ts +19 -12
  160. package/dist/types/scripts/ant_web_search.d.ts +1 -0
  161. package/dist/types/scripts/args.d.ts +2 -1
  162. package/dist/types/scripts/handoff-test.d.ts +1 -0
  163. package/dist/types/scripts/multi-agent-conditional.d.ts +1 -0
  164. package/dist/types/scripts/multi-agent-parallel.d.ts +1 -0
  165. package/dist/types/scripts/multi-agent-sequence.d.ts +1 -0
  166. package/dist/types/scripts/multi-agent-test.d.ts +1 -0
  167. package/dist/types/stream.d.ts +10 -3
  168. package/dist/types/tools/CodeExecutor.d.ts +2 -2
  169. package/dist/types/tools/ToolNode.d.ts +1 -1
  170. package/dist/types/tools/handlers.d.ts +17 -4
  171. package/dist/types/tools/search/anthropic.d.ts +16 -0
  172. package/dist/types/tools/search/firecrawl.d.ts +15 -0
  173. package/dist/types/tools/search/rerankers.d.ts +0 -1
  174. package/dist/types/tools/search/types.d.ts +30 -9
  175. package/dist/types/types/graph.d.ts +95 -15
  176. package/dist/types/types/llm.d.ts +24 -10
  177. package/dist/types/types/run.d.ts +46 -8
  178. package/dist/types/types/stream.d.ts +16 -2
  179. package/dist/types/types/tools.d.ts +1 -1
  180. package/dist/types/utils/events.d.ts +6 -0
  181. package/dist/types/utils/title.d.ts +2 -1
  182. package/dist/types/utils/tokens.d.ts +24 -0
  183. package/package.json +33 -17
  184. package/src/agents/AgentContext.ts +315 -0
  185. package/src/common/enum.ts +14 -5
  186. package/src/events.ts +24 -13
  187. package/src/graphs/Graph.ts +495 -312
  188. package/src/graphs/MultiAgentGraph.ts +381 -0
  189. package/src/graphs/index.ts +2 -1
  190. package/src/llm/anthropic/Jacob_Lee_Resume_2023.pdf +0 -0
  191. package/src/llm/anthropic/index.ts +78 -13
  192. package/src/llm/anthropic/llm.spec.ts +491 -115
  193. package/src/llm/anthropic/types.ts +39 -3
  194. package/src/llm/anthropic/utils/message_inputs.ts +67 -11
  195. package/src/llm/anthropic/utils/message_outputs.ts +21 -2
  196. package/src/llm/anthropic/utils/output_parsers.ts +25 -6
  197. package/src/llm/anthropic/utils/tools.ts +29 -0
  198. package/src/llm/google/index.ts +218 -0
  199. package/src/llm/google/types.ts +43 -0
  200. package/src/llm/google/utils/common.ts +646 -0
  201. package/src/llm/google/utils/tools.ts +160 -0
  202. package/src/llm/google/utils/zod_to_genai_parameters.ts +86 -0
  203. package/src/llm/ollama/index.ts +89 -0
  204. package/src/llm/ollama/utils.ts +193 -0
  205. package/src/llm/openai/index.ts +600 -14
  206. package/src/llm/openai/types.ts +24 -0
  207. package/src/llm/openai/utils/index.ts +912 -0
  208. package/src/llm/openai/utils/isReasoningModel.test.ts +90 -0
  209. package/src/llm/providers.ts +10 -9
  210. package/src/llm/text.ts +26 -7
  211. package/src/llm/vertexai/index.ts +360 -0
  212. package/src/messages/reducer.ts +80 -0
  213. package/src/run.ts +181 -112
  214. package/src/scripts/ant_web_search.ts +158 -0
  215. package/src/scripts/args.ts +12 -8
  216. package/src/scripts/cli4.ts +29 -21
  217. package/src/scripts/cli5.ts +29 -21
  218. package/src/scripts/code_exec.ts +54 -23
  219. package/src/scripts/code_exec_files.ts +48 -17
  220. package/src/scripts/code_exec_simple.ts +46 -27
  221. package/src/scripts/handoff-test.ts +135 -0
  222. package/src/scripts/image.ts +52 -20
  223. package/src/scripts/multi-agent-conditional.ts +220 -0
  224. package/src/scripts/multi-agent-example-output.md +110 -0
  225. package/src/scripts/multi-agent-parallel.ts +337 -0
  226. package/src/scripts/multi-agent-sequence.ts +212 -0
  227. package/src/scripts/multi-agent-test.ts +186 -0
  228. package/src/scripts/search.ts +1 -9
  229. package/src/scripts/simple.ts +25 -10
  230. package/src/scripts/tools.ts +48 -18
  231. package/src/specs/anthropic.simple.test.ts +150 -34
  232. package/src/specs/azure.simple.test.ts +325 -0
  233. package/src/specs/openai.simple.test.ts +140 -33
  234. package/src/specs/openrouter.simple.test.ts +107 -0
  235. package/src/specs/prune.test.ts +4 -9
  236. package/src/specs/reasoning.test.ts +80 -44
  237. package/src/specs/token-memoization.test.ts +39 -0
  238. package/src/stream.test.ts +94 -0
  239. package/src/stream.ts +139 -60
  240. package/src/tools/ToolNode.ts +21 -7
  241. package/src/tools/handlers.ts +192 -18
  242. package/src/tools/search/anthropic.ts +51 -0
  243. package/src/tools/search/firecrawl.ts +69 -20
  244. package/src/tools/search/format.ts +6 -8
  245. package/src/tools/search/rerankers.ts +7 -40
  246. package/src/tools/search/search.ts +97 -16
  247. package/src/tools/search/tool.ts +5 -2
  248. package/src/tools/search/types.ts +30 -10
  249. package/src/tools/search/utils.ts +1 -1
  250. package/src/types/graph.ts +272 -103
  251. package/src/types/llm.ts +25 -12
  252. package/src/types/run.ts +51 -13
  253. package/src/types/stream.ts +22 -1
  254. package/src/types/tools.ts +16 -10
  255. package/src/utils/events.ts +32 -0
  256. package/src/utils/llmConfig.ts +19 -7
  257. package/src/utils/title.ts +104 -30
  258. 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: 0,
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
- title: result.title ?? '',
295
- link: result.url ?? '',
296
- snippet: result.content ?? '',
297
- date: result.publishedDate ?? '',
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
- // Format results to match SerperAPI structure
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
- // Use undefined instead of null for optional properties
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,
@@ -346,7 +346,8 @@ export const createSearchTool = (
346
346
  safeSearch = 1,
347
347
  firecrawlApiKey,
348
348
  firecrawlApiUrl,
349
- firecrawlFormats = ['markdown', 'html'],
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
- formats: firecrawlFormats,
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
- firecrawlFormats?: string[];
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
- export interface FirecrawlScrapeOptions {
174
- formats?: string[];
175
- includeTags?: string[];
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)$/i;
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,