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.
package/dist/cli.cjs CHANGED
@@ -109,7 +109,7 @@ var __export = (target, all) => {
109
109
  var CASCADE_VERSION, CASCADE_CONFIG_FILE, CASCADE_DB_FILE, CASCADE_DASHBOARD_SECRET_FILE, GLOBAL_CONFIG_DIR, GLOBAL_DB_FILE, GLOBAL_KEYSTORE_FILE, GLOBAL_RUNTIME_DB_FILE, DEFAULT_DASHBOARD_PORT, DEFAULT_CONTEXT_LIMIT, DEFAULT_AUTO_SUMMARIZE_AT, MODELS, T1_MODEL_PRIORITY, T2_MODEL_PRIORITY, T3_MODEL_PRIORITY, VISION_MODEL_PRIORITY, COMPLEXITY_T2_COUNT, THEME_NAMES, DEFAULT_THEME, OLLAMA_BASE_URL, LM_STUDIO_BASE_URL, AZURE_BASE_URL_TEMPLATE, TOOL_NAMES, DEFAULT_APPROVAL_REQUIRED;
110
110
  var init_constants = __esm({
111
111
  "src/constants.ts"() {
112
- CASCADE_VERSION = "0.12.20";
112
+ CASCADE_VERSION = "0.12.21";
113
113
  CASCADE_CONFIG_FILE = ".cascade/config.json";
114
114
  CASCADE_DB_FILE = ".cascade/memory.db";
115
115
  CASCADE_DASHBOARD_SECRET_FILE = ".cascade/dashboard-secret";
@@ -1521,7 +1521,7 @@ var init_openai_compatible = __esm({
1521
1521
  init_net();
1522
1522
  OpenAICompatibleProvider = class extends OpenAIProvider {
1523
1523
  constructor(config, model) {
1524
- super(config, model);
1524
+ super({ ...config, apiKey: config.apiKey ?? "not-required" }, model);
1525
1525
  this.client = new OpenAI__default.default({
1526
1526
  apiKey: config.apiKey ?? "not-required",
1527
1527
  baseURL: preferIpv4Host(config.baseUrl),
@@ -4165,10 +4165,10 @@ var CascadeRouter = class _CascadeRouter extends EventEmitter__default.default {
4165
4165
  if (availableProviders.has("ollama")) {
4166
4166
  await this.discoverOllamaModels(ollamaCfg);
4167
4167
  }
4168
- if (availableProviders.has("openai-compatible")) {
4169
- await Promise.all(
4170
- config.providers.filter((p) => p.type === "openai-compatible").map((cfg) => this.discoverOpenAICompatibleModels(cfg))
4171
- );
4168
+ const ocConfigs = config.providers.filter((p) => p.type === "openai-compatible" && p.baseUrl);
4169
+ if (ocConfigs.length > 0) {
4170
+ const results = await Promise.all(ocConfigs.map((cfg) => this.discoverOpenAICompatibleModels(cfg)));
4171
+ if (results.some(Boolean)) this.selector.markProviderAvailable("openai-compatible");
4172
4172
  }
4173
4173
  for (const tier of ["T1", "T2", "T3"]) {
4174
4174
  const override = tier === "T1" ? config.models.t1 : tier === "T2" ? config.models.t2 : config.models.t3;
@@ -4639,6 +4639,7 @@ var CascadeRouter = class _CascadeRouter extends EventEmitter__default.default {
4639
4639
  } catch {
4640
4640
  }
4641
4641
  }
4642
+ /** Returns true when at least one real model was discovered from the endpoint. */
4642
4643
  async discoverOpenAICompatibleModels(cfg) {
4643
4644
  try {
4644
4645
  const seed = {
@@ -4658,8 +4659,10 @@ var CascadeRouter = class _CascadeRouter extends EventEmitter__default.default {
4658
4659
  for (const m of models) {
4659
4660
  this.selector.addDynamicModel(m);
4660
4661
  }
4662
+ return models.length > 0;
4661
4663
  } catch (err) {
4662
4664
  console.warn("[router] OpenAI-compatible model discovery failed:", err instanceof Error ? err.message : err);
4665
+ return false;
4663
4666
  }
4664
4667
  }
4665
4668
  ensureProvider(model, configs) {