cascade-ai 0.12.20 → 0.12.21

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.
@@ -222452,7 +222452,7 @@ Anthropic.Models = Models2;
222452
222452
  Anthropic.Beta = Beta;
222453
222453
 
222454
222454
  // src/constants.ts
222455
- var CASCADE_VERSION = "0.12.20";
222455
+ var CASCADE_VERSION = "0.12.21";
222456
222456
  var CASCADE_CONFIG_DIR = ".cascade";
222457
222457
  var CASCADE_MD_FILE = "CASCADE.md";
222458
222458
  var CASCADE_IGNORE_FILE = ".cascadeignore";
@@ -249696,7 +249696,7 @@ var OllamaProvider = class extends BaseProvider {
249696
249696
  // src/providers/openai-compatible.ts
249697
249697
  var OpenAICompatibleProvider = class extends OpenAIProvider {
249698
249698
  constructor(config2, model) {
249699
- super(config2, model);
249699
+ super({ ...config2, apiKey: config2.apiKey ?? "not-required" }, model);
249700
249700
  this.client = new openai_default({
249701
249701
  apiKey: config2.apiKey ?? "not-required",
249702
249702
  baseURL: preferIpv4Host(config2.baseUrl),
@@ -250582,10 +250582,10 @@ var CascadeRouter = class _CascadeRouter extends EventEmitter__default.default {
250582
250582
  if (availableProviders.has("ollama")) {
250583
250583
  await this.discoverOllamaModels(ollamaCfg);
250584
250584
  }
250585
- if (availableProviders.has("openai-compatible")) {
250586
- await Promise.all(
250587
- config2.providers.filter((p3) => p3.type === "openai-compatible").map((cfg) => this.discoverOpenAICompatibleModels(cfg))
250588
- );
250585
+ const ocConfigs = config2.providers.filter((p3) => p3.type === "openai-compatible" && p3.baseUrl);
250586
+ if (ocConfigs.length > 0) {
250587
+ const results = await Promise.all(ocConfigs.map((cfg) => this.discoverOpenAICompatibleModels(cfg)));
250588
+ if (results.some(Boolean)) this.selector.markProviderAvailable("openai-compatible");
250589
250589
  }
250590
250590
  for (const tier of ["T1", "T2", "T3"]) {
250591
250591
  const override = tier === "T1" ? config2.models.t1 : tier === "T2" ? config2.models.t2 : config2.models.t3;
@@ -251056,6 +251056,7 @@ var CascadeRouter = class _CascadeRouter extends EventEmitter__default.default {
251056
251056
  } catch {
251057
251057
  }
251058
251058
  }
251059
+ /** Returns true when at least one real model was discovered from the endpoint. */
251059
251060
  async discoverOpenAICompatibleModels(cfg) {
251060
251061
  try {
251061
251062
  const seed = {
@@ -251075,8 +251076,10 @@ var CascadeRouter = class _CascadeRouter extends EventEmitter__default.default {
251075
251076
  for (const m3 of models) {
251076
251077
  this.selector.addDynamicModel(m3);
251077
251078
  }
251079
+ return models.length > 0;
251078
251080
  } catch (err) {
251079
251081
  console.warn("[router] OpenAI-compatible model discovery failed:", err instanceof Error ? err.message : err);
251082
+ return false;
251080
251083
  }
251081
251084
  }
251082
251085
  ensureProvider(model, configs) {
package/dist/index.cjs CHANGED
@@ -85,7 +85,7 @@ var cron__default = /*#__PURE__*/_interopDefault(cron);
85
85
 
86
86
 
87
87
  // src/constants.ts
88
- var CASCADE_VERSION = "0.12.20";
88
+ var CASCADE_VERSION = "0.12.21";
89
89
  var CASCADE_CONFIG_DIR = ".cascade";
90
90
  var CASCADE_MD_FILE = "CASCADE.md";
91
91
  var CASCADE_IGNORE_FILE = ".cascadeignore";
@@ -1424,7 +1424,7 @@ var OllamaProvider = class extends BaseProvider {
1424
1424
  };
1425
1425
  var OpenAICompatibleProvider = class extends OpenAIProvider {
1426
1426
  constructor(config, model) {
1427
- super(config, model);
1427
+ super({ ...config, apiKey: config.apiKey ?? "not-required" }, model);
1428
1428
  this.client = new OpenAI__default.default({
1429
1429
  apiKey: config.apiKey ?? "not-required",
1430
1430
  baseURL: preferIpv4Host(config.baseUrl),
@@ -2310,10 +2310,10 @@ var CascadeRouter = class _CascadeRouter extends EventEmitter__default.default {
2310
2310
  if (availableProviders.has("ollama")) {
2311
2311
  await this.discoverOllamaModels(ollamaCfg);
2312
2312
  }
2313
- if (availableProviders.has("openai-compatible")) {
2314
- await Promise.all(
2315
- config.providers.filter((p) => p.type === "openai-compatible").map((cfg) => this.discoverOpenAICompatibleModels(cfg))
2316
- );
2313
+ const ocConfigs = config.providers.filter((p) => p.type === "openai-compatible" && p.baseUrl);
2314
+ if (ocConfigs.length > 0) {
2315
+ const results = await Promise.all(ocConfigs.map((cfg) => this.discoverOpenAICompatibleModels(cfg)));
2316
+ if (results.some(Boolean)) this.selector.markProviderAvailable("openai-compatible");
2317
2317
  }
2318
2318
  for (const tier of ["T1", "T2", "T3"]) {
2319
2319
  const override = tier === "T1" ? config.models.t1 : tier === "T2" ? config.models.t2 : config.models.t3;
@@ -2784,6 +2784,7 @@ var CascadeRouter = class _CascadeRouter extends EventEmitter__default.default {
2784
2784
  } catch {
2785
2785
  }
2786
2786
  }
2787
+ /** Returns true when at least one real model was discovered from the endpoint. */
2787
2788
  async discoverOpenAICompatibleModels(cfg) {
2788
2789
  try {
2789
2790
  const seed = {
@@ -2803,8 +2804,10 @@ var CascadeRouter = class _CascadeRouter extends EventEmitter__default.default {
2803
2804
  for (const m of models) {
2804
2805
  this.selector.addDynamicModel(m);
2805
2806
  }
2807
+ return models.length > 0;
2806
2808
  } catch (err) {
2807
2809
  console.warn("[router] OpenAI-compatible model discovery failed:", err instanceof Error ? err.message : err);
2810
+ return false;
2808
2811
  }
2809
2812
  }
2810
2813
  ensureProvider(model, configs) {