adaptive-memory-multi-model-router 1.9.5 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +50 -0
  2. package/.github/ISSUE_TEMPLATE/config.yml +11 -0
  3. package/.github/ISSUE_TEMPLATE/feature_request.md +37 -0
  4. package/.github/PULL_REQUEST_TEMPLATE.md +44 -0
  5. package/.github/workflows/npm-stats-validation.yml +152 -0
  6. package/.github/workflows/pages.yml +37 -0
  7. package/CHANGELOG.md +122 -0
  8. package/CODE_OF_CONDUCT.md +128 -0
  9. package/CONTRIBUTING.md +110 -0
  10. package/LAUNCH-PAIN-DRIVEN.md +339 -0
  11. package/LAUNCH.md +575 -0
  12. package/POPULARITY_BOOSTERS.md +285 -0
  13. package/README.md +231 -300
  14. package/SECURITY.md +69 -0
  15. package/articles/CONTENT_STRUCTURE.md +292 -0
  16. package/articles/DEVTO_COST_GUIDE.md +473 -0
  17. package/articles/DEVTO_FINAL.md +416 -0
  18. package/articles/DEVTO_MULTI_PROVIDER.md +542 -0
  19. package/articles/HN_10X_BETTER.md +430 -0
  20. package/articles/HN_CHINESE_STYLE.md +308 -0
  21. package/articles/HN_FINAL.md +199 -0
  22. package/articles/HN_POSTED_VERSION.md +56 -0
  23. package/articles/HN_RESEARCH.md +364 -0
  24. package/articles/PAIN-DRIVEN-devto-v2.md +308 -0
  25. package/articles/PAIN-DRIVEN-devto-v3.md +268 -0
  26. package/articles/PAIN-DRIVEN-devto.md +242 -0
  27. package/articles/PAIN-DRIVEN-hackernews-v2.md +138 -0
  28. package/articles/PAIN-DRIVEN-hackernews-v3.md +151 -0
  29. package/articles/PAIN-DRIVEN-hackernews.md +131 -0
  30. package/articles/PAIN-DRIVEN-reddit-v2.md +301 -0
  31. package/articles/PAIN-DRIVEN-reddit-v3.md +236 -0
  32. package/articles/PAIN-DRIVEN-reddit.md +218 -0
  33. package/articles/PAIN-DRIVEN-twitter-v2.md +110 -0
  34. package/articles/PAIN-DRIVEN-twitter-v3.md +121 -0
  35. package/articles/PAIN-DRIVEN-twitter.md +120 -0
  36. package/articles/PORTKEY_VS_A3M.md +147 -0
  37. package/articles/REDDIT_FINAL.md +232 -0
  38. package/articles/TWITTER_FINAL.md +167 -0
  39. package/articles/WHY_10X_BETTER.md +261 -0
  40. package/articles/WHY_CHINESE_STYLE_BETTER.md +323 -0
  41. package/articles/hashnode-llm-cost-optimization.md +125 -0
  42. package/articles/medium-building-llm-router.md +205 -0
  43. package/articles/twitter-thread-cost-savings.md +98 -0
  44. package/articles/youtube-tutorial-script.md +262 -0
  45. package/assets/banner.svg +109 -0
  46. package/assets/logo.svg +68 -0
  47. package/assets/social-preview.svg +64 -0
  48. package/demo/demo-script.md +53 -0
  49. package/dist/analytics/costAnalytics.d.ts +77 -0
  50. package/dist/analytics/costAnalytics.d.ts.map +1 -0
  51. package/dist/analytics/costAnalytics.js +219 -0
  52. package/dist/analytics/costAnalytics.js.map +1 -0
  53. package/dist/cache/semanticCache.d.ts +62 -0
  54. package/dist/cache/semanticCache.d.ts.map +1 -0
  55. package/dist/cache/semanticCache.js +176 -0
  56. package/dist/cache/semanticCache.js.map +1 -0
  57. package/dist/cli.js +35 -0
  58. package/dist/index.d.ts +4 -723
  59. package/dist/index.js +11 -362
  60. package/dist/index.js.map +1 -1
  61. package/dist/integrations/langchainAdapter.d.ts +146 -0
  62. package/dist/integrations/langchainAdapter.d.ts.map +1 -0
  63. package/dist/integrations/langchainAdapter.js +731 -0
  64. package/dist/integrations/langchainAdapter.js.map +1 -0
  65. package/dist/integrations/oauth.d.ts +69 -0
  66. package/dist/integrations/oauth.d.ts.map +1 -0
  67. package/dist/integrations/oauth.js +225 -21
  68. package/dist/integrations/oauth.js.map +1 -0
  69. package/dist/memory/autoFetch.d.ts +39 -0
  70. package/dist/memory/autoFetch.d.ts.map +1 -0
  71. package/dist/memory/autoFetch.js +80 -88
  72. package/dist/memory/autoFetch.js.map +1 -0
  73. package/dist/memory/memoryTree.d.ts +76 -0
  74. package/dist/memory/memoryTree.d.ts.map +1 -0
  75. package/dist/memory/memoryTree.js +185 -130
  76. package/dist/memory/memoryTree.js.map +1 -0
  77. package/dist/memory/obsidianVault.d.ts +71 -0
  78. package/dist/memory/obsidianVault.d.ts.map +1 -0
  79. package/dist/memory/obsidianVault.js +207 -22
  80. package/dist/memory/obsidianVault.js.map +1 -0
  81. package/dist/providers/providerConfig.d.ts +49 -0
  82. package/dist/providers/providerConfig.d.ts.map +1 -0
  83. package/dist/providers/providerConfig.js +806 -401
  84. package/dist/providers/providerConfig.js.map +1 -0
  85. package/dist/security/guardrails.d.ts +76 -0
  86. package/dist/security/guardrails.d.ts.map +1 -0
  87. package/dist/security/guardrails.js +479 -0
  88. package/dist/security/guardrails.js.map +1 -0
  89. package/dist/server/dashboard.d.ts +58 -0
  90. package/dist/server/dashboard.d.ts.map +1 -0
  91. package/dist/server/dashboard.js +553 -0
  92. package/dist/server/dashboard.js.map +1 -0
  93. package/dist/server/modelMapper.d.ts +43 -0
  94. package/dist/server/modelMapper.d.ts.map +1 -0
  95. package/dist/server/modelMapper.js +154 -0
  96. package/dist/server/modelMapper.js.map +1 -0
  97. package/dist/server/proxyServer.d.ts +41 -0
  98. package/dist/server/proxyServer.d.ts.map +1 -0
  99. package/dist/server/proxyServer.js +932 -0
  100. package/dist/server/proxyServer.js.map +1 -0
  101. package/dist/skills/__tests__/skill_manager.test.d.ts +2 -0
  102. package/dist/skills/__tests__/skill_manager.test.d.ts.map +1 -0
  103. package/dist/skills/__tests__/skill_manager.test.js +268 -0
  104. package/dist/skills/__tests__/skill_manager.test.js.map +1 -0
  105. package/docs-site/index.html +347 -0
  106. package/package.json +53 -7
  107. package/playground/README.md +51 -0
  108. package/playground/codesandbox.json +12 -0
  109. package/playground/index.js +39 -0
  110. package/scripts/update-npm-badges.js +158 -0
  111. package/src/analytics/costAnalytics.ts +304 -0
  112. package/src/cache/semanticCache.ts +221 -0
  113. package/src/index.ts +6 -0
  114. package/src/integrations/langchainAdapter.ts +955 -0
  115. package/src/providers/providerConfig.ts +923 -0
  116. package/src/security/guardrails.ts +585 -0
  117. package/src/server/dashboard.ts +610 -0
  118. package/src/server/modelMapper.ts +182 -0
  119. package/src/server/proxyServer.ts +1105 -0
  120. package/src/types/langchain.d.ts +83 -0
  121. package/tsconfig.build.json +20 -0
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ /**
3
+ * A3M Router - Model Mapper
4
+ *
5
+ * Maps OpenAI-compatible model names to our provider/model pairs.
6
+ * Supports:
7
+ * - "auto" → intelligent routing via advancedRouter
8
+ * - "gpt-4" → best available premium provider
9
+ * - "gpt-3.5-turbo" → best available fast provider
10
+ * - "groq/llama-3.3-70b" → specific provider/model
11
+ * - "claude-3.5-sonnet" → Anthropic provider
12
+ * - "gemini-2.0-flash" → Google provider
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.resolveModel = resolveModel;
16
+ exports.listAvailableModels = listAvailableModels;
17
+ const advancedRouter_1 = require("../routing/advancedRouter");
18
+ const providerConfig_1 = require("../providers/providerConfig");
19
+ // ============================================================
20
+ // OPENAI MODEL ALIASES → provider preference order
21
+ // ============================================================
22
+ const OPENAI_ALIASES = {
23
+ "gpt-4": ["openai/gpt-4o", "anthropic/claude-3.5-sonnet", "google/gemini-2.5-pro", "mistral/mistral-large-latest"],
24
+ "gpt-4-turbo": ["openai/gpt-4-turbo", "openai/gpt-4o", "anthropic/claude-3.5-sonnet"],
25
+ "gpt-4o": ["openai/gpt-4o", "anthropic/claude-3.5-sonnet", "google/gemini-2.5-pro"],
26
+ "gpt-4o-mini": ["openai/gpt-4o-mini", "groq/llama-3.3-70b-versatile", "google/gemini-2.0-flash", "mistral/mistral-small-latest"],
27
+ "gpt-3.5-turbo": ["groq/llama-3.3-70b-versatile", "cerebras/llama3.1-8b", "google/gemini-2.0-flash", "mistral/mistral-small-latest", "deepseek/deepseek-chat"],
28
+ "claude-3.5-sonnet": ["anthropic/claude-3.5-sonnet"],
29
+ "claude-3-opus": ["anthropic/claude-3-opus"],
30
+ "claude-3-haiku": ["anthropic/claude-3-haiku"],
31
+ "gemini-2.0-flash": ["google/gemini-2.0-flash"],
32
+ "gemini-2.5-pro": ["google/gemini-2.5-pro"],
33
+ "o1": ["openai/gpt-4o", "anthropic/claude-3.5-sonnet"],
34
+ "o1-mini": ["openai/gpt-4o-mini", "groq/llama-3.3-70b-versatile"],
35
+ "o3-mini": ["openai/gpt-4o-mini", "google/gemini-2.5-flash"],
36
+ };
37
+ // ============================================================
38
+ // MODEL MAPPING
39
+ // ============================================================
40
+ /**
41
+ * Resolve an OpenAI-compatible model name to a concrete provider/model pair.
42
+ *
43
+ * Resolution order:
44
+ * 1. "auto" → route through advancedRouter
45
+ * 2. "provider/model" format → direct lookup
46
+ * 3. OpenAI alias → preference list lookup
47
+ * 4. Bare model name → search across all providers
48
+ * 5. Fallback → first available provider's first model
49
+ */
50
+ function resolveModel(modelName, prompt) {
51
+ const available = (0, providerConfig_1.getAvailableProviders)();
52
+ // 1. "auto" → intelligent routing
53
+ if (modelName === "auto") {
54
+ const query = prompt || "";
55
+ const route = (0, advancedRouter_1.routeQuery)(query);
56
+ if (!route.primary_model)
57
+ return null;
58
+ return lookupProviderModel(route.primary_model, available);
59
+ }
60
+ // 2. "provider/model" format → direct lookup
61
+ if (modelName.includes("/")) {
62
+ const mapping = lookupProviderModel(modelName, available);
63
+ if (mapping)
64
+ return mapping;
65
+ }
66
+ // 3. OpenAI alias → preference list
67
+ const aliasList = OPENAI_ALIASES[modelName];
68
+ if (aliasList) {
69
+ for (const candidate of aliasList) {
70
+ const mapping = lookupProviderModel(candidate, available);
71
+ if (mapping)
72
+ return mapping;
73
+ }
74
+ }
75
+ // 4. Bare model name → search across all providers
76
+ for (const [providerId, provider] of Object.entries(available)) {
77
+ if (provider.models && provider.models.includes(modelName)) {
78
+ return {
79
+ providerId,
80
+ model: modelName,
81
+ baseUrl: provider.baseUrl || "",
82
+ apiKey: provider.apiKey || null,
83
+ costPerK: provider.costPerK || { input: 0, output: 0 },
84
+ type: provider.type || "api",
85
+ };
86
+ }
87
+ }
88
+ // 5. Fallback → first available provider's first model
89
+ const firstProvider = Object.values(available)[0];
90
+ if (firstProvider && firstProvider.models && firstProvider.models.length > 0) {
91
+ return {
92
+ providerId: firstProvider.id,
93
+ model: firstProvider.models[0],
94
+ baseUrl: firstProvider.baseUrl || "",
95
+ apiKey: firstProvider.apiKey || null,
96
+ costPerK: firstProvider.costPerK || { input: 0, output: 0 },
97
+ type: firstProvider.type || "api",
98
+ };
99
+ }
100
+ return null;
101
+ }
102
+ /**
103
+ * Look up a "provider/model" key against the available providers map.
104
+ */
105
+ function lookupProviderModel(key, available) {
106
+ const slashIdx = key.indexOf("/");
107
+ const providerId = slashIdx >= 0 ? key.substring(0, slashIdx) : key;
108
+ const model = slashIdx >= 0 ? key.substring(slashIdx + 1) : key;
109
+ const provider = available[providerId];
110
+ if (!provider)
111
+ return null;
112
+ // Verify the model is in the provider's list (or accept if list is empty)
113
+ if (provider.models && provider.models.length > 0 && !provider.models.includes(model)) {
114
+ return null;
115
+ }
116
+ return {
117
+ providerId,
118
+ model,
119
+ baseUrl: provider.baseUrl || "",
120
+ apiKey: provider.apiKey || null,
121
+ costPerK: provider.costPerK || { input: 0, output: 0 },
122
+ type: provider.type || "api",
123
+ };
124
+ }
125
+ /**
126
+ * List all available models in OpenAI-compatible format.
127
+ */
128
+ function listAvailableModels() {
129
+ const available = (0, providerConfig_1.getAvailableProviders)();
130
+ const models = [];
131
+ for (const [providerId, provider] of Object.entries(available)) {
132
+ if (provider.models) {
133
+ for (const model of provider.models) {
134
+ models.push({
135
+ id: providerId + "/" + model,
136
+ object: "model",
137
+ created: Math.floor(Date.now() / 1000),
138
+ owned_by: provider.name || providerId,
139
+ });
140
+ }
141
+ }
142
+ }
143
+ // Add aliases
144
+ for (const alias of Object.keys(OPENAI_ALIASES)) {
145
+ models.push({
146
+ id: alias,
147
+ object: "model",
148
+ created: Math.floor(Date.now() / 1000),
149
+ owned_by: "a3m-router",
150
+ });
151
+ }
152
+ return models;
153
+ }
154
+ //# sourceMappingURL=modelMapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelMapper.js","sourceRoot":"","sources":["../../src/server/modelMapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * A3M Router - OpenAI-Compatible Proxy Server
3
+ *
4
+ * Lightweight HTTP server that accepts OpenAI API requests and routes them
5
+ * through the A3M Router engine. Uses only Node.js built-in http module.
6
+ *
7
+ * Endpoints:
8
+ * POST /v1/chat/completions — OpenAI-compatible chat
9
+ * POST /v1/completions — OpenAI completions
10
+ * GET /v1/models — List available models
11
+ * GET /health — Health check with provider status
12
+ *
13
+ * Build: npx tsc
14
+ * Run: npx a3m-router serve [--port 8787]
15
+ */
16
+ import * as http from "http";
17
+ import { CostTracker } from "../cost/costTracker";
18
+ interface RequestLog {
19
+ id: string;
20
+ 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;
30
+ }
31
+ declare const requestLogs: RequestLog[];
32
+ declare const costTracker: any;
33
+ /**
34
+ * Create and start the proxy server.
35
+ *
36
+ * @param port - Port to listen on (default: 8787, env: PORT)
37
+ * @returns The http.Server instance
38
+ */
39
+ export declare function createProxyServer(port?: number): http.Server;
40
+ export { CostTracker, costTracker, requestLogs };
41
+ export default createProxyServer;
@@ -0,0 +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,KAAoB,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"}