adaptive-memory-multi-model-router 2.2.9 → 2.4.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/README.md +81 -902
- package/package.json +1 -1
- package/src/skills/__tests__/skill_manager.test.ts +328 -0
- package/assets/benchmark-results.png +0 -0
- package/assets/complexity-scoring-v2.png +0 -0
- package/assets/complexity-scoring.png +0 -0
- package/assets/cost-comparison-chart.png +0 -0
- package/assets/cost-comparison-v2.png +0 -0
- package/assets/feature-comparison-v2.png +0 -0
- package/assets/feature-comparison-v3.png +0 -0
- package/assets/provider-health-chart.png +0 -0
- package/assets/provider-health-v2.png +0 -0
- package/assets/routing-flow-v2.png +0 -0
- package/assets/routing-flow-v3.png +0 -0
- package/assets/routing-flow.png +0 -0
- package/assets/tier-distribution.png +0 -0
- package/dist/cache/cacheKeyGenerator.d.ts +0 -67
- package/dist/cache/cacheKeyGenerator.d.ts.map +0 -1
- package/dist/cache/cacheKeyGenerator.js +0 -211
- package/dist/cache/cacheKeyGenerator.js.map +0 -1
- package/dist/cost/preCallCostEstimator.d.ts +0 -114
- package/dist/cost/preCallCostEstimator.d.ts.map +0 -1
- package/dist/cost/preCallCostEstimator.js +0 -256
- package/dist/cost/preCallCostEstimator.js.map +0 -1
- package/dist/inference/speculativeDecoding.d.ts +0 -133
- package/dist/inference/speculativeDecoding.d.ts.map +0 -1
- package/dist/inference/speculativeDecoding.js +0 -276
- package/dist/inference/speculativeDecoding.js.map +0 -1
- package/dist/providers/providerHealth.d.ts +0 -117
- package/dist/providers/providerHealth.d.ts.map +0 -1
- package/dist/providers/providerHealth.js +0 -309
- package/dist/providers/providerHealth.js.map +0 -1
- package/dist/routing/difficultyClassifier.d.ts +0 -79
- package/dist/routing/difficultyClassifier.d.ts.map +0 -1
- package/dist/routing/difficultyClassifier.js +0 -329
- package/dist/routing/difficultyClassifier.js.map +0 -1
- package/dist/sdk.d.ts +0 -125
- package/docs/HN_CAMPAIGN.md +0 -785
- package/src/cache/cacheKeyGenerator.ts +0 -242
- package/src/cost/preCallCostEstimator.ts +0 -345
- package/src/inference/speculativeDecoding.ts +0 -373
- package/src/providers/providerHealth.ts +0 -397
- package/src/routing/difficultyClassifier.ts +0 -420
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A3M Router - Pre-Call Cost Estimator
|
|
3
|
-
*
|
|
4
|
-
* Estimates cost BEFORE making an API call based on input features.
|
|
5
|
-
* Uses historical data patterns and token count estimation via character ratio.
|
|
6
|
-
*
|
|
7
|
-
* No external API calls - all estimation is local.
|
|
8
|
-
*
|
|
9
|
-
* Usage:
|
|
10
|
-
* const estimator = new PreCallCostEstimator();
|
|
11
|
-
* const estimate = estimator.estimate({
|
|
12
|
-
* query: "What is Python?",
|
|
13
|
-
* modelTier: 'mid',
|
|
14
|
-
* provider: 'groq'
|
|
15
|
-
* });
|
|
16
|
-
* console.log(estimate); // { estimatedTokens: 24, estimatedCost: 0.0014, estimatedLatency: 200 }
|
|
17
|
-
*/
|
|
18
|
-
import { ProviderTier } from '../providers/providerConfig';
|
|
19
|
-
export interface CostEstimateInput {
|
|
20
|
-
/** Query text to estimate tokens for */
|
|
21
|
-
query: string;
|
|
22
|
-
/** Model tier (free|cheap|mid|premium|enterprise) */
|
|
23
|
-
modelTier?: ProviderTier;
|
|
24
|
-
/** Provider ID for provider-specific cost lookup */
|
|
25
|
-
provider?: string;
|
|
26
|
-
/** Optional: explicit token count (if already known) */
|
|
27
|
-
explicitTokens?: number;
|
|
28
|
-
/** System prompt length (if using a system prompt) */
|
|
29
|
-
systemPromptLength?: number;
|
|
30
|
-
}
|
|
31
|
-
export interface CostEstimate {
|
|
32
|
-
/** Estimated total tokens (input + output) */
|
|
33
|
-
estimatedTokens: number;
|
|
34
|
-
/** Estimated input tokens */
|
|
35
|
-
estimatedInputTokens: number;
|
|
36
|
-
/** Estimated output tokens */
|
|
37
|
-
estimatedOutputTokens: number;
|
|
38
|
-
/** Estimated cost in USD */
|
|
39
|
-
estimatedCost: number;
|
|
40
|
-
/** Estimated latency in milliseconds */
|
|
41
|
-
estimatedLatency: number;
|
|
42
|
-
/** Confidence score 0-1 */
|
|
43
|
-
confidence: number;
|
|
44
|
-
/** Breakdown of estimation */
|
|
45
|
-
breakdown: {
|
|
46
|
-
inputCostPerM: number;
|
|
47
|
-
outputCostPerM: number;
|
|
48
|
-
charToTokenRatio: number;
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
export interface ProviderCostConfig {
|
|
52
|
-
input: number;
|
|
53
|
-
output: number;
|
|
54
|
-
}
|
|
55
|
-
export declare class PreCallCostEstimator {
|
|
56
|
-
private historicalData;
|
|
57
|
-
private slope;
|
|
58
|
-
private intercept;
|
|
59
|
-
private latencyHistory;
|
|
60
|
-
private ewmaAlpha;
|
|
61
|
-
constructor(historicalData?: Array<{
|
|
62
|
-
chars: number;
|
|
63
|
-
tokens: number;
|
|
64
|
-
}>);
|
|
65
|
-
/**
|
|
66
|
-
* Main estimation method - estimates tokens, cost, and latency.
|
|
67
|
-
*/
|
|
68
|
-
estimate(input: CostEstimateInput): CostEstimate;
|
|
69
|
-
/**
|
|
70
|
-
* Estimate input tokens using character-to-token ratio.
|
|
71
|
-
* Uses linear regression if historical data is available.
|
|
72
|
-
*/
|
|
73
|
-
estimateTokens(text: string, systemPromptLength?: number): number;
|
|
74
|
-
/**
|
|
75
|
-
* Estimate output tokens based on query complexity.
|
|
76
|
-
* More complex queries (code, analysis) tend to need more output.
|
|
77
|
-
*/
|
|
78
|
-
estimateOutputTokens(query: string, inputTokens: number): number;
|
|
79
|
-
/**
|
|
80
|
-
* Calculate cost in USD.
|
|
81
|
-
*/
|
|
82
|
-
calculateCost(totalTokens: number, config: ProviderCostConfig): number;
|
|
83
|
-
/**
|
|
84
|
-
* Estimate latency in milliseconds.
|
|
85
|
-
*/
|
|
86
|
-
estimateLatency(tier: ProviderTier, inputTokens: number, totalTokens: number): number;
|
|
87
|
-
/**
|
|
88
|
-
* Record actual tokens for future regression improvements.
|
|
89
|
-
*/
|
|
90
|
-
recordActualTokens(queryLength: number, actualTokens: number): void;
|
|
91
|
-
/**
|
|
92
|
-
* Record actual latency for EWMA updates.
|
|
93
|
-
*/
|
|
94
|
-
recordActualLatency(latencyMs: number): void;
|
|
95
|
-
/**
|
|
96
|
-
* Fit linear regression to historical data.
|
|
97
|
-
* Uses ordinary least squares.
|
|
98
|
-
*/
|
|
99
|
-
fitLinearRegression(data: Array<{
|
|
100
|
-
chars: number;
|
|
101
|
-
tokens: number;
|
|
102
|
-
}>): void;
|
|
103
|
-
private getCostConfig;
|
|
104
|
-
private containsKeyword;
|
|
105
|
-
private calculateEwma;
|
|
106
|
-
private calculateConfidence;
|
|
107
|
-
private estimateInputTokensFromTotal;
|
|
108
|
-
private estimateOutputTokensFromTotal;
|
|
109
|
-
}
|
|
110
|
-
export declare function createPreCallCostEstimator(historicalData?: Array<{
|
|
111
|
-
chars: number;
|
|
112
|
-
tokens: number;
|
|
113
|
-
}>): PreCallCostEstimator;
|
|
114
|
-
//# sourceMappingURL=preCallCostEstimator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"preCallCostEstimator.d.ts","sourceRoot":"","sources":["../../src/cost/preCallCostEstimator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAM3D,MAAM,WAAW,iBAAiB;IAChC,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sDAAsD;IACtD,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,eAAe,EAAE,MAAM,CAAC;IACxB,6BAA6B;IAC7B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,8BAA8B;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,4BAA4B;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,wCAAwC;IACxC,gBAAgB,EAAE,MAAM,CAAC;IACzB,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,SAAS,EAAE;QACT,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAeD,qBAAa,oBAAoB;IAE/B,OAAO,CAAC,cAAc,CAAgD;IAEtE,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,SAAS,CAAM;IAEvB,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,SAAS,CAAO;gBAEZ,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAMrE;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY;IA+ChD;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,kBAAkB,SAAI,GAAG,MAAM;IAY5D;;;OAGG;IACH,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAwBhE;;OAEG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,MAAM;IAMtE;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAmBrF;;OAEG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAcnE;;OAEG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAO5C;;;OAGG;IACH,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IA4BzE,OAAO,CAAC,aAAa;IA8BrB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,4BAA4B;IAIpC,OAAO,CAAC,6BAA6B;CAGtC;AAMD,wBAAgB,0BAA0B,CACxC,cAAc,CAAC,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GACxD,oBAAoB,CAEtB"}
|
|
@@ -1,256 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* A3M Router - Pre-Call Cost Estimator
|
|
4
|
-
*
|
|
5
|
-
* Estimates cost BEFORE making an API call based on input features.
|
|
6
|
-
* Uses historical data patterns and token count estimation via character ratio.
|
|
7
|
-
*
|
|
8
|
-
* No external API calls - all estimation is local.
|
|
9
|
-
*
|
|
10
|
-
* Usage:
|
|
11
|
-
* const estimator = new PreCallCostEstimator();
|
|
12
|
-
* const estimate = estimator.estimate({
|
|
13
|
-
* query: "What is Python?",
|
|
14
|
-
* modelTier: 'mid',
|
|
15
|
-
* provider: 'groq'
|
|
16
|
-
* });
|
|
17
|
-
* console.log(estimate); // { estimatedTokens: 24, estimatedCost: 0.0014, estimatedLatency: 200 }
|
|
18
|
-
*/
|
|
19
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
exports.PreCallCostEstimator = void 0;
|
|
21
|
-
exports.createPreCallCostEstimator = createPreCallCostEstimator;
|
|
22
|
-
// Default latency estimates per tier (ms)
|
|
23
|
-
const TIER_LATENCY = {
|
|
24
|
-
free: { min: 500, max: 5000, avg: 2000 },
|
|
25
|
-
cheap: { min: 100, max: 800, avg: 300 },
|
|
26
|
-
mid: { min: 200, max: 1500, avg: 600 },
|
|
27
|
-
premium: { min: 300, max: 2000, avg: 800 },
|
|
28
|
-
enterprise: { min: 200, max: 1500, avg: 500 },
|
|
29
|
-
};
|
|
30
|
-
// ============================================================
|
|
31
|
-
// PreCallCostEstimator
|
|
32
|
-
// ============================================================
|
|
33
|
-
class PreCallCostEstimator {
|
|
34
|
-
// Historical data for regression: [charCount, actualTokens][] tuples
|
|
35
|
-
historicalData = [];
|
|
36
|
-
// Linear regression coefficients
|
|
37
|
-
slope = 0.25; // chars per token ratio
|
|
38
|
-
intercept = 10;
|
|
39
|
-
// EWMA for latency estimation
|
|
40
|
-
latencyHistory = [];
|
|
41
|
-
ewmaAlpha = 0.3;
|
|
42
|
-
constructor(historicalData) {
|
|
43
|
-
if (historicalData && historicalData.length > 0) {
|
|
44
|
-
this.fitLinearRegression(historicalData);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Main estimation method - estimates tokens, cost, and latency.
|
|
49
|
-
*/
|
|
50
|
-
estimate(input) {
|
|
51
|
-
const { query, modelTier = 'mid', provider, explicitTokens, systemPromptLength = 0, } = input;
|
|
52
|
-
// Token estimation
|
|
53
|
-
let inputTokens;
|
|
54
|
-
if (explicitTokens !== undefined) {
|
|
55
|
-
inputTokens = explicitTokens;
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
inputTokens = this.estimateTokens(query, systemPromptLength);
|
|
59
|
-
}
|
|
60
|
-
// Output token estimation based on query complexity
|
|
61
|
-
const outputTokens = this.estimateOutputTokens(query, inputTokens);
|
|
62
|
-
const totalTokens = inputTokens + outputTokens;
|
|
63
|
-
// Cost estimation
|
|
64
|
-
const costConfig = this.getCostConfig(provider, modelTier);
|
|
65
|
-
const estimatedCost = this.calculateCost(totalTokens, costConfig);
|
|
66
|
-
// Latency estimation
|
|
67
|
-
const estimatedLatency = this.estimateLatency(modelTier, inputTokens, totalTokens);
|
|
68
|
-
// Confidence based on amount of historical data we have
|
|
69
|
-
const confidence = this.calculateConfidence();
|
|
70
|
-
return {
|
|
71
|
-
estimatedTokens: totalTokens,
|
|
72
|
-
estimatedInputTokens: inputTokens,
|
|
73
|
-
estimatedOutputTokens: outputTokens,
|
|
74
|
-
estimatedCost: Math.round(estimatedCost * 1000000) / 1000000, // 6 decimal places
|
|
75
|
-
estimatedLatency,
|
|
76
|
-
confidence,
|
|
77
|
-
breakdown: {
|
|
78
|
-
inputCostPerM: costConfig.input,
|
|
79
|
-
outputCostPerM: costConfig.output,
|
|
80
|
-
charToTokenRatio: this.slope,
|
|
81
|
-
},
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Estimate input tokens using character-to-token ratio.
|
|
86
|
-
* Uses linear regression if historical data is available.
|
|
87
|
-
*/
|
|
88
|
-
estimateTokens(text, systemPromptLength = 0) {
|
|
89
|
-
const totalChars = text.length + systemPromptLength;
|
|
90
|
-
if (this.historicalData.length >= 5) {
|
|
91
|
-
// Use linear regression
|
|
92
|
-
return Math.max(1, Math.round(this.slope * totalChars + this.intercept));
|
|
93
|
-
}
|
|
94
|
-
// Fallback: general English average ~4 chars per token
|
|
95
|
-
return Math.max(1, Math.round(totalChars / 4));
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Estimate output tokens based on query complexity.
|
|
99
|
-
* More complex queries (code, analysis) tend to need more output.
|
|
100
|
-
*/
|
|
101
|
-
estimateOutputTokens(query, inputTokens) {
|
|
102
|
-
const lower = query.toLowerCase();
|
|
103
|
-
// Base estimate: ~30% of input tokens as output
|
|
104
|
-
let multiplier = 0.3;
|
|
105
|
-
// Complexity adjustments
|
|
106
|
-
if (this.containsKeyword(lower, ['code', 'implement', 'function', 'class', 'algorithm'])) {
|
|
107
|
-
multiplier = 0.5; // Code needs more output
|
|
108
|
-
}
|
|
109
|
-
else if (this.containsKeyword(lower, ['explain', 'describe', 'what is', 'how does'])) {
|
|
110
|
-
multiplier = 0.35; // Explanations need moderate output
|
|
111
|
-
}
|
|
112
|
-
else if (this.containsKeyword(lower, ['list', 'count', 'find all'])) {
|
|
113
|
-
multiplier = 0.4; // List queries need more output
|
|
114
|
-
}
|
|
115
|
-
else if (this.containsKeyword(lower, ['yes', 'no', 'is', 'are', 'does'])) {
|
|
116
|
-
multiplier = 0.1; // Simple questions need minimal output
|
|
117
|
-
}
|
|
118
|
-
// Cap to reasonable bounds
|
|
119
|
-
return Math.min(Math.max(10, Math.round(inputTokens * multiplier)), 4000 // Max 4k output tokens
|
|
120
|
-
);
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Calculate cost in USD.
|
|
124
|
-
*/
|
|
125
|
-
calculateCost(totalTokens, config) {
|
|
126
|
-
const inputM = this.estimateInputTokensFromTotal(totalTokens) / 1_000_000;
|
|
127
|
-
const outputM = this.estimateOutputTokensFromTotal(totalTokens) / 1_000_000;
|
|
128
|
-
return inputM * config.input + outputM * config.output;
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Estimate latency in milliseconds.
|
|
132
|
-
*/
|
|
133
|
-
estimateLatency(tier, inputTokens, totalTokens) {
|
|
134
|
-
const tierLatency = TIER_LATENCY[tier];
|
|
135
|
-
// Base latency from tier
|
|
136
|
-
let latency = tierLatency.avg;
|
|
137
|
-
// Scale by token count (rough linear approximation)
|
|
138
|
-
const tokenScale = totalTokens / 100;
|
|
139
|
-
latency *= Math.max(0.5, Math.min(3, tokenScale));
|
|
140
|
-
// Adjust for historical EWMA if available
|
|
141
|
-
if (this.latencyHistory.length > 0) {
|
|
142
|
-
const ewmaLatency = this.calculateEwma();
|
|
143
|
-
latency = latency * 0.7 + ewmaLatency * 0.3;
|
|
144
|
-
}
|
|
145
|
-
return Math.round(latency);
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Record actual tokens for future regression improvements.
|
|
149
|
-
*/
|
|
150
|
-
recordActualTokens(queryLength, actualTokens) {
|
|
151
|
-
this.historicalData.push({ chars: queryLength, tokens: actualTokens });
|
|
152
|
-
// Keep only last 100 data points
|
|
153
|
-
if (this.historicalData.length > 100) {
|
|
154
|
-
this.historicalData.shift();
|
|
155
|
-
}
|
|
156
|
-
// Refit regression periodically
|
|
157
|
-
if (this.historicalData.length % 10 === 0) {
|
|
158
|
-
this.fitLinearRegression(this.historicalData);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Record actual latency for EWMA updates.
|
|
163
|
-
*/
|
|
164
|
-
recordActualLatency(latencyMs) {
|
|
165
|
-
this.latencyHistory.push(latencyMs);
|
|
166
|
-
if (this.latencyHistory.length > 50) {
|
|
167
|
-
this.latencyHistory.shift();
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Fit linear regression to historical data.
|
|
172
|
-
* Uses ordinary least squares.
|
|
173
|
-
*/
|
|
174
|
-
fitLinearRegression(data) {
|
|
175
|
-
if (data.length < 2)
|
|
176
|
-
return;
|
|
177
|
-
const n = data.length;
|
|
178
|
-
let sumX = 0, sumY = 0, sumXY = 0, sumX2 = 0;
|
|
179
|
-
for (const { chars, tokens } of data) {
|
|
180
|
-
sumX += chars;
|
|
181
|
-
sumY += tokens;
|
|
182
|
-
sumXY += chars * tokens;
|
|
183
|
-
sumX2 += chars * chars;
|
|
184
|
-
}
|
|
185
|
-
const denominator = n * sumX2 - sumX * sumX;
|
|
186
|
-
if (denominator === 0)
|
|
187
|
-
return;
|
|
188
|
-
this.slope = (n * sumXY - sumX * sumY) / denominator;
|
|
189
|
-
this.intercept = (sumY - this.slope * sumX) / n;
|
|
190
|
-
// Sanity check
|
|
191
|
-
if (this.slope <= 0 || this.slope > 1) {
|
|
192
|
-
this.slope = 0.25; // Reset to default if outlier
|
|
193
|
-
this.intercept = 10;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
// ---- Private helpers ----
|
|
197
|
-
getCostConfig(provider, tier) {
|
|
198
|
-
// Provider-specific costs (from providerConfig.ts patterns)
|
|
199
|
-
const providerCosts = {
|
|
200
|
-
groq: { input: 0.59, output: 0.79 },
|
|
201
|
-
cerebras: { input: 0.60, output: 0.60 },
|
|
202
|
-
deepseek: { input: 0.14, output: 0.28 },
|
|
203
|
-
deepinfra: { input: 0.05, output: 0.05 },
|
|
204
|
-
together: { input: 0.18, output: 0.18 },
|
|
205
|
-
fireworks: { input: 0.20, output: 0.20 },
|
|
206
|
-
mistral: { input: 0.20, output: 0.60 },
|
|
207
|
-
openai: { input: 2.50, output: 10.00 },
|
|
208
|
-
anthropic: { input: 3.00, output: 15.00 },
|
|
209
|
-
};
|
|
210
|
-
if (provider && providerCosts[provider]) {
|
|
211
|
-
return providerCosts[provider];
|
|
212
|
-
}
|
|
213
|
-
// Tier fallback
|
|
214
|
-
const tierCosts = {
|
|
215
|
-
free: { input: 0, output: 0 },
|
|
216
|
-
cheap: { input: 0.20, output: 0.40 },
|
|
217
|
-
mid: { input: 1.00, output: 3.00 },
|
|
218
|
-
premium: { input: 3.00, output: 12.00 },
|
|
219
|
-
enterprise: { input: 5.00, output: 20.00 },
|
|
220
|
-
};
|
|
221
|
-
return tier ? tierCosts[tier] : tierCosts.mid;
|
|
222
|
-
}
|
|
223
|
-
containsKeyword(text, keywords) {
|
|
224
|
-
return keywords.some(kw => text.includes(kw));
|
|
225
|
-
}
|
|
226
|
-
calculateEwma() {
|
|
227
|
-
if (this.latencyHistory.length === 0)
|
|
228
|
-
return 0;
|
|
229
|
-
let ewma = this.latencyHistory[0];
|
|
230
|
-
for (let i = 1; i < this.latencyHistory.length; i++) {
|
|
231
|
-
ewma = this.ewmaAlpha * this.latencyHistory[i] + (1 - this.ewmaAlpha) * ewma;
|
|
232
|
-
}
|
|
233
|
-
return ewma;
|
|
234
|
-
}
|
|
235
|
-
calculateConfidence() {
|
|
236
|
-
// More historical data = higher confidence
|
|
237
|
-
const dataFactor = Math.min(this.historicalData.length / 50, 1.0);
|
|
238
|
-
// More latency history = higher confidence
|
|
239
|
-
const latencyFactor = Math.min(this.latencyHistory.length / 20, 1.0);
|
|
240
|
-
return Math.round((dataFactor * 0.6 + latencyFactor * 0.4) * 100) / 100;
|
|
241
|
-
}
|
|
242
|
-
estimateInputTokensFromTotal(total) {
|
|
243
|
-
return Math.round(total * 0.7); // Assume 70% input
|
|
244
|
-
}
|
|
245
|
-
estimateOutputTokensFromTotal(total) {
|
|
246
|
-
return Math.round(total * 0.3); // Assume 30% output
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
exports.PreCallCostEstimator = PreCallCostEstimator;
|
|
250
|
-
// ============================================================
|
|
251
|
-
// Factory
|
|
252
|
-
// ============================================================
|
|
253
|
-
function createPreCallCostEstimator(historicalData) {
|
|
254
|
-
return new PreCallCostEstimator(historicalData);
|
|
255
|
-
}
|
|
256
|
-
//# sourceMappingURL=preCallCostEstimator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"preCallCostEstimator.js","sourceRoot":"","sources":["../../src/cost/preCallCostEstimator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A3M Router - Speculative Decoding Interface
|
|
3
|
-
*
|
|
4
|
-
* Interface for integrating speculative decoding.
|
|
5
|
-
* Currently a stub/interface for future Medusa/Lookahead integration.
|
|
6
|
-
*
|
|
7
|
-
* Speculative decoding uses a smaller "draft" model to predict
|
|
8
|
-
* multiple tokens ahead, which are then verified in parallel by
|
|
9
|
-
* the main model. This can provide 2-3x speedup in generation.
|
|
10
|
-
*
|
|
11
|
-
* Usage:
|
|
12
|
-
* const specDec = new SpeculativeDecoding();
|
|
13
|
-
* if (specDec.shouldUse(true)) {
|
|
14
|
-
* const draftModel = specDec.getDraftModel('medusa');
|
|
15
|
-
* // ... use draft model to generate and verify
|
|
16
|
-
* }
|
|
17
|
-
*/
|
|
18
|
-
export type DraftModelType = 'medusa' | 'lookahead' | 'eagle' | 'spark';
|
|
19
|
-
export interface SpeculativeConfig {
|
|
20
|
-
/** Enable speculative decoding */
|
|
21
|
-
enabled: boolean;
|
|
22
|
-
/** Draft model type */
|
|
23
|
-
draftModelType?: DraftModelType;
|
|
24
|
-
/** Number of speculative tokens to generate */
|
|
25
|
-
speculationWindow?: number;
|
|
26
|
-
/** Temperature for draft model */
|
|
27
|
-
temperature?: number;
|
|
28
|
-
/** Provider to use for draft model */
|
|
29
|
-
provider?: string;
|
|
30
|
-
/** Model to use for draft model */
|
|
31
|
-
model?: string;
|
|
32
|
-
}
|
|
33
|
-
export interface DraftModel {
|
|
34
|
-
/** Model identifier */
|
|
35
|
-
id: string;
|
|
36
|
-
/** Model type */
|
|
37
|
-
type: DraftModelType;
|
|
38
|
-
/** Provider for this model */
|
|
39
|
-
provider: string;
|
|
40
|
-
/** Model size description */
|
|
41
|
-
size: string;
|
|
42
|
-
/** Supported speculation windows */
|
|
43
|
-
supportedWindows: number[];
|
|
44
|
-
}
|
|
45
|
-
export interface SpeculativeResult {
|
|
46
|
-
/** Whether speculative decoding was used */
|
|
47
|
-
used: boolean;
|
|
48
|
-
/** Number of tokens in draft */
|
|
49
|
-
draftTokens: number;
|
|
50
|
-
/** Number of tokens accepted */
|
|
51
|
-
acceptedTokens: number;
|
|
52
|
-
/** Acceptance rate */
|
|
53
|
-
acceptanceRate: number;
|
|
54
|
-
/** Time saved (ms, estimated) */
|
|
55
|
-
estimatedTimeSaved: number;
|
|
56
|
-
}
|
|
57
|
-
export interface VerificationResult {
|
|
58
|
-
/** All tokens verified successfully */
|
|
59
|
-
allAccepted: boolean;
|
|
60
|
-
/** Indices of accepted tokens */
|
|
61
|
-
acceptedIndices: number[];
|
|
62
|
-
/** Indices of rejected tokens */
|
|
63
|
-
rejectedIndices: number[];
|
|
64
|
-
/** Actual tokens to use (may differ from draft) */
|
|
65
|
-
actualTokens: string[];
|
|
66
|
-
/** Number of tokens to rewind */
|
|
67
|
-
rewindCount: number;
|
|
68
|
-
}
|
|
69
|
-
export declare class SpeculativeDecoding {
|
|
70
|
-
private config;
|
|
71
|
-
private draftModels;
|
|
72
|
-
constructor(config?: Partial<SpeculativeConfig>);
|
|
73
|
-
/**
|
|
74
|
-
* Determine if speculative decoding should be used.
|
|
75
|
-
* Checks config, provider support, and model availability.
|
|
76
|
-
*/
|
|
77
|
-
shouldUse(forceEnable?: boolean): boolean;
|
|
78
|
-
/**
|
|
79
|
-
* Get the draft model configuration.
|
|
80
|
-
*/
|
|
81
|
-
getDraftModel(type?: DraftModelType): DraftModel | null;
|
|
82
|
-
/**
|
|
83
|
-
* Generate draft tokens using the draft model.
|
|
84
|
-
* This is an async method to support API-based draft models.
|
|
85
|
-
*/
|
|
86
|
-
generateDraft(prompt: string, maxTokens: number): Promise<{
|
|
87
|
-
tokens: string[];
|
|
88
|
-
scores: number[];
|
|
89
|
-
}>;
|
|
90
|
-
/**
|
|
91
|
-
* Verify draft tokens against the main model.
|
|
92
|
-
* Returns which tokens were accepted and corrections if needed.
|
|
93
|
-
*/
|
|
94
|
-
verifyDraft(prompt: string, draftTokens: string[]): Promise<VerificationResult>;
|
|
95
|
-
/**
|
|
96
|
-
* Calculate speedup from speculative decoding results.
|
|
97
|
-
*/
|
|
98
|
-
calculateSpeedup(result: SpeculativeResult): number;
|
|
99
|
-
/**
|
|
100
|
-
* Update configuration.
|
|
101
|
-
*/
|
|
102
|
-
updateConfig(updates: Partial<SpeculativeConfig>): void;
|
|
103
|
-
/**
|
|
104
|
-
* Get current configuration.
|
|
105
|
-
*/
|
|
106
|
-
getConfig(): SpeculativeConfig;
|
|
107
|
-
/**
|
|
108
|
-
* Check if a provider supports speculative decoding.
|
|
109
|
-
*/
|
|
110
|
-
supportsSpeculativeDecoding(provider: string): boolean;
|
|
111
|
-
/**
|
|
112
|
-
* Get recommended speculation window based on model size.
|
|
113
|
-
*/
|
|
114
|
-
getRecommendedWindow(modelSize: 'small' | 'medium' | 'large'): number;
|
|
115
|
-
private registerDraftModels;
|
|
116
|
-
}
|
|
117
|
-
export declare class SpeculativeDecodingWrapper {
|
|
118
|
-
private specDec;
|
|
119
|
-
private mainModelCall;
|
|
120
|
-
constructor(mainModelCall: (prompt: string, options?: any) => Promise<string>, config?: Partial<SpeculativeConfig>);
|
|
121
|
-
/**
|
|
122
|
-
* Generate with speculative decoding.
|
|
123
|
-
*/
|
|
124
|
-
generate(prompt: string, maxTokens: number, options?: {
|
|
125
|
-
temperature?: number;
|
|
126
|
-
useSpecDec?: boolean;
|
|
127
|
-
}): Promise<{
|
|
128
|
-
text: string;
|
|
129
|
-
result: SpeculativeResult;
|
|
130
|
-
}>;
|
|
131
|
-
}
|
|
132
|
-
export declare function createSpeculativeDecoding(config?: Partial<SpeculativeConfig>): SpeculativeDecoding;
|
|
133
|
-
//# sourceMappingURL=speculativeDecoding.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"speculativeDecoding.d.ts","sourceRoot":"","sources":["../../src/inference/speculativeDecoding.ts"],"names":[],"mappings":"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"}
|