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.
Files changed (172) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +211 -0
  3. package/dist/cjs/agents/calculator/CalculatorAgent.d.ts +10 -0
  4. package/dist/cjs/agents/calculator/CalculatorAgent.d.ts.map +1 -0
  5. package/dist/cjs/agents/index.d.ts +4 -0
  6. package/dist/cjs/agents/index.d.ts.map +1 -0
  7. package/dist/cjs/agents/manager/ManagerAgent.d.ts +34 -0
  8. package/dist/cjs/agents/manager/ManagerAgent.d.ts.map +1 -0
  9. package/dist/cjs/agents/weather/WeatherAgent.d.ts +10 -0
  10. package/dist/cjs/agents/weather/WeatherAgent.d.ts.map +1 -0
  11. package/dist/cjs/core/agent/Agent.d.ts +25 -0
  12. package/dist/cjs/core/agent/Agent.d.ts.map +1 -0
  13. package/dist/cjs/core/agent/Agent.js +95 -0
  14. package/dist/cjs/core/agent/Agent.js.map +1 -0
  15. package/dist/cjs/core/agent/AgentRegistry.d.ts +28 -0
  16. package/dist/cjs/core/agent/AgentRegistry.d.ts.map +1 -0
  17. package/dist/cjs/core/agent/AgentRegistry.js +74 -0
  18. package/dist/cjs/core/agent/AgentRegistry.js.map +1 -0
  19. package/dist/cjs/core/agent/index.d.ts +5 -0
  20. package/dist/cjs/core/agent/index.d.ts.map +1 -0
  21. package/dist/cjs/core/agent/types/AgentMetadata.d.ts +54 -0
  22. package/dist/cjs/core/agent/types/AgentMetadata.d.ts.map +1 -0
  23. package/dist/cjs/core/agent/types/RunOptions.d.ts +7 -0
  24. package/dist/cjs/core/agent/types/RunOptions.d.ts.map +1 -0
  25. package/dist/cjs/core/execution/ExecutionEngine.d.ts +44 -0
  26. package/dist/cjs/core/execution/ExecutionEngine.d.ts.map +1 -0
  27. package/dist/cjs/core/execution/ExecutionEngine.js +110 -0
  28. package/dist/cjs/core/execution/ExecutionEngine.js.map +1 -0
  29. package/dist/cjs/core/execution/PlanValidator.d.ts +20 -0
  30. package/dist/cjs/core/execution/PlanValidator.d.ts.map +1 -0
  31. package/dist/cjs/core/execution/PlanValidator.js +85 -0
  32. package/dist/cjs/core/execution/PlanValidator.js.map +1 -0
  33. package/dist/cjs/core/execution/Planner.d.ts +25 -0
  34. package/dist/cjs/core/execution/Planner.d.ts.map +1 -0
  35. package/dist/cjs/core/execution/Planner.js +200 -0
  36. package/dist/cjs/core/execution/Planner.js.map +1 -0
  37. package/dist/cjs/core/execution/ReferenceResolver.d.ts +43 -0
  38. package/dist/cjs/core/execution/ReferenceResolver.d.ts.map +1 -0
  39. package/dist/cjs/core/execution/ReferenceResolver.js +174 -0
  40. package/dist/cjs/core/execution/ReferenceResolver.js.map +1 -0
  41. package/dist/cjs/core/execution/ResponseProcessor.d.ts +12 -0
  42. package/dist/cjs/core/execution/ResponseProcessor.d.ts.map +1 -0
  43. package/dist/cjs/core/execution/ResponseProcessor.js +40 -0
  44. package/dist/cjs/core/execution/ResponseProcessor.js.map +1 -0
  45. package/dist/cjs/core/execution/index.d.ts +8 -0
  46. package/dist/cjs/core/execution/index.d.ts.map +1 -0
  47. package/dist/cjs/core/execution/types/ExecutionPlan.d.ts +6 -0
  48. package/dist/cjs/core/execution/types/ExecutionPlan.d.ts.map +1 -0
  49. package/dist/cjs/core/execution/types/PlanStep.d.ts +9 -0
  50. package/dist/cjs/core/execution/types/PlanStep.d.ts.map +1 -0
  51. package/dist/cjs/core/execution/types/ValidationResult.d.ts +5 -0
  52. package/dist/cjs/core/execution/types/ValidationResult.d.ts.map +1 -0
  53. package/dist/cjs/core/memory/index.d.ts +3 -0
  54. package/dist/cjs/core/memory/index.d.ts.map +1 -0
  55. package/dist/cjs/core/memory/memory.d.ts +34 -0
  56. package/dist/cjs/core/memory/memory.d.ts.map +1 -0
  57. package/dist/cjs/core/memory/memory.js +112 -0
  58. package/dist/cjs/core/memory/memory.js.map +1 -0
  59. package/dist/cjs/core/tools/AgentTool.d.ts +9 -0
  60. package/dist/cjs/core/tools/AgentTool.d.ts.map +1 -0
  61. package/dist/cjs/core/tools/index.d.ts +3 -0
  62. package/dist/cjs/core/tools/index.d.ts.map +1 -0
  63. package/dist/cjs/core/tools/types/Tool.d.ts +13 -0
  64. package/dist/cjs/core/tools/types/Tool.d.ts.map +1 -0
  65. package/dist/cjs/index.d.ts +12 -0
  66. package/dist/cjs/index.d.ts.map +1 -0
  67. package/dist/cjs/index.js +31 -0
  68. package/dist/cjs/index.js.map +1 -0
  69. package/dist/cjs/infrastructure/adapters/base/base.d.ts +55 -0
  70. package/dist/cjs/infrastructure/adapters/base/base.d.ts.map +1 -0
  71. package/dist/cjs/infrastructure/adapters/base/base.js +10 -0
  72. package/dist/cjs/infrastructure/adapters/base/base.js.map +1 -0
  73. package/dist/cjs/infrastructure/adapters/claude/claudeAdapter.d.ts +37 -0
  74. package/dist/cjs/infrastructure/adapters/claude/claudeAdapter.d.ts.map +1 -0
  75. package/dist/cjs/infrastructure/adapters/claude/claudeAdapter.js +166 -0
  76. package/dist/cjs/infrastructure/adapters/claude/claudeAdapter.js.map +1 -0
  77. package/dist/cjs/infrastructure/adapters/index.d.ts +6 -0
  78. package/dist/cjs/infrastructure/adapters/index.d.ts.map +1 -0
  79. package/dist/cjs/infrastructure/adapters/ollama/ollamaAdapter.d.ts +29 -0
  80. package/dist/cjs/infrastructure/adapters/ollama/ollamaAdapter.d.ts.map +1 -0
  81. package/dist/cjs/infrastructure/adapters/ollama/ollamaAdapter.js +155 -0
  82. package/dist/cjs/infrastructure/adapters/ollama/ollamaAdapter.js.map +1 -0
  83. package/dist/cjs/infrastructure/adapters/openai/openaiAdapter.d.ts +29 -0
  84. package/dist/cjs/infrastructure/adapters/openai/openaiAdapter.d.ts.map +1 -0
  85. package/dist/cjs/infrastructure/adapters/openai/openaiAdapter.js +148 -0
  86. package/dist/cjs/infrastructure/adapters/openai/openaiAdapter.js.map +1 -0
  87. package/dist/cjs/infrastructure/adapters/utils/schemaUtils.d.ts +25 -0
  88. package/dist/cjs/infrastructure/adapters/utils/schemaUtils.d.ts.map +1 -0
  89. package/dist/cjs/infrastructure/adapters/utils/schemaUtils.js +59 -0
  90. package/dist/cjs/infrastructure/adapters/utils/schemaUtils.js.map +1 -0
  91. package/dist/cjs/infrastructure/logging/implementations/defaultLoggers.d.ts +34 -0
  92. package/dist/cjs/infrastructure/logging/implementations/defaultLoggers.d.ts.map +1 -0
  93. package/dist/cjs/infrastructure/logging/implementations/defaultLoggers.js +64 -0
  94. package/dist/cjs/infrastructure/logging/implementations/defaultLoggers.js.map +1 -0
  95. package/dist/cjs/infrastructure/logging/implementations/logger.d.ts +34 -0
  96. package/dist/cjs/infrastructure/logging/implementations/logger.d.ts.map +1 -0
  97. package/dist/cjs/infrastructure/logging/implementations/logger.js +126 -0
  98. package/dist/cjs/infrastructure/logging/implementations/logger.js.map +1 -0
  99. package/dist/cjs/infrastructure/logging/index.d.ts +4 -0
  100. package/dist/cjs/infrastructure/logging/index.d.ts.map +1 -0
  101. package/dist/cjs/infrastructure/logging/interfaces/AgentLogger.d.ts +29 -0
  102. package/dist/cjs/infrastructure/logging/interfaces/AgentLogger.d.ts.map +1 -0
  103. package/dist/cjs/infrastructure/logging/utils/loggerUtils.d.ts +24 -0
  104. package/dist/cjs/infrastructure/logging/utils/loggerUtils.d.ts.map +1 -0
  105. package/dist/cjs/infrastructure/logging/utils/loggerUtils.js +82 -0
  106. package/dist/cjs/infrastructure/logging/utils/loggerUtils.js.map +1 -0
  107. package/dist/cjs/infrastructure/monitoring/decorators/fallbackMonitoring.d.ts +9 -0
  108. package/dist/cjs/infrastructure/monitoring/decorators/fallbackMonitoring.d.ts.map +1 -0
  109. package/dist/cjs/infrastructure/monitoring/decorators/fallbackMonitoring.js +96 -0
  110. package/dist/cjs/infrastructure/monitoring/decorators/fallbackMonitoring.js.map +1 -0
  111. package/dist/cjs/infrastructure/monitoring/decorators/monitoring.d.ts +5 -0
  112. package/dist/cjs/infrastructure/monitoring/decorators/monitoring.d.ts.map +1 -0
  113. package/dist/cjs/infrastructure/monitoring/decorators/monitoring.js +90 -0
  114. package/dist/cjs/infrastructure/monitoring/decorators/monitoring.js.map +1 -0
  115. package/dist/cjs/infrastructure/monitoring/index.d.ts +4 -0
  116. package/dist/cjs/infrastructure/monitoring/index.d.ts.map +1 -0
  117. package/dist/cjs/infrastructure/monitoring/utils/executionClassification.d.ts +14 -0
  118. package/dist/cjs/infrastructure/monitoring/utils/executionClassification.d.ts.map +1 -0
  119. package/dist/cjs/infrastructure/monitoring/utils/executionClassification.js +76 -0
  120. package/dist/cjs/infrastructure/monitoring/utils/executionClassification.js.map +1 -0
  121. package/dist/cjs/node_modules/tslib/tslib.es6.js +38 -0
  122. package/dist/cjs/node_modules/tslib/tslib.es6.js.map +1 -0
  123. package/dist/cjs/shared/utils/jsonParser.d.ts +17 -0
  124. package/dist/cjs/shared/utils/jsonParser.d.ts.map +1 -0
  125. package/dist/cjs/shared/utils/jsonParser.js +47 -0
  126. package/dist/cjs/shared/utils/jsonParser.js.map +1 -0
  127. package/dist/esm/core/agent/Agent.js +93 -0
  128. package/dist/esm/core/agent/Agent.js.map +1 -0
  129. package/dist/esm/core/agent/AgentRegistry.js +67 -0
  130. package/dist/esm/core/agent/AgentRegistry.js.map +1 -0
  131. package/dist/esm/core/execution/ExecutionEngine.js +108 -0
  132. package/dist/esm/core/execution/ExecutionEngine.js.map +1 -0
  133. package/dist/esm/core/execution/PlanValidator.js +83 -0
  134. package/dist/esm/core/execution/PlanValidator.js.map +1 -0
  135. package/dist/esm/core/execution/Planner.js +198 -0
  136. package/dist/esm/core/execution/Planner.js.map +1 -0
  137. package/dist/esm/core/execution/ReferenceResolver.js +172 -0
  138. package/dist/esm/core/execution/ReferenceResolver.js.map +1 -0
  139. package/dist/esm/core/execution/ResponseProcessor.js +38 -0
  140. package/dist/esm/core/execution/ResponseProcessor.js.map +1 -0
  141. package/dist/esm/core/memory/memory.js +110 -0
  142. package/dist/esm/core/memory/memory.js.map +1 -0
  143. package/dist/esm/index.js +11 -0
  144. package/dist/esm/index.js.map +1 -0
  145. package/dist/esm/infrastructure/adapters/base/base.js +8 -0
  146. package/dist/esm/infrastructure/adapters/base/base.js.map +1 -0
  147. package/dist/esm/infrastructure/adapters/claude/claudeAdapter.js +164 -0
  148. package/dist/esm/infrastructure/adapters/claude/claudeAdapter.js.map +1 -0
  149. package/dist/esm/infrastructure/adapters/ollama/ollamaAdapter.js +153 -0
  150. package/dist/esm/infrastructure/adapters/ollama/ollamaAdapter.js.map +1 -0
  151. package/dist/esm/infrastructure/adapters/openai/openaiAdapter.js +146 -0
  152. package/dist/esm/infrastructure/adapters/openai/openaiAdapter.js.map +1 -0
  153. package/dist/esm/infrastructure/adapters/utils/schemaUtils.js +57 -0
  154. package/dist/esm/infrastructure/adapters/utils/schemaUtils.js.map +1 -0
  155. package/dist/esm/infrastructure/logging/implementations/defaultLoggers.js +60 -0
  156. package/dist/esm/infrastructure/logging/implementations/defaultLoggers.js.map +1 -0
  157. package/dist/esm/infrastructure/logging/implementations/logger.js +123 -0
  158. package/dist/esm/infrastructure/logging/implementations/logger.js.map +1 -0
  159. package/dist/esm/infrastructure/logging/utils/loggerUtils.js +80 -0
  160. package/dist/esm/infrastructure/logging/utils/loggerUtils.js.map +1 -0
  161. package/dist/esm/infrastructure/monitoring/decorators/fallbackMonitoring.js +93 -0
  162. package/dist/esm/infrastructure/monitoring/decorators/fallbackMonitoring.js.map +1 -0
  163. package/dist/esm/infrastructure/monitoring/decorators/monitoring.js +88 -0
  164. package/dist/esm/infrastructure/monitoring/decorators/monitoring.js.map +1 -0
  165. package/dist/esm/infrastructure/monitoring/utils/executionClassification.js +72 -0
  166. package/dist/esm/infrastructure/monitoring/utils/executionClassification.js.map +1 -0
  167. package/dist/esm/node_modules/tslib/tslib.es6.js +35 -0
  168. package/dist/esm/node_modules/tslib/tslib.es6.js.map +1 -0
  169. package/dist/esm/shared/utils/jsonParser.js +45 -0
  170. package/dist/esm/shared/utils/jsonParser.js.map +1 -0
  171. package/dist/types/index.d.ts +380 -0
  172. 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,8 @@
1
+ /**
2
+ * Base class for all model adapters
3
+ */
4
+ class BaseAdapter {
5
+ }
6
+
7
+ export { BaseAdapter };
8
+ //# sourceMappingURL=base.js.map
@@ -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":";;;;AAiBA;;;AAGG;AACG,MAAO,aAAc,SAAQ,WAAW,CAAA;AAO5C,IAAA,WAAA,CAAY,MAAe,EAAE,KAAK,GAAG,0BAA0B,EAAA;AAC7D,QAAA,KAAK,EAAE;QAPT,IAAA,CAAA,IAAI,GAAG,QAAQ;QACf,IAAA,CAAA,mBAAmB,GAAG,IAAI;AAOxB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC;AAC1B,YAAA,MAAM,EAAE,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB;AAChD,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;IACpB;AAEA;;AAEG;AACH,IAAA,MAAM,QAAQ,CACZ,MAAc,EACd,OAA0D,EAAA;AAE1D,QAAA,MAAM,QAAQ,GAAsC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;;;;;;AAOvF,QAAA,IAAI,OAAO,KAAA,IAAA,IAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE;YACnB,QAAQ,CAAC,OAAO,CAAC;AACf,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,OAAO,EACL,gJAAgJ;AAChJ,oBAAA,CAAA,gBAAA,EAAmB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA,EAAA,CAAI;oBAC9D,uFAAuF;AAC1F,aAAA,CAAC;AACH,QAAA;AAAM,aAAA,IAAI,OAAO,KAAA,IAAA,IAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAE;;AAExB,YAAA,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;YAC7E,QAAQ,CAAC,OAAO,CAAC;AACf,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,OAAO,EAAE;AACP,sBAAE;AACF,sBAAE,sHAAsH;AAC3H,aAAA,CAAC;AACH,QAAA;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAChD,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,UAAU,EAAE,IAAI;YAChB,QAAQ;AACT,SAAA,CAAC;AAEF,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CACvC,CAAC,KAAK,KAAmC,KAAK,CAAC,IAAI,KAAK,MAAM,CAC/D;AAED,QAAA,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACvD;AAEA;;AAEG;AACH,IAAA,MAAM,gBAAgB,CAAC,MAAc,EAAE,KAAa,EAAA;QAClD,IAAI;;YAEF,MAAM,cAAc,GAAoB,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK;gBACzD,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,YAAY,EAAE,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC;AACjE,aAAA,CAAC,CAAC;YAEH,MAAM,SAAS,GAIV,EAAE;;YAGP,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACjD,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,gBAAA,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7C,gBAAA,KAAK,EAAE,cAAc;AACrB,gBAAA,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;AAC9B,aAAA,CAAC;YAEF,IAAI,YAAY,GAAG,EAAE;AACrB,YAAA,MAAM,QAAQ,GAA6B,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YAC9E,IAAI,eAAe,GAAG,QAAQ;;YAG9B,IAAI,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC;AAEzD,YAAA,OAAO,gBAAgB,EAAE;AACvB,gBAAA,MAAM,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC;;gBAGxE,eAAe,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAClD,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,oBAAA,UAAU,EAAE,IAAI;oBAChB,QAAQ;AACR,oBAAA,KAAK,EAAE,cAAc;AACrB,oBAAA,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;AAC9B,iBAAA,CAAC;AAEF,gBAAA,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC;AACtD,YAAA;;AAGD,YAAA,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC;YAEvD,OAAO;AACL,gBAAA,OAAO,EAAE,YAAY;gBACrB,SAAS;AACT,gBAAA,OAAO,EAAE,IAAI;aACd;AACF,QAAA;AAAC,QAAA,OAAO,KAAK,EAAE;YACd,OAAO;AACL,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,SAAS,EAAE,EAAE;AACb,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,MAAM,EAAE,CAAC,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;aACjE;AACF,QAAA;IACH;AAEA;;AAEG;AACK,IAAA,YAAY,CAAC,QAA2B,EAAA;AAC9C,QAAA,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;IAClE;AAEA;;AAEG;AACK,IAAA,kBAAkB,CAAC,QAA2B,EAAA;QACpD,OAAO,QAAQ,CAAC;aACb,MAAM,CAAC,CAAC,KAAK,KAAmC,KAAK,CAAC,IAAI,KAAK,MAAM;aACrE,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI;aACvB,IAAI,CAAC,EAAE,CAAC;IACb;AAEA;;AAEG;IACK,MAAM,gBAAgB,CAC5B,QAA2B,EAC3B,KAAa,EACb,SAA+D,EAC/D,QAAkC,EAAA;;QAGlC,QAAQ,CAAC,IAAI,CAAC;AACZ,YAAA,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,QAAQ,CAAC,OAAO;AAC1B,SAAA,CAAC;;AAGF,QAAA,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,OAAO,EAAE;AACpC,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE;;AAE7B,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC;gBACnD,IAAI,CAAC,IAAI,EAAE;oBACT,MAAM,IAAI,KAAK,CAAC,CAAA,KAAA,EAAQ,KAAK,CAAC,IAAI,CAAA,UAAA,CAAY,CAAC;AAChD,gBAAA;gBAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAyC,CAAC;gBAEjF,SAAS,CAAC,IAAI,CAAC;oBACb,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,SAAS,EAAE,KAAK,CAAC,KAAK;oBACtB,MAAM;AACP,iBAAA,CAAC;;gBAGF,QAAQ,CAAC,IAAI,CAAC;AACZ,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,OAAO,EAAE;AACP,wBAAA;AACE,4BAAA,IAAI,EAAE,aAAa;4BACnB,WAAW,EAAE,KAAK,CAAC,EAAE;AACrB,4BAAA,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AAChC,yBAAA;AACF,qBAAA;AACF,iBAAA,CAAC;AACH,YAAA;AACF,QAAA;IACH;AACD;;;;"}
@@ -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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"}