cascade-ai 0.46.0 → 0.48.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/README.md +1 -1
- package/dist/cli.cjs +68 -8
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +68 -8
- package/dist/cli.js.map +1 -1
- package/dist/desktop-core.cjs +58 -8
- package/dist/index.cjs +58 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +58 -8
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/desktop-core.cjs
CHANGED
|
@@ -222595,7 +222595,7 @@ Anthropic.Models = Models2;
|
|
|
222595
222595
|
Anthropic.Beta = Beta;
|
|
222596
222596
|
|
|
222597
222597
|
// src/constants.ts
|
|
222598
|
-
var CASCADE_VERSION = "0.
|
|
222598
|
+
var CASCADE_VERSION = "0.48.0";
|
|
222599
222599
|
var CASCADE_CONFIG_DIR = ".cascade";
|
|
222600
222600
|
var CASCADE_MD_FILE = "CASCADE.md";
|
|
222601
222601
|
var CASCADE_IGNORE_FILE = ".cascadeignore";
|
|
@@ -223077,6 +223077,55 @@ var BaseProvider = class {
|
|
|
223077
223077
|
}
|
|
223078
223078
|
};
|
|
223079
223079
|
|
|
223080
|
+
// src/providers/model-filter.ts
|
|
223081
|
+
var NON_CHAT_PATTERNS = [
|
|
223082
|
+
"embed",
|
|
223083
|
+
// text-embedding-3, nomic-embed, mxbai-embed, snowflake-arctic-embed
|
|
223084
|
+
"(?:^|[-_/])tts(?:[-_/]|$)",
|
|
223085
|
+
"text-to-speech",
|
|
223086
|
+
"speech",
|
|
223087
|
+
// text-to-speech
|
|
223088
|
+
"whisper",
|
|
223089
|
+
"transcrib",
|
|
223090
|
+
"(?:^|[-_/])stt(?:[-_/]|$)",
|
|
223091
|
+
// speech-to-text
|
|
223092
|
+
"dall[-]?e",
|
|
223093
|
+
"imagen",
|
|
223094
|
+
"image-generation",
|
|
223095
|
+
"gpt-image",
|
|
223096
|
+
"(?:^|[-_/])image(?:[-_/]|$)",
|
|
223097
|
+
"stable-diffusion",
|
|
223098
|
+
"sdxl",
|
|
223099
|
+
"flux",
|
|
223100
|
+
// image gen
|
|
223101
|
+
"moderation",
|
|
223102
|
+
"(?:^|[-_/])guard(?:[-_/]|$)",
|
|
223103
|
+
// moderation / safety
|
|
223104
|
+
"rerank",
|
|
223105
|
+
"(?:^|[-_/])audio(?:[-_/]|$)",
|
|
223106
|
+
"native-audio",
|
|
223107
|
+
"realtime",
|
|
223108
|
+
// audio / realtime
|
|
223109
|
+
"veo",
|
|
223110
|
+
"sora",
|
|
223111
|
+
"(?:^|[-_/])video(?:[-_/]|$)",
|
|
223112
|
+
// video
|
|
223113
|
+
"(?:^|[-_/])aqa(?:[-_/]|$)",
|
|
223114
|
+
// attributed QA
|
|
223115
|
+
"(?:^|[-_/])live(?:[-_/]|$)",
|
|
223116
|
+
// live-audio variants
|
|
223117
|
+
"(?:^|[-_/])(?:davinci|babbage)(?:[-_/]|$)"
|
|
223118
|
+
// legacy completion-only base models
|
|
223119
|
+
];
|
|
223120
|
+
var NON_CHAT = new RegExp(NON_CHAT_PATTERNS.join("|"), "i");
|
|
223121
|
+
function isChatModel(id, methods) {
|
|
223122
|
+
if (methods && methods.length > 0) {
|
|
223123
|
+
const canGenerate = methods.some((m3) => /generatecontent|generatemessage|chat|completion/i.test(m3));
|
|
223124
|
+
if (!canGenerate) return false;
|
|
223125
|
+
}
|
|
223126
|
+
return !NON_CHAT.test(id);
|
|
223127
|
+
}
|
|
223128
|
+
|
|
223080
223129
|
// src/providers/anthropic.ts
|
|
223081
223130
|
function anthropicThinkingParam(modelId, maxTokens) {
|
|
223082
223131
|
if (!/claude-(opus|sonnet)-4/i.test(modelId)) return {};
|
|
@@ -223190,7 +223239,7 @@ var AnthropicProvider = class extends BaseProvider {
|
|
|
223190
223239
|
if (!Array.isArray(data?.data)) {
|
|
223191
223240
|
return Object.values(MODELS).filter((m3) => m3.provider === "anthropic");
|
|
223192
223241
|
}
|
|
223193
|
-
return data.data.map((m3) => {
|
|
223242
|
+
return data.data.filter((m3) => isChatModel(m3.id)).map((m3) => {
|
|
223194
223243
|
const known = Object.values(MODELS).find((km) => km.id === m3.id && km.provider === "anthropic");
|
|
223195
223244
|
if (known) return known;
|
|
223196
223245
|
return {
|
|
@@ -231278,7 +231327,7 @@ var OpenAIProvider = class extends BaseProvider {
|
|
|
231278
231327
|
async listModels() {
|
|
231279
231328
|
try {
|
|
231280
231329
|
const response = await this.client.models.list();
|
|
231281
|
-
return response.data.map((m3) => {
|
|
231330
|
+
return response.data.filter((m3) => isChatModel(m3.id)).map((m3) => {
|
|
231282
231331
|
const known = Object.values(MODELS).find((km) => km.id === m3.id && km.provider === "openai");
|
|
231283
231332
|
if (known) return known;
|
|
231284
231333
|
return {
|
|
@@ -249583,7 +249632,7 @@ var GeminiProvider = class extends BaseProvider {
|
|
|
249583
249632
|
if (!Array.isArray(data?.models)) {
|
|
249584
249633
|
return Object.values(MODELS).filter((m3) => m3.provider === "gemini");
|
|
249585
249634
|
}
|
|
249586
|
-
return data.models.map((m3) => {
|
|
249635
|
+
return data.models.filter((m3) => isChatModel(m3.name.replace("models/", ""), m3.supportedGenerationMethods)).map((m3) => {
|
|
249587
249636
|
const id = m3.name.replace("models/", "");
|
|
249588
249637
|
const known = Object.values(MODELS).find(
|
|
249589
249638
|
(km) => km.id === id && km.provider === "gemini"
|
|
@@ -249941,10 +249990,10 @@ var OllamaProvider = class extends BaseProvider {
|
|
|
249941
249990
|
const response = await fetch(`${this.baseUrl}/api/tags`);
|
|
249942
249991
|
if (!response.ok) return [];
|
|
249943
249992
|
const data = await response.json();
|
|
249944
|
-
const supportedKeywords = ["llama3", "llama2", "gemma", "mistral", "mixtral", "qwen", "phi3", "codellama", "deepseek", "llava", "starcoder", "stable-code"
|
|
249993
|
+
const supportedKeywords = ["llama3", "llama2", "gemma", "mistral", "mixtral", "qwen", "phi3", "codellama", "deepseek", "llava", "starcoder", "stable-code"];
|
|
249945
249994
|
const entries = data.models.filter((m3) => {
|
|
249946
249995
|
const name = m3.name.toLowerCase();
|
|
249947
|
-
return supportedKeywords.some((k4) => name.includes(k4));
|
|
249996
|
+
return supportedKeywords.some((k4) => name.includes(k4)) && isChatModel(name);
|
|
249948
249997
|
});
|
|
249949
249998
|
const shows = await Promise.all(entries.map((m3) => this.showModel(m3.name)));
|
|
249950
249999
|
return entries.map((m3, i4) => {
|
|
@@ -250066,7 +250115,8 @@ var OpenAICompatibleProvider = class extends OpenAIProvider {
|
|
|
250066
250115
|
return typeof m3 === "string" ? m3 : void 0;
|
|
250067
250116
|
}).filter((x5) => typeof x5 === "string" && x5.length > 0);
|
|
250068
250117
|
if (ids.length === 0) return [this.model];
|
|
250069
|
-
|
|
250118
|
+
const chatIds = ids.filter((id) => isChatModel(id));
|
|
250119
|
+
return (chatIds.length ? chatIds : ids).map((id) => ({
|
|
250070
250120
|
id,
|
|
250071
250121
|
name: id,
|
|
250072
250122
|
provider: "openai-compatible",
|
|
@@ -305184,7 +305234,7 @@ function clearCloudSession(dir = globalDir()) {
|
|
|
305184
305234
|
}
|
|
305185
305235
|
|
|
305186
305236
|
// src/cloud/client.ts
|
|
305187
|
-
var DEFAULT_CLOUD_URL = "https://
|
|
305237
|
+
var DEFAULT_CLOUD_URL = "https://cascadeai.in";
|
|
305188
305238
|
var REFRESH_MARGIN_MS = 6e4;
|
|
305189
305239
|
var FileCloudSessionStore = class {
|
|
305190
305240
|
constructor(dir) {
|
package/dist/index.cjs
CHANGED
|
@@ -239,7 +239,7 @@ var init_audit_logger = __esm({
|
|
|
239
239
|
});
|
|
240
240
|
|
|
241
241
|
// src/constants.ts
|
|
242
|
-
var CASCADE_VERSION = "0.
|
|
242
|
+
var CASCADE_VERSION = "0.48.0";
|
|
243
243
|
var CASCADE_CONFIG_DIR = ".cascade";
|
|
244
244
|
var CASCADE_MD_FILE = "CASCADE.md";
|
|
245
245
|
var CASCADE_IGNORE_FILE = ".cascadeignore";
|
|
@@ -721,6 +721,55 @@ var BaseProvider = class {
|
|
|
721
721
|
}
|
|
722
722
|
};
|
|
723
723
|
|
|
724
|
+
// src/providers/model-filter.ts
|
|
725
|
+
var NON_CHAT_PATTERNS = [
|
|
726
|
+
"embed",
|
|
727
|
+
// text-embedding-3, nomic-embed, mxbai-embed, snowflake-arctic-embed
|
|
728
|
+
"(?:^|[-_/])tts(?:[-_/]|$)",
|
|
729
|
+
"text-to-speech",
|
|
730
|
+
"speech",
|
|
731
|
+
// text-to-speech
|
|
732
|
+
"whisper",
|
|
733
|
+
"transcrib",
|
|
734
|
+
"(?:^|[-_/])stt(?:[-_/]|$)",
|
|
735
|
+
// speech-to-text
|
|
736
|
+
"dall[-]?e",
|
|
737
|
+
"imagen",
|
|
738
|
+
"image-generation",
|
|
739
|
+
"gpt-image",
|
|
740
|
+
"(?:^|[-_/])image(?:[-_/]|$)",
|
|
741
|
+
"stable-diffusion",
|
|
742
|
+
"sdxl",
|
|
743
|
+
"flux",
|
|
744
|
+
// image gen
|
|
745
|
+
"moderation",
|
|
746
|
+
"(?:^|[-_/])guard(?:[-_/]|$)",
|
|
747
|
+
// moderation / safety
|
|
748
|
+
"rerank",
|
|
749
|
+
"(?:^|[-_/])audio(?:[-_/]|$)",
|
|
750
|
+
"native-audio",
|
|
751
|
+
"realtime",
|
|
752
|
+
// audio / realtime
|
|
753
|
+
"veo",
|
|
754
|
+
"sora",
|
|
755
|
+
"(?:^|[-_/])video(?:[-_/]|$)",
|
|
756
|
+
// video
|
|
757
|
+
"(?:^|[-_/])aqa(?:[-_/]|$)",
|
|
758
|
+
// attributed QA
|
|
759
|
+
"(?:^|[-_/])live(?:[-_/]|$)",
|
|
760
|
+
// live-audio variants
|
|
761
|
+
"(?:^|[-_/])(?:davinci|babbage)(?:[-_/]|$)"
|
|
762
|
+
// legacy completion-only base models
|
|
763
|
+
];
|
|
764
|
+
var NON_CHAT = new RegExp(NON_CHAT_PATTERNS.join("|"), "i");
|
|
765
|
+
function isChatModel(id, methods) {
|
|
766
|
+
if (methods && methods.length > 0) {
|
|
767
|
+
const canGenerate = methods.some((m) => /generatecontent|generatemessage|chat|completion/i.test(m));
|
|
768
|
+
if (!canGenerate) return false;
|
|
769
|
+
}
|
|
770
|
+
return !NON_CHAT.test(id);
|
|
771
|
+
}
|
|
772
|
+
|
|
724
773
|
// src/providers/anthropic.ts
|
|
725
774
|
function anthropicThinkingParam(modelId, maxTokens) {
|
|
726
775
|
if (!/claude-(opus|sonnet)-4/i.test(modelId)) return {};
|
|
@@ -834,7 +883,7 @@ var AnthropicProvider = class extends BaseProvider {
|
|
|
834
883
|
if (!Array.isArray(data?.data)) {
|
|
835
884
|
return Object.values(MODELS).filter((m) => m.provider === "anthropic");
|
|
836
885
|
}
|
|
837
|
-
return data.data.map((m) => {
|
|
886
|
+
return data.data.filter((m) => isChatModel(m.id)).map((m) => {
|
|
838
887
|
const known = Object.values(MODELS).find((km) => km.id === m.id && km.provider === "anthropic");
|
|
839
888
|
if (known) return known;
|
|
840
889
|
return {
|
|
@@ -1049,7 +1098,7 @@ var OpenAIProvider = class extends BaseProvider {
|
|
|
1049
1098
|
async listModels() {
|
|
1050
1099
|
try {
|
|
1051
1100
|
const response = await this.client.models.list();
|
|
1052
|
-
return response.data.map((m) => {
|
|
1101
|
+
return response.data.filter((m) => isChatModel(m.id)).map((m) => {
|
|
1053
1102
|
const known = Object.values(MODELS).find((km) => km.id === m.id && km.provider === "openai");
|
|
1054
1103
|
if (known) return known;
|
|
1055
1104
|
return {
|
|
@@ -1324,7 +1373,7 @@ var GeminiProvider = class extends BaseProvider {
|
|
|
1324
1373
|
if (!Array.isArray(data?.models)) {
|
|
1325
1374
|
return Object.values(MODELS).filter((m) => m.provider === "gemini");
|
|
1326
1375
|
}
|
|
1327
|
-
return data.models.map((m) => {
|
|
1376
|
+
return data.models.filter((m) => isChatModel(m.name.replace("models/", ""), m.supportedGenerationMethods)).map((m) => {
|
|
1328
1377
|
const id = m.name.replace("models/", "");
|
|
1329
1378
|
const known = Object.values(MODELS).find(
|
|
1330
1379
|
(km) => km.id === id && km.provider === "gemini"
|
|
@@ -1682,10 +1731,10 @@ var OllamaProvider = class extends BaseProvider {
|
|
|
1682
1731
|
const response = await fetch(`${this.baseUrl}/api/tags`);
|
|
1683
1732
|
if (!response.ok) return [];
|
|
1684
1733
|
const data = await response.json();
|
|
1685
|
-
const supportedKeywords = ["llama3", "llama2", "gemma", "mistral", "mixtral", "qwen", "phi3", "codellama", "deepseek", "llava", "starcoder", "stable-code"
|
|
1734
|
+
const supportedKeywords = ["llama3", "llama2", "gemma", "mistral", "mixtral", "qwen", "phi3", "codellama", "deepseek", "llava", "starcoder", "stable-code"];
|
|
1686
1735
|
const entries = data.models.filter((m) => {
|
|
1687
1736
|
const name = m.name.toLowerCase();
|
|
1688
|
-
return supportedKeywords.some((k) => name.includes(k));
|
|
1737
|
+
return supportedKeywords.some((k) => name.includes(k)) && isChatModel(name);
|
|
1689
1738
|
});
|
|
1690
1739
|
const shows = await Promise.all(entries.map((m) => this.showModel(m.name)));
|
|
1691
1740
|
return entries.map((m, i) => {
|
|
@@ -1805,7 +1854,8 @@ var OpenAICompatibleProvider = class extends OpenAIProvider {
|
|
|
1805
1854
|
return typeof m === "string" ? m : void 0;
|
|
1806
1855
|
}).filter((x) => typeof x === "string" && x.length > 0);
|
|
1807
1856
|
if (ids.length === 0) return [this.model];
|
|
1808
|
-
|
|
1857
|
+
const chatIds = ids.filter((id) => isChatModel(id));
|
|
1858
|
+
return (chatIds.length ? chatIds : ids).map((id) => ({
|
|
1809
1859
|
id,
|
|
1810
1860
|
name: id,
|
|
1811
1861
|
provider: "openai-compatible",
|
|
@@ -15835,7 +15885,7 @@ function clearCloudSession(dir = globalDir()) {
|
|
|
15835
15885
|
}
|
|
15836
15886
|
|
|
15837
15887
|
// src/cloud/client.ts
|
|
15838
|
-
var DEFAULT_CLOUD_URL = "https://
|
|
15888
|
+
var DEFAULT_CLOUD_URL = "https://cascadeai.in";
|
|
15839
15889
|
var REFRESH_MARGIN_MS = 6e4;
|
|
15840
15890
|
var FileCloudSessionStore = class {
|
|
15841
15891
|
constructor(dir) {
|