@falai/agent 3.4.1 → 3.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist/providers/DeepSeekProvider.d.ts +9 -1
  2. package/dist/providers/DeepSeekProvider.d.ts.map +1 -1
  3. package/dist/providers/DeepSeekProvider.js +1 -0
  4. package/dist/providers/DeepSeekProvider.js.map +1 -1
  5. package/dist/providers/GenericOpenAICompatibleProvider.d.ts +8 -1
  6. package/dist/providers/GenericOpenAICompatibleProvider.d.ts.map +1 -1
  7. package/dist/providers/GenericOpenAICompatibleProvider.js +1 -0
  8. package/dist/providers/GenericOpenAICompatibleProvider.js.map +1 -1
  9. package/dist/providers/OpenAIProvider.d.ts +9 -1
  10. package/dist/providers/OpenAIProvider.d.ts.map +1 -1
  11. package/dist/providers/OpenAIProvider.js +1 -0
  12. package/dist/providers/OpenAIProvider.js.map +1 -1
  13. package/dist/providers/OpenRouterProvider.d.ts +9 -1
  14. package/dist/providers/OpenRouterProvider.d.ts.map +1 -1
  15. package/dist/providers/OpenRouterProvider.js +1 -0
  16. package/dist/providers/OpenRouterProvider.js.map +1 -1
  17. package/docs/reference/providers.md +27 -0
  18. package/package.json +1 -1
  19. package/src/providers/DeepSeekProvider.ts +10 -1
  20. package/src/providers/GenericOpenAICompatibleProvider.ts +9 -1
  21. package/src/providers/OpenAIProvider.ts +10 -1
  22. package/src/providers/OpenRouterProvider.ts +10 -1
  23. package/dist/cjs/adapters/MemoryAdapter.d.ts +0 -47
  24. package/dist/cjs/adapters/MemoryAdapter.d.ts.map +0 -1
  25. package/dist/cjs/adapters/MemoryAdapter.js +0 -208
  26. package/dist/cjs/adapters/MemoryAdapter.js.map +0 -1
  27. package/dist/cjs/adapters/MongoAdapter.d.ts +0 -97
  28. package/dist/cjs/adapters/MongoAdapter.d.ts.map +0 -1
  29. package/dist/cjs/adapters/MongoAdapter.js +0 -200
  30. package/dist/cjs/adapters/MongoAdapter.js.map +0 -1
  31. package/dist/cjs/adapters/OpenSearchAdapter.d.ts +0 -169
  32. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +0 -1
  33. package/dist/cjs/adapters/OpenSearchAdapter.js +0 -475
  34. package/dist/cjs/adapters/OpenSearchAdapter.js.map +0 -1
  35. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +0 -85
  36. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  37. package/dist/cjs/adapters/PostgreSQLAdapter.js +0 -312
  38. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +0 -1
  39. package/dist/cjs/adapters/PrismaAdapter.d.ts +0 -115
  40. package/dist/cjs/adapters/PrismaAdapter.d.ts.map +0 -1
  41. package/dist/cjs/adapters/PrismaAdapter.js +0 -410
  42. package/dist/cjs/adapters/PrismaAdapter.js.map +0 -1
  43. package/dist/cjs/adapters/RedisAdapter.d.ts +0 -72
  44. package/dist/cjs/adapters/RedisAdapter.d.ts.map +0 -1
  45. package/dist/cjs/adapters/RedisAdapter.js +0 -290
  46. package/dist/cjs/adapters/RedisAdapter.js.map +0 -1
  47. package/dist/cjs/adapters/SQLiteAdapter.d.ts +0 -86
  48. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +0 -1
  49. package/dist/cjs/adapters/SQLiteAdapter.js +0 -341
  50. package/dist/cjs/adapters/SQLiteAdapter.js.map +0 -1
  51. package/dist/cjs/adapters/index.d.ts +0 -17
  52. package/dist/cjs/adapters/index.d.ts.map +0 -1
  53. package/dist/cjs/adapters/index.js +0 -21
  54. package/dist/cjs/adapters/index.js.map +0 -1
  55. package/dist/cjs/adapters/sessionRow.d.ts +0 -22
  56. package/dist/cjs/adapters/sessionRow.d.ts.map +0 -1
  57. package/dist/cjs/adapters/sessionRow.js +0 -52
  58. package/dist/cjs/adapters/sessionRow.js.map +0 -1
  59. package/dist/cjs/constants/index.d.ts +0 -1
  60. package/dist/cjs/constants/index.d.ts.map +0 -1
  61. package/dist/cjs/constants/index.js +0 -4
  62. package/dist/cjs/constants/index.js.map +0 -1
  63. package/dist/cjs/core/Agent.d.ts +0 -382
  64. package/dist/cjs/core/Agent.d.ts.map +0 -1
  65. package/dist/cjs/core/Agent.js +0 -1198
  66. package/dist/cjs/core/Agent.js.map +0 -1
  67. package/dist/cjs/core/ResponseModal.d.ts +0 -305
  68. package/dist/cjs/core/ResponseModal.d.ts.map +0 -1
  69. package/dist/cjs/core/ResponseModal.js +0 -1414
  70. package/dist/cjs/core/ResponseModal.js.map +0 -1
  71. package/dist/cjs/core/ToolLoopExecutor.d.ts +0 -133
  72. package/dist/cjs/core/ToolLoopExecutor.d.ts.map +0 -1
  73. package/dist/cjs/core/ToolLoopExecutor.js +0 -568
  74. package/dist/cjs/core/ToolLoopExecutor.js.map +0 -1
  75. package/dist/cjs/core/createAgent.d.ts +0 -35
  76. package/dist/cjs/core/createAgent.d.ts.map +0 -1
  77. package/dist/cjs/core/createAgent.js +0 -39
  78. package/dist/cjs/core/createAgent.js.map +0 -1
  79. package/dist/cjs/index.d.ts +0 -61
  80. package/dist/cjs/index.d.ts.map +0 -1
  81. package/dist/cjs/index.js +0 -113
  82. package/dist/cjs/index.js.map +0 -1
  83. package/dist/cjs/package.json +0 -1
  84. package/dist/cjs/providers/AnthropicProvider.d.ts +0 -46
  85. package/dist/cjs/providers/AnthropicProvider.d.ts.map +0 -1
  86. package/dist/cjs/providers/AnthropicProvider.js +0 -50
  87. package/dist/cjs/providers/AnthropicProvider.js.map +0 -1
  88. package/dist/cjs/providers/DeepSeekProvider.d.ts +0 -39
  89. package/dist/cjs/providers/DeepSeekProvider.d.ts.map +0 -1
  90. package/dist/cjs/providers/DeepSeekProvider.js +0 -41
  91. package/dist/cjs/providers/DeepSeekProvider.js.map +0 -1
  92. package/dist/cjs/providers/FallbackAiProvider.d.ts +0 -26
  93. package/dist/cjs/providers/FallbackAiProvider.d.ts.map +0 -1
  94. package/dist/cjs/providers/FallbackAiProvider.js +0 -54
  95. package/dist/cjs/providers/FallbackAiProvider.js.map +0 -1
  96. package/dist/cjs/providers/GeminiProvider.d.ts +0 -51
  97. package/dist/cjs/providers/GeminiProvider.d.ts.map +0 -1
  98. package/dist/cjs/providers/GeminiProvider.js +0 -53
  99. package/dist/cjs/providers/GeminiProvider.js.map +0 -1
  100. package/dist/cjs/providers/GenericOpenAICompatibleProvider.d.ts +0 -73
  101. package/dist/cjs/providers/GenericOpenAICompatibleProvider.d.ts.map +0 -1
  102. package/dist/cjs/providers/GenericOpenAICompatibleProvider.js +0 -88
  103. package/dist/cjs/providers/GenericOpenAICompatibleProvider.js.map +0 -1
  104. package/dist/cjs/providers/OpenAICompatibleProvider.d.ts +0 -61
  105. package/dist/cjs/providers/OpenAICompatibleProvider.d.ts.map +0 -1
  106. package/dist/cjs/providers/OpenAICompatibleProvider.js +0 -58
  107. package/dist/cjs/providers/OpenAICompatibleProvider.js.map +0 -1
  108. package/dist/cjs/providers/OpenAIProvider.d.ts +0 -32
  109. package/dist/cjs/providers/OpenAIProvider.d.ts.map +0 -1
  110. package/dist/cjs/providers/OpenAIProvider.js +0 -41
  111. package/dist/cjs/providers/OpenAIProvider.js.map +0 -1
  112. package/dist/cjs/providers/OpenRouterProvider.d.ts +0 -48
  113. package/dist/cjs/providers/OpenRouterProvider.d.ts.map +0 -1
  114. package/dist/cjs/providers/OpenRouterProvider.js +0 -44
  115. package/dist/cjs/providers/OpenRouterProvider.js.map +0 -1
  116. package/dist/cjs/providers/ProviderAdapter.d.ts +0 -126
  117. package/dist/cjs/providers/ProviderAdapter.d.ts.map +0 -1
  118. package/dist/cjs/providers/ProviderAdapter.js +0 -313
  119. package/dist/cjs/providers/ProviderAdapter.js.map +0 -1
  120. package/dist/cjs/providers/ZaiProvider.d.ts +0 -45
  121. package/dist/cjs/providers/ZaiProvider.d.ts.map +0 -1
  122. package/dist/cjs/providers/ZaiProvider.js +0 -51
  123. package/dist/cjs/providers/ZaiProvider.js.map +0 -1
  124. package/dist/cjs/providers/index.d.ts +0 -26
  125. package/dist/cjs/providers/index.d.ts.map +0 -1
  126. package/dist/cjs/providers/index.js +0 -30
  127. package/dist/cjs/providers/index.js.map +0 -1
  128. package/dist/cjs/utils/streamingMessage.d.ts +0 -48
  129. package/dist/cjs/utils/streamingMessage.d.ts.map +0 -1
  130. package/dist/cjs/utils/streamingMessage.js +0 -210
  131. package/dist/cjs/utils/streamingMessage.js.map +0 -1
@@ -3,8 +3,9 @@
3
3
  * and its cache hits under `prompt_cache_hit_tokens`; both are read one layer
4
4
  * down, where they are the dialect's business rather than this file's.
5
5
  */
6
- import type { ProviderCapabilities } from "../types/ai.js";
6
+ import type { AiProvider, ProviderCapabilities } from "../types/ai.js";
7
7
  import { OpenAICompatibleProvider, type JsonWithTools } from "./OpenAICompatibleProvider.js";
8
+ import type { Provider } from "@providerkit/core";
8
9
  import type { RequestConfig } from "./ProviderAdapter.js";
9
10
  export interface DeepSeekProviderOptions {
10
11
  /** DeepSeek API key */
@@ -13,6 +14,13 @@ export interface DeepSeekProviderOptions {
13
14
  model: string;
14
15
  /** Backup models to try if the primary fails (default: []) */
15
16
  backupModels?: string[];
17
+ /**
18
+ * Fallback providers, tried in order after this one fails or exhausts.
19
+ * Accepts both @falai/agent AiProviders (like ZaiProvider) and
20
+ * @providerkit/core Providers — the seam that makes a coding-plan primary
21
+ * degrade to anything else rather than fail the turn.
22
+ */
23
+ fallbacks?: Array<AiProvider | Provider>;
16
24
  /** Custom base URL (default: "https://api.deepseek.com") */
17
25
  baseURL?: string;
18
26
  /** Request defaults sent with every call */
@@ -1 +1 @@
1
- {"version":3,"file":"DeepSeekProvider.d.ts","sourceRoot":"","sources":["../../src/providers/DeepSeekProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC7F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,WAAW,uBAAuB;IACtC,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,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,gBAAiB,SAAQ,wBAAwB;IAC5D,SAAgB,IAAI,cAAc;IAClC,SAAgB,YAAY,EAAE,oBAAoB,CAMhD;gBAEU,OAAO,EAAE,uBAAuB;CAoB7C"}
1
+ {"version":3,"file":"DeepSeekProvider.d.ts","sourceRoot":"","sources":["../../src/providers/DeepSeekProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC7F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,WAAW,uBAAuB;IACtC,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC;IACzC,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,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,gBAAiB,SAAQ,wBAAwB;IAC5D,SAAgB,IAAI,cAAc;IAClC,SAAgB,YAAY,EAAE,oBAAoB,CAMhD;gBAEU,OAAO,EAAE,uBAAuB;CAqB7C"}
@@ -20,6 +20,7 @@ export class DeepSeekProvider extends OpenAICompatibleProvider {
20
20
  structuredOutput: "json_schema",
21
21
  ...(options.jsonWithTools ? { jsonWithTools: options.jsonWithTools } : {}),
22
22
  ...(options.backupModels ? { backupModels: options.backupModels } : {}),
23
+ ...(options.fallbacks ? { fallbacks: options.fallbacks } : {}),
23
24
  ...(options.config ? { config: options.config } : {}),
24
25
  ...(options.retryConfig ? { retryConfig: options.retryConfig } : {}),
25
26
  ...(options.fetchImpl ? { fetchImpl: options.fetchImpl } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"DeepSeekProvider.js","sourceRoot":"","sources":["../../src/providers/DeepSeekProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,wBAAwB,EAAsB,MAAM,+BAA+B,CAAC;AA0B7F,MAAM,OAAO,gBAAiB,SAAQ,wBAAwB;IAU5D,YAAY,OAAgC;QAC1C,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACrE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACxF,CAAC;QAED,KAAK,CAAC;YACJ,EAAE,EAAE,UAAU;YACd,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,0BAA0B;YACtD,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,wEAAwE;YACxE,gBAAgB,EAAE,aAAa;YAC/B,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,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,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/D,CAAC,CAAC;QA3BW,SAAI,GAAG,UAAU,CAAC;QAClB,iBAAY,GAAyB;YACnD,aAAa,EAAE,IAAI;YACnB,wBAAwB,EAAE,IAAI;YAC9B,iBAAiB,EAAE,IAAI;YACvB,0BAA0B,EAAE,IAAI;YAChC,qBAAqB,EAAE,IAAI;SAC5B,CAAC;IAqBF,CAAC;CACF"}
1
+ {"version":3,"file":"DeepSeekProvider.js","sourceRoot":"","sources":["../../src/providers/DeepSeekProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,wBAAwB,EAAsB,MAAM,+BAA+B,CAAC;AAkC7F,MAAM,OAAO,gBAAiB,SAAQ,wBAAwB;IAU5D,YAAY,OAAgC;QAC1C,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACrE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACxF,CAAC;QAED,KAAK,CAAC;YACJ,EAAE,EAAE,UAAU;YACd,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,0BAA0B;YACtD,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,wEAAwE;YACxE,gBAAgB,EAAE,aAAa;YAC/B,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,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,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/D,CAAC,CAAC;QA5BW,SAAI,GAAG,UAAU,CAAC;QAClB,iBAAY,GAAyB;YACnD,aAAa,EAAE,IAAI;YACnB,wBAAwB,EAAE,IAAI;YAC9B,iBAAiB,EAAE,IAAI;YACvB,0BAA0B,EAAE,IAAI;YAChC,qBAAqB,EAAE,IAAI;SAC5B,CAAC;IAsBF,CAAC;CACF"}
@@ -25,9 +25,10 @@
25
25
  * For OpenAI, OpenRouter, Anthropic and Gemini, prefer their dedicated
26
26
  * provider classes.
27
27
  */
28
- import type { ProviderCapabilities } from "../types/ai.js";
28
+ import type { AiProvider, ProviderCapabilities } from "../types/ai.js";
29
29
  import { OpenAICompatibleProvider, type JsonWithTools, type StructuredOutputMode } from "./OpenAICompatibleProvider.js";
30
30
  import type { RequestConfig } from "./ProviderAdapter.js";
31
+ import type { Provider } from "@providerkit/core";
31
32
  export interface OpenAICompatibleOptions {
32
33
  /** Provider identifier, e.g. "azure", "ollama", "groq". */
33
34
  name: string;
@@ -39,6 +40,12 @@ export interface OpenAICompatibleOptions {
39
40
  model: string;
40
41
  /** Backup models to try if the primary fails. */
41
42
  backupModels?: string[];
43
+ /**
44
+ * Fallback providers, tried in order after this one fails or exhausts.
45
+ * Accepts both @falai/agent AiProviders (like ZaiProvider) and
46
+ * @providerkit/core Providers.
47
+ */
48
+ fallbacks?: Array<AiProvider | Provider>;
42
49
  /** Capability overrides, merged over the defaults (all true except caching). */
43
50
  capabilities?: Partial<ProviderCapabilities>;
44
51
  /** Extra request headers (e.g. Azure's `api-key`, a gateway's auth header). */
@@ -1 +1 @@
1
- {"version":3,"file":"GenericOpenAICompatibleProvider.d.ts","sourceRoot":"","sources":["../../src/providers/GenericOpenAICompatibleProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EACL,wBAAwB,EACxB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EAC1B,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,WAAW,uBAAuB;IACtC,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,gFAAgF;IAChF,YAAY,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC7C,+EAA+E;IAC/E,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IACxC;;;OAGG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,yDAAyD;IACzD,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,iDAAiD;IACjD,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;AA2DD;;;;GAIG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,uBAAuB,GAC/B,wBAAwB,CAE1B"}
1
+ {"version":3,"file":"GenericOpenAICompatibleProvider.d.ts","sourceRoot":"","sources":["../../src/providers/GenericOpenAICompatibleProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EACL,wBAAwB,EACxB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EAC1B,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,WAAW,uBAAuB;IACtC,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;;OAIG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC;IACzC,gFAAgF;IAChF,YAAY,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC7C,+EAA+E;IAC/E,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IACxC;;;OAGG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,yDAAyD;IACzD,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,iDAAiD;IACjD,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;AA4DD;;;;GAIG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,uBAAuB,GAC/B,wBAAwB,CAE1B"}
@@ -66,6 +66,7 @@ class GenericOpenAICompatibleProvider extends OpenAICompatibleProvider {
66
66
  ...(options.jsonWithTools ? { jsonWithTools: options.jsonWithTools } : {}),
67
67
  ...(options.defaultHeaders ? { headers: options.defaultHeaders } : {}),
68
68
  ...(options.backupModels ? { backupModels: options.backupModels } : {}),
69
+ ...(options.fallbacks ? { fallbacks: options.fallbacks } : {}),
69
70
  ...(options.config ? { config: options.config } : {}),
70
71
  ...(options.retryConfig ? { retryConfig: options.retryConfig } : {}),
71
72
  ...(options.fetchImpl ? { fetchImpl: options.fetchImpl } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"GenericOpenAICompatibleProvider.js","sourceRoot":"","sources":["../../src/providers/GenericOpenAICompatibleProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,EACL,wBAAwB,GAGzB,MAAM,+BAA+B,CAAC;AAqCvC,iEAAiE;AACjE,MAAM,oBAAoB,GAAyB;IACjD,aAAa,EAAE,IAAI;IACnB,wBAAwB,EAAE,IAAI;IAC9B,iBAAiB,EAAE,IAAI;IACvB,0BAA0B,EAAE,IAAI;IAChC,qBAAqB,EAAE,KAAK;CAC7B,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,+BAAgC,SAAQ,wBAAwB;IAIpE,YAAY,OAAgC;QAC1C,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,8BAA8B,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,IAAI,OAAO,CAAC,IAAI,oFAAoF,CACrG,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,4BAA4B,CAAC,CAAC;QAChE,CAAC;QAED,KAAK,CAAC;YACJ,EAAE,EAAE,OAAO,CAAC,IAAI;YAChB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,yEAAyE;YACzE,sDAAsD;YACtD,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,aAAa;YAC3D,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,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,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/D,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,oBAAoB,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAC3E,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAC5C,OAAgC;IAEhC,OAAO,IAAI,+BAA+B,CAAC,OAAO,CAAC,CAAC;AACtD,CAAC"}
1
+ {"version":3,"file":"GenericOpenAICompatibleProvider.js","sourceRoot":"","sources":["../../src/providers/GenericOpenAICompatibleProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,EACL,wBAAwB,GAGzB,MAAM,+BAA+B,CAAC;AA4CvC,iEAAiE;AACjE,MAAM,oBAAoB,GAAyB;IACjD,aAAa,EAAE,IAAI;IACnB,wBAAwB,EAAE,IAAI;IAC9B,iBAAiB,EAAE,IAAI;IACvB,0BAA0B,EAAE,IAAI;IAChC,qBAAqB,EAAE,KAAK;CAC7B,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,+BAAgC,SAAQ,wBAAwB;IAIpE,YAAY,OAAgC;QAC1C,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,8BAA8B,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,IAAI,OAAO,CAAC,IAAI,oFAAoF,CACrG,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,4BAA4B,CAAC,CAAC;QAChE,CAAC;QAED,KAAK,CAAC;YACJ,EAAE,EAAE,OAAO,CAAC,IAAI;YAChB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,yEAAyE;YACzE,sDAAsD;YACtD,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,aAAa;YAC3D,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,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,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/D,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,oBAAoB,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAC3E,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAC5C,OAAgC;IAEhC,OAAO,IAAI,+BAA+B,CAAC,OAAO,CAAC,CAAC;AACtD,CAAC"}
@@ -2,8 +2,9 @@
2
2
  * OpenAI provider. Structured output goes out on the Responses API, which
3
3
  * enforces the schema natively.
4
4
  */
5
- import type { ProviderCapabilities } from "../types/ai.js";
5
+ import type { AiProvider, ProviderCapabilities } from "../types/ai.js";
6
6
  import { OpenAICompatibleProvider } from "./OpenAICompatibleProvider.js";
7
+ import type { Provider } from "@providerkit/core";
7
8
  import type { RequestConfig } from "./ProviderAdapter.js";
8
9
  export interface OpenAIProviderOptions {
9
10
  /** OpenAI API key */
@@ -12,6 +13,13 @@ export interface OpenAIProviderOptions {
12
13
  model: string;
13
14
  /** Backup models to try if the primary fails (default: []) */
14
15
  backupModels?: string[];
16
+ /**
17
+ * Fallback providers, tried in order after this one fails or exhausts.
18
+ * Accepts both @falai/agent AiProviders (like ZaiProvider) and
19
+ * @providerkit/core Providers — the seam that makes a coding-plan primary
20
+ * degrade to anything else rather than fail the turn.
21
+ */
22
+ fallbacks?: Array<AiProvider | Provider>;
15
23
  /** Organization id, sent as the `OpenAI-Organization` header */
16
24
  organization?: string;
17
25
  /** Request defaults sent with every call */
@@ -1 +1 @@
1
- {"version":3,"file":"OpenAIProvider.d.ts","sourceRoot":"","sources":["../../src/providers/OpenAIProvider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,WAAW,qBAAqB;IACpC,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,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,cAAe,SAAQ,wBAAwB;IAC1D,SAAgB,IAAI,YAAY;IAChC,SAAgB,YAAY,EAAE,oBAAoB,CAQhD;gBAEU,OAAO,EAAE,qBAAqB;CAkB3C"}
1
+ {"version":3,"file":"OpenAIProvider.d.ts","sourceRoot":"","sources":["../../src/providers/OpenAIProvider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,WAAW,qBAAqB;IACpC,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC;IACzC,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,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,cAAe,SAAQ,wBAAwB;IAC1D,SAAgB,IAAI,YAAY;IAChC,SAAgB,YAAY,EAAE,oBAAoB,CAQhD;gBAEU,OAAO,EAAE,qBAAqB;CAmB3C"}
@@ -18,6 +18,7 @@ export class OpenAIProvider extends OpenAICompatibleProvider {
18
18
  ? { headers: { "OpenAI-Organization": options.organization } }
19
19
  : {}),
20
20
  ...(options.backupModels ? { backupModels: options.backupModels } : {}),
21
+ ...(options.fallbacks ? { fallbacks: options.fallbacks } : {}),
21
22
  ...(options.config ? { config: options.config } : {}),
22
23
  ...(options.retryConfig ? { retryConfig: options.retryConfig } : {}),
23
24
  ...(options.fetchImpl ? { fetchImpl: options.fetchImpl } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"OpenAIProvider.js","sourceRoot":"","sources":["../../src/providers/OpenAIProvider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAoBzE,MAAM,OAAO,cAAe,SAAQ,wBAAwB;IAY1D,YAAY,OAA8B;QACxC,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QACnE,IAAI,CAAC,OAAO,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QAE1F,KAAK,CAAC;YACJ,EAAE,EAAE,QAAQ;YACZ,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,gBAAgB,EAAE,iBAAiB;YACnC,GAAG,CAAC,OAAO,CAAC,YAAY;gBACtB,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,qBAAqB,EAAE,OAAO,CAAC,YAAY,EAAE,EAAE;gBAC9D,CAAC,CAAC,EAAE,CAAC;YACP,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,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/D,CAAC,CAAC;QA3BW,SAAI,GAAG,QAAQ,CAAC;QAChB,iBAAY,GAAyB;YACnD,aAAa,EAAE,IAAI;YACnB,wBAAwB,EAAE,IAAI;YAC9B,iBAAiB,EAAE,IAAI;YACvB,0BAA0B,EAAE,IAAI;YAChC,sEAAsE;YACtE,2CAA2C;YAC3C,qBAAqB,EAAE,IAAI;SAC5B,CAAC;IAmBF,CAAC;CACF"}
1
+ {"version":3,"file":"OpenAIProvider.js","sourceRoot":"","sources":["../../src/providers/OpenAIProvider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AA4BzE,MAAM,OAAO,cAAe,SAAQ,wBAAwB;IAY1D,YAAY,OAA8B;QACxC,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QACnE,IAAI,CAAC,OAAO,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QAE1F,KAAK,CAAC;YACJ,EAAE,EAAE,QAAQ;YACZ,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,gBAAgB,EAAE,iBAAiB;YACnC,GAAG,CAAC,OAAO,CAAC,YAAY;gBACtB,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,qBAAqB,EAAE,OAAO,CAAC,YAAY,EAAE,EAAE;gBAC9D,CAAC,CAAC,EAAE,CAAC;YACP,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,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/D,CAAC,CAAC;QA5BW,SAAI,GAAG,QAAQ,CAAC;QAChB,iBAAY,GAAyB;YACnD,aAAa,EAAE,IAAI;YACnB,wBAAwB,EAAE,IAAI;YAC9B,iBAAiB,EAAE,IAAI;YACvB,0BAA0B,EAAE,IAAI;YAChC,sEAAsE;YACtE,2CAA2C;YAC3C,qBAAqB,EAAE,IAAI;SAC5B,CAAC;IAoBF,CAAC;CACF"}
@@ -1,9 +1,10 @@
1
1
  /**
2
2
  * OpenRouter — one OpenAI-compatible endpoint in front of many models.
3
3
  */
4
- import type { ProviderCapabilities } from "../types/ai.js";
4
+ import type { AiProvider, ProviderCapabilities } from "../types/ai.js";
5
5
  import { OpenAICompatibleProvider, type JsonWithTools } from "./OpenAICompatibleProvider.js";
6
6
  import type { RequestConfig } from "./ProviderAdapter.js";
7
+ import type { Provider } from "@providerkit/core";
7
8
  export interface OpenRouterProviderOptions {
8
9
  /** OpenRouter API key */
9
10
  apiKey: string;
@@ -11,6 +12,13 @@ export interface OpenRouterProviderOptions {
11
12
  model: string;
12
13
  /** Backup models to try if the primary fails (default: []) */
13
14
  backupModels?: string[];
15
+ /**
16
+ * Fallback providers, tried in order after this one fails or exhausts.
17
+ * Accepts both @falai/agent AiProviders (like ZaiProvider) and
18
+ * @providerkit/core Providers — the seam that makes a coding-plan primary
19
+ * degrade to anything else rather than fail the turn.
20
+ */
21
+ fallbacks?: Array<AiProvider | Provider>;
14
22
  /** Site URL for OpenRouter's rankings */
15
23
  siteUrl?: string;
16
24
  /** App name for OpenRouter's rankings */
@@ -1 +1 @@
1
- {"version":3,"file":"OpenRouterProvider.d.ts","sourceRoot":"","sources":["../../src/providers/OpenRouterProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC7F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,WAAW,yBAAyB;IACxC,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB;;;;;;OAMG;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,2DAA2D;IAC3D,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,qBAAa,kBAAmB,SAAQ,wBAAwB;IAC9D,SAAgB,IAAI,gBAAgB;IACpC,SAAgB,YAAY,EAAE,oBAAoB,CAMhD;gBAEU,OAAO,EAAE,yBAAyB;CAwB/C"}
1
+ {"version":3,"file":"OpenRouterProvider.d.ts","sourceRoot":"","sources":["../../src/providers/OpenRouterProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC7F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,WAAW,yBAAyB;IACxC,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC;IACzC,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB;;;;;;OAMG;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,2DAA2D;IAC3D,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,qBAAa,kBAAmB,SAAQ,wBAAwB;IAC9D,SAAgB,IAAI,gBAAgB;IACpC,SAAgB,YAAY,EAAE,oBAAoB,CAMhD;gBAEU,OAAO,EAAE,yBAAyB;CAyB/C"}
@@ -23,6 +23,7 @@ export class OpenRouterProvider extends OpenAICompatibleProvider {
23
23
  },
24
24
  ...(options.providerOrder ? { providerOrder: options.providerOrder } : {}),
25
25
  ...(options.backupModels ? { backupModels: options.backupModels } : {}),
26
+ ...(options.fallbacks ? { fallbacks: options.fallbacks } : {}),
26
27
  ...(options.config ? { config: options.config } : {}),
27
28
  ...(options.retryConfig ? { retryConfig: options.retryConfig } : {}),
28
29
  ...(options.fetchImpl ? { fetchImpl: options.fetchImpl } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"OpenRouterProvider.js","sourceRoot":"","sources":["../../src/providers/OpenRouterProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,wBAAwB,EAAsB,MAAM,+BAA+B,CAAC;AAqC7F,MAAM,OAAO,kBAAmB,SAAQ,wBAAwB;IAU9D,YAAY,OAAkC;QAC5C,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACvE,IAAI,CAAC,OAAO,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QAE3F,KAAK,CAAC;YACJ,EAAE,EAAE,YAAY;YAChB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,2BAA2B;YACpC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,iEAAiE;YACjE,+DAA+D;YAC/D,gBAAgB,EAAE,aAAa;YAC/B,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,OAAO,EAAE;gBACP,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/D,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7D;YACD,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,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,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/D,CAAC,CAAC;QA/BW,SAAI,GAAG,YAAY,CAAC;QACpB,iBAAY,GAAyB;YACnD,aAAa,EAAE,IAAI;YACnB,wBAAwB,EAAE,IAAI;YAC9B,iBAAiB,EAAE,IAAI;YACvB,0BAA0B,EAAE,IAAI;YAChC,qBAAqB,EAAE,IAAI;SAC5B,CAAC;IAyBF,CAAC;CACF"}
1
+ {"version":3,"file":"OpenRouterProvider.js","sourceRoot":"","sources":["../../src/providers/OpenRouterProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,wBAAwB,EAAsB,MAAM,+BAA+B,CAAC;AA6C7F,MAAM,OAAO,kBAAmB,SAAQ,wBAAwB;IAU9D,YAAY,OAAkC;QAC5C,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACvE,IAAI,CAAC,OAAO,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QAE3F,KAAK,CAAC;YACJ,EAAE,EAAE,YAAY;YAChB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,2BAA2B;YACpC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,iEAAiE;YACjE,+DAA+D;YAC/D,gBAAgB,EAAE,aAAa;YAC/B,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,OAAO,EAAE;gBACP,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/D,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7D;YACD,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,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,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/D,CAAC,CAAC;QAhCW,SAAI,GAAG,YAAY,CAAC;QACpB,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"}
@@ -322,6 +322,33 @@ const deepseek = new DeepSeekProvider({
322
322
  });
323
323
  ```
324
324
 
325
+ ## Cross-provider fallbacks
326
+
327
+ In addition to `backupModels` (which fail over to another model on the *same* provider), providers accept a `fallbacks` list of `FallbackSpec` objects. When the primary provider encounters a transient failure (rate limits, outages, 5xx), the engine automatically falls over to the backup providers with cooldown management:
328
+
329
+ ```typescript
330
+ import { ZaiProvider } from "@falai/agent";
331
+
332
+ const provider = new ZaiProvider({
333
+ apiKey: process.env.ZAI_API_KEY!,
334
+ model: "glm-5.3-flash",
335
+ fallbacks: [
336
+ {
337
+ preset: "openrouter",
338
+ apiKey: process.env.OPENROUTER_API_KEY!,
339
+ model: "z-ai/glm-5.3-flash",
340
+ },
341
+ {
342
+ preset: "deepseek",
343
+ apiKey: process.env.DEEPSEEK_API_KEY!,
344
+ model: "deepseek-flash",
345
+ },
346
+ ],
347
+ });
348
+ ```
349
+
350
+ The underlying `@providerkit/core` engine tracks cooldowns per provider, automatically bypassing throttled backends until their cooldown expires.
351
+
325
352
  ## Building a custom OpenAI-compatible provider
326
353
 
327
354
  Many vendors (Groq, Together, Fireworks, …) expose OpenAI-compatible chat-completions APIs. Instead of implementing `AiProvider` from scratch, subclass the exported `OpenAICompatibleProvider` base class — history and tool translation, streaming, tool-call assembly, backup-model fallback, retries and normalized `ProviderError`s all come with it. `OpenAIProvider`, `OpenRouterProvider`, and `DeepSeekProvider` are themselves thin subclasses.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@falai/agent",
3
- "version": "3.4.1",
3
+ "version": "3.4.3",
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",
@@ -4,8 +4,9 @@
4
4
  * down, where they are the dialect's business rather than this file's.
5
5
  */
6
6
 
7
- import type { ProviderCapabilities } from "../types/ai.js";
7
+ import type { AiProvider, ProviderCapabilities } from "../types/ai.js";
8
8
  import { OpenAICompatibleProvider, type JsonWithTools } from "./OpenAICompatibleProvider.js";
9
+ import type { Provider } from "@providerkit/core";
9
10
  import type { RequestConfig } from "./ProviderAdapter.js";
10
11
 
11
12
  export interface DeepSeekProviderOptions {
@@ -15,6 +16,13 @@ export interface DeepSeekProviderOptions {
15
16
  model: string;
16
17
  /** Backup models to try if the primary fails (default: []) */
17
18
  backupModels?: string[];
19
+ /**
20
+ * Fallback providers, tried in order after this one fails or exhausts.
21
+ * Accepts both @falai/agent AiProviders (like ZaiProvider) and
22
+ * @providerkit/core Providers — the seam that makes a coding-plan primary
23
+ * degrade to anything else rather than fail the turn.
24
+ */
25
+ fallbacks?: Array<AiProvider | Provider>;
18
26
  /** Custom base URL (default: "https://api.deepseek.com") */
19
27
  baseURL?: string;
20
28
  /** Request defaults sent with every call */
@@ -56,6 +64,7 @@ export class DeepSeekProvider extends OpenAICompatibleProvider {
56
64
  structuredOutput: "json_schema",
57
65
  ...(options.jsonWithTools ? { jsonWithTools: options.jsonWithTools } : {}),
58
66
  ...(options.backupModels ? { backupModels: options.backupModels } : {}),
67
+ ...(options.fallbacks ? { fallbacks: options.fallbacks } : {}),
59
68
  ...(options.config ? { config: options.config } : {}),
60
69
  ...(options.retryConfig ? { retryConfig: options.retryConfig } : {}),
61
70
  ...(options.fetchImpl ? { fetchImpl: options.fetchImpl } : {}),
@@ -26,13 +26,14 @@
26
26
  * provider classes.
27
27
  */
28
28
 
29
- import type { ProviderCapabilities } from "../types/ai.js";
29
+ import type { AiProvider, ProviderCapabilities } from "../types/ai.js";
30
30
  import {
31
31
  OpenAICompatibleProvider,
32
32
  type JsonWithTools,
33
33
  type StructuredOutputMode,
34
34
  } from "./OpenAICompatibleProvider.js";
35
35
  import type { RequestConfig } from "./ProviderAdapter.js";
36
+ import type { Provider } from "@providerkit/core";
36
37
 
37
38
  export interface OpenAICompatibleOptions {
38
39
  /** Provider identifier, e.g. "azure", "ollama", "groq". */
@@ -45,6 +46,12 @@ export interface OpenAICompatibleOptions {
45
46
  model: string;
46
47
  /** Backup models to try if the primary fails. */
47
48
  backupModels?: string[];
49
+ /**
50
+ * Fallback providers, tried in order after this one fails or exhausts.
51
+ * Accepts both @falai/agent AiProviders (like ZaiProvider) and
52
+ * @providerkit/core Providers.
53
+ */
54
+ fallbacks?: Array<AiProvider | Provider>;
48
55
  /** Capability overrides, merged over the defaults (all true except caching). */
49
56
  capabilities?: Partial<ProviderCapabilities>;
50
57
  /** Extra request headers (e.g. Azure's `api-key`, a gateway's auth header). */
@@ -115,6 +122,7 @@ class GenericOpenAICompatibleProvider extends OpenAICompatibleProvider {
115
122
  ...(options.jsonWithTools ? { jsonWithTools: options.jsonWithTools } : {}),
116
123
  ...(options.defaultHeaders ? { headers: options.defaultHeaders } : {}),
117
124
  ...(options.backupModels ? { backupModels: options.backupModels } : {}),
125
+ ...(options.fallbacks ? { fallbacks: options.fallbacks } : {}),
118
126
  ...(options.config ? { config: options.config } : {}),
119
127
  ...(options.retryConfig ? { retryConfig: options.retryConfig } : {}),
120
128
  ...(options.fetchImpl ? { fetchImpl: options.fetchImpl } : {}),
@@ -3,8 +3,9 @@
3
3
  * enforces the schema natively.
4
4
  */
5
5
 
6
- import type { ProviderCapabilities } from "../types/ai.js";
6
+ import type { AiProvider, ProviderCapabilities } from "../types/ai.js";
7
7
  import { OpenAICompatibleProvider } from "./OpenAICompatibleProvider.js";
8
+ import type { Provider } from "@providerkit/core";
8
9
  import type { RequestConfig } from "./ProviderAdapter.js";
9
10
 
10
11
  export interface OpenAIProviderOptions {
@@ -14,6 +15,13 @@ export interface OpenAIProviderOptions {
14
15
  model: string;
15
16
  /** Backup models to try if the primary fails (default: []) */
16
17
  backupModels?: string[];
18
+ /**
19
+ * Fallback providers, tried in order after this one fails or exhausts.
20
+ * Accepts both @falai/agent AiProviders (like ZaiProvider) and
21
+ * @providerkit/core Providers — the seam that makes a coding-plan primary
22
+ * degrade to anything else rather than fail the turn.
23
+ */
24
+ fallbacks?: Array<AiProvider | Provider>;
17
25
  /** Organization id, sent as the `OpenAI-Organization` header */
18
26
  organization?: string;
19
27
  /** Request defaults sent with every call */
@@ -49,6 +57,7 @@ export class OpenAIProvider extends OpenAICompatibleProvider {
49
57
  ? { headers: { "OpenAI-Organization": options.organization } }
50
58
  : {}),
51
59
  ...(options.backupModels ? { backupModels: options.backupModels } : {}),
60
+ ...(options.fallbacks ? { fallbacks: options.fallbacks } : {}),
52
61
  ...(options.config ? { config: options.config } : {}),
53
62
  ...(options.retryConfig ? { retryConfig: options.retryConfig } : {}),
54
63
  ...(options.fetchImpl ? { fetchImpl: options.fetchImpl } : {}),
@@ -2,9 +2,10 @@
2
2
  * OpenRouter — one OpenAI-compatible endpoint in front of many models.
3
3
  */
4
4
 
5
- import type { ProviderCapabilities } from "../types/ai.js";
5
+ import type { AiProvider, ProviderCapabilities } from "../types/ai.js";
6
6
  import { OpenAICompatibleProvider, type JsonWithTools } from "./OpenAICompatibleProvider.js";
7
7
  import type { RequestConfig } from "./ProviderAdapter.js";
8
+ import type { Provider } from "@providerkit/core";
8
9
 
9
10
  export interface OpenRouterProviderOptions {
10
11
  /** OpenRouter API key */
@@ -13,6 +14,13 @@ export interface OpenRouterProviderOptions {
13
14
  model: string;
14
15
  /** Backup models to try if the primary fails (default: []) */
15
16
  backupModels?: string[];
17
+ /**
18
+ * Fallback providers, tried in order after this one fails or exhausts.
19
+ * Accepts both @falai/agent AiProviders (like ZaiProvider) and
20
+ * @providerkit/core Providers — the seam that makes a coding-plan primary
21
+ * degrade to anything else rather than fail the turn.
22
+ */
23
+ fallbacks?: Array<AiProvider | Provider>;
16
24
  /** Site URL for OpenRouter's rankings */
17
25
  siteUrl?: string;
18
26
  /** App name for OpenRouter's rankings */
@@ -69,6 +77,7 @@ export class OpenRouterProvider extends OpenAICompatibleProvider {
69
77
  },
70
78
  ...(options.providerOrder ? { providerOrder: options.providerOrder } : {}),
71
79
  ...(options.backupModels ? { backupModels: options.backupModels } : {}),
80
+ ...(options.fallbacks ? { fallbacks: options.fallbacks } : {}),
72
81
  ...(options.config ? { config: options.config } : {}),
73
82
  ...(options.retryConfig ? { retryConfig: options.retryConfig } : {}),
74
83
  ...(options.fetchImpl ? { fetchImpl: options.fetchImpl } : {}),
@@ -1,47 +0,0 @@
1
- /**
2
- * Memory adapter for persistence
3
- * In-memory storage for testing and development (no database required)
4
- */
5
- import type { MessageData, MessageRepository, PersistenceAdapter, SessionData, SessionRepository } from "../types/index.js";
6
- /**
7
- * Memory Adapter - Provider-style API for in-memory persistence
8
- *
9
- * Perfect for:
10
- * - Testing
11
- * - Development
12
- * - Prototyping
13
- * - No database setup required
14
- *
15
- * @example
16
- * ```typescript
17
- * import { Agent, MemoryAdapter } from '@falai/agent';
18
- *
19
- * const agent = new Agent({
20
- * name: "My Agent",
21
- * provider: provider,
22
- * persistence: {
23
- * adapter: new MemoryAdapter(),
24
- * userId: "user_123",
25
- * },
26
- * });
27
- * ```
28
- */
29
- export declare class MemoryAdapter<TData = Record<string, unknown>> implements PersistenceAdapter<TData> {
30
- readonly sessionRepository: SessionRepository<TData>;
31
- readonly messageRepository: MessageRepository;
32
- private sessions;
33
- private messages;
34
- constructor();
35
- /**
36
- * Clear all data (useful for testing)
37
- */
38
- clear(): void;
39
- /**
40
- * Get data snapshot (useful for debugging)
41
- */
42
- getSnapshot(): {
43
- sessions: SessionData<TData>[];
44
- messages: MessageData[];
45
- };
46
- }
47
- //# sourceMappingURL=MemoryAdapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MemoryAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/MemoryAdapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAEV,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EAIlB,MAAM,mBAAmB,CAAC;AAK3B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,aAAa,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAE,YAAW,kBAAkB,CAAC,KAAK,CAAC;IAC9F,SAAgB,iBAAiB,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC5D,SAAgB,iBAAiB,EAAE,iBAAiB,CAAC;IACrD,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,QAAQ,CAA2B;;IAU3C;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,WAAW,IAAI;QACb,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,QAAQ,EAAE,WAAW,EAAE,CAAC;KACzB;CAMF"}