mozart-router 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +250 -0
- package/dist/adapters/cursor.d.ts +10 -0
- package/dist/adapters/cursor.d.ts.map +1 -0
- package/dist/adapters/cursor.js +39 -0
- package/dist/adapters/cursor.js.map +1 -0
- package/dist/adapters/generic.d.ts +24 -0
- package/dist/adapters/generic.d.ts.map +1 -0
- package/dist/adapters/generic.js +192 -0
- package/dist/adapters/generic.js.map +1 -0
- package/dist/adapters/hermes.d.ts +10 -0
- package/dist/adapters/hermes.d.ts.map +1 -0
- package/dist/adapters/hermes.js +170 -0
- package/dist/adapters/hermes.js.map +1 -0
- package/dist/adapters/index.d.ts +13 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +27 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/litellm.d.ts +15 -0
- package/dist/adapters/litellm.d.ts.map +1 -0
- package/dist/adapters/litellm.js +238 -0
- package/dist/adapters/litellm.js.map +1 -0
- package/dist/adapters/lmstudio.d.ts +12 -0
- package/dist/adapters/lmstudio.d.ts.map +1 -0
- package/dist/adapters/lmstudio.js +128 -0
- package/dist/adapters/lmstudio.js.map +1 -0
- package/dist/adapters/nim.d.ts +12 -0
- package/dist/adapters/nim.d.ts.map +1 -0
- package/dist/adapters/nim.js +163 -0
- package/dist/adapters/nim.js.map +1 -0
- package/dist/adapters/ollama.d.ts +12 -0
- package/dist/adapters/ollama.d.ts.map +1 -0
- package/dist/adapters/ollama.js +243 -0
- package/dist/adapters/ollama.js.map +1 -0
- package/dist/adapters/openclaw.d.ts +10 -0
- package/dist/adapters/openclaw.d.ts.map +1 -0
- package/dist/adapters/openclaw.js +197 -0
- package/dist/adapters/openclaw.js.map +1 -0
- package/dist/adapters/opencode.d.ts +10 -0
- package/dist/adapters/opencode.d.ts.map +1 -0
- package/dist/adapters/opencode.js +180 -0
- package/dist/adapters/opencode.js.map +1 -0
- package/dist/adapters/openrouter.d.ts +13 -0
- package/dist/adapters/openrouter.d.ts.map +1 -0
- package/dist/adapters/openrouter.js +173 -0
- package/dist/adapters/openrouter.js.map +1 -0
- package/dist/adapters/vllm.d.ts +12 -0
- package/dist/adapters/vllm.d.ts.map +1 -0
- package/dist/adapters/vllm.js +129 -0
- package/dist/adapters/vllm.js.map +1 -0
- package/dist/api/dashboard.d.ts +3 -0
- package/dist/api/dashboard.d.ts.map +1 -0
- package/dist/api/dashboard.js +98 -0
- package/dist/api/dashboard.js.map +1 -0
- package/dist/api/mcp.d.ts +32 -0
- package/dist/api/mcp.d.ts.map +1 -0
- package/dist/api/mcp.js +215 -0
- package/dist/api/mcp.js.map +1 -0
- package/dist/api/middleware.d.ts +20 -0
- package/dist/api/middleware.d.ts.map +1 -0
- package/dist/api/middleware.js +239 -0
- package/dist/api/middleware.js.map +1 -0
- package/dist/api/server.d.ts +26 -0
- package/dist/api/server.d.ts.map +1 -0
- package/dist/api/server.js +294 -0
- package/dist/api/server.js.map +1 -0
- package/dist/api/streaming.d.ts +19 -0
- package/dist/api/streaming.d.ts.map +1 -0
- package/dist/api/streaming.js +274 -0
- package/dist/api/streaming.js.map +1 -0
- package/dist/cli/config-init.d.ts +2 -0
- package/dist/cli/config-init.d.ts.map +1 -0
- package/dist/cli/config-init.js +73 -0
- package/dist/cli/config-init.js.map +1 -0
- package/dist/cli/main.d.ts +3 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +618 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/context/advanced-optimizer.d.ts +12 -0
- package/dist/context/advanced-optimizer.d.ts.map +1 -0
- package/dist/context/advanced-optimizer.js +64 -0
- package/dist/context/advanced-optimizer.js.map +1 -0
- package/dist/context/optimizer.d.ts +7 -0
- package/dist/context/optimizer.d.ts.map +1 -0
- package/dist/context/optimizer.js +101 -0
- package/dist/context/optimizer.js.map +1 -0
- package/dist/core/cache.d.ts +39 -0
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/cache.js +90 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/health.d.ts +32 -0
- package/dist/core/health.d.ts.map +1 -0
- package/dist/core/health.js +92 -0
- package/dist/core/health.js.map +1 -0
- package/dist/core/inventory.d.ts +28 -0
- package/dist/core/inventory.d.ts.map +1 -0
- package/dist/core/inventory.js +106 -0
- package/dist/core/inventory.js.map +1 -0
- package/dist/core/metrics.d.ts +48 -0
- package/dist/core/metrics.d.ts.map +1 -0
- package/dist/core/metrics.js +115 -0
- package/dist/core/metrics.js.map +1 -0
- package/dist/core/mozart.d.ts +39 -0
- package/dist/core/mozart.d.ts.map +1 -0
- package/dist/core/mozart.js +156 -0
- package/dist/core/mozart.js.map +1 -0
- package/dist/core/persistence.d.ts +13 -0
- package/dist/core/persistence.d.ts.map +1 -0
- package/dist/core/persistence.js +119 -0
- package/dist/core/persistence.js.map +1 -0
- package/dist/core/plugins.d.ts +18 -0
- package/dist/core/plugins.d.ts.map +1 -0
- package/dist/core/plugins.js +110 -0
- package/dist/core/plugins.js.map +1 -0
- package/dist/core/reliability.d.ts +23 -0
- package/dist/core/reliability.d.ts.map +1 -0
- package/dist/core/reliability.js +70 -0
- package/dist/core/reliability.js.map +1 -0
- package/dist/core/session.d.ts +17 -0
- package/dist/core/session.d.ts.map +1 -0
- package/dist/core/session.js +67 -0
- package/dist/core/session.js.map +1 -0
- package/dist/cost/dynamic-pricing.d.ts +24 -0
- package/dist/cost/dynamic-pricing.d.ts.map +1 -0
- package/dist/cost/dynamic-pricing.js +71 -0
- package/dist/cost/dynamic-pricing.js.map +1 -0
- package/dist/cost/estimator.d.ts +8 -0
- package/dist/cost/estimator.d.ts.map +1 -0
- package/dist/cost/estimator.js +48 -0
- package/dist/cost/estimator.js.map +1 -0
- package/dist/explain/engine.d.ts +6 -0
- package/dist/explain/engine.d.ts.map +1 -0
- package/dist/explain/engine.js +59 -0
- package/dist/explain/engine.js.map +1 -0
- package/dist/index.d.ts +59 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +112 -0
- package/dist/index.js.map +1 -0
- package/dist/logs/logger.d.ts +35 -0
- package/dist/logs/logger.d.ts.map +1 -0
- package/dist/logs/logger.js +73 -0
- package/dist/logs/logger.js.map +1 -0
- package/dist/logs/redactor.d.ts +6 -0
- package/dist/logs/redactor.d.ts.map +1 -0
- package/dist/logs/redactor.js +54 -0
- package/dist/logs/redactor.js.map +1 -0
- package/dist/policy/engine.d.ts +9 -0
- package/dist/policy/engine.d.ts.map +1 -0
- package/dist/policy/engine.js +55 -0
- package/dist/policy/engine.js.map +1 -0
- package/dist/policy/loader.d.ts +3 -0
- package/dist/policy/loader.d.ts.map +1 -0
- package/dist/policy/loader.js +27 -0
- package/dist/policy/loader.js.map +1 -0
- package/dist/policy/profiles.d.ts +11 -0
- package/dist/policy/profiles.d.ts.map +1 -0
- package/dist/policy/profiles.js +263 -0
- package/dist/policy/profiles.js.map +1 -0
- package/dist/policy/yaml-loader.d.ts +10 -0
- package/dist/policy/yaml-loader.d.ts.map +1 -0
- package/dist/policy/yaml-loader.js +160 -0
- package/dist/policy/yaml-loader.js.map +1 -0
- package/dist/privacy/guard.d.ts +8 -0
- package/dist/privacy/guard.d.ts.map +1 -0
- package/dist/privacy/guard.js +125 -0
- package/dist/privacy/guard.js.map +1 -0
- package/dist/routing/circuit-breaker.d.ts +23 -0
- package/dist/routing/circuit-breaker.d.ts.map +1 -0
- package/dist/routing/circuit-breaker.js +74 -0
- package/dist/routing/circuit-breaker.js.map +1 -0
- package/dist/routing/classifier.d.ts +5 -0
- package/dist/routing/classifier.d.ts.map +1 -0
- package/dist/routing/classifier.js +102 -0
- package/dist/routing/classifier.js.map +1 -0
- package/dist/routing/fallback.d.ts +27 -0
- package/dist/routing/fallback.d.ts.map +1 -0
- package/dist/routing/fallback.js +66 -0
- package/dist/routing/fallback.js.map +1 -0
- package/dist/routing/multistage.d.ts +49 -0
- package/dist/routing/multistage.d.ts.map +1 -0
- package/dist/routing/multistage.js +108 -0
- package/dist/routing/multistage.js.map +1 -0
- package/dist/routing/router.d.ts +22 -0
- package/dist/routing/router.d.ts.map +1 -0
- package/dist/routing/router.js +123 -0
- package/dist/routing/router.js.map +1 -0
- package/dist/routing/scorer.d.ts +8 -0
- package/dist/routing/scorer.d.ts.map +1 -0
- package/dist/routing/scorer.js +131 -0
- package/dist/routing/scorer.js.map +1 -0
- package/dist/skills/definitions.d.ts +10 -0
- package/dist/skills/definitions.d.ts.map +1 -0
- package/dist/skills/definitions.js +112 -0
- package/dist/skills/definitions.js.map +1 -0
- package/dist/skills/index.d.ts +3 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +14 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/types/index.d.ts +298 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +34 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/canrunit.d.ts +26 -0
- package/dist/utils/canrunit.d.ts.map +1 -0
- package/dist/utils/canrunit.js +69 -0
- package/dist/utils/canrunit.js.map +1 -0
- package/dist/utils/dealsforge.d.ts +6 -0
- package/dist/utils/dealsforge.d.ts.map +1 -0
- package/dist/utils/dealsforge.js +105 -0
- package/dist/utils/dealsforge.js.map +1 -0
- package/docs/ADAPTERS.md +129 -0
- package/docs/ARCHITECTURE.md +113 -0
- package/docs/DELEGATED_EXECUTION.md +62 -0
- package/docs/FEATURE_MATRIX.md +113 -0
- package/docs/GATEWAY_FIRST_PRINCIPLES.md +66 -0
- package/docs/INTEGRATIONS.md +94 -0
- package/docs/LIMITATIONS.md +43 -0
- package/docs/RECOMMEND_ONLY_MODE.md +82 -0
- package/docs/ROADMAP.md +70 -0
- package/docs/SECURITY.md +74 -0
- package/docs/SKILLS_AND_TOOLS.md +141 -0
- package/examples/community-adapter/TEMPLATE.md +157 -0
- package/examples/generic-tools/README.md +29 -0
- package/examples/generic-tools/mozart-tools.json +86 -0
- package/examples/hermes/README.md +29 -0
- package/examples/hermes/mozart-tool.json +48 -0
- package/examples/litellm/README.md +21 -0
- package/examples/litellm/config.yaml +39 -0
- package/examples/ollama/README.md +37 -0
- package/examples/ollama/usage.ts +59 -0
- package/examples/openclaw/README.md +26 -0
- package/examples/openclaw/mozart-skill.yaml +80 -0
- package/examples/opencode/README.md +30 -0
- package/examples/opencode/SKILL.md +47 -0
- package/examples/opencode/mozart-skill.json +64 -0
- package/examples/openrouter/README.md +21 -0
- package/examples/openrouter/config.json +14 -0
- package/package.json +53 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.pluginRegistry = exports.PluginRegistry = void 0;
|
|
4
|
+
class PluginRegistry {
|
|
5
|
+
plugins = new Map();
|
|
6
|
+
register(plugin) {
|
|
7
|
+
this.plugins.set(plugin.name, plugin);
|
|
8
|
+
}
|
|
9
|
+
get(name) {
|
|
10
|
+
return this.plugins.get(name);
|
|
11
|
+
}
|
|
12
|
+
list() {
|
|
13
|
+
return Array.from(this.plugins.values());
|
|
14
|
+
}
|
|
15
|
+
getAllAdapters() {
|
|
16
|
+
const adapters = [];
|
|
17
|
+
for (const plugin of this.plugins.values()) {
|
|
18
|
+
adapters.push(...plugin.adapters);
|
|
19
|
+
}
|
|
20
|
+
return adapters;
|
|
21
|
+
}
|
|
22
|
+
async loadFromDirectory(dirPath) {
|
|
23
|
+
let loaded = 0;
|
|
24
|
+
try {
|
|
25
|
+
const fs = require('fs');
|
|
26
|
+
const path = require('path');
|
|
27
|
+
if (!fs.existsSync(dirPath))
|
|
28
|
+
return 0;
|
|
29
|
+
const entries = fs.readdirSync(dirPath, { withFileTypes: true });
|
|
30
|
+
for (const entry of entries) {
|
|
31
|
+
if (!entry.isDirectory())
|
|
32
|
+
continue;
|
|
33
|
+
const pkgPath = path.join(dirPath, entry.name, 'package.json');
|
|
34
|
+
if (!fs.existsSync(pkgPath))
|
|
35
|
+
continue;
|
|
36
|
+
try {
|
|
37
|
+
const mod = require(path.join(dirPath, entry.name));
|
|
38
|
+
if (mod?.mozartPlugin) {
|
|
39
|
+
const plugin = mod.mozartPlugin;
|
|
40
|
+
this.register(plugin);
|
|
41
|
+
if (plugin.onRegister)
|
|
42
|
+
await plugin.onRegister();
|
|
43
|
+
loaded++;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// skip modules that fail to load
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// directory doesn't exist or can't be read
|
|
53
|
+
}
|
|
54
|
+
return loaded;
|
|
55
|
+
}
|
|
56
|
+
// Scan node_modules for mozart-router-adapter-* packages
|
|
57
|
+
async loadInstalledPlugins() {
|
|
58
|
+
let loaded = 0;
|
|
59
|
+
try {
|
|
60
|
+
const fs = require('fs');
|
|
61
|
+
const path = require('path');
|
|
62
|
+
const searchPaths = [
|
|
63
|
+
path.join(process.cwd(), 'node_modules'),
|
|
64
|
+
];
|
|
65
|
+
// Try to find the global node_modules
|
|
66
|
+
try {
|
|
67
|
+
const { execSync } = require('child_process');
|
|
68
|
+
const globalPath = execSync('npm root -g', { encoding: 'utf-8' }).trim();
|
|
69
|
+
if (globalPath)
|
|
70
|
+
searchPaths.push(globalPath);
|
|
71
|
+
}
|
|
72
|
+
catch { /* ignore */ }
|
|
73
|
+
for (const nodeModulesPath of searchPaths) {
|
|
74
|
+
if (!fs.existsSync(nodeModulesPath))
|
|
75
|
+
continue;
|
|
76
|
+
const entries = fs.readdirSync(nodeModulesPath, { withFileTypes: true });
|
|
77
|
+
for (const entry of entries) {
|
|
78
|
+
if (!entry.isDirectory())
|
|
79
|
+
continue;
|
|
80
|
+
if (!entry.name.startsWith('mozart-router-adapter-'))
|
|
81
|
+
continue;
|
|
82
|
+
const pkgPath = path.join(nodeModulesPath, entry.name, 'package.json');
|
|
83
|
+
if (!fs.existsSync(pkgPath))
|
|
84
|
+
continue;
|
|
85
|
+
try {
|
|
86
|
+
const mod = require(path.join(nodeModulesPath, entry.name));
|
|
87
|
+
if (mod?.mozartPlugin) {
|
|
88
|
+
const plugin = mod.mozartPlugin;
|
|
89
|
+
this.register(plugin);
|
|
90
|
+
if (plugin.onRegister)
|
|
91
|
+
await plugin.onRegister();
|
|
92
|
+
loaded++;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// skip broken plugins
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
// no plugins found
|
|
103
|
+
}
|
|
104
|
+
return loaded;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
exports.PluginRegistry = PluginRegistry;
|
|
108
|
+
// Default plugin registry singleton
|
|
109
|
+
exports.pluginRegistry = new PluginRegistry();
|
|
110
|
+
//# sourceMappingURL=plugins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/core/plugins.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { HealthCheckResult } from './health';
|
|
2
|
+
export interface ProviderReliability {
|
|
3
|
+
providerId: string;
|
|
4
|
+
totalChecks: number;
|
|
5
|
+
successes: number;
|
|
6
|
+
failures: number;
|
|
7
|
+
avgLatencyMs: number;
|
|
8
|
+
lastSuccessAt?: string;
|
|
9
|
+
lastFailureAt?: string;
|
|
10
|
+
uptimePercent: number;
|
|
11
|
+
trustScore: number;
|
|
12
|
+
streak: number;
|
|
13
|
+
}
|
|
14
|
+
export declare class ReliabilityTracker {
|
|
15
|
+
private providers;
|
|
16
|
+
record(healthResult: HealthCheckResult): void;
|
|
17
|
+
private computeTrust;
|
|
18
|
+
get(providerId: string): ProviderReliability | undefined;
|
|
19
|
+
getAll(): ProviderReliability[];
|
|
20
|
+
getTrustiest(count?: number): ProviderReliability[];
|
|
21
|
+
reset(): void;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=reliability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reliability.d.ts","sourceRoot":"","sources":["../../src/core/reliability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAK7C,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,SAAS,CAA+C;IAEhE,MAAM,CAAC,YAAY,EAAE,iBAAiB,GAAG,IAAI;IAyC7C,OAAO,CAAC,YAAY;IAapB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAIxD,MAAM,IAAI,mBAAmB,EAAE;IAM/B,YAAY,CAAC,KAAK,SAAI,GAAG,mBAAmB,EAAE;IAI9C,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ReliabilityTracker = void 0;
|
|
4
|
+
class ReliabilityTracker {
|
|
5
|
+
providers = new Map();
|
|
6
|
+
record(healthResult) {
|
|
7
|
+
const key = healthResult.adapterId;
|
|
8
|
+
let entry = this.providers.get(key);
|
|
9
|
+
if (!entry) {
|
|
10
|
+
entry = {
|
|
11
|
+
providerId: key,
|
|
12
|
+
totalChecks: 0,
|
|
13
|
+
successes: 0,
|
|
14
|
+
failures: 0,
|
|
15
|
+
avgLatencyMs: 0,
|
|
16
|
+
uptimePercent: 100,
|
|
17
|
+
trustScore: 0.7,
|
|
18
|
+
streak: 0,
|
|
19
|
+
};
|
|
20
|
+
this.providers.set(key, entry);
|
|
21
|
+
}
|
|
22
|
+
entry.totalChecks++;
|
|
23
|
+
if (healthResult.status.connected) {
|
|
24
|
+
entry.successes++;
|
|
25
|
+
entry.lastSuccessAt = new Date().toISOString();
|
|
26
|
+
if (healthResult.status.latencyMs) {
|
|
27
|
+
entry.avgLatencyMs =
|
|
28
|
+
(entry.avgLatencyMs * (entry.successes - 1) + healthResult.status.latencyMs) /
|
|
29
|
+
entry.successes;
|
|
30
|
+
}
|
|
31
|
+
if (entry.streak < 0)
|
|
32
|
+
entry.streak = 1;
|
|
33
|
+
else
|
|
34
|
+
entry.streak++;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
entry.failures++;
|
|
38
|
+
entry.lastFailureAt = new Date().toISOString();
|
|
39
|
+
if (entry.streak > 0)
|
|
40
|
+
entry.streak = -1;
|
|
41
|
+
else
|
|
42
|
+
entry.streak--;
|
|
43
|
+
}
|
|
44
|
+
entry.uptimePercent = Math.round((entry.successes / entry.totalChecks) * 100);
|
|
45
|
+
entry.trustScore = this.computeTrust(entry);
|
|
46
|
+
}
|
|
47
|
+
computeTrust(r) {
|
|
48
|
+
const uptimeWeight = (r.uptimePercent / 100) * 0.4;
|
|
49
|
+
const streakWeight = r.streak > 0
|
|
50
|
+
? Math.min(r.streak / 10, 1) * 0.3
|
|
51
|
+
: Math.max(0, 1 + r.streak / 10) * 0.3;
|
|
52
|
+
const recencyWeight = r.lastSuccessAt ? 0.3 : 0;
|
|
53
|
+
const latencyWeight = r.avgLatencyMs > 0 ? Math.max(0, 1 - r.avgLatencyMs / 5000) * 0 : 0; // neutral for now
|
|
54
|
+
return Math.round((uptimeWeight + streakWeight + recencyWeight + latencyWeight) * 1000) / 1000;
|
|
55
|
+
}
|
|
56
|
+
get(providerId) {
|
|
57
|
+
return this.providers.get(providerId);
|
|
58
|
+
}
|
|
59
|
+
getAll() {
|
|
60
|
+
return Array.from(this.providers.values()).sort((a, b) => b.trustScore - a.trustScore);
|
|
61
|
+
}
|
|
62
|
+
getTrustiest(count = 3) {
|
|
63
|
+
return this.getAll().slice(0, count);
|
|
64
|
+
}
|
|
65
|
+
reset() {
|
|
66
|
+
this.providers.clear();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.ReliabilityTracker = ReliabilityTracker;
|
|
70
|
+
//# sourceMappingURL=reliability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reliability.js","sourceRoot":"","sources":["../../src/core/reliability.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { RouteDecision } from '../types';
|
|
2
|
+
export declare class SessionTracker {
|
|
3
|
+
private routes;
|
|
4
|
+
private startTime;
|
|
5
|
+
private premiumCallsAvoided;
|
|
6
|
+
private providerFailuresRecovered;
|
|
7
|
+
private sensitiveFilesKeptLocal;
|
|
8
|
+
constructor();
|
|
9
|
+
recordRoute(route: RouteDecision): void;
|
|
10
|
+
recordPremiumAvoided(): void;
|
|
11
|
+
recordFailureRecovered(): void;
|
|
12
|
+
recordSensitiveFileKeptLocal(): void;
|
|
13
|
+
generateReport(): string;
|
|
14
|
+
explainLast(): string;
|
|
15
|
+
reset(): void;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,yBAAyB,CAAK;IACtC,OAAO,CAAC,uBAAuB,CAAK;;IAMpC,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAIvC,oBAAoB,IAAI,IAAI;IAI5B,sBAAsB,IAAI,IAAI;IAI9B,4BAA4B,IAAI,IAAI;IAIpC,cAAc,IAAI,MAAM;IAiCxB,WAAW,IAAI,MAAM;IAQrB,KAAK,IAAI,IAAI;CAOd"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SessionTracker = void 0;
|
|
4
|
+
class SessionTracker {
|
|
5
|
+
routes = [];
|
|
6
|
+
startTime;
|
|
7
|
+
premiumCallsAvoided = 0;
|
|
8
|
+
providerFailuresRecovered = 0;
|
|
9
|
+
sensitiveFilesKeptLocal = 0;
|
|
10
|
+
constructor() {
|
|
11
|
+
this.startTime = new Date().toISOString();
|
|
12
|
+
}
|
|
13
|
+
recordRoute(route) {
|
|
14
|
+
this.routes.push(route);
|
|
15
|
+
}
|
|
16
|
+
recordPremiumAvoided() {
|
|
17
|
+
this.premiumCallsAvoided++;
|
|
18
|
+
}
|
|
19
|
+
recordFailureRecovered() {
|
|
20
|
+
this.providerFailuresRecovered++;
|
|
21
|
+
}
|
|
22
|
+
recordSensitiveFileKeptLocal() {
|
|
23
|
+
this.sensitiveFilesKeptLocal++;
|
|
24
|
+
}
|
|
25
|
+
generateReport() {
|
|
26
|
+
const totalTokensOptimized = this.routes.reduce((sum, r) => sum + r.estimatedTokens.input, 0);
|
|
27
|
+
let savingsPercent = 0;
|
|
28
|
+
if (this.routes.length > 0) {
|
|
29
|
+
const avgSavings = this.routes.reduce((sum, r) => {
|
|
30
|
+
if (r.fallbacks.length > 0) {
|
|
31
|
+
const premiumCost = r.fallbacks[0]?.estimatedCost ?? r.estimatedCost * 2;
|
|
32
|
+
if (premiumCost > 0) {
|
|
33
|
+
return sum + ((premiumCost - r.estimatedCost) / premiumCost) * 100;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return sum + (r.estimatedCost === 0 ? 100 : 40); // 100% savings for free local, 40% default
|
|
37
|
+
}, 0) / this.routes.length;
|
|
38
|
+
savingsPercent = isNaN(avgSavings) ? 0 : Math.round(avgSavings);
|
|
39
|
+
}
|
|
40
|
+
const lines = [
|
|
41
|
+
`Session report:`,
|
|
42
|
+
` - ${this.routes.length} requests routed`,
|
|
43
|
+
` - ${totalTokensOptimized.toLocaleString()} tokens optimized`,
|
|
44
|
+
` - ${this.premiumCallsAvoided} premium calls avoided`,
|
|
45
|
+
` - estimated savings: ${savingsPercent}%`,
|
|
46
|
+
` - ${this.providerFailuresRecovered} provider failures recovered`,
|
|
47
|
+
` - ${this.sensitiveFilesKeptLocal} sensitive files kept local`,
|
|
48
|
+
];
|
|
49
|
+
return lines.join('\n');
|
|
50
|
+
}
|
|
51
|
+
explainLast() {
|
|
52
|
+
if (this.routes.length === 0) {
|
|
53
|
+
return 'No routing decisions recorded yet.';
|
|
54
|
+
}
|
|
55
|
+
const last = this.routes[this.routes.length - 1];
|
|
56
|
+
return last.explanation.join('\n');
|
|
57
|
+
}
|
|
58
|
+
reset() {
|
|
59
|
+
this.routes = [];
|
|
60
|
+
this.startTime = new Date().toISOString();
|
|
61
|
+
this.premiumCallsAvoided = 0;
|
|
62
|
+
this.providerFailuresRecovered = 0;
|
|
63
|
+
this.sensitiveFilesKeptLocal = 0;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.SessionTracker = SessionTracker;
|
|
67
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Model } from '../types';
|
|
2
|
+
export interface LivePricingResult {
|
|
3
|
+
modelId: string;
|
|
4
|
+
inputPrice?: number;
|
|
5
|
+
outputPrice?: number;
|
|
6
|
+
contextWindow?: number;
|
|
7
|
+
provider: string;
|
|
8
|
+
source: 'openrouter' | 'manual';
|
|
9
|
+
lastUpdated: string;
|
|
10
|
+
}
|
|
11
|
+
export declare class DynamicPricing {
|
|
12
|
+
private cache;
|
|
13
|
+
private lastFetch;
|
|
14
|
+
private cacheTtlMs;
|
|
15
|
+
constructor(options?: {
|
|
16
|
+
cacheTtlMs?: number;
|
|
17
|
+
});
|
|
18
|
+
fetchOpenRouter(): Promise<LivePricingResult[]>;
|
|
19
|
+
enrichModels(models: Model[], pricingData: LivePricingResult[]): Model[];
|
|
20
|
+
getPrice(modelId: string): LivePricingResult | undefined;
|
|
21
|
+
getAllPrices(): LivePricingResult[];
|
|
22
|
+
clearCache(): void;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=dynamic-pricing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamic-pricing.d.ts","sourceRoot":"","sources":["../../src/cost/dynamic-pricing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAKjC,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,YAAY,GAAG,QAAQ,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAA6C;IAC1D,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAIvC,eAAe,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IA+CrD,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,KAAK,EAAE;IAgBxE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIxD,YAAY,IAAI,iBAAiB,EAAE;IAInC,UAAU,IAAI,IAAI;CAInB"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DynamicPricing = void 0;
|
|
4
|
+
class DynamicPricing {
|
|
5
|
+
cache = new Map();
|
|
6
|
+
lastFetch = 0;
|
|
7
|
+
cacheTtlMs;
|
|
8
|
+
constructor(options) {
|
|
9
|
+
this.cacheTtlMs = options?.cacheTtlMs ?? 3600000; // 1 hour
|
|
10
|
+
}
|
|
11
|
+
async fetchOpenRouter() {
|
|
12
|
+
if (Date.now() - this.lastFetch < this.cacheTtlMs && this.cache.size > 0) {
|
|
13
|
+
return Array.from(this.cache.values());
|
|
14
|
+
}
|
|
15
|
+
try {
|
|
16
|
+
const response = await fetch('https://openrouter.ai/api/v1/models', {
|
|
17
|
+
signal: AbortSignal.timeout(10000),
|
|
18
|
+
});
|
|
19
|
+
if (!response.ok)
|
|
20
|
+
return [];
|
|
21
|
+
const data = await response.json();
|
|
22
|
+
const results = [];
|
|
23
|
+
for (const model of data.data ?? []) {
|
|
24
|
+
const inputPrice = model.pricing?.prompt ? parseFloat(model.pricing.prompt) * 1000 : undefined; // per 1K tokens
|
|
25
|
+
const outputPrice = model.pricing?.completion ? parseFloat(model.pricing.completion) * 1000 : undefined;
|
|
26
|
+
const result = {
|
|
27
|
+
modelId: model.id,
|
|
28
|
+
inputPrice,
|
|
29
|
+
outputPrice,
|
|
30
|
+
contextWindow: model.context_length,
|
|
31
|
+
provider: model.id.split('/')[0] ?? 'unknown',
|
|
32
|
+
source: 'openrouter',
|
|
33
|
+
lastUpdated: new Date().toISOString(),
|
|
34
|
+
};
|
|
35
|
+
this.cache.set(model.id, result);
|
|
36
|
+
results.push(result);
|
|
37
|
+
}
|
|
38
|
+
this.lastFetch = Date.now();
|
|
39
|
+
return results;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return Array.from(this.cache.values());
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
enrichModels(models, pricingData) {
|
|
46
|
+
const pricingMap = new Map(pricingData.map((p) => [p.modelId, p]));
|
|
47
|
+
return models.map((model) => {
|
|
48
|
+
const livePrice = pricingMap.get(model.id);
|
|
49
|
+
if (!livePrice)
|
|
50
|
+
return model;
|
|
51
|
+
return {
|
|
52
|
+
...model,
|
|
53
|
+
inputPrice: livePrice.inputPrice ?? model.inputPrice,
|
|
54
|
+
outputPrice: livePrice.outputPrice ?? model.outputPrice,
|
|
55
|
+
contextWindow: livePrice.contextWindow ?? model.contextWindow,
|
|
56
|
+
};
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
getPrice(modelId) {
|
|
60
|
+
return this.cache.get(modelId);
|
|
61
|
+
}
|
|
62
|
+
getAllPrices() {
|
|
63
|
+
return Array.from(this.cache.values());
|
|
64
|
+
}
|
|
65
|
+
clearCache() {
|
|
66
|
+
this.cache.clear();
|
|
67
|
+
this.lastFetch = 0;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.DynamicPricing = DynamicPricing;
|
|
71
|
+
//# sourceMappingURL=dynamic-pricing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamic-pricing.js","sourceRoot":"","sources":["../../src/cost/dynamic-pricing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { RouteDecision, CostEstimate, TokenUsage, ContextStrategy, Model } from '../types';
|
|
2
|
+
export declare class CostEstimator {
|
|
3
|
+
estimate(route: RouteDecision, contextStrategy: ContextStrategy): CostEstimate;
|
|
4
|
+
estimateCostForModel(model: Model | null, inputTokens: number): number;
|
|
5
|
+
estimateTokens(text: string): TokenUsage;
|
|
6
|
+
calculateSavings(actualCost: number, premiumCost: number): number;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=estimator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"estimator.d.ts","sourceRoot":"","sources":["../../src/cost/estimator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAE3F,qBAAa,aAAa;IACxB,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,GAAG,YAAY;IAwB9E,oBAAoB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAatE,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU;IAMxC,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;CAIlE"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CostEstimator = void 0;
|
|
4
|
+
class CostEstimator {
|
|
5
|
+
estimate(route, contextStrategy) {
|
|
6
|
+
const inputCost = route.estimatedCost * 0.3;
|
|
7
|
+
const outputCost = route.estimatedCost * 0.7;
|
|
8
|
+
let savingsPercentage;
|
|
9
|
+
if (route.estimatedCost > 0 && route.fallbacks.length > 0) {
|
|
10
|
+
const premiumCost = route.fallbacks[0].estimatedCost * 1.5;
|
|
11
|
+
if (premiumCost > route.estimatedCost) {
|
|
12
|
+
savingsPercentage = Math.round((1 - route.estimatedCost / premiumCost) * 100);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
inputCost: Math.round(inputCost * 10000) / 10000,
|
|
17
|
+
outputCost: Math.round(outputCost * 10000) / 10000,
|
|
18
|
+
totalCost: Math.round(route.estimatedCost * 10000) / 10000,
|
|
19
|
+
currency: 'USD',
|
|
20
|
+
savingsPercentage,
|
|
21
|
+
comparedToPremium: route.fallbacks[0]?.estimatedCost
|
|
22
|
+
? Math.round(route.fallbacks[0].estimatedCost * 10000) / 10000
|
|
23
|
+
: undefined,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
estimateCostForModel(model, inputTokens) {
|
|
27
|
+
if (!model || model.inputPrice === undefined) {
|
|
28
|
+
// Default estimate
|
|
29
|
+
return Math.round(inputTokens / 1000 * 0.002 * 10000) / 10000;
|
|
30
|
+
}
|
|
31
|
+
const outputTokens = Math.ceil(inputTokens * 0.3);
|
|
32
|
+
const inputCost = (inputTokens / 1000) * (model.inputPrice / 1000);
|
|
33
|
+
const outputCost = (outputTokens / 1000) * ((model.outputPrice ?? model.inputPrice * 2) / 1000);
|
|
34
|
+
return Math.round((inputCost + outputCost) * 10000) / 10000;
|
|
35
|
+
}
|
|
36
|
+
estimateTokens(text) {
|
|
37
|
+
const input = Math.ceil(text.length / 4);
|
|
38
|
+
const output = Math.ceil(input * 0.3);
|
|
39
|
+
return { input, output, total: input + output };
|
|
40
|
+
}
|
|
41
|
+
calculateSavings(actualCost, premiumCost) {
|
|
42
|
+
if (premiumCost <= 0)
|
|
43
|
+
return 0;
|
|
44
|
+
return Math.round((1 - actualCost / premiumCost) * 100);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.CostEstimator = CostEstimator;
|
|
48
|
+
//# sourceMappingURL=estimator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"estimator.js","sourceRoot":"","sources":["../../src/cost/estimator.ts"],"names":[],"mappings":";;;AAEA,MAAa,aAAa;IACxB,QAAQ,CAAC,KAAoB,EAAE,eAAgC;QAC7D,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,GAAG,GAAG,CAAC;QAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,GAAG,GAAG,CAAC;QAC7C,IAAI,iBAAqC,CAAC;QAE1C,IAAI,KAAK,CAAC,aAAa,GAAG,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1D,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,GAAG,CAAC;YAC3D,IAAI,WAAW,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;gBACtC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC;YAChF,CAAC;QACH,CAAC;QAED,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,KAAK;YAChD,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,KAAK;YAClD,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,GAAG,KAAK;YAC1D,QAAQ,EAAE,KAAK;YACf,iBAAiB;YACjB,iBAAiB,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa;gBAClD,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,KAAK,CAAC,GAAG,KAAK;gBAC9D,CAAC,CAAC,SAAS;SACd,CAAC;IACJ,CAAC;IAED,oBAAoB,CAAC,KAAmB,EAAE,WAAmB;QAC3D,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7C,mBAAmB;YACnB,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC;QAChE,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;QACnE,MAAM,UAAU,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAEhG,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC;IAC9D,CAAC;IAED,cAAc,CAAC,IAAY;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;QACtC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC;IAClD,CAAC;IAED,gBAAgB,CAAC,UAAkB,EAAE,WAAmB;QACtD,IAAI,WAAW,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC;IAC1D,CAAC;CACF;AAhDD,sCAgDC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { RouteDecision, TaskProfile, CostEstimate, PrivacyDecision } from '../types';
|
|
2
|
+
export declare class ExplainabilityEngine {
|
|
3
|
+
explain(route: RouteDecision, task: TaskProfile, cost: CostEstimate, privacy: PrivacyDecision): string[];
|
|
4
|
+
explainRoute(route: RouteDecision): string[];
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/explain/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAErF,qBAAa,oBAAoB;IAC/B,OAAO,CACL,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,eAAe,GACvB,MAAM,EAAE;IAwDX,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,EAAE;CAG7C"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ExplainabilityEngine = void 0;
|
|
4
|
+
class ExplainabilityEngine {
|
|
5
|
+
explain(route, task, cost, privacy) {
|
|
6
|
+
const lines = [];
|
|
7
|
+
lines.push(`Task classified: ${task.taskType}`);
|
|
8
|
+
lines.push(` Complexity: ${task.complexity}`);
|
|
9
|
+
lines.push(` Context need: ${task.contextNeed}`);
|
|
10
|
+
lines.push('');
|
|
11
|
+
if (route.selectedGateway) {
|
|
12
|
+
lines.push(`Gateway: ${route.selectedGateway}`);
|
|
13
|
+
}
|
|
14
|
+
lines.push(`Selected model: ${route.selectedProvider} / ${route.selectedModel}`);
|
|
15
|
+
lines.push(`Confidence: ${Math.round(route.confidence * 100)}%`);
|
|
16
|
+
lines.push(`Score: ${route.score}`);
|
|
17
|
+
lines.push('');
|
|
18
|
+
lines.push('Selection factors:');
|
|
19
|
+
for (const exp of route.explanation) {
|
|
20
|
+
lines.push(` ${exp}`);
|
|
21
|
+
}
|
|
22
|
+
lines.push('');
|
|
23
|
+
lines.push(`Estimated cost: $${cost.totalCost.toFixed(4)} ${cost.currency}`);
|
|
24
|
+
if (cost.savingsPercentage !== undefined) {
|
|
25
|
+
lines.push(`Estimated savings: ${cost.savingsPercentage}% vs premium alternative`);
|
|
26
|
+
}
|
|
27
|
+
if (cost.comparedToPremium !== undefined && cost.comparedToPremium > 0) {
|
|
28
|
+
lines.push(`Compared to premium: $${cost.comparedToPremium.toFixed(4)}`);
|
|
29
|
+
}
|
|
30
|
+
lines.push('');
|
|
31
|
+
lines.push(`Context strategy: ${route.contextStrategy}`);
|
|
32
|
+
lines.push('');
|
|
33
|
+
lines.push('Privacy:');
|
|
34
|
+
if (privacy.findings.length === 0) {
|
|
35
|
+
lines.push(' No sensitive data detected');
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
for (const f of privacy.findings) {
|
|
39
|
+
lines.push(` ${f.type} → ${f.action} (${f.severity})`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
lines.push('');
|
|
43
|
+
lines.push('Fallback chain:');
|
|
44
|
+
if (route.fallbacks.length === 0) {
|
|
45
|
+
lines.push(' No fallbacks available');
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
for (const fb of route.fallbacks) {
|
|
49
|
+
lines.push(` ${fb.selectedProvider}/${fb.selectedModel} (confidence: ${Math.round(fb.confidence * 100)}%)`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return lines;
|
|
53
|
+
}
|
|
54
|
+
explainRoute(route) {
|
|
55
|
+
return route.explanation;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.ExplainabilityEngine = ExplainabilityEngine;
|
|
59
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/explain/engine.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export { Mozart } from './core/mozart';
|
|
2
|
+
export type { MozartConfig } from './core/mozart';
|
|
3
|
+
export { InventoryRegistry } from './core/inventory';
|
|
4
|
+
export { SessionTracker } from './core/session';
|
|
5
|
+
export { ResultCache } from './core/cache';
|
|
6
|
+
export type { CacheEntry } from './core/cache';
|
|
7
|
+
export { PluginRegistry, pluginRegistry } from './core/plugins';
|
|
8
|
+
export type { MozartPlugin } from './core/plugins';
|
|
9
|
+
export { HealthChecker } from './core/health';
|
|
10
|
+
export type { HealthCheckResult } from './core/health';
|
|
11
|
+
export { MetricsCollector } from './core/metrics';
|
|
12
|
+
export type { MetricsSnapshot } from './core/metrics';
|
|
13
|
+
export { TaskClassifier } from './routing/classifier';
|
|
14
|
+
export { RoutingEngine } from './routing/router';
|
|
15
|
+
export type { PolicyEvalResult } from './routing/router';
|
|
16
|
+
export { RoutingScorer } from './routing/scorer';
|
|
17
|
+
export { FallbackManager } from './routing/fallback';
|
|
18
|
+
export type { FallbackEvent, FallbackResult } from './routing/fallback';
|
|
19
|
+
export { MultiStageRouter } from './routing/multistage';
|
|
20
|
+
export type { MultiStageStep, MultiStageResult } from './routing/multistage';
|
|
21
|
+
export { CircuitBreaker, CircuitBreakerError } from './routing/circuit-breaker';
|
|
22
|
+
export type { CircuitState, CircuitBreakerConfig } from './routing/circuit-breaker';
|
|
23
|
+
export { PolicyEngine } from './policy/engine';
|
|
24
|
+
export { loadPolicyFromEnv } from './policy/loader';
|
|
25
|
+
export { BUILTIN_PROFILES, getProfile, listProfiles, applyProfile } from './policy/profiles';
|
|
26
|
+
export type { ProfileDefinition } from './policy/profiles';
|
|
27
|
+
export { loadMozartConfig, generateDefaultConfig } from './policy/yaml-loader';
|
|
28
|
+
export type { LoadResult } from './policy/yaml-loader';
|
|
29
|
+
export { DynamicPricing } from './cost/dynamic-pricing';
|
|
30
|
+
export type { LivePricingResult } from './cost/dynamic-pricing';
|
|
31
|
+
export { ReliabilityTracker } from './core/reliability';
|
|
32
|
+
export type { ProviderReliability } from './core/reliability';
|
|
33
|
+
export { PrivacyGuard } from './privacy/guard';
|
|
34
|
+
export { ContextOptimizer } from './context/optimizer';
|
|
35
|
+
export { AdvancedContextOptimizer } from './context/advanced-optimizer';
|
|
36
|
+
export type { SummarizeOptions } from './context/advanced-optimizer';
|
|
37
|
+
export { CostEstimator } from './cost/estimator';
|
|
38
|
+
export { ExplainabilityEngine } from './explain/engine';
|
|
39
|
+
export { Logger } from './logs/logger';
|
|
40
|
+
export type { LogEntry } from './logs/logger';
|
|
41
|
+
export { Redactor } from './logs/redactor';
|
|
42
|
+
export { OllamaAdapter, LiteLLMAdapter, OpenRouterAdapter, OpenCodeAdapter, OpenClawAdapter, HermesAdapter, CursorAdapter, LMStudioAdapter, VllmAdapter, NvidiaNimAdapter, GenericOpenAIAdapter, discoverAllGenericAdapters, } from './adapters';
|
|
43
|
+
export type { GenericAdapterConfig } from './adapters';
|
|
44
|
+
export { ALL_SKILLS, ROUTE_MODEL_SKILL, EXPLAIN_ROUTE_SKILL, ESTIMATE_COST_SKILL, COMPRESS_CONTEXT_SKILL, PRIVACY_CHECK_SKILL, FALLBACK_PLAN_SKILL, INVENTORY_SKILL, } from './skills';
|
|
45
|
+
export { MozartApiServer, startApiServer } from './api/server';
|
|
46
|
+
export type { ApiServerOptions } from './api/server';
|
|
47
|
+
export { MozartMiddleware } from './api/middleware';
|
|
48
|
+
export type { MiddlewareOptions } from './api/middleware';
|
|
49
|
+
export { StreamingMiddleware } from './api/streaming';
|
|
50
|
+
export type { StreamingMiddlewareOptions } from './api/streaming';
|
|
51
|
+
export { MozartMcpServer } from './api/mcp';
|
|
52
|
+
export type { McpToolDefinition, McpRequest, McpResponse } from './api/mcp';
|
|
53
|
+
export { dashboardHtml } from './api/dashboard';
|
|
54
|
+
export { saveInventory, loadInventory, saveSession, loadSession, saveConfig, loadConfigYaml, getMozartDir, clearAllData, } from './core/persistence';
|
|
55
|
+
export { syncDealsForgeData } from './utils/dealsforge';
|
|
56
|
+
export { scanLocalCapability, estimateLocalModelCapacity } from './utils/canrunit';
|
|
57
|
+
export type { LocalCapability } from './utils/canrunit';
|
|
58
|
+
export type * from './types';
|
|
59
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|