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.
Files changed (98) hide show
  1. package/.publish-tick +1 -1
  2. package/.well-known/ai-plugin.json +4 -4
  3. package/ARCHITECTURE.md +1 -1
  4. package/LANDING.md +1 -1
  5. package/LAUNCH.md +19 -19
  6. package/LAUNCH_SNAPSHOT.md +260 -0
  7. package/MANIFESTO.md +2 -2
  8. package/README.md +21 -19
  9. package/README_ja.md +3 -3
  10. package/README_zh.md +3 -3
  11. package/_schema.html +2 -2
  12. package/ai-plugin.json +16 -0
  13. package/articles/CHINESE_DIRECTORIES.md +100 -0
  14. package/articles/FRESH_devto.md +3 -3
  15. package/articles/FRESH_hackernews.md +3 -3
  16. package/articles/FRESH_reddit_ml.md +3 -3
  17. package/articles/FRESH_reddit_node.md +2 -2
  18. package/articles/FRESH_reddit_sideproject.md +1 -1
  19. package/articles/FRESH_reddit_webdev.md +1 -1
  20. package/articles/FROM_ZERO_TO_10K.md +2 -2
  21. package/articles/HN_CHINESE_STYLE.md +1 -1
  22. package/articles/HN_FINAL.md +6 -6
  23. package/articles/HN_SHOW_routerarena.md +2 -2
  24. package/articles/INDIEHACKERS_POST.md +1 -1
  25. package/articles/LLM_BENCHMARK_DEEP_DIVE.md +1 -1
  26. package/articles/NEWSLETTER_SUBMISSIONS.md +112 -0
  27. package/articles/PRESS_KIT_routerarena.md +3 -3
  28. package/articles/PRODUCTHUNT_LISTING.md +1 -1
  29. package/articles/PR_PLAN_vault.md +2 -2
  30. package/articles/REDDIT_POST.md +67 -0
  31. package/articles/ROUTERARENA_LEADER.md +2 -2
  32. package/articles/SHOW_HN_FINAL.md +1 -1
  33. package/articles/TWEETS_routerarena_leader.md +1 -1
  34. package/assets/a3m_3blue1brown.mp4 +0 -0
  35. package/benchmark-results.json +3 -3
  36. package/demo/3blue1brown_video.py +285 -0
  37. package/demo/3blue1brown_video_v2.py +310 -0
  38. package/demo/IMPROVED_PROMPTS.md +2 -2
  39. package/demo/a3m_3blue1brown.mp4 +0 -0
  40. package/demo/product-video-v1.mp4 +0 -0
  41. package/dist/cli/setupWizard.d.ts.map +1 -0
  42. package/dist/cost/budgetEnforcer.d.ts.map +1 -0
  43. package/dist/observability/changeWatch.d.ts.map +1 -0
  44. package/dist/observability/fatigueDetector.d.ts.map +1 -0
  45. package/dist/observability/index.d.ts.map +1 -0
  46. package/dist/observability/metrics.d.ts.map +1 -0
  47. package/dist/observability/middleware.d.ts.map +1 -0
  48. package/dist/observability/tracer.d.ts.map +1 -0
  49. package/dist/observability/types.d.ts.map +1 -0
  50. package/dist/routing/crossModelValidation.d.ts.map +1 -0
  51. package/dist/routing/providerHealth.d.ts.map +1 -0
  52. package/dist/routing/providerRetry.d.ts.map +1 -0
  53. package/dist/tui/dashboard.d.ts.map +1 -0
  54. package/dist/tui/index.d.ts.map +1 -0
  55. package/docs/.well-known/ai-plugin.json +16 -0
  56. package/docs/BENCHMARK.md +2 -2
  57. package/docs/CITATIONS.md +74 -0
  58. package/docs/COUNCIL_V2.2_DECISION.md +1 -1
  59. package/docs/GEO.md +4 -4
  60. package/docs/GEO_ROOT_CAUSE.md +136 -0
  61. package/docs/GEO_STATUS.md +199 -0
  62. package/docs/GEO_TEST_RESULTS.md +176 -0
  63. package/docs/HN_CHECKLIST.md +1 -1
  64. package/docs/HN_FOUNDER_COMMENT.md +1 -1
  65. package/docs/HN_SUBMISSION_FINAL.md +10 -10
  66. package/docs/HN_SUBMISSION_V3.md +3 -3
  67. package/docs/LANGCHAIN_INTEGRATION.md +147 -0
  68. package/docs/QUICK_START.md +1 -1
  69. package/docs/ROUTING_RUBRIC.md +1 -1
  70. package/docs/SOCIAL_LISTENING.md +4 -4
  71. package/docs/TMLPD_V2.2_RESEARCH_ROADMAP.md +7 -7
  72. package/docs/UPDATE_TOPICS.md +1 -1
  73. package/docs/VERCEL_AI_SDK.md +209 -0
  74. package/docs/ai-plugin.json +16 -0
  75. package/docs/benchmark.html +4 -4
  76. package/docs/blog/routerarena-number-one.html +4 -4
  77. package/docs/compare.md +109 -0
  78. package/docs/comparison-litellm.md +3 -3
  79. package/docs/comparison.md +1 -1
  80. package/docs/cost-chart-ascii.md +1 -1
  81. package/docs/demo.html +1 -1
  82. package/docs/index.html +56 -5
  83. package/docs/llms.txt +3 -3
  84. package/docs/openapi.json +1 -1
  85. package/docs/well-known/ai-plugin.json +16 -0
  86. package/docs/wellknown/ai-plugin.json +16 -0
  87. package/hf-space/README.md +1 -1
  88. package/huggingface_space/README.md +35 -0
  89. package/huggingface_space/app.py +126 -0
  90. package/huggingface_space/create_space.py +208 -0
  91. package/huggingface_space/requirements.txt +1 -0
  92. package/index.html +1 -1
  93. package/llms.txt +4 -4
  94. package/package.json +6 -2
  95. package/proxy/README.md +1 -1
  96. package/research/FINDING_005_knowledge_gap_orthogonality.md +34 -0
  97. package/research/PUBLISH_LOG.md +2 -2
  98. 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}")
@@ -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 76.43"
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 · 76.43 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
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"}