adaptive-memory-multi-model-router 2.14.13 → 2.14.15
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/.publish-tick +1 -1
- package/.well-known/ai-plugin.json +4 -4
- package/ARCHITECTURE.md +1 -1
- package/LANDING.md +1 -1
- package/LAUNCH.md +19 -19
- package/LAUNCH_SNAPSHOT.md +260 -0
- package/MANIFESTO.md +2 -2
- package/README.md +21 -19
- package/README_ja.md +3 -3
- package/README_zh.md +3 -3
- package/_schema.html +2 -2
- package/ai-plugin.json +16 -0
- package/articles/CHINESE_DIRECTORIES.md +100 -0
- package/articles/FRESH_devto.md +3 -3
- package/articles/FRESH_hackernews.md +3 -3
- package/articles/FRESH_reddit_ml.md +3 -3
- package/articles/FRESH_reddit_node.md +2 -2
- package/articles/FRESH_reddit_sideproject.md +1 -1
- package/articles/FRESH_reddit_webdev.md +1 -1
- package/articles/FROM_ZERO_TO_10K.md +2 -2
- package/articles/HN_CHINESE_STYLE.md +1 -1
- package/articles/HN_FINAL.md +6 -6
- package/articles/HN_SHOW_routerarena.md +2 -2
- package/articles/INDIEHACKERS_POST.md +1 -1
- package/articles/LLM_BENCHMARK_DEEP_DIVE.md +1 -1
- package/articles/NEWSLETTER_SUBMISSIONS.md +112 -0
- package/articles/PRESS_KIT_routerarena.md +3 -3
- package/articles/PRODUCTHUNT_LISTING.md +1 -1
- package/articles/PR_PLAN_vault.md +2 -2
- package/articles/REDDIT_POST.md +67 -0
- package/articles/ROUTERARENA_LEADER.md +2 -2
- package/articles/SHOW_HN_FINAL.md +1 -1
- package/articles/TWEETS_routerarena_leader.md +1 -1
- package/assets/a3m_3blue1brown.mp4 +0 -0
- package/benchmark-results.json +3 -3
- package/demo/3blue1brown_video.py +285 -0
- package/demo/3blue1brown_video_v2.py +310 -0
- package/demo/IMPROVED_PROMPTS.md +2 -2
- package/demo/a3m_3blue1brown.mp4 +0 -0
- package/demo/product-video-v1.mp4 +0 -0
- package/dist/cli/setupWizard.d.ts.map +1 -0
- package/dist/cost/budgetEnforcer.d.ts.map +1 -0
- package/dist/observability/changeWatch.d.ts.map +1 -0
- package/dist/observability/fatigueDetector.d.ts.map +1 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/middleware.d.ts.map +1 -0
- package/dist/observability/tracer.d.ts.map +1 -0
- package/dist/observability/types.d.ts.map +1 -0
- package/dist/routing/crossModelValidation.d.ts.map +1 -0
- package/dist/routing/providerHealth.d.ts.map +1 -0
- package/dist/routing/providerRetry.d.ts.map +1 -0
- package/dist/tui/dashboard.d.ts.map +1 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/docs/.well-known/ai-plugin.json +16 -0
- package/docs/BENCHMARK.md +2 -2
- package/docs/CITATIONS.md +74 -0
- package/docs/COUNCIL_V2.2_DECISION.md +1 -1
- package/docs/GEO.md +4 -4
- package/docs/GEO_ROOT_CAUSE.md +136 -0
- package/docs/GEO_STATUS.md +199 -0
- package/docs/GEO_TEST_RESULTS.md +176 -0
- package/docs/HN_CHECKLIST.md +1 -1
- package/docs/HN_FOUNDER_COMMENT.md +1 -1
- package/docs/HN_SUBMISSION_FINAL.md +10 -10
- package/docs/HN_SUBMISSION_V3.md +3 -3
- package/docs/LANGCHAIN_INTEGRATION.md +147 -0
- package/docs/QUICK_START.md +1 -1
- package/docs/ROUTING_RUBRIC.md +1 -1
- package/docs/SOCIAL_LISTENING.md +4 -4
- package/docs/TMLPD_V2.2_RESEARCH_ROADMAP.md +7 -7
- package/docs/UPDATE_TOPICS.md +1 -1
- package/docs/VERCEL_AI_SDK.md +209 -0
- package/docs/ai-plugin.json +16 -0
- package/docs/benchmark.html +4 -4
- package/docs/blog/routerarena-number-one.html +4 -4
- package/docs/compare.md +109 -0
- package/docs/comparison-litellm.md +3 -3
- package/docs/comparison.md +1 -1
- package/docs/cost-chart-ascii.md +1 -1
- package/docs/demo.html +1 -1
- package/docs/index.html +56 -5
- package/docs/llms.txt +3 -3
- package/docs/openapi.json +1 -1
- package/docs/well-known/ai-plugin.json +16 -0
- package/docs/wellknown/ai-plugin.json +16 -0
- package/hf-space/README.md +1 -1
- package/huggingface_space/README.md +35 -0
- package/huggingface_space/app.py +126 -0
- package/huggingface_space/create_space.py +208 -0
- package/huggingface_space/requirements.txt +1 -0
- package/index.html +1 -1
- package/llms.txt +4 -4
- package/package.json +6 -2
- package/proxy/README.md +1 -1
- package/research/FINDING_005_knowledge_gap_orthogonality.md +34 -0
- package/research/PUBLISH_LOG.md +2 -2
- package/scripts/routerarena_ensemble.js +144 -0
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
A3M Router — 3Blue1Brown Style Explainer Video Generator
|
|
4
|
+
|
|
5
|
+
Creates animated frames showing:
|
|
6
|
+
1. The problem: expensive AI routing
|
|
7
|
+
2. The solution: intelligent routing
|
|
8
|
+
3. How it works: 12 signals
|
|
9
|
+
4. Results: 76.43 score, 213x cheaper
|
|
10
|
+
|
|
11
|
+
Usage:
|
|
12
|
+
python3 demo/3blue1brown_video.py
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
import subprocess
|
|
16
|
+
import json
|
|
17
|
+
import sys
|
|
18
|
+
import math
|
|
19
|
+
import os
|
|
20
|
+
|
|
21
|
+
# Check dependencies
|
|
22
|
+
def check_deps():
|
|
23
|
+
try:
|
|
24
|
+
import matplotlib
|
|
25
|
+
import numpy
|
|
26
|
+
print("✅ matplotlib, numpy available")
|
|
27
|
+
return True
|
|
28
|
+
except ImportError as e:
|
|
29
|
+
print(f"❌ Missing: {e}")
|
|
30
|
+
print("Install: pip install matplotlib numpy pillow")
|
|
31
|
+
return False
|
|
32
|
+
|
|
33
|
+
def run_command(cmd, cwd=None):
|
|
34
|
+
result = subprocess.run(cmd, shell=True, capture_output=True, text=True, cwd=cwd)
|
|
35
|
+
return result.returncode == 0, result.stdout, result.stderr
|
|
36
|
+
|
|
37
|
+
# Frame definitions - each scene
|
|
38
|
+
SCENES = [
|
|
39
|
+
{
|
|
40
|
+
"id": 1,
|
|
41
|
+
"title": "The AI Cost Problem",
|
|
42
|
+
"content": "Every AI query goes to GPT-4\n$10.02 per 1,000 queries",
|
|
43
|
+
"visual": "gpt4_cost_visual",
|
|
44
|
+
"duration": 3.0
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"id": 2,
|
|
48
|
+
"title": "The Solution",
|
|
49
|
+
"content": "Route queries intelligently\nto the cheapest capable model",
|
|
50
|
+
"visual": "routing_diagram",
|
|
51
|
+
"duration": 3.0
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"id": 3,
|
|
55
|
+
"title": "How A3M Routes",
|
|
56
|
+
"content": "12 signals → instant decision\n<1ms, no GPU needed",
|
|
57
|
+
"visual": "signals_animation",
|
|
58
|
+
"duration": 4.0
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"id": 4,
|
|
62
|
+
"title": "The Result",
|
|
63
|
+
"content": "#1 on RouterArena\n76.43 accuracy at $0.047/1K",
|
|
64
|
+
"visual": "benchmark_reveal",
|
|
65
|
+
"duration": 3.0
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"id": 5,
|
|
69
|
+
"title": "213x Cheaper",
|
|
70
|
+
"content": "vs GPT-5: $10.02 → $0.047\nSame quality, 1/213th the cost",
|
|
71
|
+
"visual": "cost_comparison",
|
|
72
|
+
"duration": 3.0
|
|
73
|
+
}
|
|
74
|
+
]
|
|
75
|
+
|
|
76
|
+
def generate_frame_matplotlib(scene_num, frame_num, total_frames, output_path):
|
|
77
|
+
"""Generate a single frame using matplotlib"""
|
|
78
|
+
import matplotlib.pyplot as plt
|
|
79
|
+
import matplotlib.patches as patches
|
|
80
|
+
import numpy as np
|
|
81
|
+
|
|
82
|
+
# 3Blue1Brown color scheme
|
|
83
|
+
bg_color = '#1a1a2e'
|
|
84
|
+
text_color = '#ffffff'
|
|
85
|
+
accent1 = '#00a8ff' # Blue
|
|
86
|
+
accent2 = '#ff6b6b' # Red
|
|
87
|
+
accent3 = '#4ecdc4' # Teal
|
|
88
|
+
accent4 = '#ffe66d' # Yellow
|
|
89
|
+
|
|
90
|
+
fig, ax = plt.subplots(figsize=(16, 9), facecolor=bg_color)
|
|
91
|
+
ax.set_facecolor(bg_color)
|
|
92
|
+
ax.set_xlim(0, 16)
|
|
93
|
+
ax.set_ylim(0, 9)
|
|
94
|
+
ax.axis('off')
|
|
95
|
+
|
|
96
|
+
if scene_num == 1:
|
|
97
|
+
# Scene 1: GPT-4 cost visualization
|
|
98
|
+
# Big "$10.02" in center
|
|
99
|
+
ax.text(8, 5.5, '$10.02', fontsize=120, color=accent2,
|
|
100
|
+
ha='center', va='center', fontweight='bold', family='monospace')
|
|
101
|
+
ax.text(8, 3.5, 'per 1,000 queries', fontsize=36, color=text_color,
|
|
102
|
+
ha='center', va='center')
|
|
103
|
+
ax.text(8, 1.5, 'GPT-4o', fontsize=28, color=accent1,
|
|
104
|
+
ha='center', va='center', style='italic')
|
|
105
|
+
|
|
106
|
+
# Animated circles representing money
|
|
107
|
+
progress = frame_num / total_frames
|
|
108
|
+
for i in range(int(progress * 20)):
|
|
109
|
+
x = 2 + (i % 5) * 3
|
|
110
|
+
y = 7.5 - (i // 5) * 0.8
|
|
111
|
+
circle = patches.Circle((x, y), 0.3, color=accent2, alpha=0.6)
|
|
112
|
+
ax.add_patch(circle)
|
|
113
|
+
|
|
114
|
+
elif scene_num == 2:
|
|
115
|
+
# Scene 2: Routing diagram
|
|
116
|
+
ax.text(8, 7.5, 'A3M Router', fontsize=48, color=accent1,
|
|
117
|
+
ha='center', va='center', fontweight='bold')
|
|
118
|
+
|
|
119
|
+
# Query box
|
|
120
|
+
rect = patches.FancyBboxPatch((1, 3.5), 3, 2, boxstyle="round,pad=0.1",
|
|
121
|
+
facecolor=accent3, edgecolor='white', linewidth=2)
|
|
122
|
+
ax.add_patch(rect)
|
|
123
|
+
ax.text(2.5, 4.5, 'Query', fontsize=24, color=bg_color,
|
|
124
|
+
ha='center', va='center', fontweight='bold')
|
|
125
|
+
|
|
126
|
+
# Arrow
|
|
127
|
+
ax.annotate('', xy=(5.5, 4.5), xytext=(4, 4.5),
|
|
128
|
+
arrowprops=dict(arrowstyle='->', color=accent1, lw=3))
|
|
129
|
+
|
|
130
|
+
# Router box
|
|
131
|
+
rect = patches.FancyBboxPatch((5.5, 3), 4, 3, boxstyle="round,pad=0.1",
|
|
132
|
+
facecolor=accent1, edgecolor='white', linewidth=3)
|
|
133
|
+
ax.add_patch(rect)
|
|
134
|
+
ax.text(7.5, 5, 'A3M', fontsize=28, color=text_color,
|
|
135
|
+
ha='center', va='center', fontweight='bold')
|
|
136
|
+
ax.text(7.5, 4, '12 signals', fontsize=18, color='white',
|
|
137
|
+
ha='center', va='center')
|
|
138
|
+
ax.text(7.5, 3.3, '<1ms routing', fontsize=14, color='white',
|
|
139
|
+
ha='center', va='center')
|
|
140
|
+
|
|
141
|
+
# Arrows to providers
|
|
142
|
+
providers = [('Groq\nFree', 12, 6.5, accent3),
|
|
143
|
+
('GPT-4o\nPremium', 12, 4.5, accent2),
|
|
144
|
+
('Gemini\nMid', 12, 2.5, accent4)]
|
|
145
|
+
|
|
146
|
+
progress = frame_num / total_frames
|
|
147
|
+
for i, (name, x, y, color) in enumerate(providers):
|
|
148
|
+
if progress > (i * 0.3):
|
|
149
|
+
ax.annotate('', xy=(x, y), xytext=(9.5, 4.5),
|
|
150
|
+
arrowprops=dict(arrowstyle='->', color=color, lw=2))
|
|
151
|
+
rect = patches.FancyBboxPatch((x-0.8, y-0.5), 1.6, 1,
|
|
152
|
+
boxstyle="round,pad=0.05",
|
|
153
|
+
facecolor=color, edgecolor='white',
|
|
154
|
+
linewidth=1, alpha=min(1, (progress - i*0.3)*3))
|
|
155
|
+
ax.add_patch(rect)
|
|
156
|
+
ax.text(x, y, name, fontsize=12, color=bg_color,
|
|
157
|
+
ha='center', va='center', fontweight='bold', alpha=min(1, (progress - i*0.3)*3))
|
|
158
|
+
|
|
159
|
+
elif scene_num == 3:
|
|
160
|
+
# Scene 3: 12 signals animation
|
|
161
|
+
ax.text(8, 8, '12 Keyword Signals', fontsize=44, color=accent1,
|
|
162
|
+
ha='center', va='center', fontweight='bold')
|
|
163
|
+
ax.text(8, 7, 'Multi-dimensional query analysis', fontsize=24, color=text_color,
|
|
164
|
+
ha='center', va='center', alpha=0.7)
|
|
165
|
+
|
|
166
|
+
# Grid of signals
|
|
167
|
+
signals = ['coding', 'math', 'creative', 'factual',
|
|
168
|
+
'simple', 'complex', 'debug', 'explain',
|
|
169
|
+
'short', 'long', 'structured', 'open']
|
|
170
|
+
|
|
171
|
+
progress = frame_num / total_frames
|
|
172
|
+
cols = 4
|
|
173
|
+
for idx, sig in enumerate(signals):
|
|
174
|
+
row = idx // cols
|
|
175
|
+
col = idx % cols
|
|
176
|
+
x = 3 + col * 2.5
|
|
177
|
+
y = 5.5 - row * 1.8
|
|
178
|
+
|
|
179
|
+
alpha = min(1, max(0, (progress - idx * 0.08) * 3))
|
|
180
|
+
if alpha > 0:
|
|
181
|
+
color = [accent1, accent3, accent4, accent2][idx % 4]
|
|
182
|
+
circle = patches.Circle((x, y), 0.5, color=color, alpha=alpha * 0.8)
|
|
183
|
+
ax.add_patch(circle)
|
|
184
|
+
ax.text(x, y, sig, fontsize=14, color=bg_color,
|
|
185
|
+
ha='center', va='center', fontweight='bold', alpha=alpha)
|
|
186
|
+
|
|
187
|
+
elif scene_num == 4:
|
|
188
|
+
# Scene 4: Benchmark reveal
|
|
189
|
+
ax.text(8, 7, 'RouterArena Benchmark', fontsize=44, color=text_color,
|
|
190
|
+
ha='center', va='center', fontweight='bold')
|
|
191
|
+
|
|
192
|
+
progress = frame_num / total_frames
|
|
193
|
+
|
|
194
|
+
# Score reveal
|
|
195
|
+
if progress > 0.3:
|
|
196
|
+
score_alpha = min(1, (progress - 0.3) * 3)
|
|
197
|
+
ax.text(8, 5, '76.43', fontsize=120, color=accent1,
|
|
198
|
+
ha='center', va='center', fontweight='bold', alpha=score_alpha,
|
|
199
|
+
family='monospace')
|
|
200
|
+
ax.text(8, 3, '#1 OF 19 ROUTERS', fontsize=28, color=accent3,
|
|
201
|
+
ha='center', va='center', alpha=score_alpha)
|
|
202
|
+
ax.text(8, 2, 'arXiv:2510.00202', fontsize=18, color=text_color,
|
|
203
|
+
ha='center', va='center', alpha=score_alpha * 0.7)
|
|
204
|
+
|
|
205
|
+
elif scene_num == 5:
|
|
206
|
+
# Scene 5: Cost comparison
|
|
207
|
+
ax.text(8, 7.5, '213x Cheaper', fontsize=56, color=accent3,
|
|
208
|
+
ha='center', va='center', fontweight='bold')
|
|
209
|
+
|
|
210
|
+
progress = frame_num / total_frames
|
|
211
|
+
|
|
212
|
+
# GPT-5 cost
|
|
213
|
+
if progress > 0.2:
|
|
214
|
+
alpha = min(1, (progress - 0.2) * 3)
|
|
215
|
+
ax.text(4, 5, '$10.02', fontsize=64, color=accent2,
|
|
216
|
+
ha='center', va='center', fontweight='bold', alpha=alpha)
|
|
217
|
+
ax.text(4, 3.5, 'GPT-5', fontsize=24, color=text_color,
|
|
218
|
+
ha='center', va='center', alpha=alpha)
|
|
219
|
+
|
|
220
|
+
# A3M cost
|
|
221
|
+
if progress > 0.5:
|
|
222
|
+
alpha = min(1, (progress - 0.5) * 3)
|
|
223
|
+
ax.text(12, 5, '$0.047', fontsize=64, color=accent3,
|
|
224
|
+
ha='center', va='center', fontweight='bold', alpha=alpha)
|
|
225
|
+
ax.text(12, 3.5, 'A3M', fontsize=24, color=text_color,
|
|
226
|
+
ha='center', va='center', alpha=alpha)
|
|
227
|
+
|
|
228
|
+
# VS text
|
|
229
|
+
if progress > 0.7:
|
|
230
|
+
alpha = min(1, (progress - 0.7) * 3)
|
|
231
|
+
ax.text(8, 5, 'vs', fontsize=36, color=text_color,
|
|
232
|
+
ha='center', va='center', alpha=alpha * 0.5)
|
|
233
|
+
ax.text(8, 2, 'Same quality, 1/213th the cost',
|
|
234
|
+
fontsize=22, color=text_color, ha='center', va='center', alpha=alpha)
|
|
235
|
+
|
|
236
|
+
plt.tight_layout()
|
|
237
|
+
plt.savefig(output_path, facecolor=bg_color, dpi=100)
|
|
238
|
+
plt.close()
|
|
239
|
+
|
|
240
|
+
def main():
|
|
241
|
+
if not check_deps():
|
|
242
|
+
sys.exit(1)
|
|
243
|
+
|
|
244
|
+
print("🎬 A3M Router — 3Blue1Brown Style Video Generator")
|
|
245
|
+
print("=" * 50)
|
|
246
|
+
|
|
247
|
+
# Create output directory
|
|
248
|
+
output_dir = '/Users/Subho/adaptive-memory-multi-model-router/demo/frames_3b1b'
|
|
249
|
+
os.makedirs(output_dir, exist_ok=True)
|
|
250
|
+
|
|
251
|
+
total_scenes = len(SCENES)
|
|
252
|
+
frames_per_scene = 30 # 30 frames per scene = ~1s at 30fps
|
|
253
|
+
|
|
254
|
+
print(f"Generating {total_scenes} scenes, {frames_per_scene} frames each...")
|
|
255
|
+
print(f"Output: {output_dir}")
|
|
256
|
+
|
|
257
|
+
for scene in SCENES:
|
|
258
|
+
scene_id = scene['id']
|
|
259
|
+
scene_dir = os.path.join(output_dir, f'scene_{scene_id}')
|
|
260
|
+
os.makedirs(scene_dir, exist_ok=True)
|
|
261
|
+
|
|
262
|
+
print(f"\n📽️ Scene {scene_id}: {scene['title']}")
|
|
263
|
+
|
|
264
|
+
for frame_num in range(1, frames_per_scene + 1):
|
|
265
|
+
output_path = os.path.join(scene_dir, f'frame_{frame_num:04d}.png')
|
|
266
|
+
generate_frame_matplotlib(scene_id, frame_num, frames_per_scene, output_path)
|
|
267
|
+
|
|
268
|
+
if frame_num % 10 == 0:
|
|
269
|
+
print(f" Frame {frame_num}/{frames_per_scene}")
|
|
270
|
+
|
|
271
|
+
print(f"\n✅ Generated {total_scenes * frames_per_scene} frames")
|
|
272
|
+
print(f"\nNext steps:")
|
|
273
|
+
print(f"1. Install ffmpeg: brew install ffmpeg")
|
|
274
|
+
print(f"2. Run: ./demo/render_3b1b_video.sh")
|
|
275
|
+
|
|
276
|
+
# Save scene config
|
|
277
|
+
with open(os.path.join(output_dir, 'scenes.json'), 'w') as f:
|
|
278
|
+
json.dump(SCENES, f, indent=2)
|
|
279
|
+
|
|
280
|
+
print(f"\n3. Or use Python to create video:")
|
|
281
|
+
print(f" python3 -c \"from PIL import Image; import subprocess\"")
|
|
282
|
+
print(f" # Then run ffmpeg to compile")
|
|
283
|
+
|
|
284
|
+
if __name__ == '__main__':
|
|
285
|
+
main()
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
A3M Router — 3Blue1Brown Style Explainer Video Generator
|
|
4
|
+
Improved version with more frames and better animations
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import subprocess
|
|
8
|
+
import json
|
|
9
|
+
import sys
|
|
10
|
+
import os
|
|
11
|
+
import shutil
|
|
12
|
+
|
|
13
|
+
def run_command(cmd, cwd=None):
|
|
14
|
+
result = subprocess.run(cmd, shell=True, capture_output=True, text=True, cwd=cwd)
|
|
15
|
+
return result.returncode == 0, result.stdout, result.stderr
|
|
16
|
+
|
|
17
|
+
def check_deps():
|
|
18
|
+
try:
|
|
19
|
+
import matplotlib
|
|
20
|
+
import numpy
|
|
21
|
+
print("✅ matplotlib, numpy available")
|
|
22
|
+
return True
|
|
23
|
+
except ImportError as e:
|
|
24
|
+
print(f"❌ Missing: {e}")
|
|
25
|
+
return False
|
|
26
|
+
|
|
27
|
+
def generate_frame_matplotlib(scene_num, frame_num, total_frames, output_path):
|
|
28
|
+
"""Generate a single frame using matplotlib"""
|
|
29
|
+
import matplotlib.pyplot as plt
|
|
30
|
+
import matplotlib.patches as patches
|
|
31
|
+
import numpy as np
|
|
32
|
+
|
|
33
|
+
# 3Blue1Brown color scheme
|
|
34
|
+
bg_color = '#1a1a2e'
|
|
35
|
+
text_color = '#ffffff'
|
|
36
|
+
accent1 = '#00a8ff' # Blue
|
|
37
|
+
accent2 = '#ff6b6b' # Red
|
|
38
|
+
accent3 = '#4ecdc4' # Teal
|
|
39
|
+
accent4 = '#ffe66d' # Yellow
|
|
40
|
+
accent5 = '#a855f7' # Purple
|
|
41
|
+
|
|
42
|
+
fig, ax = plt.subplots(figsize=(16, 9), facecolor=bg_color)
|
|
43
|
+
ax.set_facecolor(bg_color)
|
|
44
|
+
ax.set_xlim(0, 16)
|
|
45
|
+
ax.set_ylim(0, 9)
|
|
46
|
+
ax.axis('off')
|
|
47
|
+
|
|
48
|
+
# Smooth animation progress (ease-in-out)
|
|
49
|
+
def ease(t):
|
|
50
|
+
return t * t * (3 - 2 * t) # Smoothstep
|
|
51
|
+
|
|
52
|
+
progress = ease(frame_num / total_frames)
|
|
53
|
+
|
|
54
|
+
if scene_num == 1:
|
|
55
|
+
# Scene 1: The problem - expensive AI
|
|
56
|
+
ax.text(8, 6.5, 'The Problem:', fontsize=36, color=text_color,
|
|
57
|
+
ha='center', va='center', alpha=0.8)
|
|
58
|
+
ax.text(8, 5, '$10.02', fontsize=140, color=accent2,
|
|
59
|
+
ha='center', va='center', fontweight='bold', family='monospace',
|
|
60
|
+
alpha=progress)
|
|
61
|
+
ax.text(8, 2.5, 'per 1,000 queries', fontsize=32, color=text_color,
|
|
62
|
+
ha='center', va='center', alpha=progress * 0.9)
|
|
63
|
+
ax.text(8, 1.2, 'GPT-4o premium pricing', fontsize=20, color=text_color,
|
|
64
|
+
ha='center', va='center', alpha=progress * 0.6, style='italic')
|
|
65
|
+
|
|
66
|
+
# Floating dollar signs
|
|
67
|
+
for i in range(int(progress * 15)):
|
|
68
|
+
x = 2 + (i % 5) * 2.8 + np.sin(i * 0.7) * 0.5
|
|
69
|
+
y = 7.5 - (i // 5) * 2 + np.cos(i * 0.5) * 0.3
|
|
70
|
+
size = 20 + (i % 3) * 10
|
|
71
|
+
ax.text(x, y, '$', fontsize=size, color=accent2, alpha=0.4)
|
|
72
|
+
|
|
73
|
+
elif scene_num == 2:
|
|
74
|
+
# Scene 2: The routing concept
|
|
75
|
+
ax.text(8, 7.5, 'The Solution:', fontsize=36, color=text_color,
|
|
76
|
+
ha='center', va='center', alpha=0.8)
|
|
77
|
+
ax.text(8, 6.2, 'Intelligent LLM Routing', fontsize=48, color=accent1,
|
|
78
|
+
ha='center', va='center', fontweight='bold', alpha=progress)
|
|
79
|
+
|
|
80
|
+
# Query → Router → Provider flow
|
|
81
|
+
query_x = 2.5
|
|
82
|
+
router_x = 8
|
|
83
|
+
provider_x = 13.5
|
|
84
|
+
|
|
85
|
+
# Query box (animate in)
|
|
86
|
+
if progress > 0.1:
|
|
87
|
+
q_alpha = min(1, (progress - 0.1) * 3)
|
|
88
|
+
rect = patches.FancyBboxPatch((query_x - 1.2, 3.2), 2.4, 2,
|
|
89
|
+
boxstyle="round,pad=0.15",
|
|
90
|
+
facecolor=accent3, edgecolor='white',
|
|
91
|
+
linewidth=3, alpha=q_alpha)
|
|
92
|
+
ax.add_patch(rect)
|
|
93
|
+
ax.text(query_x, 4.2, 'YOUR', fontsize=20, color=bg_color,
|
|
94
|
+
ha='center', va='center', fontweight='bold', alpha=q_alpha)
|
|
95
|
+
ax.text(query_x, 3.6, 'QUERY', fontsize=20, color=bg_color,
|
|
96
|
+
ha='center', va='center', fontweight='bold', alpha=q_alpha)
|
|
97
|
+
|
|
98
|
+
# Router box
|
|
99
|
+
if progress > 0.3:
|
|
100
|
+
r_alpha = min(1, (progress - 0.3) * 3)
|
|
101
|
+
rect = patches.FancyBboxPatch((router_x - 1.8, 2.5), 3.6, 3.4,
|
|
102
|
+
boxstyle="round,pad=0.15",
|
|
103
|
+
facecolor=accent1, edgecolor='white',
|
|
104
|
+
linewidth=4, alpha=r_alpha)
|
|
105
|
+
ax.add_patch(rect)
|
|
106
|
+
ax.text(router_x, 4.7, 'A3M', fontsize=36, color=text_color,
|
|
107
|
+
ha='center', va='center', fontweight='bold', alpha=r_alpha)
|
|
108
|
+
ax.text(router_x, 3.7, 'ROUTER', fontsize=28, color=text_color,
|
|
109
|
+
ha='center', va='center', fontweight='bold', alpha=r_alpha)
|
|
110
|
+
ax.text(router_x, 2.9, '<1ms • No GPU', fontsize=14, color='white',
|
|
111
|
+
ha='center', va='center', alpha=r_alpha * 0.8)
|
|
112
|
+
|
|
113
|
+
# Provider boxes
|
|
114
|
+
if progress > 0.5:
|
|
115
|
+
providers = [
|
|
116
|
+
('FREE', 'Groq', accent3, 6),
|
|
117
|
+
('CHEAP', 'Mistral', accent4, 4.2),
|
|
118
|
+
('PREMIUM', 'GPT-4o', accent2, 2.4)
|
|
119
|
+
]
|
|
120
|
+
for name, model, color, y in providers:
|
|
121
|
+
p_alpha = min(1, (progress - 0.5) * 2)
|
|
122
|
+
rect = patches.FancyBboxPatch((provider_x - 1.5, y - 0.4), 3, 0.8,
|
|
123
|
+
boxstyle="round,pad=0.1",
|
|
124
|
+
facecolor=color, edgecolor='white',
|
|
125
|
+
linewidth=2, alpha=p_alpha * 0.9)
|
|
126
|
+
ax.add_patch(rect)
|
|
127
|
+
ax.text(provider_x, y, f'{name}', fontsize=14, color=bg_color,
|
|
128
|
+
ha='center', va='center', fontweight='bold', alpha=p_alpha)
|
|
129
|
+
|
|
130
|
+
# Arrows
|
|
131
|
+
if progress > 0.2:
|
|
132
|
+
a_alpha = min(1, (progress - 0.2) * 3)
|
|
133
|
+
ax.annotate('', xy=(router_x - 1.8, 4.2), xytext=(query_x + 1.2, 4.2),
|
|
134
|
+
arrowprops=dict(arrowstyle='->', color=accent1, lw=3), alpha=a_alpha)
|
|
135
|
+
|
|
136
|
+
if progress > 0.5:
|
|
137
|
+
for y in [6, 4.2, 2.4]:
|
|
138
|
+
ax.annotate('', xy=(provider_x - 1.5, y), xytext=(router_x + 1.8, 4.2),
|
|
139
|
+
arrowprops=dict(arrowstyle='->', color='white', lw=2), alpha=0.5)
|
|
140
|
+
|
|
141
|
+
elif scene_num == 3:
|
|
142
|
+
# Scene 3: 12 signals
|
|
143
|
+
ax.text(8, 7.8, '12 Keyword Signals', fontsize=48, color=accent1,
|
|
144
|
+
ha='center', va='center', fontweight='bold', alpha=progress)
|
|
145
|
+
ax.text(8, 6.8, 'Instant multi-dimensional query analysis', fontsize=22,
|
|
146
|
+
color=text_color, ha='center', va='center', alpha=progress * 0.7)
|
|
147
|
+
|
|
148
|
+
signals = [
|
|
149
|
+
('code', accent1), ('math', accent3), ('creative', accent4),
|
|
150
|
+
('factual', accent2), ('simple', accent1), ('complex', accent3),
|
|
151
|
+
('debug', accent4), ('explain', accent2), ('short', accent1),
|
|
152
|
+
('long', accent3), ('structured', accent4), ('open', accent2)
|
|
153
|
+
]
|
|
154
|
+
|
|
155
|
+
cols = 4
|
|
156
|
+
for idx, (sig, color) in enumerate(signals):
|
|
157
|
+
row = idx // cols
|
|
158
|
+
col = idx % cols
|
|
159
|
+
x = 3.2 + col * 2.7
|
|
160
|
+
y = 5.2 - row * 1.7
|
|
161
|
+
|
|
162
|
+
# Staggered animation
|
|
163
|
+
sig_progress = max(0, min(1, (progress - idx * 0.06) * 4))
|
|
164
|
+
if sig_progress > 0:
|
|
165
|
+
circle = patches.Circle((x, y), 0.6, color=color, alpha=sig_progress * 0.85)
|
|
166
|
+
ax.add_patch(circle)
|
|
167
|
+
ax.text(x, y, sig, fontsize=16, color=bg_color,
|
|
168
|
+
ha='center', va='center', fontweight='bold', alpha=sig_progress)
|
|
169
|
+
|
|
170
|
+
# Bottom text
|
|
171
|
+
if progress > 0.8:
|
|
172
|
+
ax.text(8, 1, 'Zero ML training • No GPU required • Runs anywhere',
|
|
173
|
+
fontsize=16, color=text_color, ha='center', va='center',
|
|
174
|
+
alpha=(progress - 0.8) * 5, style='italic')
|
|
175
|
+
|
|
176
|
+
elif scene_num == 4:
|
|
177
|
+
# Scene 4: RouterArena results
|
|
178
|
+
ax.text(8, 7.5, 'Official Benchmark Results', fontsize=40, color=text_color,
|
|
179
|
+
ha='center', va='center', fontweight='bold', alpha=0.8)
|
|
180
|
+
ax.text(8, 6.5, 'RouterArena (arXiv:2510.00202)', fontsize=20, color=accent3,
|
|
181
|
+
ha='center', va='center', alpha=progress * 0.7)
|
|
182
|
+
|
|
183
|
+
# Big score reveal
|
|
184
|
+
if progress > 0.2:
|
|
185
|
+
score_alpha = min(1, (progress - 0.2) * 2.5)
|
|
186
|
+
ax.text(8, 4.5, '76.43', fontsize=140, color=accent1,
|
|
187
|
+
ha='center', va='center', fontweight='bold', alpha=score_alpha,
|
|
188
|
+
family='monospace')
|
|
189
|
+
|
|
190
|
+
if progress > 0.4:
|
|
191
|
+
ax.text(8, 2.8, '#1', fontsize=72, color=accent4,
|
|
192
|
+
ha='center', va='center', fontweight='bold',
|
|
193
|
+
alpha=min(1, (progress - 0.4) * 3))
|
|
194
|
+
ax.text(8, 2, 'OUT OF 19 ROUTERS', fontsize=24, color=text_color,
|
|
195
|
+
ha='center', va='center',
|
|
196
|
+
alpha=min(1, (progress - 0.4) * 3))
|
|
197
|
+
|
|
198
|
+
if progress > 0.6:
|
|
199
|
+
# Comparison bars
|
|
200
|
+
bars = [
|
|
201
|
+
('A3M', 76.43, accent1),
|
|
202
|
+
('Sqwish', 75.27, accent3),
|
|
203
|
+
('GPT-5', 64.32, accent2),
|
|
204
|
+
]
|
|
205
|
+
bar_y = 0.8
|
|
206
|
+
for name, score, color in bars:
|
|
207
|
+
bar_alpha = min(1, (progress - 0.6) * 2)
|
|
208
|
+
bar_width = (score / 100) * 12
|
|
209
|
+
rect = patches.FancyBboxPatch((2, bar_y), bar_width, 0.4,
|
|
210
|
+
boxstyle="round,pad=0.05",
|
|
211
|
+
facecolor=color, alpha=bar_alpha * 0.8)
|
|
212
|
+
ax.add_patch(rect)
|
|
213
|
+
ax.text(14.5, bar_y + 0.2, f'{name}: {score}', fontsize=14,
|
|
214
|
+
color=text_color, ha='right', va='center', alpha=bar_alpha)
|
|
215
|
+
bar_y += 0.6
|
|
216
|
+
|
|
217
|
+
elif scene_num == 5:
|
|
218
|
+
# Scene 5: 213x savings
|
|
219
|
+
ax.text(8, 7.2, '213× Cheaper', fontsize=64, color=accent3,
|
|
220
|
+
ha='center', va='center', fontweight='bold', alpha=progress)
|
|
221
|
+
|
|
222
|
+
if progress > 0.2:
|
|
223
|
+
# GPT-5 side
|
|
224
|
+
gpt_alpha = min(1, (progress - 0.2) * 3)
|
|
225
|
+
ax.text(4, 5, '$10.02', fontsize=72, color=accent2,
|
|
226
|
+
ha='center', va='center', fontweight='bold', alpha=gpt_alpha)
|
|
227
|
+
ax.text(4, 3.5, 'GPT-5', fontsize=28, color=text_color,
|
|
228
|
+
ha='center', va='center', alpha=gpt_alpha)
|
|
229
|
+
|
|
230
|
+
if progress > 0.5:
|
|
231
|
+
# A3M side
|
|
232
|
+
a3m_alpha = min(1, (progress - 0.5) * 3)
|
|
233
|
+
ax.text(12, 5, '$0.047', fontsize=72, color=accent3,
|
|
234
|
+
ha='center', va='center', fontweight='bold', alpha=a3m_alpha)
|
|
235
|
+
ax.text(12, 3.5, 'A3M', fontsize=28, color=text_color,
|
|
236
|
+
ha='center', va='center', alpha=a3m_alpha)
|
|
237
|
+
|
|
238
|
+
if progress > 0.7:
|
|
239
|
+
# VS divider
|
|
240
|
+
vs_alpha = min(1, (progress - 0.7) * 4)
|
|
241
|
+
ax.text(8, 5, 'vs', fontsize=48, color=text_color,
|
|
242
|
+
ha='center', va='center', alpha=vs_alpha * 0.5)
|
|
243
|
+
|
|
244
|
+
if progress > 0.8:
|
|
245
|
+
ax.text(8, 2, 'Same quality routing • 1/213th the cost',
|
|
246
|
+
fontsize=20, color=text_color, ha='center', va='center',
|
|
247
|
+
alpha=(progress - 0.8) * 5, style='italic')
|
|
248
|
+
|
|
249
|
+
if progress > 0.9:
|
|
250
|
+
ax.text(8, 1, 'github.com/Das-rebel/a3m-router',
|
|
251
|
+
fontsize=16, color=accent1, ha='center', va='center',
|
|
252
|
+
alpha=(progress - 0.9) * 10)
|
|
253
|
+
|
|
254
|
+
plt.tight_layout()
|
|
255
|
+
plt.savefig(output_path, facecolor=bg_color, dpi=100)
|
|
256
|
+
plt.close()
|
|
257
|
+
|
|
258
|
+
def main():
|
|
259
|
+
if not check_deps():
|
|
260
|
+
sys.exit(1)
|
|
261
|
+
|
|
262
|
+
print("🎬 A3M Router — 3Blue1Brown Style Video Generator v2")
|
|
263
|
+
print("=" * 55)
|
|
264
|
+
|
|
265
|
+
output_dir = '/Users/Subho/adaptive-memory-multi-model-router/demo/frames_3b1b_v2'
|
|
266
|
+
|
|
267
|
+
# Clean old frames
|
|
268
|
+
if os.path.exists(output_dir):
|
|
269
|
+
shutil.rmtree(output_dir)
|
|
270
|
+
os.makedirs(output_dir)
|
|
271
|
+
|
|
272
|
+
scenes = [
|
|
273
|
+
{"id": 1, "title": "The Problem", "duration": 4.0},
|
|
274
|
+
{"id": 2, "title": "The Solution", "duration": 5.0},
|
|
275
|
+
{"id": 3, "title": "12 Signals", "duration": 5.0},
|
|
276
|
+
{"id": 4, "title": "Benchmark", "duration": 4.0},
|
|
277
|
+
{"id": 5, "title": "213x Savings", "duration": 4.0},
|
|
278
|
+
]
|
|
279
|
+
|
|
280
|
+
fps = 30
|
|
281
|
+
total_frames = 0
|
|
282
|
+
|
|
283
|
+
for scene in scenes:
|
|
284
|
+
scene_id = scene['id']
|
|
285
|
+
scene_dir = os.path.join(output_dir, f'scene_{scene_id}')
|
|
286
|
+
os.makedirs(scene_dir)
|
|
287
|
+
|
|
288
|
+
num_frames = int(scene['duration'] * fps)
|
|
289
|
+
total_frames += num_frames
|
|
290
|
+
|
|
291
|
+
print(f"\n📽️ Scene {scene_id}: {scene['title']} ({num_frames} frames)")
|
|
292
|
+
|
|
293
|
+
for frame_num in range(1, num_frames + 1):
|
|
294
|
+
output_path = os.path.join(scene_dir, f'frame_{frame_num:04d}.png')
|
|
295
|
+
generate_frame_matplotlib(scene_id, frame_num, num_frames, output_path)
|
|
296
|
+
|
|
297
|
+
if frame_num % 30 == 0:
|
|
298
|
+
print(f" ✓ Frame {frame_num}/{num_frames}")
|
|
299
|
+
|
|
300
|
+
print(f"\n✅ Generated {total_frames} total frames ({total_frames/fps:.1f}s)")
|
|
301
|
+
|
|
302
|
+
# Save scene config
|
|
303
|
+
with open(os.path.join(output_dir, 'config.json'), 'w') as f:
|
|
304
|
+
json.dump({"scenes": scenes, "fps": fps}, f, indent=2)
|
|
305
|
+
|
|
306
|
+
return output_dir
|
|
307
|
+
|
|
308
|
+
if __name__ == '__main__':
|
|
309
|
+
output = main()
|
|
310
|
+
print(f"\nOutput directory: {output}")
|
package/demo/IMPROVED_PROMPTS.md
CHANGED
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
1. **HOOK (0-2s):** "I built a router that saves $10,000/month" - SHOCK VALUE
|
|
59
59
|
2. **PROOF (2-5s):** Live demo showing cost comparison - GPT-4 vs A3M
|
|
60
60
|
3. **WOW MOMENT (5-8s):** Show parallel execution, all 5 providers firing
|
|
61
|
-
4. **SOCIAL PROOF (8-10s):** "#1 on RouterArena with
|
|
61
|
+
4. **SOCIAL PROOF (8-10s):** "#1 on RouterArena with 70.32"
|
|
62
62
|
5. **CTA (10-12s):** "npm install adaptive-memory-multi-model-router"
|
|
63
63
|
|
|
64
64
|
### For HN/PH Audience Specifically:
|
|
@@ -131,7 +131,7 @@
|
|
|
131
131
|
|
|
132
132
|
### Frame 4: SOCIAL PROOF (12-15s)
|
|
133
133
|
**Image prompt:**
|
|
134
|
-
> Clean minimalist dark card floating in space, "A3M Router" in bold white text centered, below in gold/amber text: "#1 on RouterArena ·
|
|
134
|
+
> Clean minimalist dark card floating in space, "A3M Router" in bold white text centered, below in gold/amber text: "#1 on RouterArena · 70.32 benchmark score", below that gray text: "40 providers · 213× cheaper than GPT-4", subtle blue glow around text, spotlight from above, Apple keynote aesthetic, dark void background, professional product photography
|
|
135
135
|
|
|
136
136
|
**Video prompt (JSON):**
|
|
137
137
|
```json
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setupWizard.d.ts","sourceRoot":"","sources":["../../src/cli/setupWizard.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,QAAA,MAAM,EAAE,KAAgB,CAAC;AACzB,QAAA,MAAM,IAAI,KAAkB,CAAC;AAC7B,QAAA,MAAM,QAAQ,KAAsB,CAAC;AAErC,QAAA,MAAM,UAAU,KAAiE,CAAC;AAClF,QAAA,MAAM,WAAW,KAA0C,CAAC;AAG5D,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;;CAkBpB,CAAC;AAGF,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkBlB,CAAC;AAEF,iBAAS,eAAe,QAKvB;AAED,iBAAS,QAAQ,CAAC,EAAE,KAAA,EAAE,IAAI,KAAA,oBAIzB;AAED,iBAAe,aAAa;;;;KAQ3B;AAED,iBAAe,SAAS,kBAkHvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budgetEnforcer.d.ts","sourceRoot":"","sources":["../../src/cost/budgetEnforcer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAMtC,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,KAAK,CAAuC;IAGpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAmB;;IAQ7D;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QACxD,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,GAAG,IAAI;IAsBR;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIzD;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAOlC;;;;;OAKG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,iBAAiB;IA4CtE;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAiD/C;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAUjD;;OAEG;IACH,WAAW,IAAI,WAAW,EAAE;IAU5B;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAWjC;;OAEG;IACH,QAAQ,IAAI,IAAI;IAShB;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IA4BvD;;OAEG;IACH,OAAO,CAAC,aAAa;IAUrB;;OAEG;IACH,OAAO,CAAC,UAAU;IAKlB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAOtD;AAMD,wBAAgB,oBAAoB,IAAI,cAAc,CAErD;AAMD,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,SAAS,EAAE,MAAM,CAAC;gBAEtB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAS1D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"changeWatch.d.ts","sourceRoot":"","sources":["../../src/observability/changeWatch.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;CACzC;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,GAAE,MAAU,GAAG,MAAM,CAU/E;AAED,wBAAgB,iBAAiB,IAAI,YAAY,EAAE,CAgBlD;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAU7C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fatigueDetector.d.ts","sourceRoot":"","sources":["../../src/observability/fatigueDetector.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,oBAAoB,IAAI,cAAc,CA8BrD;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAS5C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAEA,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACjF,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/observability/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAsBjC,cAAM,gBAAgB;IACpB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,UAAU,CAAwD;IAC1E,OAAO,CAAC,SAAS,CAAsB;IAEvC;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,GAAE,MAAU,GAAG,IAAI;IAKxF;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAK5E;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAkBnF;;OAEG;IACH,oBAAoB,IAAI,MAAM;IAmE9B;;OAEG;IACH,UAAU,IAAI,MAAM,EAAE;IAuCtB,OAAO,CAAC,aAAa;IAarB;;OAEG;IACH,KAAK,IAAI,IAAI;CAMd;AAKD,wBAAgB,UAAU,IAAI,gBAAgB,CAK7C;AAED,wBAAgB,sBAAsB,IAAI,gBAAgB,CAGzD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/observability/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAI1D;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,IAAI,CAgEN;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,GAAG,EACb,OAAO,EAAE,GAAG,EACZ,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,GAC1B,IAAI,CAyDN;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,IAAI,CAUN"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../../src/observability/tracer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAsB,MAAM,SAAS,CAAC;AAG/D,UAAU,cAAc;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAYD,cAAM,MAAO,SAAQ,YAAY;IAC/B,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,cAAc,CAAC,CAAiB;;IAMxC;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAmC1C;;OAEG;IACH,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IAsB7D;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAmB/D;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAoBhF;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAgCpC;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE;IAOvC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE;IAIjC;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAMtC;;OAEG;IACH,KAAK,IAAI,IAAI;CAId;AAKD,wBAAgB,SAAS,IAAI,MAAM,CAKlC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAGrC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/observability/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,IAAI;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IACtD,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,WAAW,CAAC;CACzC;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;CACzC;AAGD,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GACrF;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crossModelValidation.d.ts","sourceRoot":"","sources":["../../src/routing/crossModelValidation.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,MAAM,EACxB,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;IAAE,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAE,GACvC,OAAO,CAAC,gBAAgB,CAAC,CA8B3B"}
|