@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.
- 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 +61 -13
- package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
- package/dist/cjs/tools/search/format.cjs +9 -3
- package/dist/cjs/tools/search/format.cjs.map +1 -1
- package/dist/cjs/tools/search/rerankers.cjs +35 -50
- package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
- package/dist/cjs/tools/search/schema.cjs +70 -0
- package/dist/cjs/tools/search/schema.cjs.map +1 -0
- package/dist/cjs/tools/search/search.cjs +145 -38
- package/dist/cjs/tools/search/search.cjs.map +1 -1
- package/dist/cjs/tools/search/tool.cjs +165 -48
- package/dist/cjs/tools/search/tool.cjs.map +1 -1
- package/dist/cjs/tools/search/utils.cjs +34 -5
- 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 +61 -13
- package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
- package/dist/esm/tools/search/format.mjs +10 -4
- package/dist/esm/tools/search/format.mjs.map +1 -1
- package/dist/esm/tools/search/rerankers.mjs +35 -50
- package/dist/esm/tools/search/rerankers.mjs.map +1 -1
- package/dist/esm/tools/search/schema.mjs +61 -0
- package/dist/esm/tools/search/schema.mjs.map +1 -0
- package/dist/esm/tools/search/search.mjs +146 -39
- package/dist/esm/tools/search/search.mjs.map +1 -1
- package/dist/esm/tools/search/tool.mjs +164 -47
- package/dist/esm/tools/search/tool.mjs.map +1 -1
- package/dist/esm/tools/search/utils.mjs +33 -6
- 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 +16 -0
- package/dist/types/tools/search/rerankers.d.ts +8 -5
- package/dist/types/tools/search/schema.d.ts +16 -0
- package/dist/types/tools/search/tool.d.ts +13 -0
- package/dist/types/tools/search/types.d.ts +64 -9
- package/dist/types/tools/search/utils.d.ts +9 -2
- 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 +35 -18
- 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 +4 -12
- 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 +78 -24
- package/src/tools/search/format.ts +10 -5
- package/src/tools/search/rerankers.ts +50 -62
- package/src/tools/search/schema.ts +63 -0
- package/src/tools/search/search.ts +167 -34
- package/src/tools/search/tool.ts +222 -46
- package/src/tools/search/types.ts +65 -10
- package/src/tools/search/utils.ts +37 -5
- 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 +20 -8
- package/src/utils/title.ts +104 -30
- 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({
|
|
37
|
-
|
|
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
|
-
|
|
47
|
+
this.logger.debug(`Reranking ${documents.length} chunks with Jina`);
|
|
47
48
|
|
|
48
49
|
try {
|
|
49
50
|
if (this.apiKey == null || this.apiKey === '') {
|
|
50
|
-
|
|
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
|
-
|
|
76
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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({
|
|
126
|
-
|
|
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
|
-
|
|
129
|
+
this.logger.debug(`Reranking ${documents.length} chunks with Cohere`);
|
|
136
130
|
|
|
137
131
|
try {
|
|
138
132
|
if (this.apiKey == null || this.apiKey === '') {
|
|
139
|
-
|
|
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
|
-
|
|
164
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
210
|
-
`Reranking ${documents.length}
|
|
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({
|
|
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
|
-
|
|
223
|
+
defaultLogger.debug('Skipping reranking as reranker is set to "none"');
|
|
236
224
|
return undefined;
|
|
237
225
|
default:
|
|
238
|
-
|
|
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.');
|