@agenticc/core 1.0.0
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/LICENSE +21 -0
- package/README.md +370 -0
- package/README.zh-CN.md +372 -0
- package/dist/audit/index.d.ts +9 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/index.js +9 -0
- package/dist/audit/index.js.map +1 -0
- package/dist/audit/logger.d.ts +211 -0
- package/dist/audit/logger.d.ts.map +1 -0
- package/dist/audit/logger.js +268 -0
- package/dist/audit/logger.js.map +1 -0
- package/dist/audit/query.d.ts +164 -0
- package/dist/audit/query.d.ts.map +1 -0
- package/dist/audit/query.js +250 -0
- package/dist/audit/query.js.map +1 -0
- package/dist/conversation/context-builder.d.ts +119 -0
- package/dist/conversation/context-builder.d.ts.map +1 -0
- package/dist/conversation/context-builder.js +252 -0
- package/dist/conversation/context-builder.js.map +1 -0
- package/dist/conversation/index.d.ts +10 -0
- package/dist/conversation/index.d.ts.map +1 -0
- package/dist/conversation/index.js +10 -0
- package/dist/conversation/index.js.map +1 -0
- package/dist/conversation/message-store.d.ts +231 -0
- package/dist/conversation/message-store.d.ts.map +1 -0
- package/dist/conversation/message-store.js +404 -0
- package/dist/conversation/message-store.js.map +1 -0
- package/dist/conversation/session.d.ts +201 -0
- package/dist/conversation/session.d.ts.map +1 -0
- package/dist/conversation/session.js +285 -0
- package/dist/conversation/session.js.map +1 -0
- package/dist/core/agent.d.ts +277 -0
- package/dist/core/agent.d.ts.map +1 -0
- package/dist/core/agent.js +674 -0
- package/dist/core/agent.js.map +1 -0
- package/dist/core/agentic-loop.d.ts +98 -0
- package/dist/core/agentic-loop.d.ts.map +1 -0
- package/dist/core/agentic-loop.js +496 -0
- package/dist/core/agentic-loop.js.map +1 -0
- package/dist/core/index.d.ts +14 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +14 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/intent-parser.d.ts +101 -0
- package/dist/core/intent-parser.d.ts.map +1 -0
- package/dist/core/intent-parser.js +221 -0
- package/dist/core/intent-parser.js.map +1 -0
- package/dist/core/plan-generator.d.ts +133 -0
- package/dist/core/plan-generator.d.ts.map +1 -0
- package/dist/core/plan-generator.js +294 -0
- package/dist/core/plan-generator.js.map +1 -0
- package/dist/core/plugin-manager.d.ts +120 -0
- package/dist/core/plugin-manager.d.ts.map +1 -0
- package/dist/core/plugin-manager.js +369 -0
- package/dist/core/plugin-manager.js.map +1 -0
- package/dist/core/response-handler.d.ts +141 -0
- package/dist/core/response-handler.d.ts.map +1 -0
- package/dist/core/response-handler.js +384 -0
- package/dist/core/response-handler.js.map +1 -0
- package/dist/core/tool-executor.d.ts +143 -0
- package/dist/core/tool-executor.d.ts.map +1 -0
- package/dist/core/tool-executor.js +354 -0
- package/dist/core/tool-executor.js.map +1 -0
- package/dist/core/tool-registry.d.ts +133 -0
- package/dist/core/tool-registry.d.ts.map +1 -0
- package/dist/core/tool-registry.js +252 -0
- package/dist/core/tool-registry.js.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/knowledge/chunker.d.ts +78 -0
- package/dist/knowledge/chunker.d.ts.map +1 -0
- package/dist/knowledge/chunker.js +233 -0
- package/dist/knowledge/chunker.js.map +1 -0
- package/dist/knowledge/embedder.d.ts +93 -0
- package/dist/knowledge/embedder.d.ts.map +1 -0
- package/dist/knowledge/embedder.js +205 -0
- package/dist/knowledge/embedder.js.map +1 -0
- package/dist/knowledge/index.d.ts +10 -0
- package/dist/knowledge/index.d.ts.map +1 -0
- package/dist/knowledge/index.js +11 -0
- package/dist/knowledge/index.js.map +1 -0
- package/dist/knowledge/loaders/index.d.ts +10 -0
- package/dist/knowledge/loaders/index.d.ts.map +1 -0
- package/dist/knowledge/loaders/index.js +10 -0
- package/dist/knowledge/loaders/index.js.map +1 -0
- package/dist/knowledge/loaders/markdown.d.ts +88 -0
- package/dist/knowledge/loaders/markdown.d.ts.map +1 -0
- package/dist/knowledge/loaders/markdown.js +205 -0
- package/dist/knowledge/loaders/markdown.js.map +1 -0
- package/dist/knowledge/loaders/yaml.d.ts +112 -0
- package/dist/knowledge/loaders/yaml.d.ts.map +1 -0
- package/dist/knowledge/loaders/yaml.js +368 -0
- package/dist/knowledge/loaders/yaml.js.map +1 -0
- package/dist/knowledge/retriever.d.ts +144 -0
- package/dist/knowledge/retriever.d.ts.map +1 -0
- package/dist/knowledge/retriever.js +399 -0
- package/dist/knowledge/retriever.js.map +1 -0
- package/dist/knowledge/store.d.ts +146 -0
- package/dist/knowledge/store.d.ts.map +1 -0
- package/dist/knowledge/store.js +420 -0
- package/dist/knowledge/store.js.map +1 -0
- package/dist/llm/adapter.d.ts +194 -0
- package/dist/llm/adapter.d.ts.map +1 -0
- package/dist/llm/adapter.js +42 -0
- package/dist/llm/adapter.js.map +1 -0
- package/dist/llm/adapters/anyrouter.d.ts +84 -0
- package/dist/llm/adapters/anyrouter.d.ts.map +1 -0
- package/dist/llm/adapters/anyrouter.js +372 -0
- package/dist/llm/adapters/anyrouter.js.map +1 -0
- package/dist/llm/adapters/claude.d.ts +66 -0
- package/dist/llm/adapters/claude.d.ts.map +1 -0
- package/dist/llm/adapters/claude.js +323 -0
- package/dist/llm/adapters/claude.js.map +1 -0
- package/dist/llm/adapters/index.d.ts +12 -0
- package/dist/llm/adapters/index.d.ts.map +1 -0
- package/dist/llm/adapters/index.js +12 -0
- package/dist/llm/adapters/index.js.map +1 -0
- package/dist/llm/adapters/mimo.d.ts +85 -0
- package/dist/llm/adapters/mimo.d.ts.map +1 -0
- package/dist/llm/adapters/mimo.js +316 -0
- package/dist/llm/adapters/mimo.js.map +1 -0
- package/dist/llm/adapters/openai.d.ts +53 -0
- package/dist/llm/adapters/openai.d.ts.map +1 -0
- package/dist/llm/adapters/openai.js +293 -0
- package/dist/llm/adapters/openai.js.map +1 -0
- package/dist/llm/adapters/qwen.d.ts +53 -0
- package/dist/llm/adapters/qwen.d.ts.map +1 -0
- package/dist/llm/adapters/qwen.js +299 -0
- package/dist/llm/adapters/qwen.js.map +1 -0
- package/dist/llm/adapters/siliconflow.d.ts +69 -0
- package/dist/llm/adapters/siliconflow.d.ts.map +1 -0
- package/dist/llm/adapters/siliconflow.js +331 -0
- package/dist/llm/adapters/siliconflow.js.map +1 -0
- package/dist/llm/index.d.ts +9 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +12 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/manager.d.ts +97 -0
- package/dist/llm/manager.d.ts.map +1 -0
- package/dist/llm/manager.js +337 -0
- package/dist/llm/manager.js.map +1 -0
- package/dist/test-utils/arbitraries.d.ts +230 -0
- package/dist/test-utils/arbitraries.d.ts.map +1 -0
- package/dist/test-utils/arbitraries.js +280 -0
- package/dist/test-utils/arbitraries.js.map +1 -0
- package/dist/test-utils/cleanup.d.ts +184 -0
- package/dist/test-utils/cleanup.d.ts.map +1 -0
- package/dist/test-utils/cleanup.js +282 -0
- package/dist/test-utils/cleanup.js.map +1 -0
- package/dist/test-utils/config.d.ts +80 -0
- package/dist/test-utils/config.d.ts.map +1 -0
- package/dist/test-utils/config.js +94 -0
- package/dist/test-utils/config.js.map +1 -0
- package/dist/test-utils/index.d.ts +10 -0
- package/dist/test-utils/index.d.ts.map +1 -0
- package/dist/test-utils/index.js +36 -0
- package/dist/test-utils/index.js.map +1 -0
- package/dist/test-utils/mocks.d.ts +170 -0
- package/dist/test-utils/mocks.d.ts.map +1 -0
- package/dist/test-utils/mocks.js +281 -0
- package/dist/test-utils/mocks.js.map +1 -0
- package/dist/types/config.d.ts +170 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +120 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/knowledge.d.ts +95 -0
- package/dist/types/knowledge.d.ts.map +1 -0
- package/dist/types/knowledge.js +7 -0
- package/dist/types/knowledge.js.map +1 -0
- package/dist/types/loop.d.ts +148 -0
- package/dist/types/loop.d.ts.map +1 -0
- package/dist/types/loop.js +16 -0
- package/dist/types/loop.js.map +1 -0
- package/dist/types/plugin.d.ts +137 -0
- package/dist/types/plugin.d.ts.map +1 -0
- package/dist/types/plugin.js +15 -0
- package/dist/types/plugin.js.map +1 -0
- package/dist/types/response.d.ts +186 -0
- package/dist/types/response.d.ts.map +1 -0
- package/dist/types/response.js +99 -0
- package/dist/types/response.js.map +1 -0
- package/dist/types/streaming.d.ts +478 -0
- package/dist/types/streaming.d.ts.map +1 -0
- package/dist/types/streaming.js +483 -0
- package/dist/types/streaming.js.map +1 -0
- package/dist/types/tool.d.ts +118 -0
- package/dist/types/tool.d.ts.map +1 -0
- package/dist/types/tool.js +42 -0
- package/dist/types/tool.js.map +1 -0
- package/dist/utils/error.d.ts +22 -0
- package/dist/utils/error.d.ts.map +1 -0
- package/dist/utils/error.js +36 -0
- package/dist/utils/error.js.map +1 -0
- package/package.json +102 -0
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages multiple LLM adapters and routes tasks to the appropriate LLM.
|
|
5
|
+
* Supports single LLM mode (all tasks use one LLM) and multi-LLM mode
|
|
6
|
+
* (different LLMs for different task types).
|
|
7
|
+
*/
|
|
8
|
+
import { LLMError } from './adapter.js';
|
|
9
|
+
import { getLLMConfigForTask } from '../types/config.js';
|
|
10
|
+
import { OpenAIAdapter } from './adapters/openai.js';
|
|
11
|
+
import { ClaudeAdapter } from './adapters/claude.js';
|
|
12
|
+
import { QwenAdapter } from './adapters/qwen.js';
|
|
13
|
+
import { SiliconFlowAdapter } from './adapters/siliconflow.js';
|
|
14
|
+
import { MiMoAdapter } from './adapters/mimo.js';
|
|
15
|
+
import { AnyRouterAdapter } from './adapters/anyrouter.js';
|
|
16
|
+
const DEFAULT_RETRY_CONFIG = {
|
|
17
|
+
maxRetries: 3,
|
|
18
|
+
initialDelayMs: 1000,
|
|
19
|
+
maxDelayMs: 10000,
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* LLM Manager
|
|
23
|
+
*
|
|
24
|
+
* Provides a unified interface for working with multiple LLM providers.
|
|
25
|
+
*/
|
|
26
|
+
export class LLMManager {
|
|
27
|
+
config;
|
|
28
|
+
adapters = new Map();
|
|
29
|
+
retryConfig;
|
|
30
|
+
constructor(config) {
|
|
31
|
+
this.config = config;
|
|
32
|
+
this.retryConfig = config.retry ?? DEFAULT_RETRY_CONFIG;
|
|
33
|
+
// Pre-create adapters for configured LLMs
|
|
34
|
+
this.initializeAdapters();
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Get the LLM adapter for a specific task
|
|
38
|
+
*/
|
|
39
|
+
getLLMForTask(task) {
|
|
40
|
+
const providerConfig = getLLMConfigForTask(this.config, task);
|
|
41
|
+
return this.getOrCreateAdapter(providerConfig);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Generate text for a specific task
|
|
45
|
+
*/
|
|
46
|
+
async generate(task, prompt, options) {
|
|
47
|
+
return this.executeWithRetry(task, async (adapter) => adapter.generate(prompt, options), options?.abortSignal);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Generate text with tool calling for a specific task
|
|
51
|
+
*/
|
|
52
|
+
async generateWithTools(task, prompt, tools, options) {
|
|
53
|
+
return this.executeWithRetry(task, async (adapter) => adapter.generateWithTools(prompt, tools, options), options?.abortSignal);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Generate text with tool calling for a specific task (streaming)
|
|
57
|
+
*
|
|
58
|
+
* Note: Streaming does not support automatic retry since we can't replay the stream.
|
|
59
|
+
* If you need retry behavior, use the non-streaming version.
|
|
60
|
+
*/
|
|
61
|
+
async generateWithToolsStream(task, prompt, tools, onChunk, options) {
|
|
62
|
+
// Check if already aborted before starting
|
|
63
|
+
if (options?.abortSignal?.aborted) {
|
|
64
|
+
const adapter = this.getLLMForTask(task);
|
|
65
|
+
throw new LLMError('Operation cancelled', 'CANCELLED', adapter.provider);
|
|
66
|
+
}
|
|
67
|
+
const adapter = this.getLLMForTask(task);
|
|
68
|
+
// Check if adapter supports streaming
|
|
69
|
+
if (!adapter.supportsStreaming()) {
|
|
70
|
+
// Fall back to non-streaming and send a single chunk at the end
|
|
71
|
+
const response = await adapter.generateWithTools(prompt, tools, options);
|
|
72
|
+
if (response.content) {
|
|
73
|
+
onChunk({ type: 'content', content: response.content });
|
|
74
|
+
}
|
|
75
|
+
onChunk({ type: 'done', response });
|
|
76
|
+
return response;
|
|
77
|
+
}
|
|
78
|
+
return adapter.generateWithToolsStream(prompt, tools, onChunk, options);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Check if the adapter for a task supports streaming
|
|
82
|
+
*/
|
|
83
|
+
supportsStreaming(task) {
|
|
84
|
+
const adapter = this.getLLMForTask(task);
|
|
85
|
+
return adapter.supportsStreaming();
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Generate embedding using the knowledge retrieval LLM
|
|
89
|
+
*/
|
|
90
|
+
async embed(text) {
|
|
91
|
+
// Use knowledge_retrieval task for embeddings
|
|
92
|
+
const adapter = this.getLLMForTask('knowledge_retrieval');
|
|
93
|
+
if (!adapter.supportsEmbeddings()) {
|
|
94
|
+
// Try fallback if available
|
|
95
|
+
if (this.config.fallback) {
|
|
96
|
+
const fallbackAdapter = this.getOrCreateAdapter(this.config.fallback);
|
|
97
|
+
if (fallbackAdapter.supportsEmbeddings()) {
|
|
98
|
+
return fallbackAdapter.embed(text);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Try default adapter
|
|
102
|
+
const defaultAdapter = this.getOrCreateAdapter(this.config.default);
|
|
103
|
+
if (defaultAdapter.supportsEmbeddings()) {
|
|
104
|
+
return defaultAdapter.embed(text);
|
|
105
|
+
}
|
|
106
|
+
throw new LLMError('No adapter supports embeddings', 'INVALID_REQUEST', adapter.provider);
|
|
107
|
+
}
|
|
108
|
+
return adapter.embed(text);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Check if any configured adapter supports embeddings
|
|
112
|
+
*/
|
|
113
|
+
supportsEmbeddings() {
|
|
114
|
+
for (const adapter of this.adapters.values()) {
|
|
115
|
+
if (adapter.supportsEmbeddings()) {
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Check if the adapter for a task supports tool calling
|
|
123
|
+
*/
|
|
124
|
+
supportsToolCalling(task) {
|
|
125
|
+
const adapter = this.getLLMForTask(task);
|
|
126
|
+
return adapter.supportsToolCalling();
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Get all initialized adapters
|
|
130
|
+
*/
|
|
131
|
+
getAdapters() {
|
|
132
|
+
return new Map(this.adapters);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Get the current configuration
|
|
136
|
+
*/
|
|
137
|
+
getConfig() {
|
|
138
|
+
return { ...this.config };
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Initialize adapters for all configured LLMs
|
|
142
|
+
*/
|
|
143
|
+
initializeAdapters() {
|
|
144
|
+
// Initialize default adapter
|
|
145
|
+
this.getOrCreateAdapter(this.config.default);
|
|
146
|
+
// Initialize fallback adapter if configured
|
|
147
|
+
if (this.config.fallback) {
|
|
148
|
+
this.getOrCreateAdapter(this.config.fallback);
|
|
149
|
+
}
|
|
150
|
+
// Initialize task-specific adapters in multi-LLM mode
|
|
151
|
+
if (this.config.mode === 'multi' && this.config.taskAssignment) {
|
|
152
|
+
const { intentParsing, knowledgeRetrieval, toolCalling, responseGeneration } = this.config.taskAssignment;
|
|
153
|
+
if (intentParsing)
|
|
154
|
+
this.getOrCreateAdapter(intentParsing);
|
|
155
|
+
if (knowledgeRetrieval)
|
|
156
|
+
this.getOrCreateAdapter(knowledgeRetrieval);
|
|
157
|
+
if (toolCalling)
|
|
158
|
+
this.getOrCreateAdapter(toolCalling);
|
|
159
|
+
if (responseGeneration)
|
|
160
|
+
this.getOrCreateAdapter(responseGeneration);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Get or create an adapter for a provider configuration
|
|
165
|
+
*/
|
|
166
|
+
getOrCreateAdapter(config) {
|
|
167
|
+
const key = this.getAdapterKey(config);
|
|
168
|
+
let adapter = this.adapters.get(key);
|
|
169
|
+
if (!adapter) {
|
|
170
|
+
adapter = this.createAdapter(config);
|
|
171
|
+
this.adapters.set(key, adapter);
|
|
172
|
+
}
|
|
173
|
+
return adapter;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Create a unique key for an adapter configuration
|
|
177
|
+
*/
|
|
178
|
+
getAdapterKey(config) {
|
|
179
|
+
return `${config.provider}:${config.model}:${config.baseUrl ?? 'default'}`;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Create an adapter based on provider configuration
|
|
183
|
+
*/
|
|
184
|
+
createAdapter(config) {
|
|
185
|
+
switch (config.provider) {
|
|
186
|
+
case 'openai':
|
|
187
|
+
return new OpenAIAdapter({
|
|
188
|
+
apiKey: config.apiKey,
|
|
189
|
+
model: config.model,
|
|
190
|
+
baseUrl: config.baseUrl,
|
|
191
|
+
temperature: config.temperature,
|
|
192
|
+
maxTokens: config.maxTokens,
|
|
193
|
+
});
|
|
194
|
+
case 'claude':
|
|
195
|
+
return new ClaudeAdapter({
|
|
196
|
+
apiKey: config.apiKey,
|
|
197
|
+
model: config.model,
|
|
198
|
+
baseUrl: config.baseUrl,
|
|
199
|
+
temperature: config.temperature,
|
|
200
|
+
maxTokens: config.maxTokens,
|
|
201
|
+
});
|
|
202
|
+
case 'qwen':
|
|
203
|
+
return new QwenAdapter({
|
|
204
|
+
apiKey: config.apiKey,
|
|
205
|
+
model: config.model,
|
|
206
|
+
baseUrl: config.baseUrl,
|
|
207
|
+
temperature: config.temperature,
|
|
208
|
+
maxTokens: config.maxTokens,
|
|
209
|
+
});
|
|
210
|
+
case 'siliconflow':
|
|
211
|
+
return new SiliconFlowAdapter({
|
|
212
|
+
apiKey: config.apiKey,
|
|
213
|
+
model: config.model,
|
|
214
|
+
baseUrl: config.baseUrl,
|
|
215
|
+
temperature: config.temperature,
|
|
216
|
+
maxTokens: config.maxTokens,
|
|
217
|
+
});
|
|
218
|
+
case 'mimo':
|
|
219
|
+
return new MiMoAdapter({
|
|
220
|
+
apiKey: config.apiKey,
|
|
221
|
+
model: config.model,
|
|
222
|
+
baseUrl: config.baseUrl,
|
|
223
|
+
temperature: config.temperature,
|
|
224
|
+
maxTokens: config.maxTokens,
|
|
225
|
+
});
|
|
226
|
+
case 'anyrouter':
|
|
227
|
+
return new AnyRouterAdapter({
|
|
228
|
+
apiKey: config.apiKey,
|
|
229
|
+
model: config.model,
|
|
230
|
+
baseUrl: config.baseUrl,
|
|
231
|
+
temperature: config.temperature,
|
|
232
|
+
maxTokens: config.maxTokens,
|
|
233
|
+
});
|
|
234
|
+
case 'custom':
|
|
235
|
+
// Custom providers use OpenAI-compatible API
|
|
236
|
+
return new OpenAIAdapter({
|
|
237
|
+
apiKey: config.apiKey,
|
|
238
|
+
model: config.model,
|
|
239
|
+
baseUrl: config.baseUrl,
|
|
240
|
+
temperature: config.temperature,
|
|
241
|
+
maxTokens: config.maxTokens,
|
|
242
|
+
});
|
|
243
|
+
default:
|
|
244
|
+
throw new LLMError(`Unknown provider: ${config.provider}`, 'INVALID_REQUEST', config.provider);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Execute an LLM operation with retry and fallback
|
|
249
|
+
*/
|
|
250
|
+
async executeWithRetry(task, operation, abortSignal) {
|
|
251
|
+
// Check if already aborted before starting
|
|
252
|
+
if (abortSignal?.aborted) {
|
|
253
|
+
const adapter = this.getLLMForTask(task);
|
|
254
|
+
throw new LLMError('Operation cancelled', 'CANCELLED', adapter.provider);
|
|
255
|
+
}
|
|
256
|
+
const adapter = this.getLLMForTask(task);
|
|
257
|
+
let lastError;
|
|
258
|
+
let delay = this.retryConfig.initialDelayMs;
|
|
259
|
+
for (let attempt = 0; attempt <= this.retryConfig.maxRetries; attempt++) {
|
|
260
|
+
// Check if aborted before each retry attempt
|
|
261
|
+
if (abortSignal?.aborted) {
|
|
262
|
+
throw new LLMError('Operation cancelled', 'CANCELLED', adapter.provider);
|
|
263
|
+
}
|
|
264
|
+
try {
|
|
265
|
+
return await operation(adapter);
|
|
266
|
+
}
|
|
267
|
+
catch (error) {
|
|
268
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
269
|
+
// Don't retry if cancelled
|
|
270
|
+
if (error instanceof LLMError && error.code === 'CANCELLED') {
|
|
271
|
+
throw error;
|
|
272
|
+
}
|
|
273
|
+
// Check if we should retry
|
|
274
|
+
if (!this.shouldRetry(error, attempt)) {
|
|
275
|
+
break;
|
|
276
|
+
}
|
|
277
|
+
// Wait before retrying
|
|
278
|
+
await this.sleep(delay);
|
|
279
|
+
delay = Math.min(delay * 2, this.retryConfig.maxDelayMs);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
// Try fallback if available
|
|
283
|
+
if (this.config.fallback) {
|
|
284
|
+
// Check if aborted before fallback
|
|
285
|
+
if (abortSignal?.aborted) {
|
|
286
|
+
throw new LLMError('Operation cancelled', 'CANCELLED', adapter.provider);
|
|
287
|
+
}
|
|
288
|
+
try {
|
|
289
|
+
const fallbackAdapter = this.getOrCreateAdapter(this.config.fallback);
|
|
290
|
+
return await operation(fallbackAdapter);
|
|
291
|
+
}
|
|
292
|
+
catch (fallbackError) {
|
|
293
|
+
// Don't swallow cancelled errors from fallback
|
|
294
|
+
if (fallbackError instanceof LLMError && fallbackError.code === 'CANCELLED') {
|
|
295
|
+
throw fallbackError;
|
|
296
|
+
}
|
|
297
|
+
// Fallback also failed, throw original error
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
throw (lastError ??
|
|
301
|
+
new LLMError('Unknown error during LLM operation', 'UNKNOWN_ERROR', adapter.provider));
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Determine if an error should trigger a retry
|
|
305
|
+
*/
|
|
306
|
+
shouldRetry(error, attempt) {
|
|
307
|
+
if (attempt >= this.retryConfig.maxRetries) {
|
|
308
|
+
return false;
|
|
309
|
+
}
|
|
310
|
+
if (error instanceof LLMError) {
|
|
311
|
+
// Retry on rate limits and network errors
|
|
312
|
+
return error.code === 'RATE_LIMIT_ERROR' || error.code === 'NETWORK_ERROR';
|
|
313
|
+
}
|
|
314
|
+
return false;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Sleep for a specified duration
|
|
318
|
+
*/
|
|
319
|
+
sleep(ms) {
|
|
320
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Create an LLMManager with a simple single-LLM configuration
|
|
325
|
+
*/
|
|
326
|
+
export function createSimpleLLMManager(provider, apiKey, model, options) {
|
|
327
|
+
return new LLMManager({
|
|
328
|
+
mode: 'single',
|
|
329
|
+
default: {
|
|
330
|
+
provider,
|
|
331
|
+
apiKey,
|
|
332
|
+
model,
|
|
333
|
+
...options,
|
|
334
|
+
},
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/llm/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 共享的 Arbitrary 生成器
|
|
3
|
+
*
|
|
4
|
+
* 为 Property-based 测试提供统一的数据生成器
|
|
5
|
+
*/
|
|
6
|
+
import * as fc from 'fast-check';
|
|
7
|
+
/**
|
|
8
|
+
* 有效的标识符(用于工具名、变量名等)
|
|
9
|
+
* 规则:以字母开头,只包含字母、数字、下划线
|
|
10
|
+
*/
|
|
11
|
+
export declare const arbIdentifier: fc.Arbitrary<string>;
|
|
12
|
+
/**
|
|
13
|
+
* 有效的插件名(允许连字符)
|
|
14
|
+
*/
|
|
15
|
+
export declare const arbPluginName: fc.Arbitrary<string>;
|
|
16
|
+
/**
|
|
17
|
+
* 有效的工具名(不允许连字符)
|
|
18
|
+
*/
|
|
19
|
+
export declare const arbToolName: fc.Arbitrary<string>;
|
|
20
|
+
/**
|
|
21
|
+
* 有效的命名空间(小写字母开头)
|
|
22
|
+
*/
|
|
23
|
+
export declare const arbNamespace: fc.Arbitrary<string>;
|
|
24
|
+
/**
|
|
25
|
+
* 有效的分类名
|
|
26
|
+
*/
|
|
27
|
+
export declare const arbCategory: fc.Arbitrary<string>;
|
|
28
|
+
/**
|
|
29
|
+
* Session ID(UUID 格式)
|
|
30
|
+
*/
|
|
31
|
+
export declare const arbSessionId: fc.Arbitrary<string>;
|
|
32
|
+
/**
|
|
33
|
+
* Message ID
|
|
34
|
+
*/
|
|
35
|
+
export declare const arbMessageId: fc.Arbitrary<string>;
|
|
36
|
+
/**
|
|
37
|
+
* 消息角色
|
|
38
|
+
*/
|
|
39
|
+
export declare const arbMessageRole: fc.Arbitrary<string>;
|
|
40
|
+
/**
|
|
41
|
+
* 响应类型
|
|
42
|
+
*/
|
|
43
|
+
export declare const arbResponseType: fc.Arbitrary<string>;
|
|
44
|
+
/**
|
|
45
|
+
* 非空字符串
|
|
46
|
+
*
|
|
47
|
+
* @param maxLength - 最大长度
|
|
48
|
+
*/
|
|
49
|
+
export declare const arbNonEmptyString: (maxLength?: number) => fc.Arbitrary<string>;
|
|
50
|
+
/**
|
|
51
|
+
* 消息内容
|
|
52
|
+
*/
|
|
53
|
+
export declare const arbMessageContent: fc.Arbitrary<string>;
|
|
54
|
+
/**
|
|
55
|
+
* 用户消息
|
|
56
|
+
*/
|
|
57
|
+
export declare const arbUserMessage: fc.Arbitrary<string>;
|
|
58
|
+
/**
|
|
59
|
+
* 安全的字符串(只包含常见字符)
|
|
60
|
+
*/
|
|
61
|
+
export declare const arbSafeString: (maxLength?: number) => fc.Arbitrary<string>;
|
|
62
|
+
/**
|
|
63
|
+
* 有效的 JSON 值(排除 undefined)
|
|
64
|
+
*/
|
|
65
|
+
export declare const arbJsonValue: fc.Arbitrary<fc.JsonValue>;
|
|
66
|
+
/**
|
|
67
|
+
* 元数据对象
|
|
68
|
+
*/
|
|
69
|
+
export declare const arbMetadata: fc.Arbitrary<any>;
|
|
70
|
+
/**
|
|
71
|
+
* 简单的键值对对象
|
|
72
|
+
*/
|
|
73
|
+
export declare const arbSimpleObject: fc.Arbitrary<Record<string, any>>;
|
|
74
|
+
/**
|
|
75
|
+
* 工具参数
|
|
76
|
+
*/
|
|
77
|
+
export declare const arbToolArgs: fc.Arbitrary<Record<string, any>>;
|
|
78
|
+
/**
|
|
79
|
+
* 错误代码
|
|
80
|
+
*/
|
|
81
|
+
export declare const arbErrorCode: fc.Arbitrary<string>;
|
|
82
|
+
/**
|
|
83
|
+
* 工具执行结果
|
|
84
|
+
*/
|
|
85
|
+
export declare const arbToolResult: fc.Arbitrary<{
|
|
86
|
+
success: boolean;
|
|
87
|
+
content: string;
|
|
88
|
+
data: any;
|
|
89
|
+
error: any;
|
|
90
|
+
}>;
|
|
91
|
+
/**
|
|
92
|
+
* 成功的工具结果
|
|
93
|
+
*/
|
|
94
|
+
export declare const arbSuccessToolResult: fc.Arbitrary<{
|
|
95
|
+
success: boolean;
|
|
96
|
+
content: string;
|
|
97
|
+
data: any;
|
|
98
|
+
}>;
|
|
99
|
+
/**
|
|
100
|
+
* 失败的工具结果
|
|
101
|
+
*/
|
|
102
|
+
export declare const arbFailureToolResult: fc.Arbitrary<{
|
|
103
|
+
success: boolean;
|
|
104
|
+
content: string;
|
|
105
|
+
error: {
|
|
106
|
+
code: string;
|
|
107
|
+
message: string;
|
|
108
|
+
};
|
|
109
|
+
}>;
|
|
110
|
+
/**
|
|
111
|
+
* 正整数
|
|
112
|
+
*
|
|
113
|
+
* @param max - 最大值
|
|
114
|
+
*/
|
|
115
|
+
export declare const arbPositiveInt: (max?: number) => fc.Arbitrary<number>;
|
|
116
|
+
/**
|
|
117
|
+
* 非负整数
|
|
118
|
+
*
|
|
119
|
+
* @param max - 最大值
|
|
120
|
+
*/
|
|
121
|
+
export declare const arbNonNegativeInt: (max?: number) => fc.Arbitrary<number>;
|
|
122
|
+
/**
|
|
123
|
+
* 持续时间(毫秒)
|
|
124
|
+
*/
|
|
125
|
+
export declare const arbDurationMs: fc.Arbitrary<number>;
|
|
126
|
+
/**
|
|
127
|
+
* 温度参数(0-2)
|
|
128
|
+
*/
|
|
129
|
+
export declare const arbTemperature: fc.Arbitrary<number>;
|
|
130
|
+
/**
|
|
131
|
+
* maxTokens 参数
|
|
132
|
+
*/
|
|
133
|
+
export declare const arbMaxTokens: fc.Arbitrary<number>;
|
|
134
|
+
/**
|
|
135
|
+
* maxIterations 参数
|
|
136
|
+
*/
|
|
137
|
+
export declare const arbMaxIterations: fc.Arbitrary<number>;
|
|
138
|
+
/**
|
|
139
|
+
* 合理范围内的时间戳
|
|
140
|
+
*/
|
|
141
|
+
export declare const arbTimestamp: fc.Arbitrary<Date>;
|
|
142
|
+
/**
|
|
143
|
+
* 过去的时间戳
|
|
144
|
+
*/
|
|
145
|
+
export declare const arbPastTimestamp: fc.Arbitrary<Date>;
|
|
146
|
+
/**
|
|
147
|
+
* LLM 提供商
|
|
148
|
+
*/
|
|
149
|
+
export declare const arbLLMProvider: fc.Arbitrary<string>;
|
|
150
|
+
/**
|
|
151
|
+
* LLM 任务类型
|
|
152
|
+
*/
|
|
153
|
+
export declare const arbLLMTask: fc.Arbitrary<string>;
|
|
154
|
+
/**
|
|
155
|
+
* LLM 错误代码
|
|
156
|
+
*/
|
|
157
|
+
export declare const arbLLMErrorCode: fc.Arbitrary<string>;
|
|
158
|
+
/**
|
|
159
|
+
* 风险级别
|
|
160
|
+
*/
|
|
161
|
+
export declare const arbRiskLevel: fc.Arbitrary<string>;
|
|
162
|
+
/**
|
|
163
|
+
* 消息操作
|
|
164
|
+
*/
|
|
165
|
+
export interface MessageOperation {
|
|
166
|
+
type: 'user' | 'assistant' | 'system';
|
|
167
|
+
content: string;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* 消息操作生成器
|
|
171
|
+
*/
|
|
172
|
+
export declare const arbMessageOperation: fc.Arbitrary<MessageOperation>;
|
|
173
|
+
/**
|
|
174
|
+
* 消息操作序列
|
|
175
|
+
*/
|
|
176
|
+
export declare const arbMessageOperations: fc.Arbitrary<MessageOperation[]>;
|
|
177
|
+
/**
|
|
178
|
+
* 工具调用
|
|
179
|
+
*/
|
|
180
|
+
export declare const arbToolCall: fc.Arbitrary<{
|
|
181
|
+
id: string;
|
|
182
|
+
type: "function";
|
|
183
|
+
function: {
|
|
184
|
+
name: string;
|
|
185
|
+
arguments: string;
|
|
186
|
+
};
|
|
187
|
+
}>;
|
|
188
|
+
/**
|
|
189
|
+
* 工具调用数组
|
|
190
|
+
*/
|
|
191
|
+
export declare const arbToolCalls: fc.Arbitrary<{
|
|
192
|
+
id: string;
|
|
193
|
+
type: "function";
|
|
194
|
+
function: {
|
|
195
|
+
name: string;
|
|
196
|
+
arguments: string;
|
|
197
|
+
};
|
|
198
|
+
}[]>;
|
|
199
|
+
/**
|
|
200
|
+
* LLM 响应
|
|
201
|
+
*/
|
|
202
|
+
export declare const arbLLMResponse: fc.Arbitrary<{
|
|
203
|
+
content: string;
|
|
204
|
+
toolCalls: any;
|
|
205
|
+
}>;
|
|
206
|
+
/**
|
|
207
|
+
* 创建唯一标识符生成器
|
|
208
|
+
*
|
|
209
|
+
* @param prefix - 前缀
|
|
210
|
+
*/
|
|
211
|
+
export declare function arbUniqueId(prefix: string): fc.Arbitrary<string>;
|
|
212
|
+
/**
|
|
213
|
+
* 创建带索引的唯一标识符生成器
|
|
214
|
+
*
|
|
215
|
+
* @param prefix - 前缀
|
|
216
|
+
*/
|
|
217
|
+
export declare function arbIndexedId(prefix: string): fc.Arbitrary<string>;
|
|
218
|
+
/**
|
|
219
|
+
* 创建枚举生成器
|
|
220
|
+
*
|
|
221
|
+
* @param values - 枚举值数组
|
|
222
|
+
*/
|
|
223
|
+
export declare function arbEnum<T extends string>(...values: T[]): fc.Arbitrary<T>;
|
|
224
|
+
/**
|
|
225
|
+
* 创建可选值生成器
|
|
226
|
+
*
|
|
227
|
+
* @param arb - 基础生成器
|
|
228
|
+
*/
|
|
229
|
+
export declare function arbOptional<T>(arb: fc.Arbitrary<T>): fc.Arbitrary<T | undefined>;
|
|
230
|
+
//# sourceMappingURL=arbitraries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arbitraries.d.ts","sourceRoot":"","sources":["../../src/test-utils/arbitraries.ts"],"names":[],"mappings":"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"}
|