agente-toolkit 0.1.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 +211 -0
- package/dist/cjs/agents/calculator/CalculatorAgent.d.ts +10 -0
- package/dist/cjs/agents/calculator/CalculatorAgent.d.ts.map +1 -0
- package/dist/cjs/agents/index.d.ts +4 -0
- package/dist/cjs/agents/index.d.ts.map +1 -0
- package/dist/cjs/agents/manager/ManagerAgent.d.ts +34 -0
- package/dist/cjs/agents/manager/ManagerAgent.d.ts.map +1 -0
- package/dist/cjs/agents/weather/WeatherAgent.d.ts +10 -0
- package/dist/cjs/agents/weather/WeatherAgent.d.ts.map +1 -0
- package/dist/cjs/core/agent/Agent.d.ts +25 -0
- package/dist/cjs/core/agent/Agent.d.ts.map +1 -0
- package/dist/cjs/core/agent/Agent.js +95 -0
- package/dist/cjs/core/agent/Agent.js.map +1 -0
- package/dist/cjs/core/agent/AgentRegistry.d.ts +28 -0
- package/dist/cjs/core/agent/AgentRegistry.d.ts.map +1 -0
- package/dist/cjs/core/agent/AgentRegistry.js +74 -0
- package/dist/cjs/core/agent/AgentRegistry.js.map +1 -0
- package/dist/cjs/core/agent/index.d.ts +5 -0
- package/dist/cjs/core/agent/index.d.ts.map +1 -0
- package/dist/cjs/core/agent/types/AgentMetadata.d.ts +54 -0
- package/dist/cjs/core/agent/types/AgentMetadata.d.ts.map +1 -0
- package/dist/cjs/core/agent/types/RunOptions.d.ts +7 -0
- package/dist/cjs/core/agent/types/RunOptions.d.ts.map +1 -0
- package/dist/cjs/core/execution/ExecutionEngine.d.ts +44 -0
- package/dist/cjs/core/execution/ExecutionEngine.d.ts.map +1 -0
- package/dist/cjs/core/execution/ExecutionEngine.js +110 -0
- package/dist/cjs/core/execution/ExecutionEngine.js.map +1 -0
- package/dist/cjs/core/execution/PlanValidator.d.ts +20 -0
- package/dist/cjs/core/execution/PlanValidator.d.ts.map +1 -0
- package/dist/cjs/core/execution/PlanValidator.js +85 -0
- package/dist/cjs/core/execution/PlanValidator.js.map +1 -0
- package/dist/cjs/core/execution/Planner.d.ts +25 -0
- package/dist/cjs/core/execution/Planner.d.ts.map +1 -0
- package/dist/cjs/core/execution/Planner.js +200 -0
- package/dist/cjs/core/execution/Planner.js.map +1 -0
- package/dist/cjs/core/execution/ReferenceResolver.d.ts +43 -0
- package/dist/cjs/core/execution/ReferenceResolver.d.ts.map +1 -0
- package/dist/cjs/core/execution/ReferenceResolver.js +174 -0
- package/dist/cjs/core/execution/ReferenceResolver.js.map +1 -0
- package/dist/cjs/core/execution/ResponseProcessor.d.ts +12 -0
- package/dist/cjs/core/execution/ResponseProcessor.d.ts.map +1 -0
- package/dist/cjs/core/execution/ResponseProcessor.js +40 -0
- package/dist/cjs/core/execution/ResponseProcessor.js.map +1 -0
- package/dist/cjs/core/execution/index.d.ts +8 -0
- package/dist/cjs/core/execution/index.d.ts.map +1 -0
- package/dist/cjs/core/execution/types/ExecutionPlan.d.ts +6 -0
- package/dist/cjs/core/execution/types/ExecutionPlan.d.ts.map +1 -0
- package/dist/cjs/core/execution/types/PlanStep.d.ts +9 -0
- package/dist/cjs/core/execution/types/PlanStep.d.ts.map +1 -0
- package/dist/cjs/core/execution/types/ValidationResult.d.ts +5 -0
- package/dist/cjs/core/execution/types/ValidationResult.d.ts.map +1 -0
- package/dist/cjs/core/memory/index.d.ts +3 -0
- package/dist/cjs/core/memory/index.d.ts.map +1 -0
- package/dist/cjs/core/memory/memory.d.ts +34 -0
- package/dist/cjs/core/memory/memory.d.ts.map +1 -0
- package/dist/cjs/core/memory/memory.js +112 -0
- package/dist/cjs/core/memory/memory.js.map +1 -0
- package/dist/cjs/core/tools/AgentTool.d.ts +9 -0
- package/dist/cjs/core/tools/AgentTool.d.ts.map +1 -0
- package/dist/cjs/core/tools/index.d.ts +3 -0
- package/dist/cjs/core/tools/index.d.ts.map +1 -0
- package/dist/cjs/core/tools/types/Tool.d.ts +13 -0
- package/dist/cjs/core/tools/types/Tool.d.ts.map +1 -0
- package/dist/cjs/index.d.ts +12 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +31 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/infrastructure/adapters/base/base.d.ts +55 -0
- package/dist/cjs/infrastructure/adapters/base/base.d.ts.map +1 -0
- package/dist/cjs/infrastructure/adapters/base/base.js +10 -0
- package/dist/cjs/infrastructure/adapters/base/base.js.map +1 -0
- package/dist/cjs/infrastructure/adapters/claude/claudeAdapter.d.ts +37 -0
- package/dist/cjs/infrastructure/adapters/claude/claudeAdapter.d.ts.map +1 -0
- package/dist/cjs/infrastructure/adapters/claude/claudeAdapter.js +166 -0
- package/dist/cjs/infrastructure/adapters/claude/claudeAdapter.js.map +1 -0
- package/dist/cjs/infrastructure/adapters/index.d.ts +6 -0
- package/dist/cjs/infrastructure/adapters/index.d.ts.map +1 -0
- package/dist/cjs/infrastructure/adapters/ollama/ollamaAdapter.d.ts +29 -0
- package/dist/cjs/infrastructure/adapters/ollama/ollamaAdapter.d.ts.map +1 -0
- package/dist/cjs/infrastructure/adapters/ollama/ollamaAdapter.js +155 -0
- package/dist/cjs/infrastructure/adapters/ollama/ollamaAdapter.js.map +1 -0
- package/dist/cjs/infrastructure/adapters/openai/openaiAdapter.d.ts +29 -0
- package/dist/cjs/infrastructure/adapters/openai/openaiAdapter.d.ts.map +1 -0
- package/dist/cjs/infrastructure/adapters/openai/openaiAdapter.js +148 -0
- package/dist/cjs/infrastructure/adapters/openai/openaiAdapter.js.map +1 -0
- package/dist/cjs/infrastructure/adapters/utils/schemaUtils.d.ts +25 -0
- package/dist/cjs/infrastructure/adapters/utils/schemaUtils.d.ts.map +1 -0
- package/dist/cjs/infrastructure/adapters/utils/schemaUtils.js +59 -0
- package/dist/cjs/infrastructure/adapters/utils/schemaUtils.js.map +1 -0
- package/dist/cjs/infrastructure/logging/implementations/defaultLoggers.d.ts +34 -0
- package/dist/cjs/infrastructure/logging/implementations/defaultLoggers.d.ts.map +1 -0
- package/dist/cjs/infrastructure/logging/implementations/defaultLoggers.js +64 -0
- package/dist/cjs/infrastructure/logging/implementations/defaultLoggers.js.map +1 -0
- package/dist/cjs/infrastructure/logging/implementations/logger.d.ts +34 -0
- package/dist/cjs/infrastructure/logging/implementations/logger.d.ts.map +1 -0
- package/dist/cjs/infrastructure/logging/implementations/logger.js +126 -0
- package/dist/cjs/infrastructure/logging/implementations/logger.js.map +1 -0
- package/dist/cjs/infrastructure/logging/index.d.ts +4 -0
- package/dist/cjs/infrastructure/logging/index.d.ts.map +1 -0
- package/dist/cjs/infrastructure/logging/interfaces/AgentLogger.d.ts +29 -0
- package/dist/cjs/infrastructure/logging/interfaces/AgentLogger.d.ts.map +1 -0
- package/dist/cjs/infrastructure/logging/utils/loggerUtils.d.ts +24 -0
- package/dist/cjs/infrastructure/logging/utils/loggerUtils.d.ts.map +1 -0
- package/dist/cjs/infrastructure/logging/utils/loggerUtils.js +82 -0
- package/dist/cjs/infrastructure/logging/utils/loggerUtils.js.map +1 -0
- package/dist/cjs/infrastructure/monitoring/decorators/fallbackMonitoring.d.ts +9 -0
- package/dist/cjs/infrastructure/monitoring/decorators/fallbackMonitoring.d.ts.map +1 -0
- package/dist/cjs/infrastructure/monitoring/decorators/fallbackMonitoring.js +96 -0
- package/dist/cjs/infrastructure/monitoring/decorators/fallbackMonitoring.js.map +1 -0
- package/dist/cjs/infrastructure/monitoring/decorators/monitoring.d.ts +5 -0
- package/dist/cjs/infrastructure/monitoring/decorators/monitoring.d.ts.map +1 -0
- package/dist/cjs/infrastructure/monitoring/decorators/monitoring.js +90 -0
- package/dist/cjs/infrastructure/monitoring/decorators/monitoring.js.map +1 -0
- package/dist/cjs/infrastructure/monitoring/index.d.ts +4 -0
- package/dist/cjs/infrastructure/monitoring/index.d.ts.map +1 -0
- package/dist/cjs/infrastructure/monitoring/utils/executionClassification.d.ts +14 -0
- package/dist/cjs/infrastructure/monitoring/utils/executionClassification.d.ts.map +1 -0
- package/dist/cjs/infrastructure/monitoring/utils/executionClassification.js +76 -0
- package/dist/cjs/infrastructure/monitoring/utils/executionClassification.js.map +1 -0
- package/dist/cjs/node_modules/tslib/tslib.es6.js +38 -0
- package/dist/cjs/node_modules/tslib/tslib.es6.js.map +1 -0
- package/dist/cjs/shared/utils/jsonParser.d.ts +17 -0
- package/dist/cjs/shared/utils/jsonParser.d.ts.map +1 -0
- package/dist/cjs/shared/utils/jsonParser.js +47 -0
- package/dist/cjs/shared/utils/jsonParser.js.map +1 -0
- package/dist/esm/core/agent/Agent.js +93 -0
- package/dist/esm/core/agent/Agent.js.map +1 -0
- package/dist/esm/core/agent/AgentRegistry.js +67 -0
- package/dist/esm/core/agent/AgentRegistry.js.map +1 -0
- package/dist/esm/core/execution/ExecutionEngine.js +108 -0
- package/dist/esm/core/execution/ExecutionEngine.js.map +1 -0
- package/dist/esm/core/execution/PlanValidator.js +83 -0
- package/dist/esm/core/execution/PlanValidator.js.map +1 -0
- package/dist/esm/core/execution/Planner.js +198 -0
- package/dist/esm/core/execution/Planner.js.map +1 -0
- package/dist/esm/core/execution/ReferenceResolver.js +172 -0
- package/dist/esm/core/execution/ReferenceResolver.js.map +1 -0
- package/dist/esm/core/execution/ResponseProcessor.js +38 -0
- package/dist/esm/core/execution/ResponseProcessor.js.map +1 -0
- package/dist/esm/core/memory/memory.js +110 -0
- package/dist/esm/core/memory/memory.js.map +1 -0
- package/dist/esm/index.js +11 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/infrastructure/adapters/base/base.js +8 -0
- package/dist/esm/infrastructure/adapters/base/base.js.map +1 -0
- package/dist/esm/infrastructure/adapters/claude/claudeAdapter.js +164 -0
- package/dist/esm/infrastructure/adapters/claude/claudeAdapter.js.map +1 -0
- package/dist/esm/infrastructure/adapters/ollama/ollamaAdapter.js +153 -0
- package/dist/esm/infrastructure/adapters/ollama/ollamaAdapter.js.map +1 -0
- package/dist/esm/infrastructure/adapters/openai/openaiAdapter.js +146 -0
- package/dist/esm/infrastructure/adapters/openai/openaiAdapter.js.map +1 -0
- package/dist/esm/infrastructure/adapters/utils/schemaUtils.js +57 -0
- package/dist/esm/infrastructure/adapters/utils/schemaUtils.js.map +1 -0
- package/dist/esm/infrastructure/logging/implementations/defaultLoggers.js +60 -0
- package/dist/esm/infrastructure/logging/implementations/defaultLoggers.js.map +1 -0
- package/dist/esm/infrastructure/logging/implementations/logger.js +123 -0
- package/dist/esm/infrastructure/logging/implementations/logger.js.map +1 -0
- package/dist/esm/infrastructure/logging/utils/loggerUtils.js +80 -0
- package/dist/esm/infrastructure/logging/utils/loggerUtils.js.map +1 -0
- package/dist/esm/infrastructure/monitoring/decorators/fallbackMonitoring.js +93 -0
- package/dist/esm/infrastructure/monitoring/decorators/fallbackMonitoring.js.map +1 -0
- package/dist/esm/infrastructure/monitoring/decorators/monitoring.js +88 -0
- package/dist/esm/infrastructure/monitoring/decorators/monitoring.js.map +1 -0
- package/dist/esm/infrastructure/monitoring/utils/executionClassification.js +72 -0
- package/dist/esm/infrastructure/monitoring/utils/executionClassification.js.map +1 -0
- package/dist/esm/node_modules/tslib/tslib.es6.js +35 -0
- package/dist/esm/node_modules/tslib/tslib.es6.js.map +1 -0
- package/dist/esm/shared/utils/jsonParser.js +45 -0
- package/dist/esm/shared/utils/jsonParser.js.map +1 -0
- package/dist/types/index.d.ts +380 -0
- package/package.json +91 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import stringSimilarity from 'string-similarity';
|
|
2
|
+
|
|
3
|
+
class SlidingWindowMemoryManager {
|
|
4
|
+
constructor(maxMemories = 50, maxTokensPerMemory = 200) {
|
|
5
|
+
this.memories = [];
|
|
6
|
+
this.maxMemories = maxMemories;
|
|
7
|
+
this.maxTokensPerMemory = maxTokensPerMemory;
|
|
8
|
+
}
|
|
9
|
+
addMemory(memory) {
|
|
10
|
+
// Truncate content if too long (rough token estimation: 1 token ≈ 4 characters)
|
|
11
|
+
let content = memory.content;
|
|
12
|
+
const estimatedTokens = content.length / 4;
|
|
13
|
+
if (estimatedTokens > this.maxTokensPerMemory) {
|
|
14
|
+
content = content.substring(0, this.maxTokensPerMemory * 4) + '...';
|
|
15
|
+
}
|
|
16
|
+
const newMemory = {
|
|
17
|
+
...memory,
|
|
18
|
+
content,
|
|
19
|
+
id: this.generateId(),
|
|
20
|
+
timestamp: new Date(),
|
|
21
|
+
};
|
|
22
|
+
this.memories.push(newMemory);
|
|
23
|
+
this.pruneMemories();
|
|
24
|
+
}
|
|
25
|
+
getRelevantMemories(context, maxCount = 10) {
|
|
26
|
+
if (this.memories.length === 0)
|
|
27
|
+
return [];
|
|
28
|
+
// Sort by relevance score (combination of relevance + recency + importance)
|
|
29
|
+
const scoredMemories = this.memories.map(memory => ({
|
|
30
|
+
memory,
|
|
31
|
+
score: this.calculateRelevanceScore(memory, context),
|
|
32
|
+
}));
|
|
33
|
+
return scoredMemories
|
|
34
|
+
.sort((a, b) => b.score - a.score)
|
|
35
|
+
.slice(0, maxCount)
|
|
36
|
+
.map(item => item.memory);
|
|
37
|
+
}
|
|
38
|
+
getMemoryByType(type) {
|
|
39
|
+
return this.memories.filter(memory => memory.type === type);
|
|
40
|
+
}
|
|
41
|
+
getAllMemories() {
|
|
42
|
+
return [...this.memories];
|
|
43
|
+
}
|
|
44
|
+
getMemoryCount() {
|
|
45
|
+
return this.memories.length;
|
|
46
|
+
}
|
|
47
|
+
pruneMemories() {
|
|
48
|
+
if (this.memories.length <= this.maxMemories)
|
|
49
|
+
return;
|
|
50
|
+
// Calculate retention scores for all memories
|
|
51
|
+
const scoredMemories = this.memories.map(memory => ({
|
|
52
|
+
memory,
|
|
53
|
+
retentionScore: this.calculateRetentionScore(memory),
|
|
54
|
+
}));
|
|
55
|
+
// Keep the top memories based on retention score
|
|
56
|
+
this.memories = scoredMemories
|
|
57
|
+
.sort((a, b) => b.retentionScore - a.retentionScore)
|
|
58
|
+
.slice(0, this.maxMemories)
|
|
59
|
+
.map(item => item.memory);
|
|
60
|
+
}
|
|
61
|
+
generateId() {
|
|
62
|
+
return Date.now().toString(36) + Math.random().toString(36).substr(2);
|
|
63
|
+
}
|
|
64
|
+
calculateRelevanceScore(memory, context) {
|
|
65
|
+
const relevanceScore = this.calculateContentRelevance(memory.content, context);
|
|
66
|
+
const recencyScore = this.calculateRecencyScore(memory.timestamp);
|
|
67
|
+
const importanceScore = memory.importance;
|
|
68
|
+
// Weighted combination: 40% relevance, 30% importance, 30% recency
|
|
69
|
+
return relevanceScore * 0.4 + importanceScore * 0.3 + recencyScore * 0.3;
|
|
70
|
+
}
|
|
71
|
+
calculateRetentionScore(memory) {
|
|
72
|
+
const recencyScore = this.calculateRecencyScore(memory.timestamp);
|
|
73
|
+
const importanceScore = memory.importance;
|
|
74
|
+
// For retention, importance matters more than recency
|
|
75
|
+
return importanceScore * 0.7 + recencyScore * 0.3;
|
|
76
|
+
}
|
|
77
|
+
calculateContentRelevance(content, context) {
|
|
78
|
+
if (!context.trim())
|
|
79
|
+
return 0;
|
|
80
|
+
const contextWords = context
|
|
81
|
+
.toLowerCase()
|
|
82
|
+
.split(/\s+/)
|
|
83
|
+
.filter(word => word.length > 2);
|
|
84
|
+
const contentWords = content
|
|
85
|
+
.toLowerCase()
|
|
86
|
+
.split(/\s+/)
|
|
87
|
+
.filter(word => word.length > 2);
|
|
88
|
+
if (contextWords.length === 0 || contentWords.length === 0)
|
|
89
|
+
return 0;
|
|
90
|
+
// For each context word, find the best fuzzy match in content words using string-similarity
|
|
91
|
+
let totalScore = 0;
|
|
92
|
+
for (const ctxWord of contextWords) {
|
|
93
|
+
const bestScore = stringSimilarity.findBestMatch(ctxWord, contentWords).bestMatch.rating;
|
|
94
|
+
totalScore += bestScore;
|
|
95
|
+
}
|
|
96
|
+
// Average best scores for all context words
|
|
97
|
+
return totalScore / contextWords.length;
|
|
98
|
+
}
|
|
99
|
+
calculateRecencyScore(timestamp) {
|
|
100
|
+
const now = Date.now();
|
|
101
|
+
const memoryTime = timestamp.getTime();
|
|
102
|
+
const hoursSinceCreated = (now - memoryTime) / (1000 * 60 * 60);
|
|
103
|
+
// Exponential decay: memories lose relevance over time
|
|
104
|
+
// After 24 hours, recency score is ~0.5, after 48 hours ~0.25
|
|
105
|
+
return Math.exp(-hoursSinceCreated / 24);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export { SlidingWindowMemoryManager };
|
|
110
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sources":["../../../../../src/core/memory/memory.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { Agent } from './core/agent/Agent.js';
|
|
2
|
+
export { clearRegistry, findAgentsByCategory, findAgentsByKeywords, getAgent, getAvailableAgents, registerAgent } from './core/agent/AgentRegistry.js';
|
|
3
|
+
export { SlidingWindowMemoryManager } from './core/memory/memory.js';
|
|
4
|
+
export { ClaudeAdapter } from './infrastructure/adapters/claude/claudeAdapter.js';
|
|
5
|
+
export { OpenAIAdapter } from './infrastructure/adapters/openai/openaiAdapter.js';
|
|
6
|
+
export { OllamaAdapter } from './infrastructure/adapters/ollama/ollamaAdapter.js';
|
|
7
|
+
import './core/execution/ExecutionEngine.js';
|
|
8
|
+
export { Planner } from './core/execution/Planner.js';
|
|
9
|
+
import 'winston';
|
|
10
|
+
export { ConsoleLogger, SilentLogger, createDefaultLogger } from './infrastructure/logging/implementations/defaultLoggers.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sources":["../../../../../../src/infrastructure/adapters/base/base.ts"],"sourcesContent":[null],"names":[],"mappings":"AAmDA;;AAEG;MACmB,WAAW,CAAA;AAQhC;;;;"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import Anthropic from '@anthropic-ai/sdk';
|
|
2
|
+
import { BaseAdapter } from '../base/base.js';
|
|
3
|
+
import { SchemaUtils } from '../utils/schemaUtils.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Claude adapter with native tool support
|
|
7
|
+
* Uses Anthropic's built-in tool calling when available, falls back to planning mode
|
|
8
|
+
*/
|
|
9
|
+
class ClaudeAdapter extends BaseAdapter {
|
|
10
|
+
constructor(apiKey, model = 'claude-sonnet-4-20250514') {
|
|
11
|
+
super();
|
|
12
|
+
this.name = 'claude';
|
|
13
|
+
this.supportsNativeTools = true;
|
|
14
|
+
this.client = new Anthropic({
|
|
15
|
+
apiKey: apiKey || process.env.ANTHROPIC_API_KEY,
|
|
16
|
+
});
|
|
17
|
+
this.model = model;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Text completion for general prompts
|
|
21
|
+
*/
|
|
22
|
+
async complete(prompt, options) {
|
|
23
|
+
const messages = [{ role: 'user', content: prompt }];
|
|
24
|
+
// Anthropic (as of mid-2025) does not have a stable json_schema response_format like OpenAI.
|
|
25
|
+
// Strategy:
|
|
26
|
+
// 1. If schema provided: prepend a system style instruction and ask for STRICT JSON matching schema.
|
|
27
|
+
// 2. If json flag: ask for a single JSON object only.
|
|
28
|
+
// We avoid over-constraining to reduce refusal likelihood.
|
|
29
|
+
if (options === null || options === void 0 ? void 0 : options.schema) {
|
|
30
|
+
messages.unshift({
|
|
31
|
+
role: 'user',
|
|
32
|
+
content: 'You are a structured output generator. Return ONLY a JSON object strictly validating against this JSON Schema. Do not include markdown fences.' +
|
|
33
|
+
`\nJSON Schema:\n${JSON.stringify(options.schema, null, 2)}\n` +
|
|
34
|
+
'If a field is optional and you lack information, omit it. Never add explanatory text.',
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
else if (options === null || options === void 0 ? void 0 : options.json) {
|
|
38
|
+
// Detect if the prompt already demands a JSON array (e.g., Planner)
|
|
39
|
+
const wantsArray = /json\s+array/i.test(prompt) || /\[[\s\S]*\{/.test(prompt);
|
|
40
|
+
messages.unshift({
|
|
41
|
+
role: 'user',
|
|
42
|
+
content: wantsArray
|
|
43
|
+
? 'Return ONLY a valid JSON array (no markdown, no explanation).'
|
|
44
|
+
: 'Return ONLY a valid JSON object (no markdown, no explanation). If you cannot comply, return an empty JSON object {}.',
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
const message = await this.client.messages.create({
|
|
48
|
+
model: this.model,
|
|
49
|
+
max_tokens: 4096,
|
|
50
|
+
messages,
|
|
51
|
+
});
|
|
52
|
+
const textBlocks = message.content.filter((block) => block.type === 'text');
|
|
53
|
+
return textBlocks.map(block => block.text).join('\n');
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Execute tools with a prompt - uses native Anthropic tool calling
|
|
57
|
+
*/
|
|
58
|
+
async executeWithTools(prompt, tools) {
|
|
59
|
+
try {
|
|
60
|
+
// Convert our Tool format to Anthropic's format
|
|
61
|
+
const anthropicTools = tools.map(tool => ({
|
|
62
|
+
name: tool.name,
|
|
63
|
+
description: tool.description,
|
|
64
|
+
input_schema: SchemaUtils.convertToJsonSchema(tool.paramsSchema),
|
|
65
|
+
}));
|
|
66
|
+
const toolCalls = [];
|
|
67
|
+
// Make initial request with tools
|
|
68
|
+
const response = await this.client.messages.create({
|
|
69
|
+
model: this.model,
|
|
70
|
+
max_tokens: 4096,
|
|
71
|
+
messages: [{ role: 'user', content: prompt }],
|
|
72
|
+
tools: anthropicTools,
|
|
73
|
+
tool_choice: { type: 'auto' },
|
|
74
|
+
});
|
|
75
|
+
let finalContent = '';
|
|
76
|
+
const messages = [{ role: 'user', content: prompt }];
|
|
77
|
+
let currentResponse = response;
|
|
78
|
+
// Continue conversation while Claude wants to make tool calls
|
|
79
|
+
let hasMoreToolCalls = this.hasToolCalls(currentResponse);
|
|
80
|
+
while (hasMoreToolCalls) {
|
|
81
|
+
await this.processToolCalls(currentResponse, tools, toolCalls, messages);
|
|
82
|
+
// Get follow-up response
|
|
83
|
+
currentResponse = await this.client.messages.create({
|
|
84
|
+
model: this.model,
|
|
85
|
+
max_tokens: 4096,
|
|
86
|
+
messages,
|
|
87
|
+
tools: anthropicTools,
|
|
88
|
+
tool_choice: { type: 'auto' },
|
|
89
|
+
});
|
|
90
|
+
hasMoreToolCalls = this.hasToolCalls(currentResponse);
|
|
91
|
+
}
|
|
92
|
+
// Extract final text content (no more tool calls)
|
|
93
|
+
finalContent = this.extractTextContent(currentResponse);
|
|
94
|
+
return {
|
|
95
|
+
content: finalContent,
|
|
96
|
+
toolCalls,
|
|
97
|
+
success: true,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
return {
|
|
102
|
+
content: '',
|
|
103
|
+
toolCalls: [],
|
|
104
|
+
success: false,
|
|
105
|
+
errors: [error instanceof Error ? error.message : String(error)],
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Check if a response contains tool calls
|
|
111
|
+
*/
|
|
112
|
+
hasToolCalls(response) {
|
|
113
|
+
return response.content.some(block => block.type === 'tool_use');
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Extract text content from a response
|
|
117
|
+
*/
|
|
118
|
+
extractTextContent(response) {
|
|
119
|
+
return response.content
|
|
120
|
+
.filter((block) => block.type === 'text')
|
|
121
|
+
.map(block => block.text)
|
|
122
|
+
.join('');
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Process all tool calls in a response
|
|
126
|
+
*/
|
|
127
|
+
async processToolCalls(response, tools, toolCalls, messages) {
|
|
128
|
+
// Add assistant message with current response
|
|
129
|
+
messages.push({
|
|
130
|
+
role: 'assistant',
|
|
131
|
+
content: response.content,
|
|
132
|
+
});
|
|
133
|
+
// Process each tool call
|
|
134
|
+
for (const block of response.content) {
|
|
135
|
+
if (block.type === 'tool_use') {
|
|
136
|
+
// Find and execute the tool
|
|
137
|
+
const tool = tools.find(t => t.name === block.name);
|
|
138
|
+
if (!tool) {
|
|
139
|
+
throw new Error(`Tool ${block.name} not found`);
|
|
140
|
+
}
|
|
141
|
+
const result = await tool.action(block.input);
|
|
142
|
+
toolCalls.push({
|
|
143
|
+
name: block.name,
|
|
144
|
+
arguments: block.input,
|
|
145
|
+
result,
|
|
146
|
+
});
|
|
147
|
+
// Add tool result to conversation
|
|
148
|
+
messages.push({
|
|
149
|
+
role: 'user',
|
|
150
|
+
content: [
|
|
151
|
+
{
|
|
152
|
+
type: 'tool_result',
|
|
153
|
+
tool_use_id: block.id,
|
|
154
|
+
content: JSON.stringify(result),
|
|
155
|
+
},
|
|
156
|
+
],
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export { ClaudeAdapter };
|
|
164
|
+
//# sourceMappingURL=claudeAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claudeAdapter.js","sources":["../../../../../../src/infrastructure/adapters/claude/claudeAdapter.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { BaseAdapter } from '../base/base.js';
|
|
2
|
+
import { SchemaUtils } from '../utils/schemaUtils.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Ollama adapter with native tool support
|
|
6
|
+
* Uses Ollama's built-in function calling when available
|
|
7
|
+
*/
|
|
8
|
+
class OllamaAdapter extends BaseAdapter {
|
|
9
|
+
constructor(baseUrl = 'http://localhost:11434', model = 'llama3.2:latest') {
|
|
10
|
+
super();
|
|
11
|
+
this.name = 'ollama';
|
|
12
|
+
this.supportsNativeTools = true;
|
|
13
|
+
this.baseUrl = baseUrl.replace(/\/$/, ''); // Remove trailing slash
|
|
14
|
+
this.model = model;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Text completion for general prompts
|
|
18
|
+
*/
|
|
19
|
+
async complete(prompt, options) {
|
|
20
|
+
var _a;
|
|
21
|
+
// Prefer native structured outputs via chat endpoint when requesting JSON
|
|
22
|
+
if ((options === null || options === void 0 ? void 0 : options.json) || (options === null || options === void 0 ? void 0 : options.schema)) {
|
|
23
|
+
const chatBody = {
|
|
24
|
+
model: this.model,
|
|
25
|
+
messages: [{ role: 'user', content: prompt }],
|
|
26
|
+
stream: false,
|
|
27
|
+
};
|
|
28
|
+
if (options.schema) {
|
|
29
|
+
chatBody.format = options.schema; // JSON schema object
|
|
30
|
+
}
|
|
31
|
+
else if (options.json) {
|
|
32
|
+
chatBody.format = 'json';
|
|
33
|
+
}
|
|
34
|
+
const chatResponse = await fetch(`${this.baseUrl}/api/chat`, {
|
|
35
|
+
method: 'POST',
|
|
36
|
+
headers: { 'Content-Type': 'application/json' },
|
|
37
|
+
body: JSON.stringify(chatBody),
|
|
38
|
+
});
|
|
39
|
+
if (!chatResponse.ok) {
|
|
40
|
+
throw new Error(`Ollama API error: ${chatResponse.status} ${chatResponse.statusText}`);
|
|
41
|
+
}
|
|
42
|
+
const data = (await chatResponse.json());
|
|
43
|
+
return ((_a = data.message) === null || _a === void 0 ? void 0 : _a.content) || '';
|
|
44
|
+
}
|
|
45
|
+
// Fallback to simple generate for plain text
|
|
46
|
+
const response = await fetch(`${this.baseUrl}/api/generate`, {
|
|
47
|
+
method: 'POST',
|
|
48
|
+
headers: {
|
|
49
|
+
'Content-Type': 'application/json',
|
|
50
|
+
},
|
|
51
|
+
body: JSON.stringify({
|
|
52
|
+
model: this.model,
|
|
53
|
+
prompt,
|
|
54
|
+
stream: false,
|
|
55
|
+
}),
|
|
56
|
+
});
|
|
57
|
+
if (!response.ok) {
|
|
58
|
+
throw new Error(`Ollama API error: ${response.status} ${response.statusText}`);
|
|
59
|
+
}
|
|
60
|
+
const data = (await response.json());
|
|
61
|
+
return data.response || '';
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Execute tools with a prompt - uses native Ollama function calling
|
|
65
|
+
*/
|
|
66
|
+
async executeWithTools(prompt, tools) {
|
|
67
|
+
try {
|
|
68
|
+
// Convert our Tool format to Ollama's format
|
|
69
|
+
const ollamaTools = tools.map(tool => ({
|
|
70
|
+
type: 'function',
|
|
71
|
+
function: {
|
|
72
|
+
name: tool.name,
|
|
73
|
+
description: tool.description,
|
|
74
|
+
parameters: SchemaUtils.convertToJsonSchema(tool.paramsSchema),
|
|
75
|
+
},
|
|
76
|
+
}));
|
|
77
|
+
const toolCalls = [];
|
|
78
|
+
// Make initial request with tools
|
|
79
|
+
const messages = [{ role: 'user', content: prompt }];
|
|
80
|
+
let response = await this.makeOllamaRequest(messages, ollamaTools);
|
|
81
|
+
let finalContent = '';
|
|
82
|
+
// Continue conversation while Ollama wants to make tool calls
|
|
83
|
+
while (response.message.tool_calls && response.message.tool_calls.length > 0) {
|
|
84
|
+
// Add assistant message with tool calls
|
|
85
|
+
messages.push({
|
|
86
|
+
role: 'assistant',
|
|
87
|
+
content: response.message.content,
|
|
88
|
+
tool_calls: response.message.tool_calls,
|
|
89
|
+
});
|
|
90
|
+
// Process each tool call
|
|
91
|
+
for (const toolCall of response.message.tool_calls) {
|
|
92
|
+
// Find and execute the tool
|
|
93
|
+
const tool = tools.find(t => t.name === toolCall.function.name);
|
|
94
|
+
if (!tool) {
|
|
95
|
+
throw new Error(`Tool ${toolCall.function.name} not found`);
|
|
96
|
+
}
|
|
97
|
+
const result = await tool.action(toolCall.function.arguments);
|
|
98
|
+
toolCalls.push({
|
|
99
|
+
name: toolCall.function.name,
|
|
100
|
+
arguments: toolCall.function.arguments,
|
|
101
|
+
result,
|
|
102
|
+
});
|
|
103
|
+
// Add tool result to conversation
|
|
104
|
+
messages.push({
|
|
105
|
+
role: 'tool',
|
|
106
|
+
content: JSON.stringify(result),
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
// Get follow-up response
|
|
110
|
+
response = await this.makeOllamaRequest(messages, ollamaTools);
|
|
111
|
+
}
|
|
112
|
+
// Extract final text content (no more tool calls)
|
|
113
|
+
finalContent = response.message.content;
|
|
114
|
+
return {
|
|
115
|
+
content: finalContent,
|
|
116
|
+
toolCalls,
|
|
117
|
+
success: true,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
return {
|
|
122
|
+
content: '',
|
|
123
|
+
toolCalls: [],
|
|
124
|
+
success: false,
|
|
125
|
+
errors: [error instanceof Error ? error.message : String(error)],
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Make a request to Ollama's chat API
|
|
131
|
+
*/
|
|
132
|
+
async makeOllamaRequest(messages, tools) {
|
|
133
|
+
const response = await fetch(`${this.baseUrl}/api/chat`, {
|
|
134
|
+
method: 'POST',
|
|
135
|
+
headers: {
|
|
136
|
+
'Content-Type': 'application/json',
|
|
137
|
+
},
|
|
138
|
+
body: JSON.stringify({
|
|
139
|
+
model: this.model,
|
|
140
|
+
messages,
|
|
141
|
+
tools,
|
|
142
|
+
stream: false,
|
|
143
|
+
}),
|
|
144
|
+
});
|
|
145
|
+
if (!response.ok) {
|
|
146
|
+
throw new Error(`Ollama API error: ${response.status} ${response.statusText}`);
|
|
147
|
+
}
|
|
148
|
+
return (await response.json());
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
export { OllamaAdapter };
|
|
153
|
+
//# sourceMappingURL=ollamaAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollamaAdapter.js","sources":["../../../../../../src/infrastructure/adapters/ollama/ollamaAdapter.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import OpenAI from 'openai';
|
|
2
|
+
import { BaseAdapter } from '../base/base.js';
|
|
3
|
+
import { SchemaUtils } from '../utils/schemaUtils.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* OpenAI adapter with native tool support
|
|
7
|
+
* Uses OpenAI's built-in function calling when available
|
|
8
|
+
*/
|
|
9
|
+
class OpenAIAdapter extends BaseAdapter {
|
|
10
|
+
constructor(apiKey, model = 'gpt-4o') {
|
|
11
|
+
super();
|
|
12
|
+
this.name = 'openai';
|
|
13
|
+
this.supportsNativeTools = true;
|
|
14
|
+
this.client = new OpenAI({
|
|
15
|
+
apiKey: apiKey || process.env.OPENAI_API_KEY,
|
|
16
|
+
});
|
|
17
|
+
this.model = model;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Text completion for general prompts.
|
|
21
|
+
* Supports structured JSON responses via OpenAI's response_format.
|
|
22
|
+
*
|
|
23
|
+
* options.json: boolean -> Request a JSON object (model validates JSON)
|
|
24
|
+
* options.schema: object -> Provide a JSON schema; will request JSON schema mode if supported
|
|
25
|
+
*/
|
|
26
|
+
async complete(prompt, options) {
|
|
27
|
+
var _a, _b, _c;
|
|
28
|
+
const messages = [
|
|
29
|
+
{ role: 'user', content: prompt },
|
|
30
|
+
];
|
|
31
|
+
const requestParams = {
|
|
32
|
+
model: this.model,
|
|
33
|
+
messages,
|
|
34
|
+
max_tokens: 4096,
|
|
35
|
+
}; // cast until types updated for experimental schema mode
|
|
36
|
+
// Structured output handling
|
|
37
|
+
if (options === null || options === void 0 ? void 0 : options.schema) {
|
|
38
|
+
// If a schema is provided, prefer json_schema response_format (GPT-4o family supports it)
|
|
39
|
+
requestParams.response_format = {
|
|
40
|
+
type: 'json_schema',
|
|
41
|
+
json_schema: {
|
|
42
|
+
name: 'structured_response',
|
|
43
|
+
// Provide the schema as-is; callers must supply a valid JSON schema object
|
|
44
|
+
schema: options.schema,
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
else if (options === null || options === void 0 ? void 0 : options.json) {
|
|
49
|
+
requestParams.response_format = { type: 'json_object' };
|
|
50
|
+
}
|
|
51
|
+
const completion = (await this.client.chat.completions.create(requestParams)); // ensure non-stream type
|
|
52
|
+
return ((_c = (_b = (_a = completion.choices) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.message) === null || _c === void 0 ? void 0 : _c.content) || '';
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Execute tools with a prompt - uses native OpenAI function calling
|
|
56
|
+
*/
|
|
57
|
+
async executeWithTools(prompt, tools) {
|
|
58
|
+
var _a, _b;
|
|
59
|
+
try {
|
|
60
|
+
// Convert our Tool format to OpenAI's format
|
|
61
|
+
const openaiTools = tools.map(tool => ({
|
|
62
|
+
type: 'function',
|
|
63
|
+
function: {
|
|
64
|
+
name: tool.name,
|
|
65
|
+
description: tool.description,
|
|
66
|
+
parameters: SchemaUtils.convertToJsonSchema(tool.paramsSchema),
|
|
67
|
+
},
|
|
68
|
+
}));
|
|
69
|
+
const toolCalls = [];
|
|
70
|
+
// Make initial request with tools
|
|
71
|
+
const messages = [
|
|
72
|
+
{ role: 'user', content: prompt },
|
|
73
|
+
];
|
|
74
|
+
let response = await this.client.chat.completions.create({
|
|
75
|
+
model: this.model,
|
|
76
|
+
messages,
|
|
77
|
+
tools: openaiTools,
|
|
78
|
+
tool_choice: 'auto',
|
|
79
|
+
max_tokens: 4096,
|
|
80
|
+
});
|
|
81
|
+
let finalContent = '';
|
|
82
|
+
let currentChoice = response.choices[0];
|
|
83
|
+
// Continue conversation while OpenAI wants to make tool calls
|
|
84
|
+
while (((_a = currentChoice === null || currentChoice === void 0 ? void 0 : currentChoice.message) === null || _a === void 0 ? void 0 : _a.tool_calls) && currentChoice.message.tool_calls.length > 0) {
|
|
85
|
+
// Add assistant message with tool calls
|
|
86
|
+
messages.push(currentChoice.message);
|
|
87
|
+
// Process each tool call
|
|
88
|
+
for (const toolCall of currentChoice.message.tool_calls) {
|
|
89
|
+
if (toolCall.type === 'function') {
|
|
90
|
+
// Find and execute the tool
|
|
91
|
+
const tool = tools.find(t => t.name === toolCall.function.name);
|
|
92
|
+
if (!tool) {
|
|
93
|
+
throw new Error(`Tool ${toolCall.function.name} not found`);
|
|
94
|
+
}
|
|
95
|
+
let toolArgs;
|
|
96
|
+
try {
|
|
97
|
+
toolArgs = JSON.parse(toolCall.function.arguments);
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
throw new Error(`Invalid JSON in tool arguments: ${toolCall.function.arguments}`);
|
|
101
|
+
}
|
|
102
|
+
const result = await tool.action(toolArgs);
|
|
103
|
+
toolCalls.push({
|
|
104
|
+
name: toolCall.function.name,
|
|
105
|
+
arguments: toolArgs,
|
|
106
|
+
result,
|
|
107
|
+
});
|
|
108
|
+
// Add tool result to conversation
|
|
109
|
+
messages.push({
|
|
110
|
+
role: 'tool',
|
|
111
|
+
content: JSON.stringify(result),
|
|
112
|
+
tool_call_id: toolCall.id,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// Get follow-up response
|
|
117
|
+
response = await this.client.chat.completions.create({
|
|
118
|
+
model: this.model,
|
|
119
|
+
messages,
|
|
120
|
+
tools: openaiTools,
|
|
121
|
+
tool_choice: 'auto',
|
|
122
|
+
max_tokens: 4096,
|
|
123
|
+
});
|
|
124
|
+
currentChoice = response.choices[0];
|
|
125
|
+
}
|
|
126
|
+
// Extract final text content (no more tool calls)
|
|
127
|
+
finalContent = ((_b = currentChoice === null || currentChoice === void 0 ? void 0 : currentChoice.message) === null || _b === void 0 ? void 0 : _b.content) || '';
|
|
128
|
+
return {
|
|
129
|
+
content: finalContent,
|
|
130
|
+
toolCalls,
|
|
131
|
+
success: true,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
return {
|
|
136
|
+
content: '',
|
|
137
|
+
toolCalls: [],
|
|
138
|
+
success: false,
|
|
139
|
+
errors: [error instanceof Error ? error.message : String(error)],
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export { OpenAIAdapter };
|
|
146
|
+
//# sourceMappingURL=openaiAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openaiAdapter.js","sources":["../../../../../../src/infrastructure/adapters/openai/openaiAdapter.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|