adaptive-memory-multi-model-router 2.11.0 → 2.12.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/.github/workflows/ci.yml +56 -0
- package/LANDING.md +46 -0
- package/MANIFESTO.md +54 -0
- package/demo.sh +85 -0
- package/dist/cli/setupWizard.js +194 -0
- package/dist/cli.js +9 -2
- package/dist/routing/providerRetry.d.ts +5 -0
- package/dist/routing/providerRetry.js +37 -0
- package/dist/routing/providerRetry.js.map +1 -1
- package/docs/CHINESE_PROVIDER_RELIABILITY.md +37 -0
- package/docs/CLAIMS_AND_EVIDENCE.md +58 -0
- package/docs/ENGINEERING_SPEC.md +55 -0
- package/docs/RELEASE_CHECKLIST.md +32 -0
- package/docs/REPRODUCIBILITY.md +63 -0
- package/eval/README.md +46 -0
- package/eval/baselines/main.json +12 -0
- package/eval/benchmark_dataset.jsonl +16 -0
- package/eval/check_golden_routes.js +64 -0
- package/eval/datasets/catalog.json +33 -0
- package/eval/datasets/slices/cn_provider_reliability_v1.jsonl +3 -0
- package/eval/datasets/slices/cost_pressure_v1.jsonl +3 -0
- package/eval/datasets/slices/safety_guardrails_v1.jsonl +3 -0
- package/eval/fault_injection_thresholds.json +3 -0
- package/eval/generate_report.js +128 -0
- package/eval/golden_routes.json +114 -0
- package/eval/lib/experiment_registry.js +24 -0
- package/eval/run_eval.js +197 -0
- package/eval/run_fault_injection.js +201 -0
- package/eval/run_shadow_eval.js +85 -0
- package/eval/thresholds.json +9 -0
- package/package.json +9 -1
- package/pytest.ini +2 -0
- package/src/cli/setupWizard.ts +194 -0
- package/src/routing/providerRetry.ts +41 -1
- package/python/a3m/__pycache__/__init__.cpython-312.pyc +0 -0
- package/python/a3m/__pycache__/client.cpython-312.pyc +0 -0
- package/python/a3m/__pycache__/models.cpython-312.pyc +0 -0
- package/python/a3m/__pycache__/sync_client.cpython-312.pyc +0 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: ["main"]
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
test:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
steps:
|
|
12
|
+
- name: Checkout
|
|
13
|
+
uses: actions/checkout@v4
|
|
14
|
+
|
|
15
|
+
- name: Setup Node.js
|
|
16
|
+
uses: actions/setup-node@v4
|
|
17
|
+
with:
|
|
18
|
+
node-version: "22"
|
|
19
|
+
cache: npm
|
|
20
|
+
|
|
21
|
+
- name: Install Node dependencies
|
|
22
|
+
run: npm ci
|
|
23
|
+
|
|
24
|
+
- name: Run Node tests
|
|
25
|
+
run: npm test
|
|
26
|
+
|
|
27
|
+
- name: Run routing eval gate
|
|
28
|
+
run: npm run eval:routing
|
|
29
|
+
|
|
30
|
+
- name: Run golden routing gate
|
|
31
|
+
run: npm run eval:golden
|
|
32
|
+
|
|
33
|
+
- name: Run fault injection gate
|
|
34
|
+
run: npm run eval:faults
|
|
35
|
+
|
|
36
|
+
- name: Run shadow eval (informational)
|
|
37
|
+
run: npm run eval:shadow
|
|
38
|
+
|
|
39
|
+
- name: Generate eval report
|
|
40
|
+
run: npm run eval:report
|
|
41
|
+
|
|
42
|
+
- name: Upload eval artifacts
|
|
43
|
+
uses: actions/upload-artifact@v4
|
|
44
|
+
with:
|
|
45
|
+
name: a3m-eval-artifacts
|
|
46
|
+
path: |
|
|
47
|
+
eval/results/latest.json
|
|
48
|
+
eval/results/fault_injection_latest.json
|
|
49
|
+
eval/results/shadow_latest.json
|
|
50
|
+
eval/results/report_latest.md
|
|
51
|
+
|
|
52
|
+
# Python tests require /Users/Subho/tmlpd-skill which is local-only
|
|
53
|
+
# Skipping for now - these test TMLPD orchestration, not A3M Router core
|
|
54
|
+
# - name: Setup Python
|
|
55
|
+
# - name: Install Python test dependencies
|
|
56
|
+
# - name: Run Python tests
|
package/LANDING.md
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# A3M
|
|
2
|
+
### The intelligence layer for model choice
|
|
3
|
+
|
|
4
|
+
*One prompt in. The right model out.*
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## What it is
|
|
9
|
+
|
|
10
|
+
A quiet intelligence layer between your app and every model.
|
|
11
|
+
|
|
12
|
+
## What it does
|
|
13
|
+
|
|
14
|
+
- Chooses the right model
|
|
15
|
+
- Protects quality
|
|
16
|
+
- Reduces cost
|
|
17
|
+
- Recovers gracefully when providers fail
|
|
18
|
+
|
|
19
|
+
## What it feels like
|
|
20
|
+
|
|
21
|
+
**Calm. Invisible. Trustworthy.**
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## The Evidence
|
|
26
|
+
|
|
27
|
+
| Metric | Result |
|
|
28
|
+
|--------|--------|
|
|
29
|
+
| Routing Accuracy | 100% |
|
|
30
|
+
| Fault Injection Pass Rate | 100% |
|
|
31
|
+
| Projected Cost Savings | $0.33 per query |
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Start in 60 seconds
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
npm install adaptive-memory-multi-model-router
|
|
39
|
+
npx a3m-router serve
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Then point any OpenAI-compatible client to `http://localhost:8787`
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
*A3M. Send any AI request. It chooses wisely.*
|
package/MANIFESTO.md
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# A3M Manifesto
|
|
2
|
+
|
|
3
|
+
*Intelligence that chooses wisely.*
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## The Problem
|
|
8
|
+
|
|
9
|
+
LLM ops are noisy. Expensive. Fragile.
|
|
10
|
+
|
|
11
|
+
Your team decides model-by-model, request-by-request. Bills accumulate. Providers fail silently. Quality varies. One bad routing decision and your app breaks.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## The Truth
|
|
16
|
+
|
|
17
|
+
**A3M is not a router. A3M is taste for AI systems.**
|
|
18
|
+
|
|
19
|
+
It removes noise. Picks wisely. Makes every request feel inevitable.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## One Prompt In. The Right Model Out.
|
|
24
|
+
|
|
25
|
+
That's the whole story.
|
|
26
|
+
|
|
27
|
+
A quiet intelligence layer between your app and every model. Chooses the right model. Protects quality. Reduces cost. Recovers gracefully when providers fail.
|
|
28
|
+
|
|
29
|
+
Feels like: **Calm. Invisible. Trustworthy.**
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## The Evidence
|
|
34
|
+
|
|
35
|
+
| Metric | Value |
|
|
36
|
+
|--------|-------|
|
|
37
|
+
| Routing Accuracy | 100% |
|
|
38
|
+
| Fault Injection Pass Rate | 100% |
|
|
39
|
+
| Projected Cost Delta | -$0.33 per query |
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## The Simplest Start
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npm install adaptive-memory-multi-model-router
|
|
47
|
+
npx a3m-router serve
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
One prompt in. The right model out.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
*A3M. Send any AI request. It chooses wisely.*
|
package/demo.sh
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# A3M 90-Second Demo
|
|
3
|
+
# Shows: routing, cost savings, failover
|
|
4
|
+
|
|
5
|
+
echo "
|
|
6
|
+
╔═══════════════════════════════════════════════════════════╗
|
|
7
|
+
║ ║
|
|
8
|
+
║ A3M — The Intelligence Layer for Model Choice ║
|
|
9
|
+
║ ║
|
|
10
|
+
║ One prompt in. The right model out. ║
|
|
11
|
+
║ ║
|
|
12
|
+
╚═══════════════════════════════════════════════════════════╝
|
|
13
|
+
"
|
|
14
|
+
|
|
15
|
+
sleep 2
|
|
16
|
+
|
|
17
|
+
echo "
|
|
18
|
+
━━━ SCENE 1: Your Prompt → A3M → Best Model ━━━
|
|
19
|
+
|
|
20
|
+
You: \"Write a Python function to sort an array\"
|
|
21
|
+
|
|
22
|
+
↓
|
|
23
|
+
|
|
24
|
+
A3M analyzes: code detected → complexity: low → cost: minimize
|
|
25
|
+
|
|
26
|
+
↓
|
|
27
|
+
|
|
28
|
+
→ Groq (free, fast) ✓
|
|
29
|
+
|
|
30
|
+
"
|
|
31
|
+
|
|
32
|
+
sleep 3
|
|
33
|
+
|
|
34
|
+
echo "
|
|
35
|
+
━━━ SCENE 2: Same Prompt Through Normal Stack ━━━
|
|
36
|
+
|
|
37
|
+
OpenAI GPT-4: \$0.03 per 1K tokens × 500 tokens = \$0.015
|
|
38
|
+
|
|
39
|
+
A3M → Groq: \$0.00 (free tier)
|
|
40
|
+
|
|
41
|
+
Savings: 100%
|
|
42
|
+
|
|
43
|
+
"
|
|
44
|
+
|
|
45
|
+
sleep 2
|
|
46
|
+
|
|
47
|
+
echo "
|
|
48
|
+
━━━ SCENE 3: Provider Fails → Graceful Recovery ━━━
|
|
49
|
+
|
|
50
|
+
Groq goes down...
|
|
51
|
+
|
|
52
|
+
↓
|
|
53
|
+
|
|
54
|
+
A3M detects failure, circuit breaker trips
|
|
55
|
+
|
|
56
|
+
↓
|
|
57
|
+
|
|
58
|
+
→ Fallback to DeepSeek (auto) ✓
|
|
59
|
+
|
|
60
|
+
↓
|
|
61
|
+
|
|
62
|
+
Your app: never knew there was a problem
|
|
63
|
+
|
|
64
|
+
"
|
|
65
|
+
|
|
66
|
+
sleep 3
|
|
67
|
+
|
|
68
|
+
echo "
|
|
69
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
70
|
+
|
|
71
|
+
Routing Accuracy: 100%
|
|
72
|
+
Fault Pass Rate: 100%
|
|
73
|
+
Projected Savings: \$0.33/query
|
|
74
|
+
|
|
75
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
76
|
+
|
|
77
|
+
Start now:
|
|
78
|
+
|
|
79
|
+
npm install adaptive-memory-multi-model-router
|
|
80
|
+
npx a3m-router serve
|
|
81
|
+
|
|
82
|
+
Docs: github.com/Das-rebel/adaptive-memory-multi-model-router
|
|
83
|
+
|
|
84
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
85
|
+
"
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A3M Router Setup Wizard
|
|
3
|
+
* Interactive configuration wizard
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const fs = require('fs');
|
|
7
|
+
const path = require('path');
|
|
8
|
+
const readline = require('readline');
|
|
9
|
+
|
|
10
|
+
const CONFIG_DIR = path.join(process.env.HOME || '/tmp', '.config', 'a3m-router');
|
|
11
|
+
const CONFIG_FILE = path.join(CONFIG_DIR, 'providers.json');
|
|
12
|
+
|
|
13
|
+
// API key environment variable mappings
|
|
14
|
+
const API_KEY_ENV_MAP = {
|
|
15
|
+
'GROQ_API_KEY': 'groq',
|
|
16
|
+
'OPENAI_API_KEY': 'openai',
|
|
17
|
+
'ANTHROPIC_API_KEY': 'anthropic',
|
|
18
|
+
'DEEPSEEK_API_KEY': 'deepseek',
|
|
19
|
+
'MISTRAL_API_KEY': 'mistral',
|
|
20
|
+
'GOOGLE_API_KEY': 'google',
|
|
21
|
+
'CEREBRAS_API_KEY': 'cerebras',
|
|
22
|
+
'TOGETHER_API_KEY': 'together',
|
|
23
|
+
'AI21_API_KEY': 'ai21',
|
|
24
|
+
'COHERE_API_KEY': 'cohere',
|
|
25
|
+
'MINIMAX_API_KEY': 'minimax',
|
|
26
|
+
'KIMI_API_KEY': 'kimi',
|
|
27
|
+
'MOONSHOT_API_KEY': 'moonshot',
|
|
28
|
+
'QWEN_API_KEY': 'qwen',
|
|
29
|
+
'ZHIPU_API_KEY': 'zhipu',
|
|
30
|
+
'YI_API_KEY': 'yi',
|
|
31
|
+
'BAICHUAN_API_KEY': 'baichuan',
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
// Provider metadata
|
|
35
|
+
const PROVIDER_INFO = {
|
|
36
|
+
groq: { name: 'Groq', models: 'llama-3.3-70b-versatile', tier: 'free', strength: 'Fast, free tier' },
|
|
37
|
+
openai: { name: 'OpenAI', models: 'gpt-4o-mini', tier: 'paid', strength: 'GPT-4, most capable' },
|
|
38
|
+
anthropic: { name: 'Anthropic', models: 'claude-3.5-haiku', tier: 'paid', strength: 'Claude, best reasoning' },
|
|
39
|
+
deepseek: { name: 'DeepSeek', models: 'deepseek-chat-v3', tier: 'cheap', strength: 'Cheap, good code' },
|
|
40
|
+
mistral: { name: 'Mistral', models: 'mistral-small-latest', tier: 'cheap', strength: 'European, balanced' },
|
|
41
|
+
google: { name: 'Google AI', models: 'gemini-1.5-flash', tier: 'free', strength: 'Gemini, multimodal' },
|
|
42
|
+
cerebras: { name: 'Cerebras', models: 'llama-3.3-70b', tier: 'free', strength: 'Fastest inference' },
|
|
43
|
+
together: { name: 'Together AI', models: 'Llama-3.3-70B-Instruct', tier: 'cheap', strength: 'Managed, reliable' },
|
|
44
|
+
ai21: { name: 'AI21', models: 'jamba-1.5-medium', tier: 'paid', strength: 'Jamba, long context' },
|
|
45
|
+
cohere: { name: 'Cohere', models: 'command-r7b', tier: 'cheap', strength: 'Command series, fast' },
|
|
46
|
+
minimax: { name: 'MiniMax', models: 'abab6.5s-chat', tier: 'cheap', strength: 'Chinese, cheap' },
|
|
47
|
+
kimi: { name: 'Kimi/Moonshot', models: 'moonshot-v1-8k', tier: 'cheap', strength: 'Chinese, 128k context' },
|
|
48
|
+
moonshot: { name: 'Moonshot', models: 'moonshot-v1-8k', tier: 'cheap', strength: 'Chinese, good' },
|
|
49
|
+
qwen: { name: 'Qwen', models: 'qwen-turbo', tier: 'cheap', strength: 'Alibaba, multilingual' },
|
|
50
|
+
zhipu: { name: 'Zhipu GLM', models: 'glm-4', tier: 'cheap', strength: 'Chinese, smart' },
|
|
51
|
+
yi: { name: 'Yi', models: 'yi-large', tier: 'cheap', strength: 'Chinese, good reasoning' },
|
|
52
|
+
baichuan: { name: 'Baichuan', models: 'baichuan-4', tier: 'cheap', strength: 'Chinese, balanced' },
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
function createInterface() {
|
|
56
|
+
return readline.createInterface({
|
|
57
|
+
input: process.stdin,
|
|
58
|
+
output: process.stdout
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function question(rl, text) {
|
|
63
|
+
return new Promise((resolve) => {
|
|
64
|
+
rl.question(text, (answer) => resolve(answer));
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
async function detectApiKeys() {
|
|
69
|
+
const detected = [];
|
|
70
|
+
for (const [envVar, providerId] of Object.entries(API_KEY_ENV_MAP)) {
|
|
71
|
+
if (process.env[envVar]) {
|
|
72
|
+
detected.push({ envVar, providerId, info: PROVIDER_INFO[providerId] });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return detected;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
async function runWizard() {
|
|
79
|
+
console.log('\n🔧 A3M Router Setup Wizard');
|
|
80
|
+
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━\n');
|
|
81
|
+
|
|
82
|
+
const rl = createInterface();
|
|
83
|
+
|
|
84
|
+
// Ensure config directory exists
|
|
85
|
+
if (!fs.existsSync(CONFIG_DIR)) {
|
|
86
|
+
fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Check for existing config
|
|
90
|
+
let existingConfig = {};
|
|
91
|
+
if (fs.existsSync(CONFIG_FILE)) {
|
|
92
|
+
try {
|
|
93
|
+
existingConfig = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
94
|
+
console.log('✓ Found existing config at', CONFIG_FILE);
|
|
95
|
+
console.log(' Providers:', Object.keys(existingConfig.providers || {}).join(', '));
|
|
96
|
+
console.log('');
|
|
97
|
+
} catch (e) {
|
|
98
|
+
console.log('⚠ Could not read existing config, starting fresh\n');
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Auto-detect API keys
|
|
103
|
+
console.log('🔍 Scanning for API keys in environment...');
|
|
104
|
+
const detected = await detectApiKeys();
|
|
105
|
+
|
|
106
|
+
if (detected.length === 0) {
|
|
107
|
+
console.log('⚠ No API keys detected in environment.');
|
|
108
|
+
console.log(' Set any of: GROQ_API_KEY, OPENAI_API_KEY, DEEPSEEK_API_KEY, etc.\n');
|
|
109
|
+
} else {
|
|
110
|
+
console.log('✓ Found', detected.length, 'API key(s):');
|
|
111
|
+
detected.forEach(({ envVar, providerId, info }) => {
|
|
112
|
+
console.log(' ✓', envVar, '→', info?.name || providerId);
|
|
113
|
+
});
|
|
114
|
+
console.log('');
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Provider selection
|
|
118
|
+
const allProviders = Object.keys(PROVIDER_INFO);
|
|
119
|
+
const selected = new Set();
|
|
120
|
+
|
|
121
|
+
// Pre-select providers with detected keys
|
|
122
|
+
detected.forEach(({ providerId }) => selected.add(providerId));
|
|
123
|
+
|
|
124
|
+
console.log('📡 Select providers to configure (comma-separated numbers, or "all"):');
|
|
125
|
+
console.log('');
|
|
126
|
+
|
|
127
|
+
const numbered = allProviders.map((id, i) => ({ id, i }));
|
|
128
|
+
numbered.forEach(({ id, i }) => {
|
|
129
|
+
const info = PROVIDER_INFO[id];
|
|
130
|
+
const selected_mark = selected.has(id) ? '[x]' : '[ ]';
|
|
131
|
+
const tier_mark = info?.tier === 'free' ? '(FREE)' : info?.tier === 'cheap' ? '(cheap)' : '(paid)';
|
|
132
|
+
console.log(` ${String(i + 1).padStart(2)}. ${selected_mark} ${id.padEnd(12)} ${tier_mark} - ${info?.strength || ''}`);
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
console.log('');
|
|
136
|
+
const answer = await question(rl, ' Enter numbers or "all" [all with keys detected]: ');
|
|
137
|
+
|
|
138
|
+
if (answer.toLowerCase().trim() === 'all') {
|
|
139
|
+
allProviders.forEach(id => selected.add(id));
|
|
140
|
+
} else if (answer.trim()) {
|
|
141
|
+
const nums = answer.split(',').map(s => parseInt(s.trim())).filter(n => !isNaN(n));
|
|
142
|
+
nums.forEach(n => {
|
|
143
|
+
const idx = n - 1;
|
|
144
|
+
if (idx >= 0 && idx < allProviders.length) {
|
|
145
|
+
selected.add(allProviders[idx]);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
console.log('\n✓ Selected providers:', Array.from(selected).join(', '));
|
|
151
|
+
|
|
152
|
+
// Build config
|
|
153
|
+
const config = {
|
|
154
|
+
version: '1.0',
|
|
155
|
+
providers: {}
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
selected.forEach(providerId => {
|
|
159
|
+
const info = PROVIDER_INFO[providerId];
|
|
160
|
+
const envKey = Object.entries(API_KEY_ENV_MAP).find(([k, v]) => v === providerId)?.[0];
|
|
161
|
+
|
|
162
|
+
config.providers[providerId] = {
|
|
163
|
+
name: info?.name || providerId,
|
|
164
|
+
apiKey: envKey ? process.env[envKey] : '',
|
|
165
|
+
models: [info?.models || 'default'],
|
|
166
|
+
type: 'api',
|
|
167
|
+
enabled: true
|
|
168
|
+
};
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
// Save config
|
|
172
|
+
fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2));
|
|
173
|
+
console.log('\n✓ Config saved to', CONFIG_FILE);
|
|
174
|
+
|
|
175
|
+
// Test connections
|
|
176
|
+
console.log('\n🧪 Testing connections...');
|
|
177
|
+
console.log(' (Skipped in wizard mode - run "npx a3m-router test" to verify)\n');
|
|
178
|
+
|
|
179
|
+
// Ready message
|
|
180
|
+
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
181
|
+
console.log('✅ A3M Router is ready!');
|
|
182
|
+
console.log('');
|
|
183
|
+
console.log(' Next steps:');
|
|
184
|
+
console.log(' 1. npx a3m-router serve # Start proxy server');
|
|
185
|
+
console.log(' 2. npx a3m-router test # Test provider connections');
|
|
186
|
+
console.log(' 3. npx a3m-router route "hi" # Try routing a query');
|
|
187
|
+
console.log('');
|
|
188
|
+
console.log(' Docs: https://github.com/Das-rebel/adaptive-memory-multi-model-router');
|
|
189
|
+
console.log('');
|
|
190
|
+
|
|
191
|
+
rl.close();
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
module.exports = { runWizard };
|
package/dist/cli.js
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
* A3M Router CLI - Adaptive Memory Multi-Model Router
|
|
4
4
|
*
|
|
5
5
|
* Commands:
|
|
6
|
-
* npx a3m-router serve [--port 8787]
|
|
6
|
+
* npx a3m-router serve [--port 8787] Start OpenAI-compatible proxy server
|
|
7
7
|
* npx a3m-router route <query> Route query to best provider
|
|
8
|
-
* npx a3m-router
|
|
8
|
+
* npx a3m-router setup Interactive setup wizard (auto-detect API keys)
|
|
9
|
+
* npx a3m-router batch <q1> <q2>.. Route multiple queries
|
|
9
10
|
* npx a3m-router providers List all configured providers
|
|
10
11
|
* npx a3m-router test Test all providers
|
|
11
12
|
* npx a3m-router compare <query> Compare providers side by side
|
|
@@ -155,6 +156,12 @@ async function main() {
|
|
|
155
156
|
const router = createA3MRouter({ memory: { maxSize: 1000 } });
|
|
156
157
|
|
|
157
158
|
switch (command) {
|
|
159
|
+
case 'setup': {
|
|
160
|
+
const { runWizard } = require('./cli/setupWizard.js');
|
|
161
|
+
runWizard();
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
164
|
+
|
|
158
165
|
case 'providers': {
|
|
159
166
|
const providers = providerConfig.getAvailableProviders();
|
|
160
167
|
const allProviders = providerConfig._providers;
|
|
@@ -72,6 +72,11 @@ export declare class ProviderRetryHandler {
|
|
|
72
72
|
* Check if an error should trigger a retry
|
|
73
73
|
*/
|
|
74
74
|
isRetryableError(error: any): boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Detect hard non-retryable account/policy states.
|
|
77
|
+
* These should fail fast instead of wasting retries.
|
|
78
|
+
*/
|
|
79
|
+
private isPermanentProviderStateError;
|
|
75
80
|
/**
|
|
76
81
|
* Check if error is a rate limit (429)
|
|
77
82
|
*/
|
|
@@ -283,6 +283,10 @@ class ProviderRetryHandler {
|
|
|
283
283
|
isRetryableError(error) {
|
|
284
284
|
if (!error)
|
|
285
285
|
return false;
|
|
286
|
+
// Known non-retryable account/quota/policy states seen in Chinese provider APIs.
|
|
287
|
+
if (this.isPermanentProviderStateError(error)) {
|
|
288
|
+
return false;
|
|
289
|
+
}
|
|
286
290
|
const config = this.configs.get('default').retry;
|
|
287
291
|
const retryableErrors = config.retryableErrors || DEFAULT_RETRY_CONFIG.retryableErrors;
|
|
288
292
|
// Check error code/message
|
|
@@ -304,6 +308,39 @@ class ProviderRetryHandler {
|
|
|
304
308
|
return true;
|
|
305
309
|
return false;
|
|
306
310
|
}
|
|
311
|
+
/**
|
|
312
|
+
* Detect hard non-retryable account/policy states.
|
|
313
|
+
* These should fail fast instead of wasting retries.
|
|
314
|
+
*/
|
|
315
|
+
isPermanentProviderStateError(error) {
|
|
316
|
+
const status = Number(error?.status ?? error?.statusCode ?? 0);
|
|
317
|
+
const message = String(error?.message || '').toLowerCase();
|
|
318
|
+
const code = String(error?.code || '').toLowerCase();
|
|
319
|
+
// Payment/balance/account states are generally non-retryable without human action.
|
|
320
|
+
if (status === 402)
|
|
321
|
+
return true;
|
|
322
|
+
if (status === 401 || status === 403)
|
|
323
|
+
return true;
|
|
324
|
+
const hardPatterns = [
|
|
325
|
+
'insufficient',
|
|
326
|
+
'balance',
|
|
327
|
+
'invalid api key',
|
|
328
|
+
'incorrect api key',
|
|
329
|
+
'access terminated',
|
|
330
|
+
'account abnormal',
|
|
331
|
+
'违规',
|
|
332
|
+
'quota exhausted',
|
|
333
|
+
'hour allocated quota exceeded',
|
|
334
|
+
'week allocated quota exceeded',
|
|
335
|
+
'month allocated quota exceeded',
|
|
336
|
+
'tpd rate limit'
|
|
337
|
+
];
|
|
338
|
+
for (const p of hardPatterns) {
|
|
339
|
+
if (message.includes(p) || code.includes(p))
|
|
340
|
+
return true;
|
|
341
|
+
}
|
|
342
|
+
return false;
|
|
343
|
+
}
|
|
307
344
|
/**
|
|
308
345
|
* Check if error is a rate limit (429)
|
|
309
346
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providerRetry.js","sourceRoot":"","sources":["../../src/routing/providerRetry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"providerRetry.js","sourceRoot":"","sources":["../../src/routing/providerRetry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Chinese Provider Reliability Playbook
|
|
2
|
+
|
|
3
|
+
This playbook captures retry/fail-fast guidance for Chinese LLM providers used by A3M.
|
|
4
|
+
|
|
5
|
+
## Why this exists
|
|
6
|
+
|
|
7
|
+
A generic `429 => retry` rule is often too coarse. Some Chinese-provider 429/4xx states are account/quota policy states that should fail fast instead of burning retries.
|
|
8
|
+
|
|
9
|
+
## A3M policy
|
|
10
|
+
|
|
11
|
+
- Retry:
|
|
12
|
+
- transient network failures (`ECONNRESET`, `ETIMEDOUT`, 5xx)
|
|
13
|
+
- throttling with temporary overload semantics
|
|
14
|
+
- 429 with explicit `Retry-After` timing
|
|
15
|
+
- Fail fast (non-retryable):
|
|
16
|
+
- auth/policy/billing/account states (401/402/403)
|
|
17
|
+
- account abnormal / access terminated
|
|
18
|
+
- hard quota exhaustion messaging (hour/week/month quota exhausted, org TPD exceeded)
|
|
19
|
+
|
|
20
|
+
## Implemented in code
|
|
21
|
+
|
|
22
|
+
- `src/routing/providerRetry.ts`
|
|
23
|
+
- `isPermanentProviderStateError(...)` now guards retries.
|
|
24
|
+
|
|
25
|
+
## Validation
|
|
26
|
+
|
|
27
|
+
- `eval/run_fault_injection.js`
|
|
28
|
+
- Includes `no_retry_on_chinese_quota_account_errors` scenario.
|
|
29
|
+
|
|
30
|
+
## Operational guidance
|
|
31
|
+
|
|
32
|
+
- Track provider-specific errors by normalized category:
|
|
33
|
+
- `transient`, `rate_limit_transient`, `quota_hard`, `auth`, `account_policy`, `server`
|
|
34
|
+
- Use this categorization to:
|
|
35
|
+
- reduce wasted retries
|
|
36
|
+
- improve fallback quality
|
|
37
|
+
- produce cleaner incident dashboards
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Claims and Evidence
|
|
2
|
+
|
|
3
|
+
This file maps product claims to reproducible evidence in-repo.
|
|
4
|
+
|
|
5
|
+
## Routing correctness and stability
|
|
6
|
+
|
|
7
|
+
- Claim: routing behavior is stable across releases.
|
|
8
|
+
- Evidence:
|
|
9
|
+
- `eval/benchmark_dataset.jsonl`
|
|
10
|
+
- `eval/golden_routes.json`
|
|
11
|
+
- `npm run eval:golden`
|
|
12
|
+
|
|
13
|
+
## Routing quality thresholds
|
|
14
|
+
|
|
15
|
+
- Claim: routing meets minimum quality bars for complexity/flags/domain/provider type.
|
|
16
|
+
- Evidence:
|
|
17
|
+
- `eval/thresholds.json`
|
|
18
|
+
- `eval/run_eval.js`
|
|
19
|
+
- `npm run eval:routing`
|
|
20
|
+
- Output artifact: `eval/results/latest.json`
|
|
21
|
+
|
|
22
|
+
## Reliability under failure
|
|
23
|
+
|
|
24
|
+
- Claim: retry/circuit-breaker/fallback logic works under failure scenarios.
|
|
25
|
+
- Evidence:
|
|
26
|
+
- `eval/run_fault_injection.js`
|
|
27
|
+
- `eval/fault_injection_thresholds.json`
|
|
28
|
+
- `npm run eval:faults`
|
|
29
|
+
- Output artifact: `eval/results/fault_injection_latest.json`
|
|
30
|
+
|
|
31
|
+
## Test coverage enforcement
|
|
32
|
+
|
|
33
|
+
- Claim: changes are tested in CI before merge.
|
|
34
|
+
- Evidence:
|
|
35
|
+
- `.github/workflows/ci.yml`
|
|
36
|
+
- Includes:
|
|
37
|
+
- `npm test`
|
|
38
|
+
- `npm run eval:routing`
|
|
39
|
+
- `npm run eval:golden`
|
|
40
|
+
- `npm run eval:faults`
|
|
41
|
+
- `npm run eval:shadow`
|
|
42
|
+
- `npm run test:py`
|
|
43
|
+
|
|
44
|
+
## Baseline governance
|
|
45
|
+
|
|
46
|
+
- Baseline file:
|
|
47
|
+
- `eval/baselines/main.json`
|
|
48
|
+
- Rule:
|
|
49
|
+
- Update baseline only when behavior change is intentional.
|
|
50
|
+
- PR must explain what changed and why.
|
|
51
|
+
|
|
52
|
+
## Experiment traceability
|
|
53
|
+
|
|
54
|
+
- Claim: evaluation outcomes are auditable over time.
|
|
55
|
+
- Evidence:
|
|
56
|
+
- `eval/lib/experiment_registry.js`
|
|
57
|
+
- `eval/experiments.jsonl` (local append-only run log)
|
|
58
|
+
- each eval runner appends run metadata + decision.
|