@librechat/agents 2.4.321 → 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 (266) 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 +61 -13
  51. package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
  52. package/dist/cjs/tools/search/format.cjs +9 -3
  53. package/dist/cjs/tools/search/format.cjs.map +1 -1
  54. package/dist/cjs/tools/search/rerankers.cjs +35 -50
  55. package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
  56. package/dist/cjs/tools/search/schema.cjs +70 -0
  57. package/dist/cjs/tools/search/schema.cjs.map +1 -0
  58. package/dist/cjs/tools/search/search.cjs +145 -38
  59. package/dist/cjs/tools/search/search.cjs.map +1 -1
  60. package/dist/cjs/tools/search/tool.cjs +165 -48
  61. package/dist/cjs/tools/search/tool.cjs.map +1 -1
  62. package/dist/cjs/tools/search/utils.cjs +34 -5
  63. package/dist/cjs/tools/search/utils.cjs.map +1 -1
  64. package/dist/cjs/utils/events.cjs +31 -0
  65. package/dist/cjs/utils/events.cjs.map +1 -0
  66. package/dist/cjs/utils/title.cjs +57 -21
  67. package/dist/cjs/utils/title.cjs.map +1 -1
  68. package/dist/cjs/utils/tokens.cjs +54 -7
  69. package/dist/cjs/utils/tokens.cjs.map +1 -1
  70. package/dist/esm/agents/AgentContext.mjs +216 -0
  71. package/dist/esm/agents/AgentContext.mjs.map +1 -0
  72. package/dist/esm/common/enum.mjs +15 -6
  73. package/dist/esm/common/enum.mjs.map +1 -1
  74. package/dist/esm/events.mjs +10 -6
  75. package/dist/esm/events.mjs.map +1 -1
  76. package/dist/esm/graphs/Graph.mjs +311 -214
  77. package/dist/esm/graphs/Graph.mjs.map +1 -1
  78. package/dist/esm/graphs/MultiAgentGraph.mjs +320 -0
  79. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -0
  80. package/dist/esm/llm/anthropic/index.mjs +54 -9
  81. package/dist/esm/llm/anthropic/index.mjs.map +1 -1
  82. package/dist/esm/llm/anthropic/types.mjs.map +1 -1
  83. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +52 -6
  84. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
  85. package/dist/esm/llm/anthropic/utils/message_outputs.mjs +22 -2
  86. package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -1
  87. package/dist/esm/llm/anthropic/utils/tools.mjs +27 -0
  88. package/dist/esm/llm/anthropic/utils/tools.mjs.map +1 -0
  89. package/dist/esm/llm/google/index.mjs +142 -0
  90. package/dist/esm/llm/google/index.mjs.map +1 -0
  91. package/dist/esm/llm/google/utils/common.mjs +471 -0
  92. package/dist/esm/llm/google/utils/common.mjs.map +1 -0
  93. package/dist/esm/llm/ollama/index.mjs +65 -0
  94. package/dist/esm/llm/ollama/index.mjs.map +1 -0
  95. package/dist/esm/llm/ollama/utils.mjs +155 -0
  96. package/dist/esm/llm/ollama/utils.mjs.map +1 -0
  97. package/dist/esm/llm/openai/index.mjs +388 -4
  98. package/dist/esm/llm/openai/index.mjs.map +1 -1
  99. package/dist/esm/llm/openai/utils/index.mjs +666 -0
  100. package/dist/esm/llm/openai/utils/index.mjs.map +1 -0
  101. package/dist/esm/llm/providers.mjs +5 -5
  102. package/dist/esm/llm/providers.mjs.map +1 -1
  103. package/dist/esm/llm/text.mjs +14 -3
  104. package/dist/esm/llm/text.mjs.map +1 -1
  105. package/dist/esm/llm/vertexai/index.mjs +328 -0
  106. package/dist/esm/llm/vertexai/index.mjs.map +1 -0
  107. package/dist/esm/main.mjs +6 -5
  108. package/dist/esm/main.mjs.map +1 -1
  109. package/dist/esm/run.mjs +121 -83
  110. package/dist/esm/run.mjs.map +1 -1
  111. package/dist/esm/stream.mjs +87 -54
  112. package/dist/esm/stream.mjs.map +1 -1
  113. package/dist/esm/tools/ToolNode.mjs +10 -4
  114. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  115. package/dist/esm/tools/handlers.mjs +119 -15
  116. package/dist/esm/tools/handlers.mjs.map +1 -1
  117. package/dist/esm/tools/search/anthropic.mjs +37 -0
  118. package/dist/esm/tools/search/anthropic.mjs.map +1 -0
  119. package/dist/esm/tools/search/firecrawl.mjs +61 -13
  120. package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
  121. package/dist/esm/tools/search/format.mjs +10 -4
  122. package/dist/esm/tools/search/format.mjs.map +1 -1
  123. package/dist/esm/tools/search/rerankers.mjs +35 -50
  124. package/dist/esm/tools/search/rerankers.mjs.map +1 -1
  125. package/dist/esm/tools/search/schema.mjs +61 -0
  126. package/dist/esm/tools/search/schema.mjs.map +1 -0
  127. package/dist/esm/tools/search/search.mjs +146 -39
  128. package/dist/esm/tools/search/search.mjs.map +1 -1
  129. package/dist/esm/tools/search/tool.mjs +164 -47
  130. package/dist/esm/tools/search/tool.mjs.map +1 -1
  131. package/dist/esm/tools/search/utils.mjs +33 -6
  132. package/dist/esm/tools/search/utils.mjs.map +1 -1
  133. package/dist/esm/utils/events.mjs +29 -0
  134. package/dist/esm/utils/events.mjs.map +1 -0
  135. package/dist/esm/utils/title.mjs +57 -22
  136. package/dist/esm/utils/title.mjs.map +1 -1
  137. package/dist/esm/utils/tokens.mjs +54 -8
  138. package/dist/esm/utils/tokens.mjs.map +1 -1
  139. package/dist/types/agents/AgentContext.d.ts +91 -0
  140. package/dist/types/common/enum.d.ts +15 -6
  141. package/dist/types/events.d.ts +5 -4
  142. package/dist/types/graphs/Graph.d.ts +64 -67
  143. package/dist/types/graphs/MultiAgentGraph.d.ts +37 -0
  144. package/dist/types/graphs/index.d.ts +1 -0
  145. package/dist/types/llm/anthropic/index.d.ts +11 -0
  146. package/dist/types/llm/anthropic/types.d.ts +9 -3
  147. package/dist/types/llm/anthropic/utils/message_inputs.d.ts +1 -1
  148. package/dist/types/llm/anthropic/utils/output_parsers.d.ts +4 -4
  149. package/dist/types/llm/anthropic/utils/tools.d.ts +3 -0
  150. package/dist/types/llm/google/index.d.ts +13 -0
  151. package/dist/types/llm/google/types.d.ts +32 -0
  152. package/dist/types/llm/google/utils/common.d.ts +19 -0
  153. package/dist/types/llm/google/utils/tools.d.ts +10 -0
  154. package/dist/types/llm/google/utils/zod_to_genai_parameters.d.ts +14 -0
  155. package/dist/types/llm/ollama/index.d.ts +7 -0
  156. package/dist/types/llm/ollama/utils.d.ts +7 -0
  157. package/dist/types/llm/openai/index.d.ts +72 -3
  158. package/dist/types/llm/openai/types.d.ts +10 -0
  159. package/dist/types/llm/openai/utils/index.d.ts +20 -0
  160. package/dist/types/llm/text.d.ts +1 -1
  161. package/dist/types/llm/vertexai/index.d.ts +293 -0
  162. package/dist/types/messages/reducer.d.ts +9 -0
  163. package/dist/types/run.d.ts +19 -12
  164. package/dist/types/scripts/ant_web_search.d.ts +1 -0
  165. package/dist/types/scripts/args.d.ts +2 -1
  166. package/dist/types/scripts/handoff-test.d.ts +1 -0
  167. package/dist/types/scripts/multi-agent-conditional.d.ts +1 -0
  168. package/dist/types/scripts/multi-agent-parallel.d.ts +1 -0
  169. package/dist/types/scripts/multi-agent-sequence.d.ts +1 -0
  170. package/dist/types/scripts/multi-agent-test.d.ts +1 -0
  171. package/dist/types/stream.d.ts +10 -3
  172. package/dist/types/tools/CodeExecutor.d.ts +2 -2
  173. package/dist/types/tools/ToolNode.d.ts +1 -1
  174. package/dist/types/tools/handlers.d.ts +17 -4
  175. package/dist/types/tools/search/anthropic.d.ts +16 -0
  176. package/dist/types/tools/search/firecrawl.d.ts +16 -0
  177. package/dist/types/tools/search/rerankers.d.ts +8 -5
  178. package/dist/types/tools/search/schema.d.ts +16 -0
  179. package/dist/types/tools/search/tool.d.ts +13 -0
  180. package/dist/types/tools/search/types.d.ts +64 -9
  181. package/dist/types/tools/search/utils.d.ts +9 -2
  182. package/dist/types/types/graph.d.ts +95 -15
  183. package/dist/types/types/llm.d.ts +24 -10
  184. package/dist/types/types/run.d.ts +46 -8
  185. package/dist/types/types/stream.d.ts +16 -2
  186. package/dist/types/types/tools.d.ts +1 -1
  187. package/dist/types/utils/events.d.ts +6 -0
  188. package/dist/types/utils/title.d.ts +2 -1
  189. package/dist/types/utils/tokens.d.ts +24 -0
  190. package/package.json +35 -18
  191. package/src/agents/AgentContext.ts +315 -0
  192. package/src/common/enum.ts +14 -5
  193. package/src/events.ts +24 -13
  194. package/src/graphs/Graph.ts +495 -312
  195. package/src/graphs/MultiAgentGraph.ts +381 -0
  196. package/src/graphs/index.ts +2 -1
  197. package/src/llm/anthropic/Jacob_Lee_Resume_2023.pdf +0 -0
  198. package/src/llm/anthropic/index.ts +78 -13
  199. package/src/llm/anthropic/llm.spec.ts +491 -115
  200. package/src/llm/anthropic/types.ts +39 -3
  201. package/src/llm/anthropic/utils/message_inputs.ts +67 -11
  202. package/src/llm/anthropic/utils/message_outputs.ts +21 -2
  203. package/src/llm/anthropic/utils/output_parsers.ts +25 -6
  204. package/src/llm/anthropic/utils/tools.ts +29 -0
  205. package/src/llm/google/index.ts +218 -0
  206. package/src/llm/google/types.ts +43 -0
  207. package/src/llm/google/utils/common.ts +646 -0
  208. package/src/llm/google/utils/tools.ts +160 -0
  209. package/src/llm/google/utils/zod_to_genai_parameters.ts +86 -0
  210. package/src/llm/ollama/index.ts +89 -0
  211. package/src/llm/ollama/utils.ts +193 -0
  212. package/src/llm/openai/index.ts +600 -14
  213. package/src/llm/openai/types.ts +24 -0
  214. package/src/llm/openai/utils/index.ts +912 -0
  215. package/src/llm/openai/utils/isReasoningModel.test.ts +90 -0
  216. package/src/llm/providers.ts +10 -9
  217. package/src/llm/text.ts +26 -7
  218. package/src/llm/vertexai/index.ts +360 -0
  219. package/src/messages/reducer.ts +80 -0
  220. package/src/run.ts +181 -112
  221. package/src/scripts/ant_web_search.ts +158 -0
  222. package/src/scripts/args.ts +12 -8
  223. package/src/scripts/cli4.ts +29 -21
  224. package/src/scripts/cli5.ts +29 -21
  225. package/src/scripts/code_exec.ts +54 -23
  226. package/src/scripts/code_exec_files.ts +48 -17
  227. package/src/scripts/code_exec_simple.ts +46 -27
  228. package/src/scripts/handoff-test.ts +135 -0
  229. package/src/scripts/image.ts +52 -20
  230. package/src/scripts/multi-agent-conditional.ts +220 -0
  231. package/src/scripts/multi-agent-example-output.md +110 -0
  232. package/src/scripts/multi-agent-parallel.ts +337 -0
  233. package/src/scripts/multi-agent-sequence.ts +212 -0
  234. package/src/scripts/multi-agent-test.ts +186 -0
  235. package/src/scripts/search.ts +4 -12
  236. package/src/scripts/simple.ts +25 -10
  237. package/src/scripts/tools.ts +48 -18
  238. package/src/specs/anthropic.simple.test.ts +150 -34
  239. package/src/specs/azure.simple.test.ts +325 -0
  240. package/src/specs/openai.simple.test.ts +140 -33
  241. package/src/specs/openrouter.simple.test.ts +107 -0
  242. package/src/specs/prune.test.ts +4 -9
  243. package/src/specs/reasoning.test.ts +80 -44
  244. package/src/specs/token-memoization.test.ts +39 -0
  245. package/src/stream.test.ts +94 -0
  246. package/src/stream.ts +139 -60
  247. package/src/tools/ToolNode.ts +21 -7
  248. package/src/tools/handlers.ts +192 -18
  249. package/src/tools/search/anthropic.ts +51 -0
  250. package/src/tools/search/firecrawl.ts +78 -24
  251. package/src/tools/search/format.ts +10 -5
  252. package/src/tools/search/rerankers.ts +50 -62
  253. package/src/tools/search/schema.ts +63 -0
  254. package/src/tools/search/search.ts +167 -34
  255. package/src/tools/search/tool.ts +222 -46
  256. package/src/tools/search/types.ts +65 -10
  257. package/src/tools/search/utils.ts +37 -5
  258. package/src/types/graph.ts +272 -103
  259. package/src/types/llm.ts +25 -12
  260. package/src/types/run.ts +51 -13
  261. package/src/types/stream.ts +22 -1
  262. package/src/types/tools.ts +16 -10
  263. package/src/utils/events.ts +32 -0
  264. package/src/utils/llmConfig.ts +20 -8
  265. package/src/utils/title.ts +104 -30
  266. package/src/utils/tokens.ts +69 -10
@@ -1,12 +1,14 @@
1
- /* eslint-disable no-console */
2
1
  import axios from 'axios';
3
2
  import type * as t from './types';
3
+ import { createDefaultLogger } from './utils';
4
4
 
5
5
  export abstract class BaseReranker {
6
6
  protected apiKey: string | undefined;
7
+ protected logger: t.Logger;
7
8
 
8
- constructor() {
9
+ constructor(logger?: t.Logger) {
9
10
  // Each specific reranker will set its API key
11
+ this.logger = logger || createDefaultLogger();
10
12
  }
11
13
 
12
14
  abstract rerank(
@@ -23,18 +25,17 @@ export abstract class BaseReranker {
23
25
  .slice(0, Math.min(topK, documents.length))
24
26
  .map((doc) => ({ text: doc, score: 0 }));
25
27
  }
26
-
27
- protected logDocumentSamples(documents: string[]): void {
28
- console.log('Sample documents being sent to API:');
29
- for (let i = 0; i < Math.min(3, documents.length); i++) {
30
- console.log(`Document ${i}: ${documents[i].substring(0, 100)}...`);
31
- }
32
- }
33
28
  }
34
29
 
35
30
  export class JinaReranker extends BaseReranker {
36
- constructor({ apiKey = process.env.JINA_API_KEY }: { apiKey?: string }) {
37
- super();
31
+ constructor({
32
+ apiKey = process.env.JINA_API_KEY,
33
+ logger,
34
+ }: {
35
+ apiKey?: string;
36
+ logger?: t.Logger;
37
+ }) {
38
+ super(logger);
38
39
  this.apiKey = apiKey;
39
40
  }
40
41
 
@@ -43,16 +44,14 @@ export class JinaReranker extends BaseReranker {
43
44
  documents: string[],
44
45
  topK: number = 5
45
46
  ): Promise<t.Highlight[]> {
46
- console.log(`Reranking ${documents.length} documents with Jina`);
47
+ this.logger.debug(`Reranking ${documents.length} chunks with Jina`);
47
48
 
48
49
  try {
49
50
  if (this.apiKey == null || this.apiKey === '') {
50
- console.warn('JINA_API_KEY is not set. Using default ranking.');
51
+ this.logger.warn('JINA_API_KEY is not set. Using default ranking.');
51
52
  return this.getDefaultRanking(documents, topK);
52
53
  }
53
54
 
54
- this.logDocumentSamples(documents);
55
-
56
55
  const requestData = {
57
56
  model: 'jina-reranker-v2-base-multilingual',
58
57
  query: query,
@@ -72,19 +71,8 @@ export class JinaReranker extends BaseReranker {
72
71
  }
73
72
  );
74
73
 
75
- // Log the response data structure
76
- console.log('Jina API response structure:');
77
- console.log('Model:', response.data?.model);
78
- console.log('Usage:', response.data?.usage);
79
- console.log('Results count:', response.data?.results.length);
80
-
81
- // Log a sample of the results
82
- if ((response.data?.results.length ?? 0) > 0) {
83
- console.log(
84
- 'Sample result:',
85
- JSON.stringify(response.data?.results[0], null, 2)
86
- );
87
- }
74
+ this.logger.debug('Jina API Model:', response.data?.model);
75
+ this.logger.debug('Jina API Usage:', response.data?.usage);
88
76
 
89
77
  if (response.data && response.data.results.length) {
90
78
  return response.data.results.map((result) => {
@@ -108,13 +96,13 @@ export class JinaReranker extends BaseReranker {
108
96
  return { text, score };
109
97
  });
110
98
  } else {
111
- console.warn(
99
+ this.logger.warn(
112
100
  'Unexpected response format from Jina API. Using default ranking.'
113
101
  );
114
102
  return this.getDefaultRanking(documents, topK);
115
103
  }
116
104
  } catch (error) {
117
- console.error('Error using Jina reranker:', error);
105
+ this.logger.error('Error using Jina reranker:', error);
118
106
  // Fallback to default ranking on error
119
107
  return this.getDefaultRanking(documents, topK);
120
108
  }
@@ -122,8 +110,14 @@ export class JinaReranker extends BaseReranker {
122
110
  }
123
111
 
124
112
  export class CohereReranker extends BaseReranker {
125
- constructor({ apiKey = process.env.COHERE_API_KEY }: { apiKey?: string }) {
126
- super();
113
+ constructor({
114
+ apiKey = process.env.COHERE_API_KEY,
115
+ logger,
116
+ }: {
117
+ apiKey?: string;
118
+ logger?: t.Logger;
119
+ }) {
120
+ super(logger);
127
121
  this.apiKey = apiKey;
128
122
  }
129
123
 
@@ -132,16 +126,14 @@ export class CohereReranker extends BaseReranker {
132
126
  documents: string[],
133
127
  topK: number = 5
134
128
  ): Promise<t.Highlight[]> {
135
- console.log(`Reranking ${documents.length} documents with Cohere`);
129
+ this.logger.debug(`Reranking ${documents.length} chunks with Cohere`);
136
130
 
137
131
  try {
138
132
  if (this.apiKey == null || this.apiKey === '') {
139
- console.warn('COHERE_API_KEY is not set. Using default ranking.');
133
+ this.logger.warn('COHERE_API_KEY is not set. Using default ranking.');
140
134
  return this.getDefaultRanking(documents, topK);
141
135
  }
142
136
 
143
- this.logDocumentSamples(documents);
144
-
145
137
  const requestData = {
146
138
  model: 'rerank-v3.5',
147
139
  query: query,
@@ -160,19 +152,8 @@ export class CohereReranker extends BaseReranker {
160
152
  }
161
153
  );
162
154
 
163
- // Log the response data structure
164
- console.log('Cohere API response structure:');
165
- console.log('ID:', response.data?.id);
166
- console.log('Meta:', response.data?.meta);
167
- console.log('Results count:', response.data?.results.length);
168
-
169
- // Log a sample of the results
170
- if ((response.data?.results.length ?? 0) > 0) {
171
- console.log(
172
- 'Sample result:',
173
- JSON.stringify(response.data?.results[0], null, 2)
174
- );
175
- }
155
+ this.logger.debug('Cohere API ID:', response.data?.id);
156
+ this.logger.debug('Cohere API Meta:', response.data?.meta);
176
157
 
177
158
  if (response.data && response.data.results.length) {
178
159
  return response.data.results.map((result) => {
@@ -182,13 +163,13 @@ export class CohereReranker extends BaseReranker {
182
163
  return { text, score };
183
164
  });
184
165
  } else {
185
- console.warn(
166
+ this.logger.warn(
186
167
  'Unexpected response format from Cohere API. Using default ranking.'
187
168
  );
188
169
  return this.getDefaultRanking(documents, topK);
189
170
  }
190
171
  } catch (error) {
191
- console.error('Error using Cohere reranker:', error);
172
+ this.logger.error('Error using Cohere reranker:', error);
192
173
  // Fallback to default ranking on error
193
174
  return this.getDefaultRanking(documents, topK);
194
175
  }
@@ -196,8 +177,8 @@ export class CohereReranker extends BaseReranker {
196
177
  }
197
178
 
198
179
  export class InfinityReranker extends BaseReranker {
199
- constructor() {
200
- super();
180
+ constructor(logger?: t.Logger) {
181
+ super(logger);
201
182
  // No API key needed for the placeholder implementation
202
183
  }
203
184
 
@@ -206,8 +187,8 @@ export class InfinityReranker extends BaseReranker {
206
187
  documents: string[],
207
188
  topK: number = 5
208
189
  ): Promise<t.Highlight[]> {
209
- console.log(
210
- `Reranking ${documents.length} documents with Infinity (placeholder)`
190
+ this.logger.debug(
191
+ `Reranking ${documents.length} chunks with Infinity (placeholder)`
211
192
  );
212
193
  // This would be replaced with actual Infinity reranker implementation
213
194
  return this.getDefaultRanking(documents, topK);
@@ -221,24 +202,31 @@ export const createReranker = (config: {
221
202
  rerankerType: t.RerankerType;
222
203
  jinaApiKey?: string;
223
204
  cohereApiKey?: string;
205
+ logger?: t.Logger;
224
206
  }): BaseReranker | undefined => {
225
- const { rerankerType, jinaApiKey, cohereApiKey } = config;
207
+ const { rerankerType, jinaApiKey, cohereApiKey, logger } = config;
208
+
209
+ // Create a default logger if none is provided
210
+ const defaultLogger = logger || createDefaultLogger();
226
211
 
227
212
  switch (rerankerType.toLowerCase()) {
228
213
  case 'jina':
229
- return new JinaReranker({ apiKey: jinaApiKey });
214
+ return new JinaReranker({ apiKey: jinaApiKey, logger: defaultLogger });
230
215
  case 'cohere':
231
- return new CohereReranker({ apiKey: cohereApiKey });
216
+ return new CohereReranker({
217
+ apiKey: cohereApiKey,
218
+ logger: defaultLogger,
219
+ });
232
220
  case 'infinity':
233
- return new InfinityReranker();
221
+ return new InfinityReranker(defaultLogger);
234
222
  case 'none':
235
- console.log('Skipping reranking as reranker is set to "none"');
223
+ defaultLogger.debug('Skipping reranking as reranker is set to "none"');
236
224
  return undefined;
237
225
  default:
238
- console.warn(
226
+ defaultLogger.warn(
239
227
  `Unknown reranker type: ${rerankerType}. Defaulting to InfinityReranker.`
240
228
  );
241
- return new JinaReranker({ apiKey: jinaApiKey });
229
+ return new JinaReranker({ apiKey: jinaApiKey, logger: defaultLogger });
242
230
  }
243
231
  };
244
232
 
@@ -0,0 +1,63 @@
1
+ import { z } from 'zod';
2
+
3
+ export enum DATE_RANGE {
4
+ PAST_HOUR = 'h',
5
+ PAST_24_HOURS = 'd',
6
+ PAST_WEEK = 'w',
7
+ PAST_MONTH = 'm',
8
+ PAST_YEAR = 'y',
9
+ }
10
+
11
+ export const DEFAULT_QUERY_DESCRIPTION = `
12
+ GUIDELINES:
13
+ - Start broad, then narrow: Begin with key concepts, then refine with specifics
14
+ - Think like sources: Use terminology experts would use in the field
15
+ - Consider perspective: Frame queries from different viewpoints for better results
16
+ - Quality over quantity: A precise 3-4 word query often beats lengthy sentences
17
+
18
+ TECHNIQUES (combine for power searches):
19
+ - EXACT PHRASES: Use quotes ("climate change report")
20
+ - EXCLUDE TERMS: Use minus to remove unwanted results (-wikipedia)
21
+ - SITE-SPECIFIC: Restrict to websites (site:edu research)
22
+ - FILETYPE: Find specific documents (filetype:pdf study)
23
+ - OR OPERATOR: Find alternatives (electric OR hybrid cars)
24
+ - DATE RANGE: Recent information (data after:2020)
25
+ - WILDCARDS: Use * for unknown terms (how to * bread)
26
+ - SPECIFIC QUESTIONS: Use who/what/when/where/why/how
27
+ - DOMAIN TERMS: Include technical terminology for specialized topics
28
+ - CONCISE TERMS: Prioritize keywords over sentences
29
+ `.trim();
30
+
31
+ export const DEFAULT_COUNTRY_DESCRIPTION =
32
+ `Country code to localize search results.
33
+ Use standard 2-letter country codes: "us", "uk", "ca", "de", "fr", "jp", "br", etc.
34
+ Provide this when the search should return results specific to a particular country.
35
+ Examples:
36
+ - "us" for United States (default)
37
+ - "de" for Germany
38
+ - "in" for India
39
+ `.trim();
40
+
41
+ export const querySchema = z.string().describe(DEFAULT_QUERY_DESCRIPTION);
42
+ export const dateSchema = z
43
+ .nativeEnum(DATE_RANGE)
44
+ .optional()
45
+ .describe('Date range for search results.');
46
+ export const countrySchema = z
47
+ .string()
48
+ .optional()
49
+ .describe(DEFAULT_COUNTRY_DESCRIPTION);
50
+ export const imagesSchema = z
51
+ .boolean()
52
+ .optional()
53
+ .describe('Whether to also run an image search.');
54
+
55
+ export const videosSchema = z
56
+ .boolean()
57
+ .optional()
58
+ .describe('Whether to also run a video search.');
59
+
60
+ export const newsSchema = z
61
+ .boolean()
62
+ .optional()
63
+ .describe('Whether to also run a news search.');