adaptive-memory-multi-model-router 2.14.59 → 2.15.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 (140) hide show
  1. package/.github/ISSUE_TEMPLATE/checklist.md +35 -0
  2. package/.github/workflows/ci.yml +9 -6
  3. package/POPULARITY_BOOSTERS.md +18 -0
  4. package/PR_STATUS_REPORT.md +55 -148
  5. package/README.md +222 -1035
  6. package/assets/chart-accuracy-by-tier.svg +63 -0
  7. package/assets/chart-confusion-matrix.svg +98 -0
  8. package/assets/chart-cost-comparison.svg +66 -0
  9. package/assets/chart-latency-overhead.svg +102 -0
  10. package/assets/chart-routerena-leaderboard.svg +76 -0
  11. package/dist/analytics/costAnalytics.d.ts +1 -0
  12. package/dist/benchmark/comprehensive.d.ts +4 -53
  13. package/dist/benchmark/comprehensive.d.ts.map +1 -0
  14. package/dist/benchmark/comprehensive.js +112 -214
  15. package/dist/benchmark/comprehensive.js.map +1 -1
  16. package/dist/benchmark/reproducible.d.ts +1 -0
  17. package/dist/cache/semanticCache.d.ts +1 -0
  18. package/dist/cli/setupWizard.d.ts +6 -1
  19. package/dist/cli/setupWizard.d.ts.map +1 -1
  20. package/dist/cli/setupWizard.js +6 -9
  21. package/dist/cli/setupWizard.js.map +1 -1
  22. package/dist/cost/budgetEnforcer.d.ts +1 -0
  23. package/dist/cost/costTracker.d.ts +1 -0
  24. package/dist/ensemble/multiRoundDialog.d.ts +1 -0
  25. package/dist/ensemble/multiRoundDialog.d.ts.map +1 -0
  26. package/dist/ensemble/shapleyValue.d.ts +1 -0
  27. package/dist/ensemble/shapleyValue.d.ts.map +1 -0
  28. package/dist/ensemble.d.ts +1 -0
  29. package/dist/index.d.ts +1 -0
  30. package/dist/integrations/langchainAdapter.d.ts +1 -0
  31. package/dist/integrations/oauth.d.ts +1 -0
  32. package/dist/integrations/scienceAdapter.d.ts +1 -0
  33. package/dist/integrations/scienceAdapter.d.ts.map +1 -0
  34. package/dist/memory/autoFetch.d.ts +1 -0
  35. package/dist/memory/hybridMemory.d.ts +1 -0
  36. package/dist/memory/hybridMemory.d.ts.map +1 -0
  37. package/dist/memory/memoryTree.d.ts +1 -0
  38. package/dist/memory/memoryTree.d.ts.map +1 -1
  39. package/dist/memory/obsidianVault.d.ts +1 -0
  40. package/dist/memory/obsidianVault.d.ts.map +1 -1
  41. package/dist/memory/reasoningBank.d.ts +1 -0
  42. package/dist/memory/reasoningBank.d.ts.map +1 -0
  43. package/dist/observability/changeWatch.d.ts +1 -0
  44. package/dist/observability/fatigueDetector.d.ts +1 -0
  45. package/dist/observability/index.d.ts +1 -0
  46. package/dist/observability/metrics.d.ts +1 -0
  47. package/dist/observability/metrics.d.ts.map +1 -1
  48. package/dist/observability/middleware.d.ts +1 -0
  49. package/dist/observability/tracer.d.ts +1 -0
  50. package/dist/observability/tracer.d.ts.map +1 -1
  51. package/dist/observability/types.d.ts +1 -0
  52. package/dist/providers/providerConfig.d.ts +1 -0
  53. package/dist/providers/providerConfig.d.ts.map +1 -1
  54. package/dist/routing/advancedRouter.d.ts +2 -1
  55. package/dist/routing/advancedRouter.d.ts.map +1 -1
  56. package/dist/routing/crossModelValidation.d.ts +1 -0
  57. package/dist/routing/providerHealth.d.ts +1 -0
  58. package/dist/routing/providerHealth.d.ts.map +1 -1
  59. package/dist/routing/providerRetry.d.ts +1 -0
  60. package/dist/sdk.d.ts +1 -0
  61. package/dist/security/guardrails.d.ts +1 -0
  62. package/dist/security/guardrails.d.ts.map +1 -1
  63. package/dist/server/dashboard.d.ts +1 -0
  64. package/dist/server/handlers/chatHandler.d.ts +11 -0
  65. package/dist/server/handlers/chatHandler.d.ts.map +1 -0
  66. package/dist/server/handlers/chatHandler.js +159 -0
  67. package/dist/server/handlers/chatHandler.js.map +1 -0
  68. package/dist/server/handlers/completionsHandler.d.ts +10 -0
  69. package/dist/server/handlers/completionsHandler.d.ts.map +1 -0
  70. package/dist/server/handlers/completionsHandler.js +124 -0
  71. package/dist/server/handlers/completionsHandler.js.map +1 -0
  72. package/dist/server/handlers/embeddingsHandler.d.ts +17 -0
  73. package/dist/server/handlers/embeddingsHandler.d.ts.map +1 -0
  74. package/dist/server/handlers/embeddingsHandler.js +235 -0
  75. package/dist/server/handlers/embeddingsHandler.js.map +1 -0
  76. package/dist/server/handlers/healthHandler.d.ts +10 -0
  77. package/dist/server/handlers/healthHandler.d.ts.map +1 -0
  78. package/dist/server/handlers/healthHandler.js +49 -0
  79. package/dist/server/handlers/healthHandler.js.map +1 -0
  80. package/dist/server/handlers/metricsHandler.d.ts +11 -0
  81. package/dist/server/handlers/metricsHandler.d.ts.map +1 -0
  82. package/dist/server/handlers/metricsHandler.js +24 -0
  83. package/dist/server/handlers/metricsHandler.js.map +1 -0
  84. package/dist/server/handlers/modelsHandler.d.ts +10 -0
  85. package/dist/server/handlers/modelsHandler.d.ts.map +1 -0
  86. package/dist/server/handlers/modelsHandler.js +19 -0
  87. package/dist/server/handlers/modelsHandler.js.map +1 -0
  88. package/dist/server/metrics.d.ts +96 -0
  89. package/dist/server/metrics.d.ts.map +1 -0
  90. package/dist/server/metrics.js +267 -0
  91. package/dist/server/metrics.js.map +1 -0
  92. package/dist/server/modelMapper.d.ts +1 -0
  93. package/dist/server/proxyServer.d.ts +53 -17
  94. package/dist/server/proxyServer.d.ts.map +1 -1
  95. package/dist/server/proxyServer.js +66 -303
  96. package/dist/server/proxyServer.js.map +1 -1
  97. package/dist/server/router.d.ts +49 -0
  98. package/dist/server/router.d.ts.map +1 -0
  99. package/dist/server/router.js +120 -0
  100. package/dist/server/router.js.map +1 -0
  101. package/dist/server/state.d.ts +30 -0
  102. package/dist/server/state.d.ts.map +1 -0
  103. package/dist/server/state.js +18 -0
  104. package/dist/server/state.js.map +1 -0
  105. package/dist/skills/__tests__/skill_manager.test.d.ts +3 -0
  106. package/dist/skills/__tests__/skill_manager.test.d.ts.map +1 -1
  107. package/dist/skills/__tests__/skill_manager.test.js +3 -6
  108. package/dist/skills/__tests__/skill_manager.test.js.map +1 -1
  109. package/dist/tui/dashboard.d.ts +1 -0
  110. package/dist/tui/index.d.ts +1 -0
  111. package/dist/utils/costUtils.d.ts +1 -0
  112. package/dist/utils/reliability.js +4 -18
  113. package/dist/utils/sorting.d.ts +1 -0
  114. package/dist/utils/tokenUtils.d.ts +1 -0
  115. package/docs/assets/chart-accuracy-by-tier.svg +63 -0
  116. package/docs/assets/chart-confusion-matrix.svg +98 -0
  117. package/docs/assets/chart-cost-comparison.svg +66 -0
  118. package/docs/assets/chart-latency-overhead.svg +102 -0
  119. package/docs/assets/chart-routerena-leaderboard.svg +76 -0
  120. package/docs/index.html +72 -80
  121. package/docs/llms-full.txt +156 -184
  122. package/docs/llms.txt +77 -42
  123. package/llms-full.txt +156 -184
  124. package/llms.txt +77 -42
  125. package/mcp-server/package.json +6 -0
  126. package/mcp-server/tsconfig.json +3 -2
  127. package/package.json +4 -3
  128. package/scripts/postinstall-nudge.js +3 -0
  129. package/src/server/handlers/chatHandler.ts +173 -0
  130. package/src/server/handlers/completionsHandler.ts +120 -0
  131. package/src/server/handlers/embeddingsHandler.ts +271 -0
  132. package/src/server/handlers/healthHandler.ts +57 -0
  133. package/src/server/handlers/metricsHandler.ts +30 -0
  134. package/src/server/handlers/modelsHandler.ts +25 -0
  135. package/src/server/metrics.ts +303 -0
  136. package/src/server/proxyServer.ts +71 -394
  137. package/src/server/router.ts +157 -0
  138. package/src/server/state.ts +34 -0
  139. package/src/skills/__tests__/skill_manager.test.ts +3 -3
  140. package/index.html +0 -667
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/server/metrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AA6FD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EAAE,KAAK,SAAI,GAAG,IAAI,CAInG;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CASjG;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAI1F;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAEvD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAI1C;AAMD;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CA8ClD;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,IAAI,CAoBP;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAE7E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,CAE7E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAErD;;;;;;;;;;;;;AAED,wBAWE"}
@@ -0,0 +1,267 @@
1
+ "use strict";
2
+ /**
3
+ * A3M Router - Prometheus Metrics
4
+ *
5
+ * Lightweight metrics collector for observability.
6
+ * Exports Prometheus-compatible /metrics endpoint.
7
+ *
8
+ * Metrics:
9
+ * a3m_requests_total{endpoint, provider, status} — Counter
10
+ * a3m_request_duration_ms{endpoint, provider} — Histogram
11
+ * a3m_cost_usd_total{provider} — Counter
12
+ * a3m_tokens_total{provider, type} — Counter
13
+ * a3m_cache_hits_total{cache_type} — Counter
14
+ * a3m_fallback_triggered_total{provider} — Counter
15
+ * a3m_provider_errors_total{provider, error_type} — Counter
16
+ * a3m_routing_decisions_total{model} — Counter
17
+ * a3m_active_requests — Gauge
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.incrementCounter = incrementCounter;
21
+ exports.recordHistogram = recordHistogram;
22
+ exports.setGauge = setGauge;
23
+ exports.recordActiveRequest = recordActiveRequest;
24
+ exports.getActiveRequests = getActiveRequests;
25
+ exports.generatePrometheusMetrics = generatePrometheusMetrics;
26
+ exports.recordRequest = recordRequest;
27
+ exports.recordProviderError = recordProviderError;
28
+ exports.recordCacheHit = recordCacheHit;
29
+ exports.recordFallback = recordFallback;
30
+ // ============================================================
31
+ // METRICS STORE
32
+ // ============================================================
33
+ // Counters: { name: { labels: value } }
34
+ const counters = new Map();
35
+ // Histograms: { name: { labels: { values[], count, sum, buckets[] } } }
36
+ const histograms = new Map();
37
+ // Gauges: { name: { labels: value } }
38
+ const gauges = new Map();
39
+ // Metric definitions
40
+ const METRIC_DEFINITIONS = {
41
+ a3m_requests_total: { type: 'counter', help: 'Total requests' },
42
+ a3m_request_duration_ms: {
43
+ type: 'histogram',
44
+ help: 'Request duration in milliseconds',
45
+ buckets: [5, 10, 25, 50, 100, 250, 500, 1000, 2500, 5000, 10000],
46
+ },
47
+ a3m_cost_usd_total: { type: 'counter', help: 'Total cost in USD' },
48
+ a3m_tokens_total: { type: 'counter', help: 'Total tokens' },
49
+ a3m_cache_hits_total: { type: 'counter', help: 'Cache hits' },
50
+ a3m_fallback_triggered_total: { type: 'counter', help: 'Fallback triggered count' },
51
+ a3m_provider_errors_total: { type: 'counter', help: 'Provider errors' },
52
+ a3m_routing_decisions_total: { type: 'counter', help: 'Routing decisions' },
53
+ a3m_active_requests: { type: 'gauge', help: 'Active requests' },
54
+ };
55
+ const LABEL_NAMES = {
56
+ a3m_requests_total: ['endpoint', 'provider', 'status'],
57
+ a3m_request_duration_ms: ['endpoint', 'provider'],
58
+ a3m_cost_usd_total: ['provider'],
59
+ a3m_tokens_total: ['provider', 'type'],
60
+ a3m_cache_hits_total: ['cache_type'],
61
+ a3m_fallback_triggered_total: ['provider'],
62
+ a3m_provider_errors_total: ['provider', 'error_type'],
63
+ a3m_routing_decisions_total: ['model'],
64
+ a3m_active_requests: [],
65
+ };
66
+ // ============================================================
67
+ // HELPERS
68
+ // ============================================================
69
+ function labelsToKey(labels) {
70
+ return Object.keys(labels)
71
+ .sort()
72
+ .map((k) => `${k}="${labels[k]}"`)
73
+ .join(',');
74
+ }
75
+ function getOrInitCounter(name, labels) {
76
+ if (!counters.has(name))
77
+ counters.set(name, new Map());
78
+ const counterMap = counters.get(name);
79
+ const key = labelsToKey(labels);
80
+ if (!counterMap.has(key))
81
+ counterMap.set(key, 0);
82
+ return counterMap;
83
+ }
84
+ function getOrInitHistogram(name, labels) {
85
+ if (!histograms.has(name))
86
+ histograms.set(name, new Map());
87
+ const histMap = histograms.get(name);
88
+ const key = labelsToKey(labels);
89
+ if (!histMap.has(key)) {
90
+ const def = METRIC_DEFINITIONS[name];
91
+ if (def.type !== 'histogram') {
92
+ throw new Error(`Metric ${name} is not a histogram`);
93
+ }
94
+ const histDef = def;
95
+ histMap.set(key, {
96
+ values: [],
97
+ count: 0,
98
+ sum: 0,
99
+ buckets: histDef.buckets.map((b) => ({ bound: b, count: 0 })),
100
+ });
101
+ }
102
+ return histMap.get(key);
103
+ }
104
+ function getOrInitGauge(name, labels) {
105
+ if (!gauges.has(name))
106
+ gauges.set(name, new Map());
107
+ const gaugeMap = gauges.get(name);
108
+ const key = labelsToKey(labels);
109
+ if (!gaugeMap.has(key))
110
+ gaugeMap.set(key, 0);
111
+ return gaugeMap;
112
+ }
113
+ // ============================================================
114
+ // PUBLIC API
115
+ // ============================================================
116
+ /**
117
+ * Increment a counter by delta (default 1).
118
+ */
119
+ function incrementCounter(name, labels = {}, delta = 1) {
120
+ const counterMap = getOrInitCounter(name, labels);
121
+ const key = labelsToKey(labels);
122
+ counterMap.set(key, counterMap.get(key) + delta);
123
+ }
124
+ /**
125
+ * Record a histogram value (duration, size, etc.).
126
+ */
127
+ function recordHistogram(name, labels, value) {
128
+ const hist = getOrInitHistogram(name, labels);
129
+ hist.values.push(value);
130
+ hist.count++;
131
+ hist.sum += value;
132
+ // Update bucket counts
133
+ for (const bucket of hist.buckets) {
134
+ if (value <= bucket.bound)
135
+ bucket.count++;
136
+ }
137
+ }
138
+ /**
139
+ * Set a gauge value.
140
+ */
141
+ function setGauge(name, labels, value) {
142
+ const gaugeMap = getOrInitGauge(name, labels);
143
+ const key = labelsToKey(labels);
144
+ gaugeMap.set(key, value);
145
+ }
146
+ /**
147
+ * Increment active requests gauge (call on start, decrement on end).
148
+ */
149
+ function recordActiveRequest(delta) {
150
+ setGauge('a3m_active_requests', {}, Math.max(0, getActiveRequests() + delta));
151
+ }
152
+ /**
153
+ * Get current active request count.
154
+ */
155
+ function getActiveRequests() {
156
+ const gaugeMap = gauges.get('a3m_active_requests');
157
+ if (!gaugeMap || gaugeMap.size === 0)
158
+ return 0;
159
+ return Array.from(gaugeMap.values())[0] || 0;
160
+ }
161
+ // ============================================================
162
+ // PROMETHEUS EXPORT FORMAT
163
+ // ============================================================
164
+ /**
165
+ * Generate Prometheus /metrics output.
166
+ */
167
+ function generatePrometheusMetrics() {
168
+ const lines = [];
169
+ // Helper to get metric help/type
170
+ function metricHeader(name) {
171
+ const def = METRIC_DEFINITIONS[name];
172
+ if (!def)
173
+ return '';
174
+ return `# HELP ${name} ${def.help}\n# TYPE ${name} ${def.type}`;
175
+ }
176
+ // Counters
177
+ for (const [name, counterMap] of counters) {
178
+ lines.push(metricHeader(name));
179
+ for (const [labelKey, value] of counterMap) {
180
+ lines.push(`${name}{${labelKey}} ${value}`);
181
+ }
182
+ lines.push('');
183
+ }
184
+ // Histograms
185
+ for (const [name, histMap] of histograms) {
186
+ lines.push(metricHeader(name));
187
+ for (const [labelKey, hist] of histMap) {
188
+ // Per-bucket cumulative counts
189
+ for (const bucket of hist.buckets) {
190
+ lines.push(`${name}_bucket{${labelKey},le="${bucket.bound}"} ${bucket.count}`);
191
+ }
192
+ // +Inf bucket = total count
193
+ lines.push(`${name}_bucket{${labelKey},le="+Inf"} ${hist.count}`);
194
+ // Summary
195
+ lines.push(`${name}_sum{${labelKey}} ${hist.sum}`);
196
+ lines.push(`${name}_count{${labelKey}} ${hist.count}`);
197
+ }
198
+ lines.push('');
199
+ }
200
+ // Gauges
201
+ for (const [name, gaugeMap] of gauges) {
202
+ lines.push(metricHeader(name));
203
+ for (const [labelKey, value] of gaugeMap) {
204
+ lines.push(`${name}{${labelKey}} ${value}`);
205
+ }
206
+ lines.push('');
207
+ }
208
+ return lines.join('\n');
209
+ }
210
+ // ============================================================
211
+ // SPECIALIZED RECORDERS (convenience wrappers)
212
+ // ============================================================
213
+ /**
214
+ * Record a completed request with all metrics.
215
+ */
216
+ function recordRequest(params) {
217
+ incrementCounter('a3m_requests_total', {
218
+ endpoint: params.endpoint,
219
+ provider: params.provider,
220
+ status: params.status,
221
+ });
222
+ recordHistogram('a3m_request_duration_ms', {
223
+ endpoint: params.endpoint,
224
+ provider: params.provider,
225
+ }, params.durationMs);
226
+ if (params.tokensIn !== undefined && params.tokensOut !== undefined) {
227
+ incrementCounter('a3m_tokens_total', { provider: params.provider, type: 'input' }, params.tokensIn);
228
+ incrementCounter('a3m_tokens_total', { provider: params.provider, type: 'output' }, params.tokensOut);
229
+ }
230
+ if (params.cost !== undefined && params.cost > 0) {
231
+ incrementCounter('a3m_cost_usd_total', { provider: params.provider }, Math.round(params.cost * 1e6) / 1e6);
232
+ }
233
+ if (params.model) {
234
+ incrementCounter('a3m_routing_decisions_total', { model: params.model });
235
+ }
236
+ }
237
+ /**
238
+ * Record a provider error.
239
+ */
240
+ function recordProviderError(provider, errorType) {
241
+ incrementCounter('a3m_provider_errors_total', { provider, error_type: errorType });
242
+ }
243
+ /**
244
+ * Record a cache hit.
245
+ */
246
+ function recordCacheHit(cacheType) {
247
+ incrementCounter('a3m_cache_hits_total', { cache_type: cacheType });
248
+ }
249
+ /**
250
+ * Record a fallback trigger.
251
+ */
252
+ function recordFallback(provider) {
253
+ incrementCounter('a3m_fallback_triggered_total', { provider });
254
+ }
255
+ exports.default = {
256
+ incrementCounter,
257
+ recordHistogram,
258
+ setGauge,
259
+ recordActiveRequest,
260
+ getActiveRequests,
261
+ generatePrometheusMetrics,
262
+ recordRequest,
263
+ recordProviderError,
264
+ recordCacheHit,
265
+ recordFallback,
266
+ };
267
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/server/metrics.ts"],"names":[],"mappings":"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"}
@@ -41,3 +41,4 @@ export declare function listAvailableModels(): Array<{
41
41
  created: number;
42
42
  owned_by: string;
43
43
  }>;
44
+ //# sourceMappingURL=modelMapper.d.ts.map
@@ -13,29 +13,65 @@
13
13
  * Build: npx tsc
14
14
  * Run: npx a3m-router serve [--port 8787]
15
15
  */
16
- import * as http from "http";
17
- import { CostTracker } from "../cost/costTracker";
18
- interface RequestLog {
19
- id: string;
16
+ import * as http from 'http';
17
+ import { ModelMapping } from './modelMapper';
18
+ interface ChatMessage {
19
+ role: "system" | "user" | "assistant" | "tool";
20
+ content: string;
21
+ }
22
+ interface ProviderCallResult {
23
+ content: string;
20
24
  model: string;
21
- resolvedProvider: string;
22
- resolvedModel: string;
23
- latencyMs: number;
24
- tokensIn: number;
25
- tokensOut: number;
26
- cost: number;
27
- status: "success" | "error";
28
- error?: string;
29
- timestamp: number;
25
+ usage: {
26
+ prompt_tokens: number;
27
+ completion_tokens: number;
28
+ total_tokens: number;
29
+ };
30
+ finish_reason: string;
30
31
  }
31
- declare const requestLogs: RequestLog[];
32
- declare const costTracker: CostTracker;
33
32
  /**
34
- * Create and start the proxy server.
33
+ * Call the actual LLM provider with the given messages.
34
+ * Handles OpenAI-compatible APIs, Anthropic, Google, and local providers.
35
+ */
36
+ export declare function callProvider(mapping: ModelMapping, messages: ChatMessage[], options: {
37
+ temperature?: number;
38
+ max_tokens?: number;
39
+ stream?: boolean;
40
+ stop?: string | string[];
41
+ }): Promise<ProviderCallResult>;
42
+ /**
43
+ * Stream a provider response as SSE chunks.
44
+ */
45
+ export declare function streamProviderResponse(res: http.ServerResponse, mapping: ModelMapping, messages: ChatMessage[], options: {
46
+ temperature?: number;
47
+ max_tokens?: number;
48
+ stop?: string | string[];
49
+ }, requestId: string): Promise<void>;
50
+ /**
51
+ * Try the primary mapping, then fall back to alternatives.
52
+ */
53
+ export declare function callWithFallback(model: string, messages: ChatMessage[], options: {
54
+ temperature?: number;
55
+ max_tokens?: number;
56
+ stream?: boolean;
57
+ stop?: string | string[];
58
+ }, prompt: string): Promise<{
59
+ result: ProviderCallResult;
60
+ mapping: ModelMapping;
61
+ }>;
62
+ /**
63
+ * Create and start the A3M Router proxy server.
64
+ *
65
+ * Uses a route table pattern (router.ts) for pluggable endpoint registration.
66
+ * To add a new endpoint:
67
+ * 1. Create src/server/handlers/yourHandler.ts
68
+ * 2. Import and register: registerRoute('GET', /^\/path$/, handleYourPath);
35
69
  *
36
70
  * @param port - Port to listen on (default: 8787, env: PORT)
37
71
  * @returns The http.Server instance
38
72
  */
39
73
  export declare function createProxyServer(port?: number): http.Server;
40
- export { CostTracker, costTracker, requestLogs };
74
+ export { costTracker, requestLogs } from './state';
75
+ export type { RequestLog } from './state';
41
76
  export default createProxyServer;
77
+ //# sourceMappingURL=proxyServer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"proxyServer.d.ts","sourceRoot":"","sources":["../../src/server/proxyServer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAmClD,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAmnBD,QAAA,MAAM,WAAW,EAAE,UAAU,EAAO,CAAC;AACrC,QAAA,MAAM,WAAW,aAAoB,CAAC;AA0StC;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAmG5D;AAMD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AACjD,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"proxyServer.d.ts","sourceRoot":"","sources":["../../src/server/proxyServer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAqC,YAAY,EAAE,MAAM,eAAe,CAAC;AAehF,UAAU,WAAW;IACnB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;CACjB;AAmFD,UAAU,kBAAkB;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAClF,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAAE,GACjG,OAAO,CAAC,kBAAkB,CAAC,CAqB7B;AA2OD;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAAE,EAChF,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CA6Pf;AAMD;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAAE,EAClG,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,MAAM,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,CAAC,CAwChE;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CA0E5D;AAMD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACnD,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,eAAe,iBAAiB,CAAC"}