pi-clinepass 0.1.2 → 0.1.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/CHANGELOG.md +4 -0
- package/package.json +54 -54
- package/src/catalog.ts +174 -174
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## 0.1.3 - 2026-08-31
|
|
6
|
+
|
|
7
|
+
- Corrected model input modalities: `glm-5.3` and `deepseek-v4-flash` are text-only, `mimo-v2.5` and `qwen3.8-max` accept images
|
|
8
|
+
|
|
5
9
|
## 0.1.2 - 2026-08-30
|
|
6
10
|
|
|
7
11
|
- New paid model: `cline-pass/glm-5.3-flash` ($0.15/$0.50/$0.03)
|
package/package.json
CHANGED
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "pi-clinepass",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "ClinePass for pi — static measured-price catalog, server-truth billing meter, free models",
|
|
5
|
-
"keywords": [
|
|
6
|
-
"ai",
|
|
7
|
-
"cline",
|
|
8
|
-
"cline-pass",
|
|
9
|
-
"clinepass",
|
|
10
|
-
"pi",
|
|
11
|
-
"pi-coding-agent",
|
|
12
|
-
"pi-package",
|
|
13
|
-
"pi-extension"
|
|
14
|
-
],
|
|
15
|
-
"license": "MIT",
|
|
16
|
-
"author": "fifidayone",
|
|
17
|
-
"repository": {
|
|
18
|
-
"type": "git",
|
|
19
|
-
"url": "git+https://github.com/fifidayone/pi-clinepass.git"
|
|
20
|
-
},
|
|
21
|
-
"type": "module",
|
|
22
|
-
"main": "src/index.ts",
|
|
23
|
-
"types": "src/index.ts",
|
|
24
|
-
"files": [
|
|
25
|
-
"src",
|
|
26
|
-
"CHANGELOG.md",
|
|
27
|
-
"README.md",
|
|
28
|
-
"LICENSE"
|
|
29
|
-
],
|
|
30
|
-
"engines": {
|
|
31
|
-
"node": ">=22"
|
|
32
|
-
},
|
|
33
|
-
"scripts": {
|
|
34
|
-
"test": "vitest run",
|
|
35
|
-
"test:watch": "vitest",
|
|
36
|
-
"typecheck": "tsc --noEmit"
|
|
37
|
-
},
|
|
38
|
-
"peerDependencies": {
|
|
39
|
-
"@earendil-works/pi-ai": "*",
|
|
40
|
-
"@earendil-works/pi-coding-agent": "*",
|
|
41
|
-
"@earendil-works/pi-tui": "*"
|
|
42
|
-
},
|
|
43
|
-
"devDependencies": {
|
|
44
|
-
"@types/node": "^26.3.0",
|
|
45
|
-
"typescript": "^7.0.2",
|
|
46
|
-
"vitest": "^4.1.11"
|
|
47
|
-
},
|
|
48
|
-
"pi": {
|
|
49
|
-
"extensions": [
|
|
50
|
-
"./src/index.ts"
|
|
51
|
-
],
|
|
52
|
-
"image": "https://raw.githubusercontent.com/fifidayone/pi-clinepass/main/assets/report.png"
|
|
53
|
-
}
|
|
54
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "pi-clinepass",
|
|
3
|
+
"version": "0.1.3",
|
|
4
|
+
"description": "ClinePass for pi — static measured-price catalog, server-truth billing meter, free models",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"ai",
|
|
7
|
+
"cline",
|
|
8
|
+
"cline-pass",
|
|
9
|
+
"clinepass",
|
|
10
|
+
"pi",
|
|
11
|
+
"pi-coding-agent",
|
|
12
|
+
"pi-package",
|
|
13
|
+
"pi-extension"
|
|
14
|
+
],
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"author": "fifidayone",
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "git+https://github.com/fifidayone/pi-clinepass.git"
|
|
20
|
+
},
|
|
21
|
+
"type": "module",
|
|
22
|
+
"main": "src/index.ts",
|
|
23
|
+
"types": "src/index.ts",
|
|
24
|
+
"files": [
|
|
25
|
+
"src",
|
|
26
|
+
"CHANGELOG.md",
|
|
27
|
+
"README.md",
|
|
28
|
+
"LICENSE"
|
|
29
|
+
],
|
|
30
|
+
"engines": {
|
|
31
|
+
"node": ">=22"
|
|
32
|
+
},
|
|
33
|
+
"scripts": {
|
|
34
|
+
"test": "vitest run",
|
|
35
|
+
"test:watch": "vitest",
|
|
36
|
+
"typecheck": "tsc --noEmit"
|
|
37
|
+
},
|
|
38
|
+
"peerDependencies": {
|
|
39
|
+
"@earendil-works/pi-ai": "*",
|
|
40
|
+
"@earendil-works/pi-coding-agent": "*",
|
|
41
|
+
"@earendil-works/pi-tui": "*"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@types/node": "^26.3.0",
|
|
45
|
+
"typescript": "^7.0.2",
|
|
46
|
+
"vitest": "^4.1.11"
|
|
47
|
+
},
|
|
48
|
+
"pi": {
|
|
49
|
+
"extensions": [
|
|
50
|
+
"./src/index.ts"
|
|
51
|
+
],
|
|
52
|
+
"image": "https://raw.githubusercontent.com/fifidayone/pi-clinepass/main/assets/report.png"
|
|
53
|
+
}
|
|
54
|
+
}
|
package/src/catalog.ts
CHANGED
|
@@ -1,174 +1,174 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ClinePass static model catalog.
|
|
3
|
-
*
|
|
4
|
-
* Prices are the measured billing rates from the Cline `/usages` API
|
|
5
|
-
* (verified against real usage), not the published reference table which
|
|
6
|
-
* drifts from actual billing. `cacheWrite` is kept at 0: pi's cost model
|
|
7
|
-
* requires the field, but we do not display or track cache-write pricing.
|
|
8
|
-
*
|
|
9
|
-
* Context is capped to 921,600 for models whose gateway reports ~1M
|
|
10
|
-
* (pool max, not single-node) to leave headroom; max output is capped to
|
|
11
|
-
* 131,072. Models under 1M keep their tested values.
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
export type ThinkingLevel = "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max";
|
|
15
|
-
|
|
16
|
-
export type ThinkingLevelMap = Readonly<Record<ThinkingLevel, string | null>>;
|
|
17
|
-
|
|
18
|
-
export interface ClinePassModel {
|
|
19
|
-
id: string;
|
|
20
|
-
name: string;
|
|
21
|
-
reasoning: boolean;
|
|
22
|
-
input: readonly ("text" | "image")[];
|
|
23
|
-
cost: {
|
|
24
|
-
input: number;
|
|
25
|
-
output: number;
|
|
26
|
-
cacheRead: number;
|
|
27
|
-
cacheWrite: number;
|
|
28
|
-
};
|
|
29
|
-
contextWindow: number;
|
|
30
|
-
maxTokens: number;
|
|
31
|
-
thinkingLevelMap: ThinkingLevelMap;
|
|
32
|
-
compat: {
|
|
33
|
-
supportsDeveloperRole: false;
|
|
34
|
-
cacheControlFormat: "anthropic";
|
|
35
|
-
supportsLongCacheRetention: false;
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/** All 7 levels supported (off → "none"). Used when `supportedEfforts: null` + mandatory false. */
|
|
40
|
-
const ALL_THINKING: ThinkingLevelMap = {
|
|
41
|
-
off: "none",
|
|
42
|
-
minimal: "minimal",
|
|
43
|
-
low: "low",
|
|
44
|
-
medium: "medium",
|
|
45
|
-
high: "high",
|
|
46
|
-
xhigh: "xhigh",
|
|
47
|
-
max: "max",
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
/** All levels except off (mandatory reasoning). Used when `mandatory: true` + `supportedEfforts: null`. */
|
|
51
|
-
const ALL_MANDATORY: ThinkingLevelMap = {
|
|
52
|
-
off: null,
|
|
53
|
-
minimal: "minimal",
|
|
54
|
-
low: "low",
|
|
55
|
-
medium: "medium",
|
|
56
|
-
high: "high",
|
|
57
|
-
xhigh: "xhigh",
|
|
58
|
-
max: "max",
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
/** Only max/high/low + off. Used for deepseek, glm-5.3, kimi-k3, free models. */
|
|
62
|
-
const MAX_HIGH_LOW: ThinkingLevelMap = {
|
|
63
|
-
off: "none",
|
|
64
|
-
minimal: null,
|
|
65
|
-
low: "low",
|
|
66
|
-
medium: null,
|
|
67
|
-
high: "high",
|
|
68
|
-
xhigh: null,
|
|
69
|
-
max: "max",
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
/** Max/high/low but off not allowed (mandatory). */
|
|
73
|
-
const MAX_HIGH_LOW_MANDATORY: ThinkingLevelMap = {
|
|
74
|
-
off: null,
|
|
75
|
-
minimal: null,
|
|
76
|
-
low: "low",
|
|
77
|
-
medium: null,
|
|
78
|
-
high: "high",
|
|
79
|
-
xhigh: null,
|
|
80
|
-
max: "max",
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
/** Only xhigh/high + off. Used for glm-5.2. */
|
|
84
|
-
const XHIGH_HIGH: ThinkingLevelMap = {
|
|
85
|
-
off: "none",
|
|
86
|
-
minimal: null,
|
|
87
|
-
low: null,
|
|
88
|
-
medium: null,
|
|
89
|
-
high: "high",
|
|
90
|
-
xhigh: "xhigh",
|
|
91
|
-
max: null,
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
/** xhigh/medium/low + off. Used for qwen3.8-max. */
|
|
95
|
-
const XHIGH_MEDIUM_LOW: ThinkingLevelMap = {
|
|
96
|
-
off: "none",
|
|
97
|
-
minimal: null,
|
|
98
|
-
low: "low",
|
|
99
|
-
medium: "medium",
|
|
100
|
-
high: null,
|
|
101
|
-
xhigh: "xhigh",
|
|
102
|
-
max: null,
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* ClinePass rejects the `developer` role; the API caps at `max_tokens` /
|
|
107
|
-
* `max_completion_tokens` with reasoning excluded from the completion cap,
|
|
108
|
-
* so pi's default `max_completion_tokens` is correct and left unset.
|
|
109
|
-
* `cacheControlFormat: "anthropic"` makes pi send `{type:"ephemeral"}`
|
|
110
|
-
* (no ttl) — verified to engage real caching on ClinePass.
|
|
111
|
-
* `supportsLongCacheRetention: false` keeps ttl from ever being sent
|
|
112
|
-
* (ttl causes HTTP 500).
|
|
113
|
-
*/
|
|
114
|
-
const COMPAT = {
|
|
115
|
-
supportsDeveloperRole: false as const,
|
|
116
|
-
cacheControlFormat: "anthropic" as const,
|
|
117
|
-
supportsLongCacheRetention: false as const,
|
|
118
|
-
};
|
|
119
|
-
|
|
120
|
-
function model(
|
|
121
|
-
id: string,
|
|
122
|
-
name: string,
|
|
123
|
-
cost: [input: number, output: number, cacheRead: number],
|
|
124
|
-
contextWindow: number,
|
|
125
|
-
maxTokens: number,
|
|
126
|
-
input: readonly ("text" | "image")[] = ["text"],
|
|
127
|
-
thinkingLevelMap: ThinkingLevelMap = ALL_THINKING,
|
|
128
|
-
): ClinePassModel {
|
|
129
|
-
return {
|
|
130
|
-
id,
|
|
131
|
-
name,
|
|
132
|
-
reasoning: true,
|
|
133
|
-
input,
|
|
134
|
-
cost: { input: cost[0], output: cost[1], cacheRead: cost[2], cacheWrite: 0 },
|
|
135
|
-
contextWindow,
|
|
136
|
-
maxTokens,
|
|
137
|
-
thinkingLevelMap,
|
|
138
|
-
compat: COMPAT,
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/** Measured prices ($/1M tokens: input/output/cacheRead) — latest verified. */
|
|
143
|
-
export const MODELS: readonly ClinePassModel[] = [
|
|
144
|
-
// ── Free models (Cline free tier, cost 0) ──────────────────────────────
|
|
145
|
-
model("cline-free/longcat-2.0", "LongCat 2.0", [0, 0, 0], 921_600, 131_072, ["text"], ALL_THINKING),
|
|
146
|
-
model("z-ai/glm-5.3-flash", "GLM-5.3 Flash", [0, 0, 0], 921_600, 131_072, ["text", "image"], MAX_HIGH_LOW_MANDATORY),
|
|
147
|
-
model("deepseek/deepseek-v4-flash", "DeepSeek V4 Flash", [0, 0, 0], 921_600, 131_072, ["text"
|
|
148
|
-
model("poolside/laguna-s-2.1:free", "Laguna S-2.1", [0, 0, 0], 262_144, 131_072, ["text"], ALL_THINKING),
|
|
149
|
-
// ── ClinePass models (measured billing prices) ─────────────────────────
|
|
150
|
-
model("cline-pass/glm-5.3-flash", "GLM-5.3 Flash", [0.15, 0.5, 0.03], 921_600, 131_072, ["text", "image"], MAX_HIGH_LOW_MANDATORY),
|
|
151
|
-
model("cline-pass/glm-5.3", "GLM-5.3", [1.4, 4.4, 0.26], 921_600, 131_072, ["text"
|
|
152
|
-
model("cline-pass/glm-5.2", "GLM-5.2", [1.4, 4.4, 0.26], 921_600, 131_072, ["text"], XHIGH_HIGH),
|
|
153
|
-
model("cline-pass/kimi-k2.7-code", "Kimi K2.7 Code", [1.58, 6.67, 0.32], 262_144, 131_072, ["text", "image"], ALL_MANDATORY),
|
|
154
|
-
model("cline-pass/kimi-k2.6", "Kimi K2.6", [1.58, 6.67, 0.27], 262_144, 131_072, ["text", "image"], ALL_THINKING),
|
|
155
|
-
model("cline-pass/kimi-k3", "Kimi K3", [6.0, 30.0, 0.6], 921_600, 131_072, ["text", "image"], MAX_HIGH_LOW),
|
|
156
|
-
model("cline-pass/deepseek-v4-pro", "DeepSeek V4 Pro", [1.65, 4.95, 0.06], 921_600, 131_072, ["text"], MAX_HIGH_LOW),
|
|
157
|
-
model("cline-pass/deepseek-v4-flash", "DeepSeek V4 Flash", [0.44, 1.32, 0.014], 921_600, 131_072, ["text"
|
|
158
|
-
model("cline-pass/mimo-v2.5", "MiMo-V2.5", [0.14, 0.28, 0.0028], 921_600, 131_072, ["text"], ALL_THINKING),
|
|
159
|
-
model("cline-pass/mimo-v2.5-pro", "MiMo-V2.5-Pro", [0.435, 0.87, 0.0036], 921_600, 131_072, ["text"], ALL_THINKING),
|
|
160
|
-
model("cline-pass/minimax-m3", "MiniMax M3", [0.5, 2.0, 0.1], 921_600, 131_072, ["text", "image"], ALL_THINKING),
|
|
161
|
-
model("cline-pass/qwen3.7-plus", "Qwen3.7 Plus", [0.67, 2.67, 0.07], 921_600, 131_072, ["text", "image"], ALL_THINKING),
|
|
162
|
-
model("cline-pass/qwen3.7-max", "Qwen3.7 Max", [4.17, 12.5, 0.83], 921_600, 131_072, ["text"], ALL_THINKING),
|
|
163
|
-
model("cline-pass/qwen3.8-max", "Qwen3.8 Max", [2.75, 8.25, 0.34], 921_600, 131_072, ["text"], XHIGH_MEDIUM_LOW),
|
|
164
|
-
];
|
|
165
|
-
|
|
166
|
-
export function modelIds(): string[] {
|
|
167
|
-
return MODELS.map((m) => m.id);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
/** True for the Cline free-tier models — derived from the catalog itself
|
|
171
|
-
* (cost 0), so adding a free model never needs a second edit here. */
|
|
172
|
-
export function isFreeModel(id: string): boolean {
|
|
173
|
-
return MODELS.some((m) => m.id === id && m.cost.input === 0);
|
|
174
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* ClinePass static model catalog.
|
|
3
|
+
*
|
|
4
|
+
* Prices are the measured billing rates from the Cline `/usages` API
|
|
5
|
+
* (verified against real usage), not the published reference table which
|
|
6
|
+
* drifts from actual billing. `cacheWrite` is kept at 0: pi's cost model
|
|
7
|
+
* requires the field, but we do not display or track cache-write pricing.
|
|
8
|
+
*
|
|
9
|
+
* Context is capped to 921,600 for models whose gateway reports ~1M
|
|
10
|
+
* (pool max, not single-node) to leave headroom; max output is capped to
|
|
11
|
+
* 131,072. Models under 1M keep their tested values.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
export type ThinkingLevel = "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max";
|
|
15
|
+
|
|
16
|
+
export type ThinkingLevelMap = Readonly<Record<ThinkingLevel, string | null>>;
|
|
17
|
+
|
|
18
|
+
export interface ClinePassModel {
|
|
19
|
+
id: string;
|
|
20
|
+
name: string;
|
|
21
|
+
reasoning: boolean;
|
|
22
|
+
input: readonly ("text" | "image")[];
|
|
23
|
+
cost: {
|
|
24
|
+
input: number;
|
|
25
|
+
output: number;
|
|
26
|
+
cacheRead: number;
|
|
27
|
+
cacheWrite: number;
|
|
28
|
+
};
|
|
29
|
+
contextWindow: number;
|
|
30
|
+
maxTokens: number;
|
|
31
|
+
thinkingLevelMap: ThinkingLevelMap;
|
|
32
|
+
compat: {
|
|
33
|
+
supportsDeveloperRole: false;
|
|
34
|
+
cacheControlFormat: "anthropic";
|
|
35
|
+
supportsLongCacheRetention: false;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** All 7 levels supported (off → "none"). Used when `supportedEfforts: null` + mandatory false. */
|
|
40
|
+
const ALL_THINKING: ThinkingLevelMap = {
|
|
41
|
+
off: "none",
|
|
42
|
+
minimal: "minimal",
|
|
43
|
+
low: "low",
|
|
44
|
+
medium: "medium",
|
|
45
|
+
high: "high",
|
|
46
|
+
xhigh: "xhigh",
|
|
47
|
+
max: "max",
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
/** All levels except off (mandatory reasoning). Used when `mandatory: true` + `supportedEfforts: null`. */
|
|
51
|
+
const ALL_MANDATORY: ThinkingLevelMap = {
|
|
52
|
+
off: null,
|
|
53
|
+
minimal: "minimal",
|
|
54
|
+
low: "low",
|
|
55
|
+
medium: "medium",
|
|
56
|
+
high: "high",
|
|
57
|
+
xhigh: "xhigh",
|
|
58
|
+
max: "max",
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/** Only max/high/low + off. Used for deepseek, glm-5.3, kimi-k3, free models. */
|
|
62
|
+
const MAX_HIGH_LOW: ThinkingLevelMap = {
|
|
63
|
+
off: "none",
|
|
64
|
+
minimal: null,
|
|
65
|
+
low: "low",
|
|
66
|
+
medium: null,
|
|
67
|
+
high: "high",
|
|
68
|
+
xhigh: null,
|
|
69
|
+
max: "max",
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
/** Max/high/low but off not allowed (mandatory). */
|
|
73
|
+
const MAX_HIGH_LOW_MANDATORY: ThinkingLevelMap = {
|
|
74
|
+
off: null,
|
|
75
|
+
minimal: null,
|
|
76
|
+
low: "low",
|
|
77
|
+
medium: null,
|
|
78
|
+
high: "high",
|
|
79
|
+
xhigh: null,
|
|
80
|
+
max: "max",
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
/** Only xhigh/high + off. Used for glm-5.2. */
|
|
84
|
+
const XHIGH_HIGH: ThinkingLevelMap = {
|
|
85
|
+
off: "none",
|
|
86
|
+
minimal: null,
|
|
87
|
+
low: null,
|
|
88
|
+
medium: null,
|
|
89
|
+
high: "high",
|
|
90
|
+
xhigh: "xhigh",
|
|
91
|
+
max: null,
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
/** xhigh/medium/low + off. Used for qwen3.8-max. */
|
|
95
|
+
const XHIGH_MEDIUM_LOW: ThinkingLevelMap = {
|
|
96
|
+
off: "none",
|
|
97
|
+
minimal: null,
|
|
98
|
+
low: "low",
|
|
99
|
+
medium: "medium",
|
|
100
|
+
high: null,
|
|
101
|
+
xhigh: "xhigh",
|
|
102
|
+
max: null,
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* ClinePass rejects the `developer` role; the API caps at `max_tokens` /
|
|
107
|
+
* `max_completion_tokens` with reasoning excluded from the completion cap,
|
|
108
|
+
* so pi's default `max_completion_tokens` is correct and left unset.
|
|
109
|
+
* `cacheControlFormat: "anthropic"` makes pi send `{type:"ephemeral"}`
|
|
110
|
+
* (no ttl) — verified to engage real caching on ClinePass.
|
|
111
|
+
* `supportsLongCacheRetention: false` keeps ttl from ever being sent
|
|
112
|
+
* (ttl causes HTTP 500).
|
|
113
|
+
*/
|
|
114
|
+
const COMPAT = {
|
|
115
|
+
supportsDeveloperRole: false as const,
|
|
116
|
+
cacheControlFormat: "anthropic" as const,
|
|
117
|
+
supportsLongCacheRetention: false as const,
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
function model(
|
|
121
|
+
id: string,
|
|
122
|
+
name: string,
|
|
123
|
+
cost: [input: number, output: number, cacheRead: number],
|
|
124
|
+
contextWindow: number,
|
|
125
|
+
maxTokens: number,
|
|
126
|
+
input: readonly ("text" | "image")[] = ["text"],
|
|
127
|
+
thinkingLevelMap: ThinkingLevelMap = ALL_THINKING,
|
|
128
|
+
): ClinePassModel {
|
|
129
|
+
return {
|
|
130
|
+
id,
|
|
131
|
+
name,
|
|
132
|
+
reasoning: true,
|
|
133
|
+
input,
|
|
134
|
+
cost: { input: cost[0], output: cost[1], cacheRead: cost[2], cacheWrite: 0 },
|
|
135
|
+
contextWindow,
|
|
136
|
+
maxTokens,
|
|
137
|
+
thinkingLevelMap,
|
|
138
|
+
compat: COMPAT,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/** Measured prices ($/1M tokens: input/output/cacheRead) — latest verified. */
|
|
143
|
+
export const MODELS: readonly ClinePassModel[] = [
|
|
144
|
+
// ── Free models (Cline free tier, cost 0) ──────────────────────────────
|
|
145
|
+
model("cline-free/longcat-2.0", "LongCat 2.0", [0, 0, 0], 921_600, 131_072, ["text"], ALL_THINKING),
|
|
146
|
+
model("z-ai/glm-5.3-flash", "GLM-5.3 Flash", [0, 0, 0], 921_600, 131_072, ["text", "image"], MAX_HIGH_LOW_MANDATORY),
|
|
147
|
+
model("deepseek/deepseek-v4-flash", "DeepSeek V4 Flash", [0, 0, 0], 921_600, 131_072, ["text"], MAX_HIGH_LOW),
|
|
148
|
+
model("poolside/laguna-s-2.1:free", "Laguna S-2.1", [0, 0, 0], 262_144, 131_072, ["text"], ALL_THINKING),
|
|
149
|
+
// ── ClinePass models (measured billing prices) ─────────────────────────
|
|
150
|
+
model("cline-pass/glm-5.3-flash", "GLM-5.3 Flash", [0.15, 0.5, 0.03], 921_600, 131_072, ["text", "image"], MAX_HIGH_LOW_MANDATORY),
|
|
151
|
+
model("cline-pass/glm-5.3", "GLM-5.3", [1.4, 4.4, 0.26], 921_600, 131_072, ["text"], MAX_HIGH_LOW_MANDATORY),
|
|
152
|
+
model("cline-pass/glm-5.2", "GLM-5.2", [1.4, 4.4, 0.26], 921_600, 131_072, ["text"], XHIGH_HIGH),
|
|
153
|
+
model("cline-pass/kimi-k2.7-code", "Kimi K2.7 Code", [1.58, 6.67, 0.32], 262_144, 131_072, ["text", "image"], ALL_MANDATORY),
|
|
154
|
+
model("cline-pass/kimi-k2.6", "Kimi K2.6", [1.58, 6.67, 0.27], 262_144, 131_072, ["text", "image"], ALL_THINKING),
|
|
155
|
+
model("cline-pass/kimi-k3", "Kimi K3", [6.0, 30.0, 0.6], 921_600, 131_072, ["text", "image"], MAX_HIGH_LOW),
|
|
156
|
+
model("cline-pass/deepseek-v4-pro", "DeepSeek V4 Pro", [1.65, 4.95, 0.06], 921_600, 131_072, ["text"], MAX_HIGH_LOW),
|
|
157
|
+
model("cline-pass/deepseek-v4-flash", "DeepSeek V4 Flash", [0.44, 1.32, 0.014], 921_600, 131_072, ["text"], MAX_HIGH_LOW),
|
|
158
|
+
model("cline-pass/mimo-v2.5", "MiMo-V2.5", [0.14, 0.28, 0.0028], 921_600, 131_072, ["text", "image"], ALL_THINKING),
|
|
159
|
+
model("cline-pass/mimo-v2.5-pro", "MiMo-V2.5-Pro", [0.435, 0.87, 0.0036], 921_600, 131_072, ["text"], ALL_THINKING),
|
|
160
|
+
model("cline-pass/minimax-m3", "MiniMax M3", [0.5, 2.0, 0.1], 921_600, 131_072, ["text", "image"], ALL_THINKING),
|
|
161
|
+
model("cline-pass/qwen3.7-plus", "Qwen3.7 Plus", [0.67, 2.67, 0.07], 921_600, 131_072, ["text", "image"], ALL_THINKING),
|
|
162
|
+
model("cline-pass/qwen3.7-max", "Qwen3.7 Max", [4.17, 12.5, 0.83], 921_600, 131_072, ["text"], ALL_THINKING),
|
|
163
|
+
model("cline-pass/qwen3.8-max", "Qwen3.8 Max", [2.75, 8.25, 0.34], 921_600, 131_072, ["text", "image"], XHIGH_MEDIUM_LOW),
|
|
164
|
+
];
|
|
165
|
+
|
|
166
|
+
export function modelIds(): string[] {
|
|
167
|
+
return MODELS.map((m) => m.id);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/** True for the Cline free-tier models — derived from the catalog itself
|
|
171
|
+
* (cost 0), so adding a free model never needs a second edit here. */
|
|
172
|
+
export function isFreeModel(id: string): boolean {
|
|
173
|
+
return MODELS.some((m) => m.id === id && m.cost.input === 0);
|
|
174
|
+
}
|