claudish 4.5.2 → 4.5.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.
- package/dist/index.js +124 -14
- package/package.json +1 -1
- package/recommended-models.json +1 -1
package/dist/index.js
CHANGED
|
@@ -31237,6 +31237,86 @@ async function fetchGLMCodingModels() {
|
|
|
31237
31237
|
return [];
|
|
31238
31238
|
}
|
|
31239
31239
|
}
|
|
31240
|
+
async function fetchGLMDirectModels() {
|
|
31241
|
+
try {
|
|
31242
|
+
const response = await fetch("https://models.dev/api.json", {
|
|
31243
|
+
signal: AbortSignal.timeout(5000)
|
|
31244
|
+
});
|
|
31245
|
+
if (!response.ok) {
|
|
31246
|
+
return [];
|
|
31247
|
+
}
|
|
31248
|
+
const data = await response.json();
|
|
31249
|
+
const codingPlan = data["zai-coding-plan"];
|
|
31250
|
+
if (!codingPlan?.models)
|
|
31251
|
+
return [];
|
|
31252
|
+
return Object.entries(codingPlan.models).filter(([_, m]) => m.tool_call === true).map(([id, m]) => {
|
|
31253
|
+
const inputModalities = m.modalities?.input || [];
|
|
31254
|
+
const supportsVision = inputModalities.includes("image") || inputModalities.includes("video");
|
|
31255
|
+
const contextLength = m.limit?.context || 131072;
|
|
31256
|
+
const inputCost = m.cost?.input || 0;
|
|
31257
|
+
const outputCost = m.cost?.output || 0;
|
|
31258
|
+
const isFree = inputCost === 0 && outputCost === 0;
|
|
31259
|
+
return {
|
|
31260
|
+
id: `glm@${id}`,
|
|
31261
|
+
name: m.name || id,
|
|
31262
|
+
description: `GLM/Zhipu direct API`,
|
|
31263
|
+
provider: "GLM",
|
|
31264
|
+
pricing: {
|
|
31265
|
+
input: isFree ? "FREE" : `$${inputCost.toFixed(2)}`,
|
|
31266
|
+
output: isFree ? "FREE" : `$${outputCost.toFixed(2)}`,
|
|
31267
|
+
average: isFree ? "FREE" : `$${((inputCost + outputCost) / 2).toFixed(2)}/1M`
|
|
31268
|
+
},
|
|
31269
|
+
context: contextLength >= 1e6 ? `${Math.round(contextLength / 1e6)}M` : `${Math.round(contextLength / 1000)}K`,
|
|
31270
|
+
contextLength,
|
|
31271
|
+
supportsTools: true,
|
|
31272
|
+
supportsReasoning: m.reasoning || false,
|
|
31273
|
+
supportsVision,
|
|
31274
|
+
isFree,
|
|
31275
|
+
source: "GLM"
|
|
31276
|
+
};
|
|
31277
|
+
});
|
|
31278
|
+
} catch {
|
|
31279
|
+
return [];
|
|
31280
|
+
}
|
|
31281
|
+
}
|
|
31282
|
+
async function fetchOllamaCloudModels() {
|
|
31283
|
+
try {
|
|
31284
|
+
const response = await fetch("https://models.dev/api.json", {
|
|
31285
|
+
signal: AbortSignal.timeout(5000)
|
|
31286
|
+
});
|
|
31287
|
+
if (!response.ok) {
|
|
31288
|
+
return [];
|
|
31289
|
+
}
|
|
31290
|
+
const data = await response.json();
|
|
31291
|
+
const ollamaCloud = data["ollama-cloud"];
|
|
31292
|
+
if (!ollamaCloud?.models)
|
|
31293
|
+
return [];
|
|
31294
|
+
return Object.entries(ollamaCloud.models).filter(([_, m]) => m.tool_call === true).map(([id, m]) => {
|
|
31295
|
+
const inputModalities = m.modalities?.input || [];
|
|
31296
|
+
const supportsVision = inputModalities.includes("image") || inputModalities.includes("video");
|
|
31297
|
+
const contextLength = m.limit?.context || 131072;
|
|
31298
|
+
return {
|
|
31299
|
+
id: `oc@${id}`,
|
|
31300
|
+
name: m.name || id,
|
|
31301
|
+
description: `OllamaCloud`,
|
|
31302
|
+
provider: "OllamaCloud",
|
|
31303
|
+
pricing: {
|
|
31304
|
+
input: "N/A",
|
|
31305
|
+
output: "N/A",
|
|
31306
|
+
average: "N/A"
|
|
31307
|
+
},
|
|
31308
|
+
context: contextLength >= 1e6 ? `${Math.round(contextLength / 1e6)}M` : `${Math.round(contextLength / 1000)}K`,
|
|
31309
|
+
contextLength,
|
|
31310
|
+
supportsTools: true,
|
|
31311
|
+
supportsReasoning: m.reasoning || false,
|
|
31312
|
+
supportsVision,
|
|
31313
|
+
source: "OllamaCloud"
|
|
31314
|
+
};
|
|
31315
|
+
});
|
|
31316
|
+
} catch {
|
|
31317
|
+
return [];
|
|
31318
|
+
}
|
|
31319
|
+
}
|
|
31240
31320
|
function shouldRefreshForFreeModels() {
|
|
31241
31321
|
if (!existsSync6(ALL_MODELS_JSON_PATH)) {
|
|
31242
31322
|
return true;
|
|
@@ -31282,16 +31362,18 @@ async function getFreeModels() {
|
|
|
31282
31362
|
return combined;
|
|
31283
31363
|
}
|
|
31284
31364
|
async function getAllModelsForSearch() {
|
|
31285
|
-
const [openRouterModels, xaiModels, geminiModels, openaiModels, glmCodingModels, zenModels] = await Promise.all([
|
|
31365
|
+
const [openRouterModels, xaiModels, geminiModels, openaiModels, glmDirectModels, glmCodingModels, ollamaCloudModels, zenModels] = await Promise.all([
|
|
31286
31366
|
fetchAllModels().then((models) => models.map(toModelInfo)),
|
|
31287
31367
|
fetchXAIModels(),
|
|
31288
31368
|
fetchGeminiModels(),
|
|
31289
31369
|
fetchOpenAIModels(),
|
|
31370
|
+
fetchGLMDirectModels(),
|
|
31290
31371
|
fetchGLMCodingModels(),
|
|
31372
|
+
fetchOllamaCloudModels(),
|
|
31291
31373
|
fetchZenFreeModels()
|
|
31292
31374
|
]);
|
|
31293
|
-
const directApiModels = [...xaiModels, ...geminiModels, ...openaiModels, ...glmCodingModels];
|
|
31294
|
-
const allModels = [...zenModels, ...directApiModels, ...openRouterModels];
|
|
31375
|
+
const directApiModels = [...xaiModels, ...geminiModels, ...openaiModels, ...glmDirectModels, ...glmCodingModels];
|
|
31376
|
+
const allModels = [...zenModels, ...ollamaCloudModels, ...directApiModels, ...openRouterModels];
|
|
31295
31377
|
return allModels;
|
|
31296
31378
|
}
|
|
31297
31379
|
function formatModelChoice(model, showSource = false) {
|
|
@@ -31309,7 +31391,10 @@ function formatModelChoice(model, showSource = false) {
|
|
|
31309
31391
|
OpenRouter: "OR",
|
|
31310
31392
|
xAI: "xAI",
|
|
31311
31393
|
Gemini: "Gem",
|
|
31312
|
-
OpenAI: "OAI"
|
|
31394
|
+
OpenAI: "OAI",
|
|
31395
|
+
GLM: "GLM",
|
|
31396
|
+
"GLM Coding": "GC",
|
|
31397
|
+
OllamaCloud: "OC"
|
|
31313
31398
|
};
|
|
31314
31399
|
const sourceTag = sourceTagMap[model.source] || model.source;
|
|
31315
31400
|
return `${sourceTag} ${model.id} (${priceStr}, ${ctxStr}${capsStr})`;
|
|
@@ -31323,6 +31408,13 @@ function fuzzyMatch(text, query) {
|
|
|
31323
31408
|
return 1;
|
|
31324
31409
|
if (lowerText.includes(lowerQuery))
|
|
31325
31410
|
return 0.8;
|
|
31411
|
+
const normSep = (s) => s.replace(/[\s\-_.]/g, "");
|
|
31412
|
+
const tn = normSep(lowerText);
|
|
31413
|
+
const qn = normSep(lowerQuery);
|
|
31414
|
+
if (tn === qn)
|
|
31415
|
+
return 0.95;
|
|
31416
|
+
if (tn.includes(qn))
|
|
31417
|
+
return 0.75;
|
|
31326
31418
|
let queryIdx = 0;
|
|
31327
31419
|
let score = 0;
|
|
31328
31420
|
for (let i = 0;i < lowerText.length && queryIdx < lowerQuery.length; i++) {
|
|
@@ -31406,12 +31498,12 @@ function getKnownModels(provider) {
|
|
|
31406
31498
|
{ id: "google@gemini-2.0-flash", name: "Gemini 2.0 Flash", context: "1M" }
|
|
31407
31499
|
],
|
|
31408
31500
|
openai: [
|
|
31501
|
+
{ id: "oai@gpt-5.3-codex", name: "GPT-5.3 Codex", context: "400K", description: "Latest coding model" },
|
|
31502
|
+
{ id: "oai@gpt-5.2-codex", name: "GPT-5.2 Codex", context: "400K", description: "Coding model" },
|
|
31503
|
+
{ id: "oai@gpt-5.1-codex-mini", name: "GPT-5.1 Codex Mini", context: "400K", description: "Fast coding model" },
|
|
31409
31504
|
{ id: "oai@o3", name: "o3", context: "200K", description: "Reasoning model" },
|
|
31410
31505
|
{ id: "oai@o4-mini", name: "o4-mini", context: "200K", description: "Fast reasoning model" },
|
|
31411
|
-
{ id: "oai@gpt-4.1", name: "GPT-4.1", context: "1M", description: "
|
|
31412
|
-
{ id: "oai@gpt-4.1-mini", name: "GPT-4.1 Mini", context: "1M", description: "Latest mini model" },
|
|
31413
|
-
{ id: "oai@gpt-4o", name: "GPT-4o", context: "128K", description: "Multimodal model" },
|
|
31414
|
-
{ id: "oai@gpt-4o-mini", name: "GPT-4o Mini", context: "128K", description: "Fast multimodal model" }
|
|
31506
|
+
{ id: "oai@gpt-4.1", name: "GPT-4.1", context: "1M", description: "Large context model" }
|
|
31415
31507
|
],
|
|
31416
31508
|
xai: [
|
|
31417
31509
|
{ id: "xai@grok-4", name: "Grok 4", context: "256K" },
|
|
@@ -31426,15 +31518,22 @@ function getKnownModels(provider) {
|
|
|
31426
31518
|
{ id: "kimi@moonshot-v1-128k", name: "Moonshot V1 128K", context: "128K" }
|
|
31427
31519
|
],
|
|
31428
31520
|
glm: [
|
|
31429
|
-
{ id: "glm@glm-
|
|
31430
|
-
{ id: "glm@glm-4
|
|
31521
|
+
{ id: "glm@glm-5", name: "GLM-5", context: "200K", description: "Latest GLM model with reasoning" },
|
|
31522
|
+
{ id: "glm@glm-4.7", name: "GLM-4.7", context: "200K", description: "GLM 4.7 with reasoning" },
|
|
31523
|
+
{ id: "glm@glm-4.7-flash", name: "GLM-4.7 Flash", context: "200K", description: "Fast GLM 4.7" },
|
|
31524
|
+
{ id: "glm@glm-4.6", name: "GLM-4.6", context: "200K" },
|
|
31525
|
+
{ id: "glm@glm-4.5-flash", name: "GLM-4.5 Flash", context: "128K" }
|
|
31431
31526
|
],
|
|
31432
31527
|
zai: [
|
|
31433
31528
|
{ id: "zai@glm-4.7", name: "GLM 4.7 (Z.AI)", context: "128K" }
|
|
31434
31529
|
],
|
|
31435
31530
|
ollamacloud: [
|
|
31436
|
-
{ id: "oc@
|
|
31437
|
-
{ id: "oc@
|
|
31531
|
+
{ id: "oc@glm-5", name: "GLM-5", context: "203K", description: "GLM-5 on OllamaCloud" },
|
|
31532
|
+
{ id: "oc@deepseek-v3.2", name: "DeepSeek V3.2", context: "164K", description: "DeepSeek V3.2 on OllamaCloud" },
|
|
31533
|
+
{ id: "oc@gemini-3-pro-preview", name: "Gemini 3 Pro Preview", context: "1M", description: "Gemini 3 Pro on OllamaCloud" },
|
|
31534
|
+
{ id: "oc@kimi-k2.5", name: "Kimi K2.5", context: "262K", description: "Kimi K2.5 on OllamaCloud" },
|
|
31535
|
+
{ id: "oc@qwen3-coder-next", name: "Qwen3 Coder Next", context: "262K", description: "Qwen3 Coder on OllamaCloud" },
|
|
31536
|
+
{ id: "oc@minimax-m2.1", name: "MiniMax M2.1", context: "205K", description: "MiniMax M2.1 on OllamaCloud" }
|
|
31438
31537
|
]
|
|
31439
31538
|
};
|
|
31440
31539
|
const providerDisplay = provider.charAt(0).toUpperCase() + provider.slice(1);
|
|
@@ -31656,7 +31755,7 @@ var init_model_selector = __esm(() => {
|
|
|
31656
31755
|
{ name: "Kimi / Moonshot", value: "kimi", description: "Direct API (MOONSHOT_API_KEY)" },
|
|
31657
31756
|
{ name: "GLM / Zhipu", value: "glm", description: "Direct API (ZHIPU_API_KEY)" },
|
|
31658
31757
|
{ name: "Z.AI", value: "zai", description: "Z.AI API (ZAI_API_KEY)" },
|
|
31659
|
-
{ name: "OllamaCloud", value: "ollamacloud", description: "Cloud
|
|
31758
|
+
{ name: "OllamaCloud", value: "ollamacloud", description: "Cloud models (OLLAMA_API_KEY)" },
|
|
31660
31759
|
{ name: "Ollama (local)", value: "ollama", description: "Local Ollama instance" },
|
|
31661
31760
|
{ name: "LM Studio (local)", value: "lmstudio", description: "Local LM Studio instance" },
|
|
31662
31761
|
{ name: "Enter custom model", value: "custom", description: "Type a provider@model specification" }
|
|
@@ -31680,6 +31779,8 @@ var init_model_selector = __esm(() => {
|
|
|
31680
31779
|
google: "Gemini",
|
|
31681
31780
|
openai: "OpenAI",
|
|
31682
31781
|
xai: "xAI",
|
|
31782
|
+
glm: "GLM",
|
|
31783
|
+
ollamacloud: "OllamaCloud",
|
|
31683
31784
|
zen: "Zen"
|
|
31684
31785
|
};
|
|
31685
31786
|
});
|
|
@@ -32359,6 +32460,15 @@ function fuzzyScore2(text, query) {
|
|
|
32359
32460
|
return 0.8;
|
|
32360
32461
|
if (t.includes(q))
|
|
32361
32462
|
return 0.6;
|
|
32463
|
+
const normSep = (s) => s.replace(/[\s\-_.]/g, "");
|
|
32464
|
+
const tn = normSep(t);
|
|
32465
|
+
const qn = normSep(q);
|
|
32466
|
+
if (tn === qn)
|
|
32467
|
+
return 0.95;
|
|
32468
|
+
if (tn.startsWith(qn))
|
|
32469
|
+
return 0.85;
|
|
32470
|
+
if (tn.includes(qn))
|
|
32471
|
+
return 0.65;
|
|
32362
32472
|
let score = 0;
|
|
32363
32473
|
let tIdx = 0;
|
|
32364
32474
|
let qIdx = 0;
|
|
@@ -34631,7 +34741,7 @@ async function fetchGLMCodingModels2() {
|
|
|
34631
34741
|
return [];
|
|
34632
34742
|
}
|
|
34633
34743
|
}
|
|
34634
|
-
var __filename5, __dirname5, VERSION = "4.5.
|
|
34744
|
+
var __filename5, __dirname5, VERSION = "4.5.3", CACHE_MAX_AGE_DAYS3 = 2, MODELS_JSON_PATH, CLAUDISH_CACHE_DIR3, ALL_MODELS_JSON_PATH2;
|
|
34635
34745
|
var init_cli = __esm(() => {
|
|
34636
34746
|
init_config();
|
|
34637
34747
|
init_model_loader();
|
package/package.json
CHANGED
package/recommended-models.json
CHANGED