cost-katana 2.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 +550 -0
- package/dist/analyzers/cost-analyzer.d.ts +28 -0
- package/dist/analyzers/cost-analyzer.d.ts.map +1 -0
- package/dist/analyzers/cost-analyzer.js +165 -0
- package/dist/analyzers/cost-analyzer.js.map +1 -0
- package/dist/analyzers/token-counter.d.ts +21 -0
- package/dist/analyzers/token-counter.d.ts.map +1 -0
- package/dist/analyzers/token-counter.js +100 -0
- package/dist/analyzers/token-counter.js.map +1 -0
- package/dist/analyzers/usage-tracker.d.ts +29 -0
- package/dist/analyzers/usage-tracker.d.ts.map +1 -0
- package/dist/analyzers/usage-tracker.js +142 -0
- package/dist/analyzers/usage-tracker.js.map +1 -0
- package/dist/config/default.d.ts +45 -0
- package/dist/config/default.d.ts.map +1 -0
- package/dist/config/default.js +103 -0
- package/dist/config/default.js.map +1 -0
- package/dist/config/model-types.d.ts +45 -0
- package/dist/config/model-types.d.ts.map +1 -0
- package/dist/config/model-types.js +101 -0
- package/dist/config/model-types.js.map +1 -0
- package/dist/config/pricing/anthropic.d.ts +3 -0
- package/dist/config/pricing/anthropic.d.ts.map +1 -0
- package/dist/config/pricing/anthropic.js +191 -0
- package/dist/config/pricing/anthropic.js.map +1 -0
- package/dist/config/pricing/aws-bedrock.d.ts +3 -0
- package/dist/config/pricing/aws-bedrock.d.ts.map +1 -0
- package/dist/config/pricing/aws-bedrock.js +747 -0
- package/dist/config/pricing/aws-bedrock.js.map +1 -0
- package/dist/config/pricing/cohere.d.ts +3 -0
- package/dist/config/pricing/cohere.d.ts.map +1 -0
- package/dist/config/pricing/cohere.js +371 -0
- package/dist/config/pricing/cohere.js.map +1 -0
- package/dist/config/pricing/deepseek.d.ts +3 -0
- package/dist/config/pricing/deepseek.d.ts.map +1 -0
- package/dist/config/pricing/deepseek.js +102 -0
- package/dist/config/pricing/deepseek.js.map +1 -0
- package/dist/config/pricing/google.d.ts +3 -0
- package/dist/config/pricing/google.d.ts.map +1 -0
- package/dist/config/pricing/google.js +671 -0
- package/dist/config/pricing/google.js.map +1 -0
- package/dist/config/pricing/grok.d.ts +3 -0
- package/dist/config/pricing/grok.d.ts.map +1 -0
- package/dist/config/pricing/grok.js +59 -0
- package/dist/config/pricing/grok.js.map +1 -0
- package/dist/config/pricing/index.d.ts +11 -0
- package/dist/config/pricing/index.d.ts.map +1 -0
- package/dist/config/pricing/index.js +24 -0
- package/dist/config/pricing/index.js.map +1 -0
- package/dist/config/pricing/meta.d.ts +3 -0
- package/dist/config/pricing/meta.d.ts.map +1 -0
- package/dist/config/pricing/meta.js +69 -0
- package/dist/config/pricing/meta.js.map +1 -0
- package/dist/config/pricing/mistral.d.ts +3 -0
- package/dist/config/pricing/mistral.d.ts.map +1 -0
- package/dist/config/pricing/mistral.js +690 -0
- package/dist/config/pricing/mistral.js.map +1 -0
- package/dist/config/pricing/openai.d.ts +3 -0
- package/dist/config/pricing/openai.d.ts.map +1 -0
- package/dist/config/pricing/openai.js +475 -0
- package/dist/config/pricing/openai.js.map +1 -0
- package/dist/config/pricing/xai.d.ts +3 -0
- package/dist/config/pricing/xai.d.ts.map +1 -0
- package/dist/config/pricing/xai.js +141 -0
- package/dist/config/pricing/xai.js.map +1 -0
- package/dist/config/pricing-data.d.ts +55 -0
- package/dist/config/pricing-data.d.ts.map +1 -0
- package/dist/config/pricing-data.js +179 -0
- package/dist/config/pricing-data.js.map +1 -0
- package/dist/feedback/client.d.ts +14 -0
- package/dist/feedback/client.d.ts.map +1 -0
- package/dist/feedback/client.js +95 -0
- package/dist/feedback/client.js.map +1 -0
- package/dist/feedback/index.d.ts +3 -0
- package/dist/feedback/index.d.ts.map +1 -0
- package/dist/feedback/index.js +21 -0
- package/dist/feedback/index.js.map +1 -0
- package/dist/gateway/client.d.ts +77 -0
- package/dist/gateway/client.d.ts.map +1 -0
- package/dist/gateway/client.js +630 -0
- package/dist/gateway/client.js.map +1 -0
- package/dist/gateway/index.d.ts +9 -0
- package/dist/gateway/index.d.ts.map +1 -0
- package/dist/gateway/index.js +66 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/index.d.ts +183 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1438 -0
- package/dist/index.js.map +1 -0
- package/dist/optimizers/context-trimmer.d.ts +18 -0
- package/dist/optimizers/context-trimmer.d.ts.map +1 -0
- package/dist/optimizers/context-trimmer.js +221 -0
- package/dist/optimizers/context-trimmer.js.map +1 -0
- package/dist/optimizers/index.d.ts +6 -0
- package/dist/optimizers/index.d.ts.map +1 -0
- package/dist/optimizers/index.js +14 -0
- package/dist/optimizers/index.js.map +1 -0
- package/dist/optimizers/prompt-compressor.d.ts +15 -0
- package/dist/optimizers/prompt-compressor.d.ts.map +1 -0
- package/dist/optimizers/prompt-compressor.js +268 -0
- package/dist/optimizers/prompt-compressor.js.map +1 -0
- package/dist/optimizers/prompt-optimizer.d.ts +29 -0
- package/dist/optimizers/prompt-optimizer.d.ts.map +1 -0
- package/dist/optimizers/prompt-optimizer.js +381 -0
- package/dist/optimizers/prompt-optimizer.js.map +1 -0
- package/dist/optimizers/request-fusion.d.ts +34 -0
- package/dist/optimizers/request-fusion.d.ts.map +1 -0
- package/dist/optimizers/request-fusion.js +284 -0
- package/dist/optimizers/request-fusion.js.map +1 -0
- package/dist/optimizers/suggestion-engine.d.ts +29 -0
- package/dist/optimizers/suggestion-engine.d.ts.map +1 -0
- package/dist/optimizers/suggestion-engine.js +234 -0
- package/dist/optimizers/suggestion-engine.js.map +1 -0
- package/dist/providers/anthropic.d.ts +23 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +108 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/azure.d.ts +15 -0
- package/dist/providers/azure.d.ts.map +1 -0
- package/dist/providers/azure.js +115 -0
- package/dist/providers/azure.js.map +1 -0
- package/dist/providers/base.d.ts +20 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +67 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/bedrock.d.ts +23 -0
- package/dist/providers/bedrock.d.ts.map +1 -0
- package/dist/providers/bedrock.js +247 -0
- package/dist/providers/bedrock.js.map +1 -0
- package/dist/providers/cohere.d.ts +17 -0
- package/dist/providers/cohere.d.ts.map +1 -0
- package/dist/providers/cohere.js +122 -0
- package/dist/providers/cohere.js.map +1 -0
- package/dist/providers/deepseek.d.ts +6 -0
- package/dist/providers/deepseek.d.ts.map +1 -0
- package/dist/providers/deepseek.js +17 -0
- package/dist/providers/deepseek.js.map +1 -0
- package/dist/providers/google.d.ts +17 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +141 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/index.d.ts +13 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +61 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/openai.d.ts +16 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +194 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/trace/client.d.ts +48 -0
- package/dist/trace/client.d.ts.map +1 -0
- package/dist/trace/client.js +130 -0
- package/dist/trace/client.js.map +1 -0
- package/dist/trace/index.d.ts +7 -0
- package/dist/trace/index.d.ts.map +1 -0
- package/dist/trace/index.js +30 -0
- package/dist/trace/index.js.map +1 -0
- package/dist/trace/middleware.d.ts +70 -0
- package/dist/trace/middleware.d.ts.map +1 -0
- package/dist/trace/middleware.js +104 -0
- package/dist/trace/middleware.js.map +1 -0
- package/dist/trace/providers.d.ts +83 -0
- package/dist/trace/providers.d.ts.map +1 -0
- package/dist/trace/providers.js +340 -0
- package/dist/trace/providers.js.map +1 -0
- package/dist/trace/service.d.ts +59 -0
- package/dist/trace/service.d.ts.map +1 -0
- package/dist/trace/service.js +425 -0
- package/dist/trace/service.js.map +1 -0
- package/dist/trace/types.d.ts +102 -0
- package/dist/trace/types.d.ts.map +1 -0
- package/dist/trace/types.js +3 -0
- package/dist/trace/types.js.map +1 -0
- package/dist/types/failover.d.ts +29 -0
- package/dist/types/failover.d.ts.map +1 -0
- package/dist/types/failover.js +3 -0
- package/dist/types/failover.js.map +1 -0
- package/dist/types/feedback.d.ts +69 -0
- package/dist/types/feedback.d.ts.map +1 -0
- package/dist/types/feedback.js +3 -0
- package/dist/types/feedback.js.map +1 -0
- package/dist/types/gateway.d.ts +303 -0
- package/dist/types/gateway.d.ts.map +1 -0
- package/dist/types/gateway.js +3 -0
- package/dist/types/gateway.js.map +1 -0
- package/dist/types/index.d.ts +242 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +37 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/models.d.ts +7 -0
- package/dist/types/models.d.ts.map +1 -0
- package/dist/types/models.js +3838 -0
- package/dist/types/models.js.map +1 -0
- package/dist/types/providers.d.ts +128 -0
- package/dist/types/providers.d.ts.map +1 -0
- package/dist/types/providers.js +10 -0
- package/dist/types/providers.js.map +1 -0
- package/dist/types/simplified.d.ts +65 -0
- package/dist/types/simplified.d.ts.map +1 -0
- package/dist/types/simplified.js +4 -0
- package/dist/types/simplified.js.map +1 -0
- package/dist/utils/logger.d.ts +35 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +154 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/pricing.d.ts +30 -0
- package/dist/utils/pricing.d.ts.map +1 -0
- package/dist/utils/pricing.js +148 -0
- package/dist/utils/pricing.js.map +1 -0
- package/dist/utils/validators.d.ts +10 -0
- package/dist/utils/validators.d.ts.map +1 -0
- package/dist/utils/validators.js +133 -0
- package/dist/utils/validators.js.map +1 -0
- package/package.json +92 -0
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RequestFusion = void 0;
|
|
4
|
+
const token_counter_1 = require("../analyzers/token-counter");
|
|
5
|
+
const uuid_1 = require("uuid");
|
|
6
|
+
class RequestFusion {
|
|
7
|
+
constructor(fusionWindow, maxBatchSize) {
|
|
8
|
+
this.requestQueue = [];
|
|
9
|
+
this.fusionWindow = 5000;
|
|
10
|
+
this.maxBatchSize = 5;
|
|
11
|
+
if (fusionWindow)
|
|
12
|
+
this.fusionWindow = fusionWindow;
|
|
13
|
+
if (maxBatchSize)
|
|
14
|
+
this.maxBatchSize = maxBatchSize;
|
|
15
|
+
}
|
|
16
|
+
async analyzeRequestsForFusion(requests) {
|
|
17
|
+
const suggestions = [];
|
|
18
|
+
const timeGroups = this.groupRequestsByTimeWindow(requests);
|
|
19
|
+
for (const group of timeGroups) {
|
|
20
|
+
if (group.length < 2)
|
|
21
|
+
continue;
|
|
22
|
+
const sequentialFusion = await this.analyzeSequentialFusion(group);
|
|
23
|
+
if (sequentialFusion)
|
|
24
|
+
suggestions.push(sequentialFusion);
|
|
25
|
+
const parallelFusion = await this.analyzeParallelFusion(group);
|
|
26
|
+
if (parallelFusion)
|
|
27
|
+
suggestions.push(parallelFusion);
|
|
28
|
+
const hierarchicalFusion = await this.analyzeHierarchicalFusion(group);
|
|
29
|
+
if (hierarchicalFusion)
|
|
30
|
+
suggestions.push(hierarchicalFusion);
|
|
31
|
+
}
|
|
32
|
+
return suggestions.sort((a, b) => b.estimatedSavings - a.estimatedSavings);
|
|
33
|
+
}
|
|
34
|
+
groupRequestsByTimeWindow(requests) {
|
|
35
|
+
const groups = [];
|
|
36
|
+
let currentGroup = [];
|
|
37
|
+
const sortedRequests = [...requests].sort((a, b) => a.timestamp - b.timestamp);
|
|
38
|
+
for (const request of sortedRequests) {
|
|
39
|
+
if (currentGroup.length === 0) {
|
|
40
|
+
currentGroup.push(request);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
const timeDiff = request.timestamp - currentGroup[currentGroup.length - 1].timestamp;
|
|
44
|
+
if (timeDiff <= this.fusionWindow && currentGroup.length < this.maxBatchSize) {
|
|
45
|
+
currentGroup.push(request);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
groups.push(currentGroup);
|
|
49
|
+
currentGroup = [request];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (currentGroup.length > 0) {
|
|
54
|
+
groups.push(currentGroup);
|
|
55
|
+
}
|
|
56
|
+
return groups;
|
|
57
|
+
}
|
|
58
|
+
async analyzeSequentialFusion(requests) {
|
|
59
|
+
const isSequential = this.detectSequentialPattern(requests);
|
|
60
|
+
if (!isSequential)
|
|
61
|
+
return null;
|
|
62
|
+
const fusedPrompt = this.createSequentialFusedPrompt(requests);
|
|
63
|
+
const totalOriginalTokens = await this.calculateTotalTokens(requests);
|
|
64
|
+
const fusedTokens = await token_counter_1.TokenCounter.countTokens(fusedPrompt, requests[0].provider, requests[0].model);
|
|
65
|
+
const savings = ((totalOriginalTokens - fusedTokens) / totalOriginalTokens) * 100;
|
|
66
|
+
if (savings < 15)
|
|
67
|
+
return null;
|
|
68
|
+
return {
|
|
69
|
+
id: (0, uuid_1.v4)(),
|
|
70
|
+
type: 'request_fusion',
|
|
71
|
+
originalPrompt: requests.map(r => r.prompt).join('\n\n---\n\n'),
|
|
72
|
+
optimizedPrompt: fusedPrompt,
|
|
73
|
+
estimatedSavings: savings,
|
|
74
|
+
confidence: 0.85,
|
|
75
|
+
explanation: `Fused ${requests.length} sequential requests into a single comprehensive prompt`,
|
|
76
|
+
implementation: 'Sequential request fusion with numbered steps',
|
|
77
|
+
fusionDetails: {
|
|
78
|
+
fusedRequests: requests.map(r => r.id),
|
|
79
|
+
fusionStrategy: 'sequential',
|
|
80
|
+
estimatedTimeReduction: (requests.length - 1) * 1000
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
detectSequentialPattern(requests) {
|
|
85
|
+
const sequentialKeywords = ['then', 'next', 'after', 'step', 'first', 'second', 'finally'];
|
|
86
|
+
const prompts = requests.map(r => r.prompt.toLowerCase());
|
|
87
|
+
let sequentialCount = 0;
|
|
88
|
+
for (const prompt of prompts) {
|
|
89
|
+
if (sequentialKeywords.some(keyword => prompt.includes(keyword))) {
|
|
90
|
+
sequentialCount++;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const hasNumbering = prompts.some(p => /^\d+[.)]\s/.test(p) || /step\s+\d+/i.test(p));
|
|
94
|
+
return sequentialCount >= requests.length / 2 || hasNumbering;
|
|
95
|
+
}
|
|
96
|
+
createSequentialFusedPrompt(requests) {
|
|
97
|
+
const intro = 'Please complete the following tasks in order:\n\n';
|
|
98
|
+
const tasks = requests.map((r, i) => `${i + 1}. ${r.prompt.trim()}`).join('\n\n');
|
|
99
|
+
const outro = '\n\nProvide the results for each task clearly labeled with its number.';
|
|
100
|
+
return intro + tasks + outro;
|
|
101
|
+
}
|
|
102
|
+
async analyzeParallelFusion(requests) {
|
|
103
|
+
const isParallel = this.detectParallelPattern(requests);
|
|
104
|
+
if (!isParallel)
|
|
105
|
+
return null;
|
|
106
|
+
const fusedPrompt = this.createParallelFusedPrompt(requests);
|
|
107
|
+
const totalOriginalTokens = await this.calculateTotalTokens(requests);
|
|
108
|
+
const fusedTokens = await token_counter_1.TokenCounter.countTokens(fusedPrompt, requests[0].provider, requests[0].model);
|
|
109
|
+
const savings = ((totalOriginalTokens - fusedTokens) / totalOriginalTokens) * 100;
|
|
110
|
+
if (savings < 15)
|
|
111
|
+
return null;
|
|
112
|
+
return {
|
|
113
|
+
id: (0, uuid_1.v4)(),
|
|
114
|
+
type: 'request_fusion',
|
|
115
|
+
originalPrompt: requests.map(r => r.prompt).join('\n\n---\n\n'),
|
|
116
|
+
optimizedPrompt: fusedPrompt,
|
|
117
|
+
estimatedSavings: savings,
|
|
118
|
+
confidence: 0.8,
|
|
119
|
+
explanation: `Fused ${requests.length} independent requests for parallel processing`,
|
|
120
|
+
implementation: 'Parallel request fusion with separate sections',
|
|
121
|
+
fusionDetails: {
|
|
122
|
+
fusedRequests: requests.map(r => r.id),
|
|
123
|
+
fusionStrategy: 'parallel',
|
|
124
|
+
estimatedTimeReduction: (requests.length - 1) * 1500
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
detectParallelPattern(requests) {
|
|
129
|
+
const prompts = requests.map(r => r.prompt.toLowerCase());
|
|
130
|
+
const hasQuestions = prompts.filter(p => p.includes('?')).length >= requests.length * 0.7;
|
|
131
|
+
const hasListRequests = prompts.filter(p => p.includes('list') || p.includes('enumerate') || p.includes('provide'))
|
|
132
|
+
.length >=
|
|
133
|
+
requests.length * 0.6;
|
|
134
|
+
const sequentialKeywords = ['then', 'after that', 'based on the above', 'using the previous'];
|
|
135
|
+
const hasSequentialDeps = prompts.some(p => sequentialKeywords.some(keyword => p.includes(keyword)));
|
|
136
|
+
return (hasQuestions || hasListRequests) && !hasSequentialDeps;
|
|
137
|
+
}
|
|
138
|
+
createParallelFusedPrompt(requests) {
|
|
139
|
+
const intro = 'Please answer the following independent questions:\n\n';
|
|
140
|
+
const questions = requests.map((r, i) => `Question ${i + 1}:\n${r.prompt.trim()}`).join('\n\n');
|
|
141
|
+
const outro = '\n\nProvide each answer in a clearly labeled section.';
|
|
142
|
+
return intro + questions + outro;
|
|
143
|
+
}
|
|
144
|
+
async analyzeHierarchicalFusion(requests) {
|
|
145
|
+
const hierarchy = this.detectHierarchicalPattern(requests);
|
|
146
|
+
if (!hierarchy)
|
|
147
|
+
return null;
|
|
148
|
+
const fusedPrompt = this.createHierarchicalFusedPrompt(requests, hierarchy);
|
|
149
|
+
const totalOriginalTokens = await this.calculateTotalTokens(requests);
|
|
150
|
+
const fusedTokens = await token_counter_1.TokenCounter.countTokens(fusedPrompt, requests[0].provider, requests[0].model);
|
|
151
|
+
const savings = ((totalOriginalTokens - fusedTokens) / totalOriginalTokens) * 100;
|
|
152
|
+
if (savings < 20)
|
|
153
|
+
return null;
|
|
154
|
+
return {
|
|
155
|
+
id: (0, uuid_1.v4)(),
|
|
156
|
+
type: 'request_fusion',
|
|
157
|
+
originalPrompt: requests.map(r => r.prompt).join('\n\n---\n\n'),
|
|
158
|
+
optimizedPrompt: fusedPrompt,
|
|
159
|
+
estimatedSavings: savings,
|
|
160
|
+
confidence: 0.75,
|
|
161
|
+
explanation: `Fused ${requests.length} requests with hierarchical structure`,
|
|
162
|
+
implementation: 'Hierarchical request fusion with main topic and subtopics',
|
|
163
|
+
fusionDetails: {
|
|
164
|
+
fusedRequests: requests.map(r => r.id),
|
|
165
|
+
fusionStrategy: 'hierarchical',
|
|
166
|
+
estimatedTimeReduction: (requests.length - 1) * 1200
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
detectHierarchicalPattern(requests) {
|
|
171
|
+
const prompts = requests.map(r => r.prompt);
|
|
172
|
+
let mainIndex = -1;
|
|
173
|
+
let maxGenerality = -1;
|
|
174
|
+
for (let i = 0; i < prompts.length; i++) {
|
|
175
|
+
const generality = this.calculateGenerality(prompts[i]);
|
|
176
|
+
if (generality > maxGenerality) {
|
|
177
|
+
maxGenerality = generality;
|
|
178
|
+
mainIndex = i;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
if (mainIndex === -1)
|
|
182
|
+
return null;
|
|
183
|
+
const mainPrompt = prompts[mainIndex].toLowerCase();
|
|
184
|
+
const subtopics = [];
|
|
185
|
+
for (let i = 0; i < prompts.length; i++) {
|
|
186
|
+
if (i !== mainIndex) {
|
|
187
|
+
const prompt = prompts[i].toLowerCase();
|
|
188
|
+
if (this.areRelated(mainPrompt, prompt)) {
|
|
189
|
+
subtopics.push(i);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
if (subtopics.length < requests.length * 0.5)
|
|
194
|
+
return null;
|
|
195
|
+
return { main: mainIndex, subtopics };
|
|
196
|
+
}
|
|
197
|
+
calculateGenerality(prompt) {
|
|
198
|
+
const generalTerms = ['explain', 'describe', 'what is', 'overview', 'summary', 'introduction'];
|
|
199
|
+
let score = 100 / prompt.length;
|
|
200
|
+
for (const term of generalTerms) {
|
|
201
|
+
if (prompt.toLowerCase().includes(term)) {
|
|
202
|
+
score += 10;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return score;
|
|
206
|
+
}
|
|
207
|
+
areRelated(mainPrompt, subPrompt) {
|
|
208
|
+
const mainTerms = this.extractKeyTerms(mainPrompt);
|
|
209
|
+
const subTerms = this.extractKeyTerms(subPrompt);
|
|
210
|
+
const overlap = mainTerms.filter(term => subTerms.includes(term)).length;
|
|
211
|
+
return overlap >= Math.min(mainTerms.length, subTerms.length) * 0.3;
|
|
212
|
+
}
|
|
213
|
+
extractKeyTerms(text) {
|
|
214
|
+
const stopWords = new Set([
|
|
215
|
+
'the',
|
|
216
|
+
'a',
|
|
217
|
+
'an',
|
|
218
|
+
'and',
|
|
219
|
+
'or',
|
|
220
|
+
'but',
|
|
221
|
+
'in',
|
|
222
|
+
'on',
|
|
223
|
+
'at',
|
|
224
|
+
'to',
|
|
225
|
+
'for',
|
|
226
|
+
'of',
|
|
227
|
+
'with',
|
|
228
|
+
'by',
|
|
229
|
+
'from',
|
|
230
|
+
'up',
|
|
231
|
+
'about',
|
|
232
|
+
'into',
|
|
233
|
+
'through',
|
|
234
|
+
'during',
|
|
235
|
+
'before',
|
|
236
|
+
'after',
|
|
237
|
+
'above',
|
|
238
|
+
'below',
|
|
239
|
+
'between',
|
|
240
|
+
'under',
|
|
241
|
+
'again',
|
|
242
|
+
'further',
|
|
243
|
+
'then',
|
|
244
|
+
'once'
|
|
245
|
+
]);
|
|
246
|
+
return text
|
|
247
|
+
.toLowerCase()
|
|
248
|
+
.split(/\W+/)
|
|
249
|
+
.filter(word => word.length > 3 && !stopWords.has(word));
|
|
250
|
+
}
|
|
251
|
+
createHierarchicalFusedPrompt(requests, hierarchy) {
|
|
252
|
+
const mainPrompt = requests[hierarchy.main].prompt;
|
|
253
|
+
const subtopicPrompts = hierarchy.subtopics.map(i => requests[i].prompt);
|
|
254
|
+
let fusedPrompt = `Main Topic: ${mainPrompt}\n\n`;
|
|
255
|
+
fusedPrompt += 'Please address the main topic and the following related subtopics:\n\n';
|
|
256
|
+
subtopicPrompts.forEach((prompt, i) => {
|
|
257
|
+
fusedPrompt += `${i + 1}. ${prompt}\n`;
|
|
258
|
+
});
|
|
259
|
+
fusedPrompt +=
|
|
260
|
+
'\nProvide a comprehensive response that covers the main topic and integrates information about each subtopic.';
|
|
261
|
+
return fusedPrompt;
|
|
262
|
+
}
|
|
263
|
+
async calculateTotalTokens(requests) {
|
|
264
|
+
let total = 0;
|
|
265
|
+
for (const request of requests) {
|
|
266
|
+
total += await token_counter_1.TokenCounter.countTokens(request.prompt, request.provider, request.model);
|
|
267
|
+
}
|
|
268
|
+
return total;
|
|
269
|
+
}
|
|
270
|
+
async queueRequest(request) {
|
|
271
|
+
this.requestQueue.push(request);
|
|
272
|
+
const now = Date.now();
|
|
273
|
+
this.requestQueue = this.requestQueue.filter(r => now - r.timestamp <= this.fusionWindow);
|
|
274
|
+
}
|
|
275
|
+
async getQueuedRequests() {
|
|
276
|
+
const now = Date.now();
|
|
277
|
+
return this.requestQueue.filter(r => now - r.timestamp <= this.fusionWindow);
|
|
278
|
+
}
|
|
279
|
+
clearQueue() {
|
|
280
|
+
this.requestQueue = [];
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
exports.RequestFusion = RequestFusion;
|
|
284
|
+
//# sourceMappingURL=request-fusion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-fusion.js","sourceRoot":"","sources":["../../src/optimizers/request-fusion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { OptimizationSuggestion, UsageMetadata, BedrockConfig } from '../types';
|
|
2
|
+
export interface SuggestionEngineConfig {
|
|
3
|
+
bedrockConfig?: BedrockConfig;
|
|
4
|
+
thresholds?: {
|
|
5
|
+
highCostPerRequest?: number;
|
|
6
|
+
highTokenUsage?: number;
|
|
7
|
+
frequencyThreshold?: number;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export declare class SuggestionEngine {
|
|
11
|
+
private promptOptimizer;
|
|
12
|
+
private costAnalyzer;
|
|
13
|
+
private config;
|
|
14
|
+
constructor(config?: SuggestionEngineConfig);
|
|
15
|
+
generateSuggestions(usageData: UsageMetadata[]): Promise<OptimizationSuggestion[]>;
|
|
16
|
+
private analyzeHighCostRequests;
|
|
17
|
+
private analyzeRepeatedPatterns;
|
|
18
|
+
private analyzeModelUsage;
|
|
19
|
+
private analyzeTokenEfficiency;
|
|
20
|
+
private getOptimizationOpportunities;
|
|
21
|
+
private normalizePrompt;
|
|
22
|
+
private groupPromptsByUser;
|
|
23
|
+
private getRecentPrompts;
|
|
24
|
+
private classifyTaskComplexity;
|
|
25
|
+
private getModelAlternatives;
|
|
26
|
+
private deduplicateSuggestions;
|
|
27
|
+
generateReport(usageData: UsageMetadata[]): Promise<string>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=suggestion-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggestion-engine.d.ts","sourceRoot":"","sources":["../../src/optimizers/suggestion-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAc,aAAa,EAAE,MAAM,UAAU,CAAC;AAK5F,MAAM,WAAW,sBAAsB;IACrC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,UAAU,CAAC,EAAE;QACX,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,MAAM,CAAyB;gBAE3B,MAAM,GAAE,sBAA2B;IAezC,mBAAmB,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;YA0B1E,uBAAuB;YAgCvB,uBAAuB;IAkDrC,OAAO,CAAC,iBAAiB;IAyBzB,OAAO,CAAC,sBAAsB;IA8C9B,OAAO,CAAC,4BAA4B;IAapC,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,sBAAsB;IAmB9B,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,sBAAsB;IAUxB,cAAc,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAiDlE"}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SuggestionEngine = void 0;
|
|
4
|
+
const prompt_optimizer_1 = require("./prompt-optimizer");
|
|
5
|
+
const cost_analyzer_1 = require("../analyzers/cost-analyzer");
|
|
6
|
+
const uuid_1 = require("uuid");
|
|
7
|
+
class SuggestionEngine {
|
|
8
|
+
constructor(config = {}) {
|
|
9
|
+
this.config = {
|
|
10
|
+
thresholds: {
|
|
11
|
+
highCostPerRequest: 0.1,
|
|
12
|
+
highTokenUsage: 2000,
|
|
13
|
+
frequencyThreshold: 5,
|
|
14
|
+
...config.thresholds
|
|
15
|
+
},
|
|
16
|
+
...config
|
|
17
|
+
};
|
|
18
|
+
this.promptOptimizer = new prompt_optimizer_1.PromptOptimizer(undefined, config.bedrockConfig);
|
|
19
|
+
this.costAnalyzer = new cost_analyzer_1.CostAnalyzer();
|
|
20
|
+
}
|
|
21
|
+
async generateSuggestions(usageData) {
|
|
22
|
+
this.costAnalyzer.clearData();
|
|
23
|
+
this.costAnalyzer.addUsageData(usageData);
|
|
24
|
+
const suggestions = [];
|
|
25
|
+
suggestions.push(...(await this.analyzeHighCostRequests(usageData)));
|
|
26
|
+
suggestions.push(...(await this.analyzeRepeatedPatterns(usageData)));
|
|
27
|
+
suggestions.push(...this.analyzeModelUsage(usageData));
|
|
28
|
+
suggestions.push(...this.analyzeTokenEfficiency(usageData));
|
|
29
|
+
suggestions.push(...this.getOptimizationOpportunities());
|
|
30
|
+
const uniqueSuggestions = this.deduplicateSuggestions(suggestions);
|
|
31
|
+
return uniqueSuggestions.sort((a, b) => b.estimatedSavings - a.estimatedSavings);
|
|
32
|
+
}
|
|
33
|
+
async analyzeHighCostRequests(usageData) {
|
|
34
|
+
const suggestions = [];
|
|
35
|
+
const threshold = this.config.thresholds?.highCostPerRequest || 0.1;
|
|
36
|
+
const highCostRequests = usageData.filter(item => item.estimatedCost > threshold);
|
|
37
|
+
for (const request of highCostRequests.slice(0, 5)) {
|
|
38
|
+
const promptResult = await this.promptOptimizer.optimizePrompt(request.prompt, request.model, request.provider);
|
|
39
|
+
suggestions.push(...promptResult.suggestions);
|
|
40
|
+
const modelSuggestion = await this.promptOptimizer.suggestModelDowngrade(request.model, this.classifyTaskComplexity(request.prompt));
|
|
41
|
+
if (modelSuggestion) {
|
|
42
|
+
suggestions.push(modelSuggestion);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return suggestions;
|
|
46
|
+
}
|
|
47
|
+
async analyzeRepeatedPatterns(usageData) {
|
|
48
|
+
const suggestions = [];
|
|
49
|
+
const promptFrequency = new Map();
|
|
50
|
+
usageData.forEach(item => {
|
|
51
|
+
const normalizedPrompt = this.normalizePrompt(item.prompt);
|
|
52
|
+
const count = promptFrequency.get(normalizedPrompt) || 0;
|
|
53
|
+
promptFrequency.set(normalizedPrompt, count + 1);
|
|
54
|
+
});
|
|
55
|
+
const threshold = this.config.thresholds?.frequencyThreshold || 5;
|
|
56
|
+
for (const [prompt, frequency] of promptFrequency.entries()) {
|
|
57
|
+
if (frequency >= threshold) {
|
|
58
|
+
const avgTokens = usageData
|
|
59
|
+
.filter(item => this.normalizePrompt(item.prompt) === prompt)
|
|
60
|
+
.reduce((sum, item) => sum + item.completionTokens, 0) / frequency;
|
|
61
|
+
const cachingSuggestion = await this.promptOptimizer.suggestCaching(frequency, avgTokens);
|
|
62
|
+
suggestions.push(cachingSuggestion);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const userPromptGroups = this.groupPromptsByUser(usageData);
|
|
66
|
+
for (const [, prompts] of userPromptGroups.entries()) {
|
|
67
|
+
if (prompts.length >= 3) {
|
|
68
|
+
const recentPrompts = this.getRecentPrompts(prompts, 5);
|
|
69
|
+
if (recentPrompts.length >= 2) {
|
|
70
|
+
const batchingSuggestion = await this.promptOptimizer.suggestBatching(recentPrompts.map(p => p.prompt), recentPrompts[0].model, recentPrompts[0].provider);
|
|
71
|
+
if (batchingSuggestion.estimatedSavings > 10) {
|
|
72
|
+
suggestions.push(batchingSuggestion);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return suggestions;
|
|
78
|
+
}
|
|
79
|
+
analyzeModelUsage(_usageData) {
|
|
80
|
+
const suggestions = [];
|
|
81
|
+
const analytics = this.costAnalyzer.analyzeUsage();
|
|
82
|
+
analytics.mostUsedModels.forEach(modelUsage => {
|
|
83
|
+
if (modelUsage.requestCount > 100) {
|
|
84
|
+
const costPerToken = modelUsage.totalCost / modelUsage.totalTokens;
|
|
85
|
+
if (costPerToken > 0.00001) {
|
|
86
|
+
suggestions.push({
|
|
87
|
+
id: (0, uuid_1.v4)(),
|
|
88
|
+
type: 'model',
|
|
89
|
+
estimatedSavings: 30,
|
|
90
|
+
confidence: 0.7,
|
|
91
|
+
explanation: `Model ${modelUsage.model} is used frequently (${modelUsage.requestCount} times). Consider using a more cost-effective model for routine tasks.`,
|
|
92
|
+
implementation: this.getModelAlternatives(modelUsage.model, modelUsage.provider)
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
return suggestions;
|
|
98
|
+
}
|
|
99
|
+
analyzeTokenEfficiency(_usageData) {
|
|
100
|
+
const suggestions = [];
|
|
101
|
+
const threshold = this.config.thresholds?.highTokenUsage || 2000;
|
|
102
|
+
const highTokenRequests = _usageData.filter(item => item.totalTokens > threshold);
|
|
103
|
+
if (highTokenRequests.length > 0) {
|
|
104
|
+
const avgTokens = highTokenRequests.reduce((sum, item) => sum + item.totalTokens, 0) /
|
|
105
|
+
highTokenRequests.length;
|
|
106
|
+
suggestions.push({
|
|
107
|
+
id: (0, uuid_1.v4)(),
|
|
108
|
+
type: 'prompt',
|
|
109
|
+
estimatedSavings: 25,
|
|
110
|
+
confidence: 0.8,
|
|
111
|
+
explanation: `${highTokenRequests.length} requests exceed ${threshold} tokens (avg: ${Math.round(avgTokens)}). Consider breaking down complex prompts or using more concise language.`,
|
|
112
|
+
implementation: 'Use structured prompts with clear sections:\n1. Context (brief)\n2. Task (specific)\n3. Output format (examples)'
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
const ratios = _usageData.map(item => ({
|
|
116
|
+
ratio: item.completionTokens / item.promptTokens,
|
|
117
|
+
cost: item.estimatedCost
|
|
118
|
+
}));
|
|
119
|
+
const highRatioRequests = ratios.filter(r => r.ratio > 3);
|
|
120
|
+
if (highRatioRequests.length > _usageData.length * 0.1) {
|
|
121
|
+
suggestions.push({
|
|
122
|
+
id: (0, uuid_1.v4)(),
|
|
123
|
+
type: 'prompt',
|
|
124
|
+
estimatedSavings: 20,
|
|
125
|
+
confidence: 0.7,
|
|
126
|
+
explanation: 'Many requests generate long responses relative to prompts. Consider adding length constraints or requesting more concise outputs.',
|
|
127
|
+
implementation: 'Add to prompts: "Please provide a concise response" or "Limit response to X words/sentences"'
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
return suggestions;
|
|
131
|
+
}
|
|
132
|
+
getOptimizationOpportunities() {
|
|
133
|
+
const opportunities = this.costAnalyzer.getOptimizationOpportunities();
|
|
134
|
+
return opportunities.map(opp => ({
|
|
135
|
+
id: (0, uuid_1.v4)(),
|
|
136
|
+
type: 'model',
|
|
137
|
+
estimatedSavings: (opp.savings / opp.currentCost) * 100,
|
|
138
|
+
confidence: 0.8,
|
|
139
|
+
explanation: opp.recommendation,
|
|
140
|
+
implementation: `Switch from ${opp.model} to a more cost-effective alternative`
|
|
141
|
+
}));
|
|
142
|
+
}
|
|
143
|
+
normalizePrompt(prompt) {
|
|
144
|
+
return prompt.toLowerCase().replace(/\s+/g, ' ').trim().substring(0, 100);
|
|
145
|
+
}
|
|
146
|
+
groupPromptsByUser(_usageData) {
|
|
147
|
+
const groups = new Map();
|
|
148
|
+
groups.set('all_users', _usageData);
|
|
149
|
+
return groups;
|
|
150
|
+
}
|
|
151
|
+
getRecentPrompts(prompts, _minutes) {
|
|
152
|
+
return prompts.slice(-5);
|
|
153
|
+
}
|
|
154
|
+
classifyTaskComplexity(prompt) {
|
|
155
|
+
const complexityIndicators = {
|
|
156
|
+
simple: ['list', 'define', 'what is', 'translate', 'summarize briefly'],
|
|
157
|
+
complex: ['analyze', 'create', 'design', 'implement', 'solve', 'optimize']
|
|
158
|
+
};
|
|
159
|
+
const lowerPrompt = prompt.toLowerCase();
|
|
160
|
+
if (complexityIndicators.simple.some(indicator => lowerPrompt.includes(indicator))) {
|
|
161
|
+
return 'simple';
|
|
162
|
+
}
|
|
163
|
+
if (complexityIndicators.complex.some(indicator => lowerPrompt.includes(indicator))) {
|
|
164
|
+
return 'complex';
|
|
165
|
+
}
|
|
166
|
+
return 'moderate';
|
|
167
|
+
}
|
|
168
|
+
getModelAlternatives(model, _provider) {
|
|
169
|
+
const alternatives = {
|
|
170
|
+
'gpt-4': 'Consider gpt-3.5-turbo for simpler tasks, or gpt-4-turbo for better cost/performance',
|
|
171
|
+
'gpt-4-turbo-preview': 'Use gpt-3.5-turbo for routine tasks',
|
|
172
|
+
'claude-3-opus': 'Try claude-3-sonnet for most tasks, or claude-3-haiku for simple queries',
|
|
173
|
+
'claude-3-sonnet': 'Use claude-3-haiku for straightforward tasks'
|
|
174
|
+
};
|
|
175
|
+
return alternatives[model] || 'Research model-specific alternatives for your use case';
|
|
176
|
+
}
|
|
177
|
+
deduplicateSuggestions(suggestions) {
|
|
178
|
+
const seen = new Set();
|
|
179
|
+
return suggestions.filter(suggestion => {
|
|
180
|
+
const key = `${suggestion.type}-${suggestion.explanation}`;
|
|
181
|
+
if (seen.has(key))
|
|
182
|
+
return false;
|
|
183
|
+
seen.add(key);
|
|
184
|
+
return true;
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
async generateReport(usageData) {
|
|
188
|
+
const suggestions = await this.generateSuggestions(usageData);
|
|
189
|
+
const analytics = this.costAnalyzer.analyzeUsage();
|
|
190
|
+
const report = `# AI Cost Optimization Report
|
|
191
|
+
|
|
192
|
+
## Summary
|
|
193
|
+
- Total Cost: $${analytics.totalCost.toFixed(2)}
|
|
194
|
+
- Total Requests: ${usageData.length}
|
|
195
|
+
- Average Cost per Request: $${(analytics.totalCost / usageData.length).toFixed(3)}
|
|
196
|
+
- Total Tokens Used: ${analytics.totalTokens.toLocaleString()}
|
|
197
|
+
|
|
198
|
+
## Top Optimization Opportunities
|
|
199
|
+
|
|
200
|
+
${suggestions
|
|
201
|
+
.slice(0, 5)
|
|
202
|
+
.map((s, i) => `
|
|
203
|
+
### ${i + 1}. ${s.type.charAt(0).toUpperCase() + s.type.slice(1)} Optimization
|
|
204
|
+
- **Potential Savings**: ${s.estimatedSavings.toFixed(1)}%
|
|
205
|
+
- **Confidence**: ${(s.confidence * 100).toFixed(0)}%
|
|
206
|
+
- **Recommendation**: ${s.explanation}
|
|
207
|
+
- **How to Implement**: ${s.implementation}
|
|
208
|
+
`)
|
|
209
|
+
.join('\n')}
|
|
210
|
+
|
|
211
|
+
## Model Usage Breakdown
|
|
212
|
+
${analytics.mostUsedModels
|
|
213
|
+
.slice(0, 5)
|
|
214
|
+
.map(m => `- **${m.model}**: ${m.requestCount} requests, $${m.totalCost.toFixed(2)} total cost`)
|
|
215
|
+
.join('\n')}
|
|
216
|
+
|
|
217
|
+
## Cost by Provider
|
|
218
|
+
${analytics.costByProvider
|
|
219
|
+
.map(p => `- **${p.provider}**: $${p.totalCost.toFixed(2)} (${p.percentage.toFixed(1)}%)`)
|
|
220
|
+
.join('\n')}
|
|
221
|
+
|
|
222
|
+
## Next Steps
|
|
223
|
+
1. Implement high-confidence optimizations first
|
|
224
|
+
2. Monitor usage patterns for the next week
|
|
225
|
+
3. Re-evaluate model choices based on actual task complexity
|
|
226
|
+
4. Consider implementing caching for frequently repeated queries
|
|
227
|
+
5. Set up alerts for unusually high-cost requests
|
|
228
|
+
|
|
229
|
+
Generated on: ${new Date().toISOString()}`;
|
|
230
|
+
return report;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
exports.SuggestionEngine = SuggestionEngine;
|
|
234
|
+
//# sourceMappingURL=suggestion-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggestion-engine.js","sourceRoot":"","sources":["../../src/optimizers/suggestion-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { BaseProvider } from './base';
|
|
2
|
+
import { ProviderConfig } from '../types';
|
|
3
|
+
import { ProviderRequest, ProviderResponse, AnthropicUsage, AnyUsage } from '../types/providers';
|
|
4
|
+
interface AnthropicUsageResponse {
|
|
5
|
+
input_tokens: number;
|
|
6
|
+
output_tokens: number;
|
|
7
|
+
}
|
|
8
|
+
export declare class AnthropicProvider extends BaseProvider {
|
|
9
|
+
private apiKey;
|
|
10
|
+
private apiUrl;
|
|
11
|
+
constructor(config: ProviderConfig);
|
|
12
|
+
countTokens(text: string, _model: string): Promise<number>;
|
|
13
|
+
makeRequest(request: ProviderRequest): Promise<ProviderResponse>;
|
|
14
|
+
private formatRequestBody;
|
|
15
|
+
private getSystemPrompt;
|
|
16
|
+
private filterSystemMessages;
|
|
17
|
+
private formatResponse;
|
|
18
|
+
parseUsage(usage: AnthropicUsageResponse): AnthropicUsage;
|
|
19
|
+
protected getPromptTokens(usage: AnyUsage): number;
|
|
20
|
+
protected getCompletionTokens(usage: AnyUsage): number;
|
|
21
|
+
}
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,cAAc,EAAc,MAAM,UAAU,CAAC;AACtD,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,QAAQ,EAET,MAAM,oBAAoB,CAAC;AAgB5B,UAAU,sBAAsB;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,cAAc;IAW5B,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAM1D,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAwCtE,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,cAAc;IAsBtB,UAAU,CAAC,KAAK,EAAE,sBAAsB,GAAG,cAAc;IAOzD,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM;IAIlD,SAAS,CAAC,mBAAmB,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM;CAGvD"}
|