@relayplane/proxy 1.8.5 → 1.8.7

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.
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../src/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAGD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAe1D,CAAC;AAOF,cAAM,WAAW;IACf,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAiB;IAElD;;OAEG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc;IAsC9D;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAY9F;;OAEG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAYrD;;OAEG;IACH,eAAe,IAAI,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAQzE,OAAO,CAAC,SAAS;IAmBjB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,YAAY;CAerB;AAGD,eAAO,MAAM,WAAW,aAAoB,CAAC;AAG7C,eAAO,MAAM,UAAU,GAAI,aAAa,MAAM,EAAE,OAAO,MAAM,mBACjB,CAAC;AAE7C,eAAO,MAAM,QAAQ,GAAI,aAAa,MAAM,EAAE,OAAO,MAAM;UAjGH,MAAM;WAAS,MAAM;aAAW,MAAM;CAkGpD,CAAC;AAE3C,eAAO,MAAM,UAAU,GAAI,aAAa,MAAM,EAAE,QAAQ,MAAM,SAClB,CAAC"}
1
+ {"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../src/rate-limiter.ts"],"names":[],"mappings":"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"}
@@ -2,20 +2,77 @@
2
2
  /**
3
3
  * Rate Limiter - In-memory rate limiting for RelayPlane Proxy
4
4
  *
5
- * Hard limits:
6
- * - Opus models: 10 requests per minute
7
- * - Other models: 60 requests per minute (default)
5
+ * Limits are configurable via ~/.relayplane/config.json under `rateLimit.models`.
6
+ * When a limit is hit, requests are queued (up to maxQueueDepth) instead of
7
+ * immediately returning 429. Queue overflow or timeout results in a 429.
8
8
  *
9
- * Auto-expires old entries every 5 minutes
9
+ * Defaults:
10
+ * - Sonnet models: 60 RPM
11
+ * - Opus models: 30 RPM
12
+ * - Haiku models: 60 RPM
13
+ * - Other models: 60 RPM
14
+ *
15
+ * Auto-expires old entries every 5 minutes.
10
16
  */
11
17
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.resetLimit = exports.getUsage = exports.checkLimit = exports.rateLimiter = exports.DEFAULT_LIMITS = void 0;
13
- // Hardcoded limits - Opus is expensive, be conservative
18
+ exports.resetLimit = exports.getUsage = exports.acquireSlot = exports.checkLimit = exports.rateLimiter = exports.RateLimiter = exports.DEFAULT_LIMITS = exports.RateLimitError = void 0;
19
+ exports.configureRateLimiter = configureRateLimiter;
20
+ // ── Sanitizers (defence against Infinity / NaN / negative values) ────────────
21
+ /** Maximum configurable RPM — prevents Infinity from bypassing the limiter. */
22
+ const MAX_RPM = 10_000;
23
+ /** Maximum configurable queue depth. */
24
+ const MAX_QUEUE_DEPTH = 10_000;
25
+ /** Maximum configurable queue timeout (10 minutes). */
26
+ const MAX_QUEUE_TIMEOUT_MS = 10 * 60 * 1_000;
27
+ /**
28
+ * Clamp an RPM value to a safe finite integer in [1, MAX_RPM].
29
+ * Returns the safe default (60) when the input is 0, negative, NaN, or Infinity.
30
+ */
31
+ function sanitizeRpm(value, safeDefault = 60) {
32
+ const num = Number(value);
33
+ if (!Number.isFinite(num) || num < 1)
34
+ return safeDefault;
35
+ return Math.min(MAX_RPM, Math.floor(num));
36
+ }
37
+ /**
38
+ * Clamp a maxQueueDepth value to a safe finite integer in [0, MAX_QUEUE_DEPTH].
39
+ */
40
+ function sanitizeQueueDepth(value, safeDefault = 50) {
41
+ const num = Number(value);
42
+ if (!Number.isFinite(num) || num < 0)
43
+ return safeDefault;
44
+ return Math.min(MAX_QUEUE_DEPTH, Math.floor(num));
45
+ }
46
+ /**
47
+ * Clamp a queueTimeoutMs value to a safe finite integer in [100, MAX_QUEUE_TIMEOUT_MS].
48
+ */
49
+ function sanitizeTimeoutMs(value, safeDefault = 30_000) {
50
+ const num = Number(value);
51
+ if (!Number.isFinite(num) || num < 100)
52
+ return safeDefault;
53
+ return Math.min(MAX_QUEUE_TIMEOUT_MS, Math.floor(num));
54
+ }
55
+ class RateLimitError extends Error {
56
+ code;
57
+ retryAfter;
58
+ limit;
59
+ resetAt;
60
+ constructor(message, opts) {
61
+ super(message);
62
+ this.name = 'RateLimitError';
63
+ this.code = opts.code;
64
+ this.retryAfter = opts.retryAfter;
65
+ this.limit = opts.limit;
66
+ this.resetAt = opts.resetAt;
67
+ }
68
+ }
69
+ exports.RateLimitError = RateLimitError;
70
+ // Default limits. Sonnet bumped to 60 RPM, Opus bumped to 30 RPM (GH #39).
14
71
  exports.DEFAULT_LIMITS = {
15
72
  // Anthropic models
16
- 'claude-opus-4-6': { rpm: 10, maxTokens: 4096 },
17
- 'claude-opus': { rpm: 10, maxTokens: 4096 },
18
- 'claude-sonnet-4-6': { rpm: 30 },
73
+ 'claude-opus-4-6': { rpm: 30, maxTokens: 4096 },
74
+ 'claude-opus': { rpm: 30, maxTokens: 4096 },
75
+ 'claude-sonnet-4-6': { rpm: 60 },
19
76
  'claude-haiku-4-5': { rpm: 60 },
20
77
  // OpenAI models
21
78
  'gpt-4o': { rpm: 30 },
@@ -23,28 +80,85 @@ exports.DEFAULT_LIMITS = {
23
80
  'o1': { rpm: 10, maxTokens: 4096 },
24
81
  'o3-mini': { rpm: 30 },
25
82
  // Default for unknown models
26
- 'default': { rpm: 60 }
83
+ 'default': { rpm: 60 },
27
84
  };
28
85
  class RateLimiter {
29
86
  buckets = new Map();
87
+ queues = new Map();
88
+ drainTimers = new Map();
30
89
  lastCleanup = Date.now();
31
90
  CLEANUP_INTERVAL = 5 * 60 * 1000; // 5 minutes
91
+ modelOverrides = {};
92
+ /**
93
+ * Provider-level overrides. Key is provider name (e.g. "anthropic").
94
+ * Applied when no model-specific override exists.
95
+ * Set via config.json `providers.{name}.rateLimit.rpm`.
96
+ */
97
+ providerOverrides = {};
98
+ maxQueueDepth;
99
+ queueTimeoutMs;
100
+ constructor(opts) {
101
+ this.maxQueueDepth = opts?.maxQueueDepth ?? 50;
102
+ this.queueTimeoutMs = opts?.queueTimeoutMs ?? 30_000;
103
+ }
104
+ /**
105
+ * Apply configuration from ~/.relayplane/config.json rateLimit section.
106
+ * Call once at proxy startup.
107
+ */
108
+ configure(cfg) {
109
+ if (cfg.models) {
110
+ for (const [model, modelCfg] of Object.entries(cfg.models)) {
111
+ this.modelOverrides[model.toLowerCase()] = { rpm: sanitizeRpm(modelCfg.rpm) };
112
+ }
113
+ }
114
+ if (cfg.maxQueueDepth !== undefined) {
115
+ this.maxQueueDepth = sanitizeQueueDepth(cfg.maxQueueDepth);
116
+ }
117
+ if (cfg.queueTimeoutMs !== undefined) {
118
+ this.queueTimeoutMs = sanitizeTimeoutMs(cfg.queueTimeoutMs);
119
+ }
120
+ }
121
+ /**
122
+ * Apply per-provider configuration from ~/.relayplane/config.json `providers` section.
123
+ * Call once at proxy startup, after configure().
124
+ *
125
+ * Each provider's rateLimit.rpm becomes the fallback for ALL models from that provider
126
+ * when no model-specific override exists.
127
+ *
128
+ * Example config.json:
129
+ * ```json
130
+ * { "providers": { "anthropic": { "rateLimit": { "rpm": 100 } } } }
131
+ * ```
132
+ */
133
+ configureProviders(providers) {
134
+ for (const [provider, cfg] of Object.entries(providers)) {
135
+ if (cfg.rateLimit?.rpm !== undefined) {
136
+ this.providerOverrides[provider.toLowerCase()] = { rpm: sanitizeRpm(cfg.rateLimit.rpm) };
137
+ }
138
+ }
139
+ }
32
140
  /**
33
- * Check if a request is allowed under rate limits
141
+ * Synchronous check returns immediately without queuing.
142
+ * Increments counter if allowed.
143
+ *
144
+ * @param provider Optional provider name (e.g. "anthropic"). Used to look up
145
+ * provider-level RPM limits when no model-specific override exists.
146
+ * Limits are isolated per-provider — one provider hitting its cap
147
+ * does NOT affect other providers.
34
148
  */
35
- checkLimit(workspaceId, model) {
149
+ checkLimit(workspaceId, model, provider) {
36
150
  this.maybeCleanup();
37
- const config = this.getConfig(model);
38
- const key = `${workspaceId}:${this.getModelKey(model)}:${this.getCurrentMinute()}`;
151
+ const config = this.getConfig(model, provider);
152
+ const providerSeg = provider ? `:${provider.toLowerCase()}` : '';
153
+ const key = `${workspaceId}${providerSeg}:${this.getModelKey(model)}:${this.getCurrentMinute()}`;
39
154
  const now = Date.now();
40
- const windowMs = 60 * 1000; // 1 minute window
155
+ const windowMs = 60 * 1000;
41
156
  const resetAt = this.getCurrentMinute() + windowMs;
42
157
  let entry = this.buckets.get(key);
43
158
  if (!entry) {
44
159
  entry = { count: 0, resetAt };
45
160
  this.buckets.set(key, entry);
46
161
  }
47
- // Check if window expired and reset
48
162
  if (now > entry.resetAt) {
49
163
  entry.count = 0;
50
164
  entry.resetAt = resetAt;
@@ -59,9 +173,91 @@ class RateLimiter {
59
173
  remaining,
60
174
  resetAt,
61
175
  limit: config.rpm,
62
- retryAfter: allowed ? undefined : Math.ceil((resetAt - now) / 1000)
176
+ retryAfter: allowed ? undefined : Math.ceil((resetAt - now) / 1000),
63
177
  };
64
178
  }
179
+ /**
180
+ * Async slot acquisition with queuing.
181
+ *
182
+ * - Resolves immediately if a slot is available.
183
+ * - Queues the request if the limit is hit (up to maxQueueDepth).
184
+ * - Throws RateLimitError with code QUEUE_FULL if the queue is full.
185
+ * - Throws RateLimitError with code QUEUE_TIMEOUT if the request waits too long.
186
+ */
187
+ async acquireSlot(workspaceId, model, provider) {
188
+ const check = this.checkLimit(workspaceId, model, provider);
189
+ if (check.allowed)
190
+ return;
191
+ const providerSeg = provider ? `:${provider.toLowerCase()}` : '';
192
+ const queueKey = `${workspaceId}${providerSeg}:${this.getModelKey(model)}`;
193
+ if (!this.queues.has(queueKey)) {
194
+ this.queues.set(queueKey, []);
195
+ }
196
+ const queue = this.queues.get(queueKey);
197
+ if (queue.length >= this.maxQueueDepth) {
198
+ throw new RateLimitError(`Rate limit queue full for ${model}. Max queue depth (${this.maxQueueDepth}) reached. ` +
199
+ `Retry after ${check.retryAfter ?? 60}s.`, {
200
+ code: 'QUEUE_FULL',
201
+ retryAfter: check.retryAfter ?? 60,
202
+ limit: check.limit,
203
+ resetAt: check.resetAt,
204
+ });
205
+ }
206
+ // Schedule drain at window reset (only one timer per queue key)
207
+ this.scheduleDrain(queueKey, workspaceId, model, check.resetAt, provider);
208
+ return new Promise((resolve, reject) => {
209
+ const timeoutId = setTimeout(() => {
210
+ const idx = queue.indexOf(entry);
211
+ if (idx >= 0)
212
+ queue.splice(idx, 1);
213
+ reject(new RateLimitError(`Rate limit queue timeout for ${model} after ${this.queueTimeoutMs}ms. ` +
214
+ `Retry after ${entry.check.retryAfter ?? 60}s.`, {
215
+ code: 'QUEUE_TIMEOUT',
216
+ retryAfter: entry.check.retryAfter ?? 60,
217
+ limit: entry.check.limit,
218
+ resetAt: entry.check.resetAt,
219
+ }));
220
+ }, this.queueTimeoutMs);
221
+ const entry = {
222
+ resolve: () => {
223
+ clearTimeout(timeoutId);
224
+ resolve();
225
+ },
226
+ reject: (err) => {
227
+ clearTimeout(timeoutId);
228
+ reject(err);
229
+ },
230
+ timeoutId,
231
+ check,
232
+ };
233
+ queue.push(entry);
234
+ });
235
+ }
236
+ scheduleDrain(queueKey, workspaceId, model, resetAt, provider) {
237
+ if (this.drainTimers.has(queueKey))
238
+ return; // already scheduled
239
+ const delay = Math.max(0, resetAt - Date.now());
240
+ const timer = setTimeout(() => {
241
+ this.drainTimers.delete(queueKey);
242
+ this.drainQueue(queueKey, workspaceId, model, provider);
243
+ }, delay);
244
+ this.drainTimers.set(queueKey, timer);
245
+ }
246
+ drainQueue(queueKey, workspaceId, model, provider) {
247
+ const queue = this.queues.get(queueKey);
248
+ if (!queue || queue.length === 0)
249
+ return;
250
+ while (queue.length > 0) {
251
+ const check = this.checkLimit(workspaceId, model, provider);
252
+ if (!check.allowed) {
253
+ // Window filled up — schedule next drain at next window reset
254
+ this.scheduleDrain(queueKey, workspaceId, model, check.resetAt, provider);
255
+ return;
256
+ }
257
+ const entry = queue.shift();
258
+ entry.resolve();
259
+ }
260
+ }
65
261
  /**
66
262
  * Get current usage for a workspace/model
67
263
  */
@@ -72,7 +268,7 @@ class RateLimiter {
72
268
  return {
73
269
  used: entry?.count || 0,
74
270
  limit: config.rpm,
75
- resetAt: entry?.resetAt || this.getCurrentMinute() + 60 * 1000
271
+ resetAt: entry?.resetAt || this.getCurrentMinute() + 60 * 1000,
76
272
  };
77
273
  }
78
274
  /**
@@ -88,6 +284,13 @@ class RateLimiter {
88
284
  }
89
285
  }
90
286
  }
287
+ /**
288
+ * Get current queue depth for a workspace/model
289
+ */
290
+ getQueueDepth(workspaceId, model) {
291
+ const queueKey = `${workspaceId}:${this.getModelKey(model)}`;
292
+ return this.queues.get(queueKey)?.length ?? 0;
293
+ }
91
294
  /**
92
295
  * Get all active limits (for debugging)
93
296
  */
@@ -95,18 +298,32 @@ class RateLimiter {
95
298
  return Array.from(this.buckets.entries()).map(([key, entry]) => ({
96
299
  key,
97
300
  count: entry.count,
98
- resetAt: entry.resetAt
301
+ resetAt: entry.resetAt,
99
302
  }));
100
303
  }
101
- getConfig(model) {
102
- // Normalize model name
304
+ getConfig(model, provider) {
103
305
  const normalized = model.toLowerCase().replace(/[^a-z0-9-]/g, '');
104
- // Check exact match first
306
+ // 1. Model-specific override takes highest priority
307
+ if (this.modelOverrides[normalized]) {
308
+ return this.modelOverrides[normalized];
309
+ }
310
+ // 2. Provider-level override (e.g. providers.anthropic.rateLimit.rpm)
311
+ // Applies to ALL models from this provider when no model-specific override exists.
312
+ // Each provider maintains its own isolated bucket — limits don't cascade across providers.
313
+ if (provider) {
314
+ const providerNorm = provider.toLowerCase();
315
+ if (this.providerOverrides[providerNorm]) {
316
+ return this.providerOverrides[providerNorm];
317
+ }
318
+ }
319
+ // 3. Check exact match in built-in defaults
105
320
  if (exports.DEFAULT_LIMITS[normalized]) {
106
321
  return exports.DEFAULT_LIMITS[normalized];
107
322
  }
108
- // Check partial match
323
+ // 4. Partial match (e.g. "claude-sonnet" matches "claude-sonnet-4-6")
109
324
  for (const [key, config] of Object.entries(exports.DEFAULT_LIMITS)) {
325
+ if (key === 'default')
326
+ continue;
110
327
  if (normalized.includes(key) || key.includes(normalized)) {
111
328
  return config;
112
329
  }
@@ -135,23 +352,40 @@ class RateLimiter {
135
352
  }
136
353
  maybeCleanup() {
137
354
  const now = Date.now();
138
- if (now - this.lastCleanup < this.CLEANUP_INTERVAL) {
355
+ if (now - this.lastCleanup < this.CLEANUP_INTERVAL)
139
356
  return;
140
- }
141
- // Remove expired entries
142
357
  for (const [key, entry] of this.buckets) {
143
- if (now > entry.resetAt + 60000) { // Keep 1 minute grace period
358
+ if (now > entry.resetAt + 60000) {
144
359
  this.buckets.delete(key);
145
360
  }
146
361
  }
147
362
  this.lastCleanup = now;
148
363
  }
149
364
  }
365
+ exports.RateLimiter = RateLimiter;
150
366
  // Singleton instance
151
367
  exports.rateLimiter = new RateLimiter();
368
+ /**
369
+ * Load rateLimit + providers config from ~/.relayplane/config.json and apply to the singleton.
370
+ * Call once at proxy startup.
371
+ */
372
+ function configureRateLimiter() {
373
+ try {
374
+ // Dynamic require to avoid circular deps at module init time
375
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
376
+ const cfg = require('./config.js');
377
+ exports.rateLimiter.configure(cfg.getRateLimitConfig());
378
+ exports.rateLimiter.configureProviders(cfg.getProviderConfigs());
379
+ }
380
+ catch {
381
+ // Ignore — use defaults
382
+ }
383
+ }
152
384
  // Convenience exports
153
- const checkLimit = (workspaceId, model) => exports.rateLimiter.checkLimit(workspaceId, model);
385
+ const checkLimit = (workspaceId, model, provider) => exports.rateLimiter.checkLimit(workspaceId, model, provider);
154
386
  exports.checkLimit = checkLimit;
387
+ const acquireSlot = (workspaceId, model, provider) => exports.rateLimiter.acquireSlot(workspaceId, model, provider);
388
+ exports.acquireSlot = acquireSlot;
155
389
  const getUsage = (workspaceId, model) => exports.rateLimiter.getUsage(workspaceId, model);
156
390
  exports.getUsage = getUsage;
157
391
  const resetLimit = (workspaceId, model) => exports.rateLimiter.resetLimit(workspaceId, model);
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../src/rate-limiter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../src/rate-limiter.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,7 @@
20
20
  */
21
21
  import * as http from 'node:http';
22
22
  import type { Provider as CoreProvider } from '@relayplane/core';
23
- type Provider = CoreProvider | 'openrouter' | 'deepseek' | 'groq' | 'mistral' | 'together' | 'fireworks' | 'perplexity';
23
+ type Provider = CoreProvider | 'openrouter' | 'deepseek' | 'groq' | 'mistral' | 'together' | 'fireworks' | 'perplexity' | 'ollama';
24
24
  import { StatsCollector } from './stats.js';
25
25
  /** Shared stats collector instance for the proxy server */
26
26
  export declare const proxyStatsCollector: StatsCollector;
@@ -1 +1 @@
1
- {"version":3,"file":"standalone-proxy.d.ts","sourceRoot":"","sources":["../src/standalone-proxy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standalone-proxy.d.ts","sourceRoot":"","sources":["../src/standalone-proxy.ts"],"names":[],"mappings":"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"}