@auxiora/providers 1.0.0 → 1.3.1
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/dist/anthropic.d.ts +2 -1
- package/dist/anthropic.d.ts.map +1 -1
- package/dist/anthropic.js +17 -1
- package/dist/anthropic.js.map +1 -1
- package/dist/cohere.d.ts +2 -1
- package/dist/cohere.d.ts.map +1 -1
- package/dist/cohere.js +3 -0
- package/dist/cohere.js.map +1 -1
- package/dist/deepseek.d.ts +2 -1
- package/dist/deepseek.d.ts.map +1 -1
- package/dist/deepseek.js +4 -0
- package/dist/deepseek.js.map +1 -1
- package/dist/factory.d.ts +5 -0
- package/dist/factory.d.ts.map +1 -1
- package/dist/factory.js +109 -18
- package/dist/factory.js.map +1 -1
- package/dist/failover-error.d.ts +32 -0
- package/dist/failover-error.d.ts.map +1 -0
- package/dist/failover-error.js +166 -0
- package/dist/failover-error.js.map +1 -0
- package/dist/google.d.ts +2 -1
- package/dist/google.d.ts.map +1 -1
- package/dist/google.js +5 -0
- package/dist/google.js.map +1 -1
- package/dist/groq.d.ts +2 -1
- package/dist/groq.d.ts.map +1 -1
- package/dist/groq.js +4 -0
- package/dist/groq.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/model-failover.d.ts +32 -0
- package/dist/model-failover.d.ts.map +1 -0
- package/dist/model-failover.js +130 -0
- package/dist/model-failover.js.map +1 -0
- package/dist/ollama.d.ts +1 -1
- package/dist/ollama.d.ts.map +1 -1
- package/dist/ollama.js +1 -0
- package/dist/ollama.js.map +1 -1
- package/dist/openai-compatible.d.ts +1 -1
- package/dist/openai-compatible.d.ts.map +1 -1
- package/dist/openai-compatible.js +1 -0
- package/dist/openai-compatible.js.map +1 -1
- package/dist/openai.d.ts +2 -1
- package/dist/openai.d.ts.map +1 -1
- package/dist/openai.js +7 -0
- package/dist/openai.js.map +1 -1
- package/dist/profile-cooldown.d.ts +15 -0
- package/dist/profile-cooldown.d.ts.map +1 -0
- package/dist/profile-cooldown.js +96 -0
- package/dist/profile-cooldown.js.map +1 -0
- package/dist/profile-rotator.d.ts +31 -0
- package/dist/profile-rotator.d.ts.map +1 -0
- package/dist/profile-rotator.js +130 -0
- package/dist/profile-rotator.js.map +1 -0
- package/dist/provider-cooldown.d.ts +51 -0
- package/dist/provider-cooldown.d.ts.map +1 -0
- package/dist/provider-cooldown.js +115 -0
- package/dist/provider-cooldown.js.map +1 -0
- package/dist/replicate.d.ts +1 -1
- package/dist/replicate.d.ts.map +1 -1
- package/dist/replicate.js.map +1 -1
- package/dist/types.d.ts +17 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/xai.d.ts +2 -1
- package/dist/xai.d.ts.map +1 -1
- package/dist/xai.js +4 -0
- package/dist/xai.js.map +1 -1
- package/package.json +10 -4
- package/src/anthropic.ts +0 -691
- package/src/claude-code-tools.ts +0 -233
- package/src/claude-oauth.ts +0 -410
- package/src/cohere.ts +0 -242
- package/src/deepseek.ts +0 -241
- package/src/factory.ts +0 -142
- package/src/google.ts +0 -176
- package/src/groq.ts +0 -263
- package/src/index.ts +0 -44
- package/src/ollama.ts +0 -194
- package/src/openai-compatible.ts +0 -154
- package/src/openai.ts +0 -307
- package/src/replicate.ts +0 -247
- package/src/thinking-levels.ts +0 -37
- package/src/types.ts +0 -171
- package/src/xai.ts +0 -241
- package/tests/adapters.test.ts +0 -185
- package/tests/claude-oauth.test.ts +0 -45
- package/tests/new-providers.test.ts +0 -732
- package/tests/thinking-levels.test.ts +0 -82
- package/tsconfig.json +0 -8
- package/tsconfig.tsbuildinfo +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-compatible.js","sourceRoot":"","sources":["../src/openai-compatible.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAU5B,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAUhC,MAAM,OAAO,wBAAwB;IACnC,IAAI,CAAS;IACb,QAAQ,CAAmB;IACnB,MAAM,CAAS;
|
|
1
|
+
{"version":3,"file":"openai-compatible.js","sourceRoot":"","sources":["../src/openai-compatible.ts"],"names":[],"mappings":"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"}
|
package/dist/openai.d.ts
CHANGED
|
@@ -9,9 +9,10 @@ export declare class OpenAIProvider implements Provider {
|
|
|
9
9
|
name: string;
|
|
10
10
|
metadata: ProviderMetadata;
|
|
11
11
|
private client;
|
|
12
|
-
|
|
12
|
+
readonly defaultModel: string;
|
|
13
13
|
private defaultMaxTokens;
|
|
14
14
|
constructor(options: OpenAIProviderOptions);
|
|
15
|
+
setActiveKey(apiKey: string): void;
|
|
15
16
|
complete(messages: ChatMessage[], options?: CompletionOptions): Promise<CompletionResult>;
|
|
16
17
|
stream(messages: ChatMessage[], options?: CompletionOptions): AsyncGenerator<StreamChunk, void, unknown>;
|
|
17
18
|
private transformTools;
|
package/dist/openai.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../src/openai.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,QAAQ,EACR,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EAEZ,MAAM,YAAY,CAAC;AAMpB,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,cAAe,YAAW,QAAQ;IAC7C,IAAI,SAAY;IAChB,QAAQ,EAAE,gBAAgB,CA8ExB;IACF,OAAO,CAAC,MAAM,CAAS;IACvB,
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../src/openai.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,QAAQ,EACR,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EAEZ,MAAM,YAAY,CAAC;AAMpB,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,cAAe,YAAW,QAAQ;IAC7C,IAAI,SAAY;IAChB,QAAQ,EAAE,gBAAgB,CA8ExB;IACF,OAAO,CAAC,MAAM,CAAS;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,gBAAgB,CAAS;gBAErB,OAAO,EAAE,qBAAqB;IAS1C,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAO5B,QAAQ,CACZ,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,gBAAgB,CAAC;IA2DrB,MAAM,CACX,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,cAAc,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC;IA2F7C,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,eAAe;CAwBxB"}
|
package/dist/openai.js
CHANGED
|
@@ -95,6 +95,12 @@ export class OpenAIProvider {
|
|
|
95
95
|
this.defaultModel = options.model || DEFAULT_MODEL;
|
|
96
96
|
this.defaultMaxTokens = options.maxTokens || DEFAULT_MAX_TOKENS;
|
|
97
97
|
}
|
|
98
|
+
setActiveKey(apiKey) {
|
|
99
|
+
this.client = new OpenAI({
|
|
100
|
+
apiKey,
|
|
101
|
+
baseURL: this.client.baseURL,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
98
104
|
async complete(messages, options) {
|
|
99
105
|
const openaiMessages = this.prepareMessages(messages, options);
|
|
100
106
|
const model = options?.model || this.defaultModel;
|
|
@@ -215,6 +221,7 @@ export class OpenAIProvider {
|
|
|
215
221
|
}
|
|
216
222
|
yield {
|
|
217
223
|
type: 'done',
|
|
224
|
+
finishReason: choice.finish_reason || 'stop',
|
|
218
225
|
usage: { inputTokens, outputTokens },
|
|
219
226
|
};
|
|
220
227
|
}
|
package/dist/openai.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../src/openai.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../src/openai.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-profile cooldown tracking with exponential backoff.
|
|
3
|
+
*
|
|
4
|
+
* Extends the same pattern as provider-cooldown.ts but keyed by
|
|
5
|
+
* provider:keyIndex and with special billing backoff.
|
|
6
|
+
*/
|
|
7
|
+
import type { FailoverReason } from './failover-error.js';
|
|
8
|
+
export declare function isProfileInCooldown(provider: string, keyIndex: number): boolean;
|
|
9
|
+
export declare function markProfileCooldown(provider: string, keyIndex: number, reason: FailoverReason): void;
|
|
10
|
+
export declare function clearProfileCooldown(provider: string, keyIndex: number): void;
|
|
11
|
+
export declare function shouldProbeProfile(provider: string, keyIndex: number): boolean;
|
|
12
|
+
export declare function recordProfileProbeResult(provider: string, keyIndex: number, success: boolean): void;
|
|
13
|
+
/** Clear all profile cooldowns. Primarily for testing. */
|
|
14
|
+
export declare function resetAllProfileCooldowns(): void;
|
|
15
|
+
//# sourceMappingURL=profile-cooldown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-cooldown.d.ts","sourceRoot":"","sources":["../src/profile-cooldown.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAqD1D,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAK/E;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,GACrB,IAAI,CAcN;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAE7E;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAY9E;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,GACf,IAAI,CAmBN;AAED,0DAA0D;AAC1D,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-profile cooldown tracking with exponential backoff.
|
|
3
|
+
*
|
|
4
|
+
* Extends the same pattern as provider-cooldown.ts but keyed by
|
|
5
|
+
* provider:keyIndex and with special billing backoff.
|
|
6
|
+
*/
|
|
7
|
+
/* ------------------------------------------------------------------ */
|
|
8
|
+
/* Module-level state */
|
|
9
|
+
/* ------------------------------------------------------------------ */
|
|
10
|
+
const cooldowns = new Map();
|
|
11
|
+
function profileKey(provider, keyIndex) {
|
|
12
|
+
return `${provider}:${keyIndex}`;
|
|
13
|
+
}
|
|
14
|
+
/* ------------------------------------------------------------------ */
|
|
15
|
+
/* Backoff formulas */
|
|
16
|
+
/* ------------------------------------------------------------------ */
|
|
17
|
+
/** Standard backoff: min(60 * 5^(failures-1), 3600) seconds. */
|
|
18
|
+
function standardBackoffMs(failures) {
|
|
19
|
+
return Math.min(60 * Math.pow(5, failures - 1), 3600) * 1000;
|
|
20
|
+
}
|
|
21
|
+
/** Billing backoff: min(18000 * 3^(failures-1), 86400) seconds. */
|
|
22
|
+
function billingBackoffMs(failures) {
|
|
23
|
+
return Math.min(18000 * Math.pow(3, failures - 1), 86400) * 1000;
|
|
24
|
+
}
|
|
25
|
+
function computeCooldownMs(failures, reason) {
|
|
26
|
+
return reason === 'billing' ? billingBackoffMs(failures) : standardBackoffMs(failures);
|
|
27
|
+
}
|
|
28
|
+
/** Two-minute probe window threshold in milliseconds. */
|
|
29
|
+
const PROBE_WINDOW_MS = 2 * 60 * 1000;
|
|
30
|
+
/** Minimum interval between probes in milliseconds. */
|
|
31
|
+
const PROBE_THROTTLE_MS = 30 * 1000;
|
|
32
|
+
/* ------------------------------------------------------------------ */
|
|
33
|
+
/* Public API */
|
|
34
|
+
/* ------------------------------------------------------------------ */
|
|
35
|
+
export function isProfileInCooldown(provider, keyIndex) {
|
|
36
|
+
const entry = cooldowns.get(profileKey(provider, keyIndex));
|
|
37
|
+
if (!entry)
|
|
38
|
+
return false;
|
|
39
|
+
if (Date.now() >= entry.cooldownUntil)
|
|
40
|
+
return false;
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
export function markProfileCooldown(provider, keyIndex, reason) {
|
|
44
|
+
const key = profileKey(provider, keyIndex);
|
|
45
|
+
const existing = cooldowns.get(key);
|
|
46
|
+
const failures = (existing?.consecutiveFailures ?? 0) + 1;
|
|
47
|
+
const durationMs = computeCooldownMs(failures, reason);
|
|
48
|
+
cooldowns.set(key, {
|
|
49
|
+
provider,
|
|
50
|
+
keyIndex,
|
|
51
|
+
reason,
|
|
52
|
+
cooldownUntil: Date.now() + durationMs,
|
|
53
|
+
consecutiveFailures: failures,
|
|
54
|
+
lastProbeAt: existing?.lastProbeAt ?? 0,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
export function clearProfileCooldown(provider, keyIndex) {
|
|
58
|
+
cooldowns.delete(profileKey(provider, keyIndex));
|
|
59
|
+
}
|
|
60
|
+
export function shouldProbeProfile(provider, keyIndex) {
|
|
61
|
+
const entry = cooldowns.get(profileKey(provider, keyIndex));
|
|
62
|
+
if (!entry)
|
|
63
|
+
return false;
|
|
64
|
+
const now = Date.now();
|
|
65
|
+
if (now >= entry.cooldownUntil)
|
|
66
|
+
return false;
|
|
67
|
+
const remaining = entry.cooldownUntil - now;
|
|
68
|
+
if (remaining > PROBE_WINDOW_MS)
|
|
69
|
+
return false;
|
|
70
|
+
if (now - entry.lastProbeAt < PROBE_THROTTLE_MS)
|
|
71
|
+
return false;
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
export function recordProfileProbeResult(provider, keyIndex, success) {
|
|
75
|
+
if (success) {
|
|
76
|
+
cooldowns.delete(profileKey(provider, keyIndex));
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const key = profileKey(provider, keyIndex);
|
|
80
|
+
const entry = cooldowns.get(key);
|
|
81
|
+
if (!entry)
|
|
82
|
+
return;
|
|
83
|
+
const failures = entry.consecutiveFailures + 1;
|
|
84
|
+
const durationMs = computeCooldownMs(failures, entry.reason);
|
|
85
|
+
cooldowns.set(key, {
|
|
86
|
+
...entry,
|
|
87
|
+
cooldownUntil: Date.now() + durationMs,
|
|
88
|
+
consecutiveFailures: failures,
|
|
89
|
+
lastProbeAt: Date.now(),
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
/** Clear all profile cooldowns. Primarily for testing. */
|
|
93
|
+
export function resetAllProfileCooldowns() {
|
|
94
|
+
cooldowns.clear();
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=profile-cooldown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-cooldown.js","sourceRoot":"","sources":["../src/profile-cooldown.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ProfileRotator — wraps a Provider with multiple API keys for
|
|
3
|
+
* within-provider key rotation.
|
|
4
|
+
*
|
|
5
|
+
* Implements Provider interface transparently. On each call:
|
|
6
|
+
* 1. Selects the best key (round-robin by lastUsed, skip cooldown)
|
|
7
|
+
* 2. Injects the key via setActiveKey()
|
|
8
|
+
* 3. Delegates to the underlying provider
|
|
9
|
+
* 4. On error: classifies, marks key cooldown, tries next key
|
|
10
|
+
*/
|
|
11
|
+
import type { Provider, ProviderMetadata, ChatMessage, CompletionOptions, CompletionResult, StreamChunk } from './types.js';
|
|
12
|
+
/** Provider that supports hot-swapping API keys. */
|
|
13
|
+
export interface RotatableProvider extends Provider {
|
|
14
|
+
setActiveKey(key: string): void;
|
|
15
|
+
}
|
|
16
|
+
export declare class ProfileRotator implements Provider {
|
|
17
|
+
private readonly underlying;
|
|
18
|
+
readonly name: string;
|
|
19
|
+
readonly defaultModel: string;
|
|
20
|
+
readonly metadata: ProviderMetadata;
|
|
21
|
+
private keys;
|
|
22
|
+
constructor(underlying: RotatableProvider, apiKeys: string[]);
|
|
23
|
+
/**
|
|
24
|
+
* Select the best available key: skip cooldown, sort by lastUsed (oldest first).
|
|
25
|
+
* Returns null if all keys are in cooldown and not probe-eligible.
|
|
26
|
+
*/
|
|
27
|
+
private selectKey;
|
|
28
|
+
complete(messages: ChatMessage[], options?: CompletionOptions): Promise<CompletionResult>;
|
|
29
|
+
stream(messages: ChatMessage[], options?: CompletionOptions): AsyncGenerator<StreamChunk, void, unknown>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=profile-rotator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-rotator.d.ts","sourceRoot":"","sources":["../src/profile-rotator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAeH,OAAO,KAAK,EACV,QAAQ,EACR,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACZ,MAAM,YAAY,CAAC;AAQpB,oDAAoD;AACpD,MAAM,WAAW,iBAAkB,SAAQ,QAAQ;IACjD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAYD,qBAAa,cAAe,YAAW,QAAQ;IAQ3C,OAAO,CAAC,QAAQ,CAAC,UAAU;IAP7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IAEpC,OAAO,CAAC,IAAI,CAAa;gBAGN,UAAU,EAAE,iBAAiB,EAC9C,OAAO,EAAE,MAAM,EAAE;IAWnB;;;OAGG;IACH,OAAO,CAAC,SAAS;IAcX,QAAQ,CACZ,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,gBAAgB,CAAC;IAqCrB,MAAM,CACX,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,cAAc,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC;CAgD9C"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ProfileRotator — wraps a Provider with multiple API keys for
|
|
3
|
+
* within-provider key rotation.
|
|
4
|
+
*
|
|
5
|
+
* Implements Provider interface transparently. On each call:
|
|
6
|
+
* 1. Selects the best key (round-robin by lastUsed, skip cooldown)
|
|
7
|
+
* 2. Injects the key via setActiveKey()
|
|
8
|
+
* 3. Delegates to the underlying provider
|
|
9
|
+
* 4. On error: classifies, marks key cooldown, tries next key
|
|
10
|
+
*/
|
|
11
|
+
import { getLogger } from '@auxiora/logger';
|
|
12
|
+
import { coerceToFailoverError, FailoverError, isContextOverflow, isUserAbort, } from './failover-error.js';
|
|
13
|
+
import { isProfileInCooldown, markProfileCooldown, clearProfileCooldown, shouldProbeProfile, } from './profile-cooldown.js';
|
|
14
|
+
const logger = getLogger('profile-rotator');
|
|
15
|
+
/* ------------------------------------------------------------------ */
|
|
16
|
+
/* ProfileRotator */
|
|
17
|
+
/* ------------------------------------------------------------------ */
|
|
18
|
+
export class ProfileRotator {
|
|
19
|
+
underlying;
|
|
20
|
+
name;
|
|
21
|
+
defaultModel;
|
|
22
|
+
metadata;
|
|
23
|
+
keys;
|
|
24
|
+
constructor(underlying, apiKeys) {
|
|
25
|
+
this.underlying = underlying;
|
|
26
|
+
if (apiKeys.length === 0) {
|
|
27
|
+
throw new Error('ProfileRotator requires at least one API key');
|
|
28
|
+
}
|
|
29
|
+
this.name = underlying.name;
|
|
30
|
+
this.defaultModel = underlying.defaultModel;
|
|
31
|
+
this.metadata = underlying.metadata;
|
|
32
|
+
this.keys = apiKeys.map((key, index) => ({ index, key, lastUsed: 0 }));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Select the best available key: skip cooldown, sort by lastUsed (oldest first).
|
|
36
|
+
* Returns null if all keys are in cooldown and not probe-eligible.
|
|
37
|
+
*/
|
|
38
|
+
selectKey() {
|
|
39
|
+
const available = this.keys
|
|
40
|
+
.filter((k) => !isProfileInCooldown(this.name, k.index) || shouldProbeProfile(this.name, k.index))
|
|
41
|
+
.sort((a, b) => {
|
|
42
|
+
// Prefer keys not in cooldown over probe-eligible keys
|
|
43
|
+
const aCooldown = isProfileInCooldown(this.name, a.index) ? 1 : 0;
|
|
44
|
+
const bCooldown = isProfileInCooldown(this.name, b.index) ? 1 : 0;
|
|
45
|
+
if (aCooldown !== bCooldown)
|
|
46
|
+
return aCooldown - bCooldown;
|
|
47
|
+
return a.lastUsed - b.lastUsed;
|
|
48
|
+
});
|
|
49
|
+
return available[0] ?? null;
|
|
50
|
+
}
|
|
51
|
+
async complete(messages, options) {
|
|
52
|
+
let lastError;
|
|
53
|
+
const tried = new Set();
|
|
54
|
+
while (tried.size < this.keys.length) {
|
|
55
|
+
const selected = this.selectKey();
|
|
56
|
+
if (!selected || tried.has(selected.index))
|
|
57
|
+
break;
|
|
58
|
+
tried.add(selected.index);
|
|
59
|
+
this.underlying.setActiveKey(selected.key);
|
|
60
|
+
selected.lastUsed = Date.now();
|
|
61
|
+
try {
|
|
62
|
+
const result = await this.underlying.complete(messages, options);
|
|
63
|
+
clearProfileCooldown(this.name, selected.index);
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
if (isUserAbort(err))
|
|
68
|
+
throw err;
|
|
69
|
+
if (isContextOverflow(err))
|
|
70
|
+
throw err;
|
|
71
|
+
const failoverErr = coerceToFailoverError(err, this.name, this.underlying.defaultModel);
|
|
72
|
+
if (failoverErr) {
|
|
73
|
+
markProfileCooldown(this.name, selected.index, failoverErr.reason);
|
|
74
|
+
}
|
|
75
|
+
lastError = err instanceof Error ? err : new Error(String(err));
|
|
76
|
+
logger.warn('Key failed, trying next', {
|
|
77
|
+
provider: this.name,
|
|
78
|
+
keyIndex: selected.index,
|
|
79
|
+
reason: failoverErr?.reason ?? 'unknown',
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
throw lastError ?? new FailoverError('rate_limit', this.name, this.defaultModel, 'All keys exhausted');
|
|
84
|
+
}
|
|
85
|
+
async *stream(messages, options) {
|
|
86
|
+
let lastError;
|
|
87
|
+
const tried = new Set();
|
|
88
|
+
while (tried.size < this.keys.length) {
|
|
89
|
+
const selected = this.selectKey();
|
|
90
|
+
if (!selected || tried.has(selected.index))
|
|
91
|
+
break;
|
|
92
|
+
tried.add(selected.index);
|
|
93
|
+
this.underlying.setActiveKey(selected.key);
|
|
94
|
+
selected.lastUsed = Date.now();
|
|
95
|
+
let chunksYielded = false;
|
|
96
|
+
try {
|
|
97
|
+
const stream = this.underlying.stream(messages, options);
|
|
98
|
+
for await (const chunk of stream) {
|
|
99
|
+
chunksYielded = true;
|
|
100
|
+
yield chunk;
|
|
101
|
+
}
|
|
102
|
+
clearProfileCooldown(this.name, selected.index);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
if (isUserAbort(err))
|
|
107
|
+
throw err;
|
|
108
|
+
if (isContextOverflow(err))
|
|
109
|
+
throw err;
|
|
110
|
+
const failoverErr = coerceToFailoverError(err, this.name, this.underlying.defaultModel);
|
|
111
|
+
if (failoverErr) {
|
|
112
|
+
markProfileCooldown(this.name, selected.index, failoverErr.reason);
|
|
113
|
+
}
|
|
114
|
+
// Mid-stream: can't retry, yield error chunk
|
|
115
|
+
if (chunksYielded) {
|
|
116
|
+
yield { type: 'error', error: err instanceof Error ? err.message : String(err) };
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
lastError = err instanceof Error ? err : new Error(String(err));
|
|
120
|
+
logger.warn('Key stream failed, trying next', {
|
|
121
|
+
provider: this.name,
|
|
122
|
+
keyIndex: selected.index,
|
|
123
|
+
reason: failoverErr?.reason ?? 'unknown',
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
throw lastError ?? new FailoverError('rate_limit', this.name, this.defaultModel, 'All keys exhausted (stream)');
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=profile-rotator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-rotator.js","sourceRoot":"","sources":["../src/profile-rotator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-provider cooldown tracking with exponential backoff.
|
|
3
|
+
*
|
|
4
|
+
* When a provider fails, it enters a cooldown period during which it
|
|
5
|
+
* will not be selected for new requests. Consecutive failures increase
|
|
6
|
+
* the cooldown duration exponentially. A probe mechanism allows
|
|
7
|
+
* testing providers that are close to exiting cooldown.
|
|
8
|
+
*/
|
|
9
|
+
import type { FailoverReason } from './failover-error.js';
|
|
10
|
+
export interface CooldownEntry {
|
|
11
|
+
provider: string;
|
|
12
|
+
reason: FailoverReason;
|
|
13
|
+
cooldownUntil: number;
|
|
14
|
+
consecutiveFailures: number;
|
|
15
|
+
lastProbeAt: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Check whether a provider is currently in cooldown.
|
|
19
|
+
* Automatically removes expired entries.
|
|
20
|
+
*/
|
|
21
|
+
export declare function isProviderInCooldown(provider: string): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Mark a provider as entering cooldown. Consecutive calls increment
|
|
24
|
+
* the failure count and apply exponential backoff.
|
|
25
|
+
*/
|
|
26
|
+
export declare function markProviderCooldown(provider: string, reason: FailoverReason): void;
|
|
27
|
+
/**
|
|
28
|
+
* Clear cooldown for a provider and reset its failure count.
|
|
29
|
+
* Safe to call on providers that are not in cooldown.
|
|
30
|
+
*/
|
|
31
|
+
export declare function clearProviderCooldown(provider: string): void;
|
|
32
|
+
/**
|
|
33
|
+
* Determine whether a probe request should be sent to a cooled-down provider.
|
|
34
|
+
*
|
|
35
|
+
* Returns true when:
|
|
36
|
+
* - The provider IS in cooldown
|
|
37
|
+
* - The cooldown expiry is within 2 minutes
|
|
38
|
+
* - At least 30 seconds have passed since the last probe
|
|
39
|
+
*/
|
|
40
|
+
export declare function shouldProbe(provider: string): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Record the result of a probe attempt.
|
|
43
|
+
* - On success: clears cooldown entirely.
|
|
44
|
+
* - On failure: extends cooldown with incremented backoff and updates lastProbeAt.
|
|
45
|
+
*/
|
|
46
|
+
export declare function recordProbeResult(provider: string, success: boolean): void;
|
|
47
|
+
/**
|
|
48
|
+
* Clear all cooldowns. Intended for test cleanup.
|
|
49
|
+
*/
|
|
50
|
+
export declare function resetAllCooldowns(): void;
|
|
51
|
+
//# sourceMappingURL=provider-cooldown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-cooldown.d.ts","sourceRoot":"","sources":["../src/provider-cooldown.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAM1D,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,cAAc,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;CACrB;AA2BD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAS9D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAYnF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAE5D;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAgBrD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAkB1E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-provider cooldown tracking with exponential backoff.
|
|
3
|
+
*
|
|
4
|
+
* When a provider fails, it enters a cooldown period during which it
|
|
5
|
+
* will not be selected for new requests. Consecutive failures increase
|
|
6
|
+
* the cooldown duration exponentially. A probe mechanism allows
|
|
7
|
+
* testing providers that are close to exiting cooldown.
|
|
8
|
+
*/
|
|
9
|
+
/* ------------------------------------------------------------------ */
|
|
10
|
+
/* Module-level state */
|
|
11
|
+
/* ------------------------------------------------------------------ */
|
|
12
|
+
const cooldowns = new Map();
|
|
13
|
+
/* ------------------------------------------------------------------ */
|
|
14
|
+
/* Internal helpers */
|
|
15
|
+
/* ------------------------------------------------------------------ */
|
|
16
|
+
/** Exponential backoff: min(60 * 5^(failures-1), 3600) seconds. */
|
|
17
|
+
function backoffSeconds(failures) {
|
|
18
|
+
return Math.min(60 * Math.pow(5, failures - 1), 3600);
|
|
19
|
+
}
|
|
20
|
+
/** Two-minute probe window threshold in milliseconds. */
|
|
21
|
+
const PROBE_WINDOW_MS = 2 * 60 * 1000;
|
|
22
|
+
/** Minimum interval between probes in milliseconds. */
|
|
23
|
+
const PROBE_THROTTLE_MS = 30 * 1000;
|
|
24
|
+
/* ------------------------------------------------------------------ */
|
|
25
|
+
/* Public API */
|
|
26
|
+
/* ------------------------------------------------------------------ */
|
|
27
|
+
/**
|
|
28
|
+
* Check whether a provider is currently in cooldown.
|
|
29
|
+
* Automatically removes expired entries.
|
|
30
|
+
*/
|
|
31
|
+
export function isProviderInCooldown(provider) {
|
|
32
|
+
const entry = cooldowns.get(provider);
|
|
33
|
+
if (!entry)
|
|
34
|
+
return false;
|
|
35
|
+
if (Date.now() >= entry.cooldownUntil) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Mark a provider as entering cooldown. Consecutive calls increment
|
|
42
|
+
* the failure count and apply exponential backoff.
|
|
43
|
+
*/
|
|
44
|
+
export function markProviderCooldown(provider, reason) {
|
|
45
|
+
const existing = cooldowns.get(provider);
|
|
46
|
+
const failures = (existing?.consecutiveFailures ?? 0) + 1;
|
|
47
|
+
const durationMs = backoffSeconds(failures) * 1000;
|
|
48
|
+
cooldowns.set(provider, {
|
|
49
|
+
provider,
|
|
50
|
+
reason,
|
|
51
|
+
cooldownUntil: Date.now() + durationMs,
|
|
52
|
+
consecutiveFailures: failures,
|
|
53
|
+
lastProbeAt: existing?.lastProbeAt ?? 0,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Clear cooldown for a provider and reset its failure count.
|
|
58
|
+
* Safe to call on providers that are not in cooldown.
|
|
59
|
+
*/
|
|
60
|
+
export function clearProviderCooldown(provider) {
|
|
61
|
+
cooldowns.delete(provider);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Determine whether a probe request should be sent to a cooled-down provider.
|
|
65
|
+
*
|
|
66
|
+
* Returns true when:
|
|
67
|
+
* - The provider IS in cooldown
|
|
68
|
+
* - The cooldown expiry is within 2 minutes
|
|
69
|
+
* - At least 30 seconds have passed since the last probe
|
|
70
|
+
*/
|
|
71
|
+
export function shouldProbe(provider) {
|
|
72
|
+
const entry = cooldowns.get(provider);
|
|
73
|
+
if (!entry)
|
|
74
|
+
return false;
|
|
75
|
+
const now = Date.now();
|
|
76
|
+
// Already expired — not in cooldown
|
|
77
|
+
if (now >= entry.cooldownUntil)
|
|
78
|
+
return false;
|
|
79
|
+
const remaining = entry.cooldownUntil - now;
|
|
80
|
+
if (remaining > PROBE_WINDOW_MS)
|
|
81
|
+
return false;
|
|
82
|
+
const sinceLastProbe = now - entry.lastProbeAt;
|
|
83
|
+
if (sinceLastProbe < PROBE_THROTTLE_MS)
|
|
84
|
+
return false;
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Record the result of a probe attempt.
|
|
89
|
+
* - On success: clears cooldown entirely.
|
|
90
|
+
* - On failure: extends cooldown with incremented backoff and updates lastProbeAt.
|
|
91
|
+
*/
|
|
92
|
+
export function recordProbeResult(provider, success) {
|
|
93
|
+
if (success) {
|
|
94
|
+
cooldowns.delete(provider);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const entry = cooldowns.get(provider);
|
|
98
|
+
if (!entry)
|
|
99
|
+
return;
|
|
100
|
+
const failures = entry.consecutiveFailures + 1;
|
|
101
|
+
const durationMs = backoffSeconds(failures) * 1000;
|
|
102
|
+
cooldowns.set(provider, {
|
|
103
|
+
...entry,
|
|
104
|
+
cooldownUntil: Date.now() + durationMs,
|
|
105
|
+
consecutiveFailures: failures,
|
|
106
|
+
lastProbeAt: Date.now(),
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Clear all cooldowns. Intended for test cleanup.
|
|
111
|
+
*/
|
|
112
|
+
export function resetAllCooldowns() {
|
|
113
|
+
cooldowns.clear();
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=provider-cooldown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-cooldown.js","sourceRoot":"","sources":["../src/provider-cooldown.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgBH,wEAAwE;AACxE,yEAAyE;AACzE,wEAAwE;AAExE,MAAM,SAAS,GAA+B,IAAI,GAAG,EAAE,CAAC;AAExD,wEAAwE;AACxE,yEAAyE;AACzE,wEAAwE;AAExE,mEAAmE;AACnE,SAAS,cAAc,CAAC,QAAgB;IACtC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACxD,CAAC;AAED,yDAAyD;AACzD,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAEtC,uDAAuD;AACvD,MAAM,iBAAiB,GAAG,EAAE,GAAG,IAAI,CAAC;AAEpC,wEAAwE;AACxE,yEAAyE;AACzE,wEAAwE;AAExE;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAEzB,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB,EAAE,MAAsB;IAC3E,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,mBAAmB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;IAEnD,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE;QACtB,QAAQ;QACR,MAAM;QACN,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU;QACtC,mBAAmB,EAAE,QAAQ;QAC7B,WAAW,EAAE,QAAQ,EAAE,WAAW,IAAI,CAAC;KACxC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAEzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,oCAAoC;IACpC,IAAI,GAAG,IAAI,KAAK,CAAC,aAAa;QAAE,OAAO,KAAK,CAAC;IAE7C,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,GAAG,GAAG,CAAC;IAC5C,IAAI,SAAS,GAAG,eAAe;QAAE,OAAO,KAAK,CAAC;IAE9C,MAAM,cAAc,GAAG,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC;IAC/C,IAAI,cAAc,GAAG,iBAAiB;QAAE,OAAO,KAAK,CAAC;IAErD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,OAAgB;IAClE,IAAI,OAAO,EAAE,CAAC;QACZ,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,KAAK;QAAE,OAAO;IAEnB,MAAM,QAAQ,GAAG,KAAK,CAAC,mBAAmB,GAAG,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;IAEnD,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE;QACtB,GAAG,KAAK;QACR,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU;QACtC,mBAAmB,EAAE,QAAQ;QAC7B,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;KACxB,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,SAAS,CAAC,KAAK,EAAE,CAAC;AACpB,CAAC"}
|
package/dist/replicate.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export declare class ReplicateProvider implements Provider {
|
|
|
8
8
|
name: string;
|
|
9
9
|
metadata: ProviderMetadata;
|
|
10
10
|
private apiToken;
|
|
11
|
-
|
|
11
|
+
readonly defaultModel: string;
|
|
12
12
|
private pollInterval;
|
|
13
13
|
constructor(options: ReplicateProviderOptions);
|
|
14
14
|
complete(messages: ChatMessage[], options?: CompletionOptions): Promise<CompletionResult>;
|
package/dist/replicate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replicate.d.ts","sourceRoot":"","sources":["../src/replicate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACZ,MAAM,YAAY,CAAC;AAMpB,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAYD,qBAAa,iBAAkB,YAAW,QAAQ;IAChD,IAAI,SAAe;IACnB,QAAQ,EAAE,gBAAgB,CAqCxB;IAEF,OAAO,CAAC,QAAQ,CAAS;IACzB,
|
|
1
|
+
{"version":3,"file":"replicate.d.ts","sourceRoot":"","sources":["../src/replicate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACZ,MAAM,YAAY,CAAC;AAMpB,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAYD,qBAAa,iBAAkB,YAAW,QAAQ;IAChD,IAAI,SAAe;IACnB,QAAQ,EAAE,gBAAgB,CAqCxB;IAEF,OAAO,CAAC,QAAQ,CAAS;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,EAAE,wBAAwB;IAMvC,QAAQ,CACZ,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,gBAAgB,CAAC;IA+BrB,MAAM,CACX,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,cAAc,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC;YAyE/B,gBAAgB;YAqBhB,cAAc;IAoB5B,OAAO,CAAC,YAAY;CAerB"}
|
package/dist/replicate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replicate.js","sourceRoot":"","sources":["../src/replicate.ts"],"names":[],"mappings":"AASA,MAAM,aAAa,GAAG,gCAAgC,CAAC;AACvD,MAAM,qBAAqB,GAAG,IAAI,CAAC;AACnC,MAAM,QAAQ,GAAG,8BAA8B,CAAC;AAkBhD,MAAM,OAAO,iBAAiB;IAC5B,IAAI,GAAG,WAAW,CAAC;IACnB,QAAQ,GAAqB;QAC3B,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,WAAW;QACxB,MAAM,EAAE;YACN,gCAAgC,EAAE;gBAChC,gBAAgB,EAAE,IAAI;gBACtB,cAAc,EAAE,KAAK;gBACrB,aAAa,EAAE,KAAK;gBACpB,iBAAiB,EAAE,KAAK;gBACxB,gBAAgB,EAAE,KAAK;gBACvB,cAAc,EAAE,OAAO;gBACvB,eAAe,EAAE,OAAO;gBACxB,SAAS,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC;gBAChC,OAAO,EAAE,KAAK;aACf;YACD,mBAAmB,EAAE;gBACnB,gBAAgB,EAAE,CAAC;gBACnB,cAAc,EAAE,KAAK;gBACrB,aAAa,EAAE,KAAK;gBACpB,iBAAiB,EAAE,KAAK;gBACxB,gBAAgB,EAAE,IAAI;gBACtB,cAAc,EAAE,CAAC;gBACjB,eAAe,EAAE,CAAC;gBAClB,SAAS,EAAE,CAAC,kBAAkB,CAAC;gBAC/B,OAAO,EAAE,KAAK;aACf;SACF;QACD,WAAW,EAAE,KAAK,IAAI,EAAE;YACtB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,SAAS,EAAE;oBACjD,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,QAAQ,EAAE,EAAE;iBACtD,CAAC,CAAC;gBACH,OAAO,QAAQ,CAAC,EAAE,CAAC;YACrB,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;KACF,CAAC;IAEM,QAAQ,CAAS;
|
|
1
|
+
{"version":3,"file":"replicate.js","sourceRoot":"","sources":["../src/replicate.ts"],"names":[],"mappings":"AASA,MAAM,aAAa,GAAG,gCAAgC,CAAC;AACvD,MAAM,qBAAqB,GAAG,IAAI,CAAC;AACnC,MAAM,QAAQ,GAAG,8BAA8B,CAAC;AAkBhD,MAAM,OAAO,iBAAiB;IAC5B,IAAI,GAAG,WAAW,CAAC;IACnB,QAAQ,GAAqB;QAC3B,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,WAAW;QACxB,MAAM,EAAE;YACN,gCAAgC,EAAE;gBAChC,gBAAgB,EAAE,IAAI;gBACtB,cAAc,EAAE,KAAK;gBACrB,aAAa,EAAE,KAAK;gBACpB,iBAAiB,EAAE,KAAK;gBACxB,gBAAgB,EAAE,KAAK;gBACvB,cAAc,EAAE,OAAO;gBACvB,eAAe,EAAE,OAAO;gBACxB,SAAS,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC;gBAChC,OAAO,EAAE,KAAK;aACf;YACD,mBAAmB,EAAE;gBACnB,gBAAgB,EAAE,CAAC;gBACnB,cAAc,EAAE,KAAK;gBACrB,aAAa,EAAE,KAAK;gBACpB,iBAAiB,EAAE,KAAK;gBACxB,gBAAgB,EAAE,IAAI;gBACtB,cAAc,EAAE,CAAC;gBACjB,eAAe,EAAE,CAAC;gBAClB,SAAS,EAAE,CAAC,kBAAkB,CAAC;gBAC/B,OAAO,EAAE,KAAK;aACf;SACF;QACD,WAAW,EAAE,KAAK,IAAI,EAAE;YACtB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,SAAS,EAAE;oBACjD,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,QAAQ,EAAE,EAAE;iBACtD,CAAC,CAAC;gBACH,OAAO,QAAQ,CAAC,EAAE,CAAC;YACrB,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;KACF,CAAC;IAEM,QAAQ,CAAS;IAChB,YAAY,CAAS;IACtB,YAAY,CAAS;IAE7B,YAAY,OAAiC;QAC3C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,KAAK,IAAI,aAAa,CAAC;QACnD,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,qBAAqB,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,QAAuB,EACvB,OAA2B;QAE3B,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAEpD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;YACpD,MAAM;YACN,UAAU,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI;YACtC,WAAW,EAAE,OAAO,EAAE,WAAW;SAClC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAExD,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;QACrF,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;YACzC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;QAExB,OAAO;YACL,OAAO,EAAE,MAAM;YACf,KAAK,EAAE;gBACL,WAAW,EAAE,CAAC;gBACd,YAAY,EAAE,CAAC;aAChB;YACD,KAAK;YACL,YAAY,EAAE,MAAM;SACrB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,CAAC,MAAM,CACX,QAAuB,EACvB,OAA2B;QAE3B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC;YAClD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAEpD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,WAAW,KAAK,cAAc,EAAE;gBACtE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,QAAQ,EAAE;oBACxC,MAAM,EAAE,eAAe;iBACxB;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK,EAAE;wBACL,MAAM;wBACN,UAAU,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI;wBACtC,WAAW,EAAE,OAAO,EAAE,WAAW;qBAClC;oBACD,MAAM,EAAE,IAAI;iBACb,CAAC;aACH,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YACpF,CAAC;YAED,MAAM,UAAU,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAwB,CAAC;YAClE,MAAM,SAAS,GAAG,GAAG,QAAQ,gBAAgB,UAAU,CAAC,EAAE,SAAS,CAAC;YAEpE,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE;gBAC5C,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE;aACnF,CAAC,CAAC;YAEH,IAAI,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;gBAC/C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;gBACxD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;oBACzC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxB,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;gBACxB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;gBACxC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnE,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAC/C,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;YAClC,IAAI,MAAM,GAAG,EAAE,CAAC;YAEhB,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,IAAI;oBAAE,MAAM;gBAEhB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBAClD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;gBAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC5B,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAAE,SAAS;oBACxD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC9B,IAAI,IAAI,KAAK,QAAQ;wBAAE,SAAS;oBAChC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBACxC,CAAC;YACH,CAAC;YAED,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;QACrE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM;gBACJ,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAChE,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,KAAa,EACb,KAA8B;QAE9B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,WAAW,KAAK,cAAc,EAAE;YACtE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,QAAQ,EAAE;gBACxC,MAAM,EAAE,eAAe;aACxB;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;SAChC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACpF,CAAC;QAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAwB,CAAC;IACxD,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,EAAU;QACrC,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,gBAAgB,EAAE,EAAE,EAAE;gBAC5D,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,QAAQ,EAAE,EAAE;aACtD,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YACpF,CAAC;YAED,MAAM,UAAU,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAwB,CAAC;YAElE,IAAI,UAAU,CAAC,MAAM,KAAK,WAAW,IAAI,UAAU,CAAC,MAAM,KAAK,QAAQ,IAAI,UAAU,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBAC5G,OAAO,UAAU,CAAC;YACpB,CAAC;YAED,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,QAAuB,EAAE,OAA2B;QACvE,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,OAAO,EAAE,YAAY,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,kEAAkE,OAAO,CAAC,YAAY,YAAY,CAAC,CAAC;QACjH,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,sBAAsB,GAAG,CAAC,IAAI,wBAAwB,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC;QAC5F,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QAEhE,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;CACF"}
|