@falai/agent 3.3.0 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +4 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/providers/AnthropicProvider.d.ts +6 -2
- package/dist/cjs/providers/AnthropicProvider.d.ts.map +1 -1
- package/dist/cjs/providers/AnthropicProvider.js +2 -0
- package/dist/cjs/providers/AnthropicProvider.js.map +1 -1
- package/dist/cjs/providers/FallbackAiProvider.d.ts +26 -0
- package/dist/cjs/providers/FallbackAiProvider.d.ts.map +1 -0
- package/dist/cjs/providers/FallbackAiProvider.js +54 -0
- package/dist/cjs/providers/FallbackAiProvider.js.map +1 -0
- package/dist/cjs/providers/GeminiProvider.d.ts +5 -1
- package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/cjs/providers/GeminiProvider.js +2 -0
- package/dist/cjs/providers/GeminiProvider.js.map +1 -1
- package/dist/cjs/providers/OpenAICompatibleProvider.d.ts.map +1 -1
- package/dist/cjs/providers/OpenAICompatibleProvider.js +2 -0
- package/dist/cjs/providers/OpenAICompatibleProvider.js.map +1 -1
- package/dist/cjs/providers/ProviderAdapter.d.ts +8 -1
- package/dist/cjs/providers/ProviderAdapter.d.ts.map +1 -1
- package/dist/cjs/providers/ProviderAdapter.js +23 -1
- package/dist/cjs/providers/ProviderAdapter.js.map +1 -1
- package/dist/cjs/providers/ZaiProvider.d.ts +6 -2
- package/dist/cjs/providers/ZaiProvider.d.ts.map +1 -1
- package/dist/cjs/providers/ZaiProvider.js +2 -0
- package/dist/cjs/providers/ZaiProvider.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/providers/AnthropicProvider.d.ts +6 -2
- package/dist/providers/AnthropicProvider.d.ts.map +1 -1
- package/dist/providers/AnthropicProvider.js +2 -0
- package/dist/providers/AnthropicProvider.js.map +1 -1
- package/dist/providers/FallbackAiProvider.d.ts +26 -0
- package/dist/providers/FallbackAiProvider.d.ts.map +1 -0
- package/dist/providers/FallbackAiProvider.js +50 -0
- package/dist/providers/FallbackAiProvider.js.map +1 -0
- package/dist/providers/GeminiProvider.d.ts +5 -1
- package/dist/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/providers/GeminiProvider.js +2 -0
- package/dist/providers/GeminiProvider.js.map +1 -1
- package/dist/providers/OpenAICompatibleProvider.d.ts.map +1 -1
- package/dist/providers/OpenAICompatibleProvider.js +2 -0
- package/dist/providers/OpenAICompatibleProvider.js.map +1 -1
- package/dist/providers/ProviderAdapter.d.ts +8 -1
- package/dist/providers/ProviderAdapter.d.ts.map +1 -1
- package/dist/providers/ProviderAdapter.js +24 -2
- package/dist/providers/ProviderAdapter.js.map +1 -1
- package/dist/providers/ZaiProvider.d.ts +6 -2
- package/dist/providers/ZaiProvider.d.ts.map +1 -1
- package/dist/providers/ZaiProvider.js +2 -0
- package/dist/providers/ZaiProvider.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +2 -0
- package/src/providers/AnthropicProvider.ts +8 -3
- package/src/providers/FallbackAiProvider.ts +94 -0
- package/src/providers/GeminiProvider.ts +7 -2
- package/src/providers/OpenAICompatibleProvider.ts +2 -0
- package/src/providers/ProviderAdapter.ts +31 -1
- package/src/providers/ZaiProvider.ts +8 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnthropicProvider.js","sourceRoot":"","sources":["../../src/providers/AnthropicProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,uBAAuB,
|
|
1
|
+
{"version":3,"file":"AnthropicProvider.js","sourceRoot":"","sources":["../../src/providers/AnthropicProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,uBAAuB,EAAuC,MAAM,mBAAmB,CAAC;AAGjG,OAAO,EAAE,eAAe,EAAsB,MAAM,sBAAsB,CAAC;AA4B3E,MAAM,OAAO,iBAAkB,SAAQ,eAAe;IAUpD,YAAY,OAAiC;QAC3C,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACtE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;QACtF,CAAC;QAED,KAAK,CAAC;YACJ,QAAQ,EAAE,uBAAuB,CAAC;gBAChC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,EAAE,EAAE,WAAW;gBACf,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxD,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7E,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/D,CAAC;YACF,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrE,CAAC,CAAC;QA/BW,SAAI,GAAG,WAAW,CAAC;QACnB,iBAAY,GAAyB;YACnD,aAAa,EAAE,IAAI;YACnB,wBAAwB,EAAE,KAAK;YAC/B,iBAAiB,EAAE,IAAI;YACvB,0BAA0B,EAAE,IAAI;YAChC,qBAAqB,EAAE,IAAI;SAC5B,CAAC;IAyBF,CAAC;CACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fallback AI Provider: runs an ordered list of AiProviders.
|
|
3
|
+
*
|
|
4
|
+
* Each child AiProvider is tried in turn using `@providerkit/core`'s FallbackPool,
|
|
5
|
+
* preserving per-provider cooldowns (e.g. 5h or weekly rate limit / quota resets)
|
|
6
|
+
* across calls.
|
|
7
|
+
*/
|
|
8
|
+
import { FallbackPool, type FallbackOptions, type ErrorKind } from "@providerkit/core";
|
|
9
|
+
import type { AgentStructuredResponse, AiProvider, GenerateMessageInput, GenerateMessageOutput, GenerateMessageStreamChunk, ProviderCapabilities } from "../types/ai.js";
|
|
10
|
+
export interface FallbackAiProviderOptions {
|
|
11
|
+
/** The ordered list of providers to try. The first is primary. */
|
|
12
|
+
providers: AiProvider[];
|
|
13
|
+
/** Optional cooldown configuration overrides. */
|
|
14
|
+
cooldownMs?: Partial<Record<ErrorKind, number | null>>;
|
|
15
|
+
/** Optional callback when a provider enters cooldown. */
|
|
16
|
+
onCooldown?: FallbackOptions<AiProvider>["onCooldown"];
|
|
17
|
+
}
|
|
18
|
+
export declare class FallbackAiProvider implements AiProvider {
|
|
19
|
+
readonly name: string;
|
|
20
|
+
readonly capabilities: ProviderCapabilities;
|
|
21
|
+
readonly pool: FallbackPool<AiProvider>;
|
|
22
|
+
constructor(options: FallbackAiProviderOptions);
|
|
23
|
+
generateMessage<TContext = unknown, TStructured = AgentStructuredResponse>(input: GenerateMessageInput<TContext>): Promise<GenerateMessageOutput<TStructured>>;
|
|
24
|
+
generateMessageStream<TContext = unknown, TStructured = AgentStructuredResponse>(input: GenerateMessageInput<TContext>): AsyncGenerator<GenerateMessageStreamChunk<TStructured>>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=FallbackAiProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FallbackAiProvider.d.ts","sourceRoot":"","sources":["../../src/providers/FallbackAiProvider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,YAAY,EACZ,KAAK,eAAe,EACpB,KAAK,SAAS,EACf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EACV,uBAAuB,EACvB,UAAU,EACV,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,EAC1B,oBAAoB,EACrB,MAAM,gBAAgB,CAAC;AAGxB,MAAM,WAAW,yBAAyB;IACxC,kEAAkE;IAClE,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,iDAAiD;IACjD,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;IACvD,yDAAyD;IACzD,UAAU,CAAC,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC;CACxD;AAED,qBAAa,kBAAmB,YAAW,UAAU;IACnD,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,YAAY,EAAE,oBAAoB,CAAC;IACnD,SAAgB,IAAI,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;gBAEnC,OAAO,EAAE,yBAAyB;IAkCxC,eAAe,CAAC,QAAQ,GAAG,OAAO,EAAE,WAAW,GAAG,uBAAuB,EAC7E,KAAK,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GACpC,OAAO,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;IASvC,qBAAqB,CAAC,QAAQ,GAAG,OAAO,EAAE,WAAW,GAAG,uBAAuB,EACpF,KAAK,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GACpC,cAAc,CAAC,0BAA0B,CAAC,WAAW,CAAC,CAAC;CAQ3D"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fallback AI Provider: runs an ordered list of AiProviders.
|
|
3
|
+
*
|
|
4
|
+
* Each child AiProvider is tried in turn using `@providerkit/core`'s FallbackPool,
|
|
5
|
+
* preserving per-provider cooldowns (e.g. 5h or weekly rate limit / quota resets)
|
|
6
|
+
* across calls.
|
|
7
|
+
*/
|
|
8
|
+
import { FallbackPool, } from "@providerkit/core";
|
|
9
|
+
import { logger } from "../utils/logger.js";
|
|
10
|
+
export class FallbackAiProvider {
|
|
11
|
+
constructor(options) {
|
|
12
|
+
if (!options.providers || options.providers.length === 0) {
|
|
13
|
+
throw new Error("FallbackAiProvider requires at least one provider");
|
|
14
|
+
}
|
|
15
|
+
this.name = `fallback(${options.providers.map((p) => p.name).join("->")})`;
|
|
16
|
+
// Capabilities represent the intersection of supported critical features
|
|
17
|
+
// while inheriting primary's defaults.
|
|
18
|
+
this.capabilities = {
|
|
19
|
+
supportsTools: options.providers.every((p) => p.capabilities.supportsTools),
|
|
20
|
+
supportsNativeJsonSchema: options.providers.every((p) => p.capabilities.supportsNativeJsonSchema),
|
|
21
|
+
supportsStreaming: options.providers.every((p) => p.capabilities.supportsStreaming),
|
|
22
|
+
supportsStreamingToolCalls: options.providers.every((p) => p.capabilities.supportsStreamingToolCalls),
|
|
23
|
+
supportsPromptCaching: options.providers.every((p) => p.capabilities.supportsPromptCaching),
|
|
24
|
+
};
|
|
25
|
+
this.pool = new FallbackPool(options.providers, {
|
|
26
|
+
...(options.cooldownMs ? { cooldownMs: options.cooldownMs } : {}),
|
|
27
|
+
onCooldown: (info) => {
|
|
28
|
+
logger.warn(`[${this.name}] Provider "${info.candidate.name}" cooled down until ${new Date(info.retryAtMs).toISOString()} (${info.kind}${info.window ? ` / ${info.window}` : ""})`);
|
|
29
|
+
options.onCooldown?.(info);
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
async generateMessage(input) {
|
|
34
|
+
return this.pool.with(async (provider, signal) => {
|
|
35
|
+
return provider.generateMessage({
|
|
36
|
+
...input,
|
|
37
|
+
signal,
|
|
38
|
+
});
|
|
39
|
+
}, input.signal);
|
|
40
|
+
}
|
|
41
|
+
async *generateMessageStream(input) {
|
|
42
|
+
yield* this.pool.stream(async function* (provider, signal) {
|
|
43
|
+
yield* provider.generateMessageStream({
|
|
44
|
+
...input,
|
|
45
|
+
signal,
|
|
46
|
+
});
|
|
47
|
+
}, input.signal);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=FallbackAiProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FallbackAiProvider.js","sourceRoot":"","sources":["../../src/providers/FallbackAiProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
* dropped the schema in that case, from a 2024-era constraint that no longer
|
|
10
10
|
* holds — a sibling codebase runs the combination in production today.
|
|
11
11
|
*/
|
|
12
|
-
import type
|
|
12
|
+
import { type FallbackOptions, type Provider } from "@providerkit/core";
|
|
13
|
+
import type { AiProvider, ProviderCapabilities } from "../types/ai.js";
|
|
13
14
|
import type { JsonWithTools } from "./OpenAICompatibleProvider.js";
|
|
14
15
|
import { ProviderAdapter, type RequestConfig } from "./ProviderAdapter.js";
|
|
15
16
|
export interface GeminiProviderOptions {
|
|
@@ -19,6 +20,9 @@ export interface GeminiProviderOptions {
|
|
|
19
20
|
model: string;
|
|
20
21
|
/** Backup models to try if the primary fails (default: []) */
|
|
21
22
|
backupModels?: string[];
|
|
23
|
+
/** Fallback providers to try if this provider fails/exhausts */
|
|
24
|
+
fallbacks?: Array<AiProvider | Provider>;
|
|
25
|
+
fallbackOptions?: FallbackOptions<Provider>;
|
|
22
26
|
/** Any endpoint speaking the Gemini generateContent dialect. */
|
|
23
27
|
baseUrl?: string;
|
|
24
28
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeminiProvider.d.ts","sourceRoot":"","sources":["../../src/providers/GeminiProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"GeminiProvider.d.ts","sourceRoot":"","sources":["../../src/providers/GeminiProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAwB,KAAK,eAAe,EAAE,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE9F,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE3E,MAAM,WAAW,qBAAqB;IACpC,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,gEAAgE;IAChE,SAAS,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC;IACzC,eAAe,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC5C,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,4CAA4C;IAC5C,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,4CAA4C;IAC5C,WAAW,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD;gFAC4E;IAC5E,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,qBAAa,cAAe,SAAQ,eAAe;IACjD,SAAgB,IAAI,YAAY;IAChC,SAAgB,YAAY,EAAE,oBAAoB,CAMhD;gBAEU,OAAO,EAAE,qBAAqB;CAyB3C"}
|
|
@@ -32,6 +32,8 @@ export class GeminiProvider extends ProviderAdapter {
|
|
|
32
32
|
model: options.model,
|
|
33
33
|
...(options.config ? { defaults: options.config } : {}),
|
|
34
34
|
...(options.backupModels ? { backupModels: options.backupModels } : {}),
|
|
35
|
+
...(options.fallbacks ? { fallbacks: options.fallbacks } : {}),
|
|
36
|
+
...(options.fallbackOptions ? { fallbackOptions: options.fallbackOptions } : {}),
|
|
35
37
|
...(options.retryConfig ? { retryConfig: options.retryConfig } : {}),
|
|
36
38
|
});
|
|
37
39
|
this.name = "gemini";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeminiProvider.js","sourceRoot":"","sources":["../../src/providers/GeminiProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"GeminiProvider.js","sourceRoot":"","sources":["../../src/providers/GeminiProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,oBAAoB,EAAuC,MAAM,mBAAmB,CAAC;AAI9F,OAAO,EAAE,eAAe,EAAsB,MAAM,sBAAsB,CAAC;AA8B3E,MAAM,OAAO,cAAe,SAAQ,eAAe;IAUjD,YAAY,OAA8B;QACxC,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QACnE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QAED,KAAK,CAAC;YACJ,QAAQ,EAAE,oBAAoB,CAAC;gBAC7B,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,EAAE,EAAE,QAAQ;gBACZ,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxD,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1E,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7E,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/D,CAAC;YACF,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrE,CAAC,CAAC;QAhCW,SAAI,GAAG,QAAQ,CAAC;QAChB,iBAAY,GAAyB;YACnD,aAAa,EAAE,IAAI;YACnB,wBAAwB,EAAE,IAAI;YAC9B,iBAAiB,EAAE,IAAI;YACvB,0BAA0B,EAAE,IAAI;YAChC,qBAAqB,EAAE,IAAI;SAC5B,CAAC;IA0BF,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAICompatibleProvider.d.ts","sourceRoot":"","sources":["../../src/providers/OpenAICompatibleProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,eAAe,EAAE,KAAK,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErG;;;;;;;;GAQG;AACH,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,GAAG,aAAa,GAAG,aAAa,CAAC;AAErF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAAG,QAAQ,CAAC;AAEzD,MAAM,WAAW,4BACf,SAAQ,IAAI,CAAC,mBAAmB,EAAE,UAAU,CAAC;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IACxC,sEAAsE;IACtE,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,gFAAgF;IAChF,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,8BAAsB,wBAAyB,SAAQ,eAAe;IACpE,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;IAE1C,SAAS,aAAa,IAAI,EAAE,4BAA4B;
|
|
1
|
+
{"version":3,"file":"OpenAICompatibleProvider.d.ts","sourceRoot":"","sources":["../../src/providers/OpenAICompatibleProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,eAAe,EAAE,KAAK,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErG;;;;;;;;GAQG;AACH,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,GAAG,aAAa,GAAG,aAAa,CAAC;AAErF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAAG,QAAQ,CAAC;AAEzD,MAAM,WAAW,4BACf,SAAQ,IAAI,CAAC,mBAAmB,EAAE,UAAU,CAAC;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IACxC,sEAAsE;IACtE,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,gFAAgF;IAChF,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,8BAAsB,wBAAyB,SAAQ,eAAe;IACpE,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;IAE1C,SAAS,aAAa,IAAI,EAAE,4BAA4B;CAazD"}
|
|
@@ -17,6 +17,8 @@ export class OpenAICompatibleProvider extends ProviderAdapter {
|
|
|
17
17
|
model: init.model,
|
|
18
18
|
...(init.config ? { defaults: init.config } : {}),
|
|
19
19
|
...(init.backupModels ? { backupModels: init.backupModels } : {}),
|
|
20
|
+
...(init.fallbacks ? { fallbacks: init.fallbacks } : {}),
|
|
21
|
+
...(init.fallbackOptions ? { fallbackOptions: init.fallbackOptions } : {}),
|
|
20
22
|
...(init.retryConfig ? { retryConfig: init.retryConfig } : {}),
|
|
21
23
|
});
|
|
22
24
|
this.config = init.config;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAICompatibleProvider.js","sourceRoot":"","sources":["../../src/providers/OpenAICompatibleProvider.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OpenAICompatibleProvider.js","sourceRoot":"","sources":["../../src/providers/OpenAICompatibleProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* the pair drifted (the streaming path silently lost native schema enforcement
|
|
18
18
|
* because only the non-streaming one could reach `responses.parse`).
|
|
19
19
|
*/
|
|
20
|
-
import { type ChatMessage, type Effort, type JsonWithToolsProbe, type ProbeOptions, type Provider } from "@providerkit/core";
|
|
20
|
+
import { type ChatMessage, type Effort, type FallbackOptions, type JsonWithToolsProbe, type ProbeOptions, type Provider } from "@providerkit/core";
|
|
21
21
|
import type { AgentStructuredResponse, AiProvider, GenerateMessageInput, GenerateMessageOutput, GenerateMessageStreamChunk, ProviderCapabilities } from "../types/ai.js";
|
|
22
22
|
import type { HistoryItem } from "../types/history.js";
|
|
23
23
|
/** Provider timeout (ms) + retry count, after defaults are applied. */
|
|
@@ -80,6 +80,12 @@ export interface ProviderAdapterInit {
|
|
|
80
80
|
defaults?: RequestConfig;
|
|
81
81
|
/** Tried in order after the primary. */
|
|
82
82
|
backupModels?: string[];
|
|
83
|
+
/**
|
|
84
|
+
* Fallback providers to try if this provider fails/exhausts.
|
|
85
|
+
* Accepts both @falai/agent AiProviders (like ZaiProvider) and @providerkit/core Providers.
|
|
86
|
+
*/
|
|
87
|
+
fallbacks?: Array<AiProvider | Provider>;
|
|
88
|
+
fallbackOptions?: FallbackOptions<Provider>;
|
|
83
89
|
retryConfig?: {
|
|
84
90
|
timeout?: number;
|
|
85
91
|
retries?: number;
|
|
@@ -95,6 +101,7 @@ export declare abstract class ProviderAdapter implements AiProvider {
|
|
|
95
101
|
protected readonly backupModels: string[];
|
|
96
102
|
protected readonly retryConfig: RetryConfig;
|
|
97
103
|
private readonly defaults;
|
|
104
|
+
get coreProvider(): Provider;
|
|
98
105
|
protected constructor(init: ProviderAdapterInit);
|
|
99
106
|
/**
|
|
100
107
|
* Ask this provider's MODEL whether it can still call a tool while its output
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProviderAdapter.d.ts","sourceRoot":"","sources":["../../src/providers/ProviderAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"ProviderAdapter.d.ts","sourceRoot":"","sources":["../../src/providers/ProviderAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* the pair drifted (the streaming path silently lost native schema enforcement
|
|
18
18
|
* because only the non-streaming one could reach `responses.parse`).
|
|
19
19
|
*/
|
|
20
|
-
import { ProviderError, classify, isBackupEligible, probeJsonWithTools, requireContent, streamWatch, streamWithBackupModels, watchChunks, withStreamRetry, } from "@providerkit/core";
|
|
20
|
+
import { ProviderError, classify, isBackupEligible, probeJsonWithTools, requireContent, streamWatch, streamWithBackupModels, watchChunks, withFallbackProviders, withStreamRetry, } from "@providerkit/core";
|
|
21
21
|
import { assertUsableCompletion } from "../utils/completion.js";
|
|
22
22
|
import { isJSONShaped, tryParseJSONResponse } from "../utils/json.js";
|
|
23
23
|
import { logger } from "../utils/logger.js";
|
|
@@ -110,6 +110,9 @@ function toJsonOutput(input) {
|
|
|
110
110
|
};
|
|
111
111
|
}
|
|
112
112
|
function fold(acc, chunk) {
|
|
113
|
+
if (chunk.source) {
|
|
114
|
+
acc.model = chunk.source.model;
|
|
115
|
+
}
|
|
113
116
|
if (chunk.usage) {
|
|
114
117
|
acc.promptTokens = chunk.usage.inputTokens;
|
|
115
118
|
acc.completionTokens = chunk.usage.outputTokens;
|
|
@@ -148,12 +151,31 @@ function toolCallsOf(acc, label) {
|
|
|
148
151
|
return out;
|
|
149
152
|
}
|
|
150
153
|
export class ProviderAdapter {
|
|
154
|
+
get coreProvider() {
|
|
155
|
+
return this.provider;
|
|
156
|
+
}
|
|
151
157
|
constructor(init) {
|
|
152
158
|
this.defaults = init.defaults;
|
|
153
|
-
this.provider = init.provider;
|
|
154
159
|
this.primaryModel = init.model;
|
|
155
160
|
this.backupModels = init.backupModels ?? [];
|
|
156
161
|
this.retryConfig = resolveRetryConfig(init.retryConfig);
|
|
162
|
+
if (init.fallbacks && init.fallbacks.length > 0) {
|
|
163
|
+
const coreProviders = [
|
|
164
|
+
init.provider,
|
|
165
|
+
...init.fallbacks.map((f) => {
|
|
166
|
+
if (f instanceof ProviderAdapter)
|
|
167
|
+
return f.coreProvider;
|
|
168
|
+
if ("coreProvider" in f && f.coreProvider) {
|
|
169
|
+
return f.coreProvider;
|
|
170
|
+
}
|
|
171
|
+
return f;
|
|
172
|
+
}),
|
|
173
|
+
];
|
|
174
|
+
this.provider = withFallbackProviders(coreProviders, init.fallbackOptions);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
this.provider = init.provider;
|
|
178
|
+
}
|
|
157
179
|
}
|
|
158
180
|
/**
|
|
159
181
|
* Ask this provider's MODEL whether it can still call a tool while its output
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProviderAdapter.js","sourceRoot":"","sources":["../../src/providers/ProviderAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EACL,aAAa,EACb,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,sBAAsB,EACtB,WAAW,EACX,eAAe,
|
|
1
|
+
{"version":3,"file":"ProviderAdapter.js","sourceRoot":"","sources":["../../src/providers/ProviderAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,15 +11,19 @@
|
|
|
11
11
|
* "no thinking" must be an explicit marker — silence means the model default,
|
|
12
12
|
* which is thinking ON.
|
|
13
13
|
*/
|
|
14
|
-
import type
|
|
14
|
+
import { type FallbackOptions, type Provider } from "@providerkit/core";
|
|
15
|
+
import type { AiProvider, ProviderCapabilities } from "../types/ai.js";
|
|
15
16
|
import { ProviderAdapter, type RequestConfig } from "./ProviderAdapter.js";
|
|
16
17
|
export interface ZaiProviderOptions {
|
|
17
18
|
/** Z.ai Coding Plan key */
|
|
18
19
|
apiKey: string;
|
|
19
20
|
/** Model to use. Defaults to the fleet workhorse `glm-5.3-flash`. */
|
|
20
21
|
model?: string;
|
|
21
|
-
/** Backup models to try if the primary fails (default: []) */
|
|
22
|
+
/** Backup models to try on this provider if the primary fails (default: []) */
|
|
22
23
|
backupModels?: string[];
|
|
24
|
+
/** Fallback providers to try if this provider fails/exhausts */
|
|
25
|
+
fallbacks?: Array<AiProvider | Provider>;
|
|
26
|
+
fallbackOptions?: FallbackOptions<Provider>;
|
|
23
27
|
/** Any endpoint speaking the Anthropic Messages dialect with the plan's
|
|
24
28
|
* auth. Defaults to the coding endpoint. */
|
|
25
29
|
baseUrl?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ZaiProvider.d.ts","sourceRoot":"","sources":["../../src/providers/ZaiProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"ZaiProvider.d.ts","sourceRoot":"","sources":["../../src/providers/ZaiProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAA2B,KAAK,eAAe,EAAE,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEjG,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE3E,MAAM,WAAW,kBAAkB;IACjC,2BAA2B;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,gEAAgE;IAChE,SAAS,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC;IACzC,eAAe,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC5C;iDAC6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,4CAA4C;IAC5C,WAAW,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,2DAA2D;IAC3D,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,qBAAa,WAAY,SAAQ,eAAe;IAC9C,SAAgB,IAAI,SAAS;IAC7B,SAAgB,YAAY,EAAE,oBAAoB,CAMhD;gBAEU,OAAO,EAAE,kBAAkB;CAqBxC"}
|
|
@@ -30,6 +30,8 @@ export class ZaiProvider extends ProviderAdapter {
|
|
|
30
30
|
model,
|
|
31
31
|
...(options.config ? { defaults: options.config } : {}),
|
|
32
32
|
...(options.backupModels ? { backupModels: options.backupModels } : {}),
|
|
33
|
+
...(options.fallbacks ? { fallbacks: options.fallbacks } : {}),
|
|
34
|
+
...(options.fallbackOptions ? { fallbackOptions: options.fallbackOptions } : {}),
|
|
33
35
|
...(options.retryConfig ? { retryConfig: options.retryConfig } : {}),
|
|
34
36
|
});
|
|
35
37
|
this.name = "zai";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ZaiProvider.js","sourceRoot":"","sources":["../../src/providers/ZaiProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,uBAAuB,
|
|
1
|
+
{"version":3,"file":"ZaiProvider.js","sourceRoot":"","sources":["../../src/providers/ZaiProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,uBAAuB,EAAuC,MAAM,mBAAmB,CAAC;AAGjG,OAAO,EAAE,eAAe,EAAsB,MAAM,sBAAsB,CAAC;AAuB3E,MAAM,OAAO,WAAY,SAAQ,eAAe;IAU9C,YAAY,OAA2B;QACrC,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAE7E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,eAAe,CAAC;QAC/C,KAAK,CAAC;YACJ,QAAQ,EAAE,uBAAuB,CAAC;gBAChC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,KAAK;gBACL,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxD,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7E,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/D,CAAC;YACF,KAAK;YACL,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrE,CAAC,CAAC;QA5BW,SAAI,GAAG,KAAK,CAAC;QACb,iBAAY,GAAyB;YACnD,aAAa,EAAE,IAAI;YACnB,wBAAwB,EAAE,KAAK;YAC/B,iBAAiB,EAAE,IAAI;YACvB,0BAA0B,EAAE,IAAI;YAChC,qBAAqB,EAAE,IAAI;SAC5B,CAAC;IAsBF,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@falai/agent",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.4.0",
|
|
4
4
|
"description": "Conversational state engine for TypeScript where the AI understands, but the code is in control",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/cjs/index.js",
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
"typescript-eslint": "^8.18.2"
|
|
93
93
|
},
|
|
94
94
|
"dependencies": {
|
|
95
|
-
"@providerkit/core": "^0.
|
|
95
|
+
"@providerkit/core": "^0.8.0",
|
|
96
96
|
"loglevel": "^1.9.2"
|
|
97
97
|
},
|
|
98
98
|
"peerDependencies": {
|
package/src/index.ts
CHANGED
|
@@ -35,6 +35,8 @@ export { AnthropicProvider } from "./providers/AnthropicProvider.js";
|
|
|
35
35
|
export type { AnthropicProviderOptions } from "./providers/AnthropicProvider.js";
|
|
36
36
|
export { DeepSeekProvider } from "./providers/DeepSeekProvider.js";
|
|
37
37
|
export type { DeepSeekProviderOptions } from "./providers/DeepSeekProvider.js";
|
|
38
|
+
export { FallbackAiProvider } from "./providers/FallbackAiProvider.js";
|
|
39
|
+
export type { FallbackAiProviderOptions } from "./providers/FallbackAiProvider.js";
|
|
38
40
|
// Base class for building OpenAI-compatible providers (Groq, Together, etc.)
|
|
39
41
|
export { OpenAICompatibleProvider } from "./providers/OpenAICompatibleProvider.js";
|
|
40
42
|
export type {
|
|
@@ -8,18 +8,21 @@
|
|
|
8
8
|
* `@providerkit/core`; this file is the constructor.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import { createAnthropicProvider } from "@providerkit/core";
|
|
11
|
+
import { createAnthropicProvider, type FallbackOptions, type Provider } from "@providerkit/core";
|
|
12
12
|
|
|
13
|
-
import type { ProviderCapabilities } from "../types/ai.js";
|
|
13
|
+
import type { AiProvider, ProviderCapabilities } from "../types/ai.js";
|
|
14
14
|
import { ProviderAdapter, type RequestConfig } from "./ProviderAdapter.js";
|
|
15
15
|
|
|
16
16
|
export interface AnthropicProviderOptions {
|
|
17
17
|
/** Anthropic API key */
|
|
18
18
|
apiKey: string;
|
|
19
|
-
/** Model to use (required) — e.g. "claude-sonnet-5"
|
|
19
|
+
/** Model to use (required) — e.g. "claude-sonnet-5" or "claude-opus-5" */
|
|
20
20
|
model: string;
|
|
21
21
|
/** Backup models to try if the primary fails (default: []) */
|
|
22
22
|
backupModels?: string[];
|
|
23
|
+
/** Fallback providers to try if this provider fails/exhausts */
|
|
24
|
+
fallbacks?: Array<AiProvider | Provider>;
|
|
25
|
+
fallbackOptions?: FallbackOptions<Provider>;
|
|
23
26
|
/** Any endpoint speaking the Anthropic Messages dialect. */
|
|
24
27
|
baseUrl?: string;
|
|
25
28
|
/** Request defaults sent with every call */
|
|
@@ -65,6 +68,8 @@ export class AnthropicProvider extends ProviderAdapter {
|
|
|
65
68
|
model: options.model,
|
|
66
69
|
...(options.config ? { defaults: options.config } : {}),
|
|
67
70
|
...(options.backupModels ? { backupModels: options.backupModels } : {}),
|
|
71
|
+
...(options.fallbacks ? { fallbacks: options.fallbacks } : {}),
|
|
72
|
+
...(options.fallbackOptions ? { fallbackOptions: options.fallbackOptions } : {}),
|
|
68
73
|
...(options.retryConfig ? { retryConfig: options.retryConfig } : {}),
|
|
69
74
|
});
|
|
70
75
|
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fallback AI Provider: runs an ordered list of AiProviders.
|
|
3
|
+
*
|
|
4
|
+
* Each child AiProvider is tried in turn using `@providerkit/core`'s FallbackPool,
|
|
5
|
+
* preserving per-provider cooldowns (e.g. 5h or weekly rate limit / quota resets)
|
|
6
|
+
* across calls.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
FallbackPool,
|
|
11
|
+
type FallbackOptions,
|
|
12
|
+
type ErrorKind,
|
|
13
|
+
} from "@providerkit/core";
|
|
14
|
+
|
|
15
|
+
import type {
|
|
16
|
+
AgentStructuredResponse,
|
|
17
|
+
AiProvider,
|
|
18
|
+
GenerateMessageInput,
|
|
19
|
+
GenerateMessageOutput,
|
|
20
|
+
GenerateMessageStreamChunk,
|
|
21
|
+
ProviderCapabilities,
|
|
22
|
+
} from "../types/ai.js";
|
|
23
|
+
import { logger } from "../utils/logger.js";
|
|
24
|
+
|
|
25
|
+
export interface FallbackAiProviderOptions {
|
|
26
|
+
/** The ordered list of providers to try. The first is primary. */
|
|
27
|
+
providers: AiProvider[];
|
|
28
|
+
/** Optional cooldown configuration overrides. */
|
|
29
|
+
cooldownMs?: Partial<Record<ErrorKind, number | null>>;
|
|
30
|
+
/** Optional callback when a provider enters cooldown. */
|
|
31
|
+
onCooldown?: FallbackOptions<AiProvider>["onCooldown"];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export class FallbackAiProvider implements AiProvider {
|
|
35
|
+
public readonly name: string;
|
|
36
|
+
public readonly capabilities: ProviderCapabilities;
|
|
37
|
+
public readonly pool: FallbackPool<AiProvider>;
|
|
38
|
+
|
|
39
|
+
constructor(options: FallbackAiProviderOptions) {
|
|
40
|
+
if (!options.providers || options.providers.length === 0) {
|
|
41
|
+
throw new Error("FallbackAiProvider requires at least one provider");
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
this.name = `fallback(${options.providers.map((p) => p.name).join("->")})`;
|
|
45
|
+
|
|
46
|
+
// Capabilities represent the intersection of supported critical features
|
|
47
|
+
// while inheriting primary's defaults.
|
|
48
|
+
this.capabilities = {
|
|
49
|
+
supportsTools: options.providers.every((p) => p.capabilities.supportsTools),
|
|
50
|
+
supportsNativeJsonSchema: options.providers.every(
|
|
51
|
+
(p) => p.capabilities.supportsNativeJsonSchema,
|
|
52
|
+
),
|
|
53
|
+
supportsStreaming: options.providers.every((p) => p.capabilities.supportsStreaming),
|
|
54
|
+
supportsStreamingToolCalls: options.providers.every(
|
|
55
|
+
(p) => p.capabilities.supportsStreamingToolCalls,
|
|
56
|
+
),
|
|
57
|
+
supportsPromptCaching: options.providers.every((p) => p.capabilities.supportsPromptCaching),
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
this.pool = new FallbackPool<AiProvider>(options.providers, {
|
|
61
|
+
...(options.cooldownMs ? { cooldownMs: options.cooldownMs } : {}),
|
|
62
|
+
onCooldown: (info) => {
|
|
63
|
+
logger.warn(
|
|
64
|
+
`[${this.name}] Provider "${info.candidate.name}" cooled down until ${new Date(
|
|
65
|
+
info.retryAtMs,
|
|
66
|
+
).toISOString()} (${info.kind}${info.window ? ` / ${info.window}` : ""})`,
|
|
67
|
+
);
|
|
68
|
+
options.onCooldown?.(info);
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
async generateMessage<TContext = unknown, TStructured = AgentStructuredResponse>(
|
|
74
|
+
input: GenerateMessageInput<TContext>,
|
|
75
|
+
): Promise<GenerateMessageOutput<TStructured>> {
|
|
76
|
+
return this.pool.with(async (provider, signal) => {
|
|
77
|
+
return provider.generateMessage<TContext, TStructured>({
|
|
78
|
+
...input,
|
|
79
|
+
signal,
|
|
80
|
+
});
|
|
81
|
+
}, input.signal);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
async *generateMessageStream<TContext = unknown, TStructured = AgentStructuredResponse>(
|
|
85
|
+
input: GenerateMessageInput<TContext>,
|
|
86
|
+
): AsyncGenerator<GenerateMessageStreamChunk<TStructured>> {
|
|
87
|
+
yield* this.pool.stream(async function* (provider, signal) {
|
|
88
|
+
yield* provider.generateMessageStream<TContext, TStructured>({
|
|
89
|
+
...input,
|
|
90
|
+
signal,
|
|
91
|
+
});
|
|
92
|
+
}, input.signal);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
* holds — a sibling codebase runs the combination in production today.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
import { createGeminiProvider } from "@providerkit/core";
|
|
13
|
+
import { createGeminiProvider, type FallbackOptions, type Provider } from "@providerkit/core";
|
|
14
14
|
|
|
15
|
-
import type { ProviderCapabilities } from "../types/ai.js";
|
|
15
|
+
import type { AiProvider, ProviderCapabilities } from "../types/ai.js";
|
|
16
16
|
import type { JsonWithTools } from "./OpenAICompatibleProvider.js";
|
|
17
17
|
import { ProviderAdapter, type RequestConfig } from "./ProviderAdapter.js";
|
|
18
18
|
|
|
@@ -23,6 +23,9 @@ export interface GeminiProviderOptions {
|
|
|
23
23
|
model: string;
|
|
24
24
|
/** Backup models to try if the primary fails (default: []) */
|
|
25
25
|
backupModels?: string[];
|
|
26
|
+
/** Fallback providers to try if this provider fails/exhausts */
|
|
27
|
+
fallbacks?: Array<AiProvider | Provider>;
|
|
28
|
+
fallbackOptions?: FallbackOptions<Provider>;
|
|
26
29
|
/** Any endpoint speaking the Gemini generateContent dialect. */
|
|
27
30
|
baseUrl?: string;
|
|
28
31
|
/**
|
|
@@ -71,6 +74,8 @@ export class GeminiProvider extends ProviderAdapter {
|
|
|
71
74
|
model: options.model,
|
|
72
75
|
...(options.config ? { defaults: options.config } : {}),
|
|
73
76
|
...(options.backupModels ? { backupModels: options.backupModels } : {}),
|
|
77
|
+
...(options.fallbacks ? { fallbacks: options.fallbacks } : {}),
|
|
78
|
+
...(options.fallbackOptions ? { fallbackOptions: options.fallbackOptions } : {}),
|
|
74
79
|
...(options.retryConfig ? { retryConfig: options.retryConfig } : {}),
|
|
75
80
|
});
|
|
76
81
|
}
|
|
@@ -72,6 +72,8 @@ export abstract class OpenAICompatibleProvider extends ProviderAdapter {
|
|
|
72
72
|
model: init.model,
|
|
73
73
|
...(init.config ? { defaults: init.config } : {}),
|
|
74
74
|
...(init.backupModels ? { backupModels: init.backupModels } : {}),
|
|
75
|
+
...(init.fallbacks ? { fallbacks: init.fallbacks } : {}),
|
|
76
|
+
...(init.fallbackOptions ? { fallbackOptions: init.fallbackOptions } : {}),
|
|
75
77
|
...(init.retryConfig ? { retryConfig: init.retryConfig } : {}),
|
|
76
78
|
});
|
|
77
79
|
this.config = init.config;
|