@versini/sassysaint-common 4.13.0 → 4.14.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/dist/index.d.ts +104 -1
- package/dist/index.js +117 -95
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -178,6 +178,109 @@ declare const findProvider: (modelName: string) => null | typeof PROVIDER_ANTHRO
|
|
|
178
178
|
*
|
|
179
179
|
*/
|
|
180
180
|
declare const getProvidersFromModels: (models: string[]) => Array<typeof PROVIDER_OPENAI | typeof PROVIDER_ANTHROPIC | typeof PROVIDER_GOOGLE>;
|
|
181
|
+
/**
|
|
182
|
+
* Groups allowed models by their respective providers. This function is used to
|
|
183
|
+
* create nested menu structures in the UI where users can select specific
|
|
184
|
+
* models within each provider category.
|
|
185
|
+
*
|
|
186
|
+
* The function analyzes the given array of model names and organizes them into
|
|
187
|
+
* a map where keys are provider names and values are arrays of models available
|
|
188
|
+
* for that provider. Only models that exist in the MODELS_PER_PROVIDER mapping
|
|
189
|
+
* are included.
|
|
190
|
+
*
|
|
191
|
+
* @param models - Array of model names available to the user (e.g., from
|
|
192
|
+
* allowedModels in policy configuration).
|
|
193
|
+
* @returns Map where keys are provider names (PROVIDER_OPENAI,
|
|
194
|
+
* PROVIDER_ANTHROPIC, PROVIDER_GOOGLE) and values are arrays of model names
|
|
195
|
+
* available for that provider. Returns empty map if no models are provided.
|
|
196
|
+
*
|
|
197
|
+
* @example
|
|
198
|
+
* ```ts
|
|
199
|
+
* // User has multiple models per provider:
|
|
200
|
+
* getModelsGroupedByProvider([MODEL_GPT5, MODEL_GPT5_MINI, MODEL_CLAUDE_HAIKU]);
|
|
201
|
+
* // Returns: Map {
|
|
202
|
+
* // "OpenAI" => ["gpt-5", "gpt-5-mini"],
|
|
203
|
+
* // "Anthropic" => ["claude-haiku-4-5-20251001"]
|
|
204
|
+
* // }
|
|
205
|
+
*
|
|
206
|
+
* // Single model per provider:
|
|
207
|
+
* getModelsGroupedByProvider([MODEL_GPT5, MODEL_CLAUDE_HAIKU]);
|
|
208
|
+
* // Returns: Map {
|
|
209
|
+
* // "OpenAI" => ["gpt-5"],
|
|
210
|
+
* // "Anthropic" => ["claude-haiku-4-5-20251001"]
|
|
211
|
+
* // }
|
|
212
|
+
*
|
|
213
|
+
* // Empty models array:
|
|
214
|
+
* getModelsGroupedByProvider([]);
|
|
215
|
+
* // Returns: Map {}
|
|
216
|
+
* ```
|
|
217
|
+
*
|
|
218
|
+
*/
|
|
219
|
+
declare const getModelsGroupedByProvider: (models: string[]) => Map<string, string[]>;
|
|
220
|
+
/**
|
|
221
|
+
* Checks if the user has multiple models available for at least one provider.
|
|
222
|
+
* This function is used to determine if the nested model selection feature
|
|
223
|
+
* should be available to the user.
|
|
224
|
+
*
|
|
225
|
+
* The function groups models by provider and checks if any provider has more
|
|
226
|
+
* than one model. This enables the UI to conditionally show the nested model
|
|
227
|
+
* selection toggle only to users who would benefit from it.
|
|
228
|
+
*
|
|
229
|
+
* @param models - Array of model names available to the user (e.g., from
|
|
230
|
+
* allowedModels in policy configuration).
|
|
231
|
+
* @returns True if at least one provider has multiple models available, false
|
|
232
|
+
* otherwise.
|
|
233
|
+
*
|
|
234
|
+
* @example
|
|
235
|
+
* ```ts
|
|
236
|
+
* // Premium plan with multiple models per provider:
|
|
237
|
+
* hasMultipleModelsPerProvider([MODEL_GPT5, MODEL_GPT5_MINI, MODEL_CLAUDE_HAIKU]);
|
|
238
|
+
* // Returns: true (OpenAI has 2 models)
|
|
239
|
+
*
|
|
240
|
+
* // Plus plan with one model per provider:
|
|
241
|
+
* hasMultipleModelsPerProvider([MODEL_GPT5_MINI, MODEL_CLAUDE_HAIKU, MODEL_GEMINI_FLASH]);
|
|
242
|
+
* // Returns: false (each provider has only 1 model)
|
|
243
|
+
*
|
|
244
|
+
* // Basic plan with single model:
|
|
245
|
+
* hasMultipleModelsPerProvider([MODEL_GPT5_NANO]);
|
|
246
|
+
* // Returns: false
|
|
247
|
+
* ```
|
|
248
|
+
*
|
|
249
|
+
*/
|
|
250
|
+
declare const hasMultipleModelsPerProvider: (models: string[]) => boolean;
|
|
251
|
+
/**
|
|
252
|
+
* Validates if a selected model is allowed for the user based on their current
|
|
253
|
+
* plan's allowed models. This function is used to prevent users from using
|
|
254
|
+
* models they selected under a previous (higher) plan after downgrading.
|
|
255
|
+
*
|
|
256
|
+
* The function checks if the model exists in the user's allowedModels array.
|
|
257
|
+
* Returns false if the model is undefined, null, or not in the allowed list.
|
|
258
|
+
*
|
|
259
|
+
* @param selectedModel - The model the user has selected (may be null/undefined
|
|
260
|
+
* if no selection was made).
|
|
261
|
+
* @param allowedModels - Array of model names the user is entitled to use based
|
|
262
|
+
* on their current plan.
|
|
263
|
+
* @returns True if the selected model is in the allowed models list, false
|
|
264
|
+
* otherwise.
|
|
265
|
+
*
|
|
266
|
+
* @example
|
|
267
|
+
* ```ts
|
|
268
|
+
* // User downgrades from Premium to Plus:
|
|
269
|
+
* const selectedModel = "gpt-4o"; // Was selected when user had Premium
|
|
270
|
+
* const allowedModels = ["gpt-4o-mini"]; // Plus plan only has mini model
|
|
271
|
+
* isModelAllowedForPlan(selectedModel, allowedModels); // Returns: false
|
|
272
|
+
*
|
|
273
|
+
* // Model is still allowed:
|
|
274
|
+
* isModelAllowedForPlan("gpt-4o-mini", ["gpt-4o-mini", "claude-haiku"]);
|
|
275
|
+
* // Returns: true
|
|
276
|
+
*
|
|
277
|
+
* // No model selected:
|
|
278
|
+
* isModelAllowedForPlan(undefined, ["gpt-4o-mini"]);
|
|
279
|
+
* // Returns: false
|
|
280
|
+
* ```
|
|
281
|
+
*
|
|
282
|
+
*/
|
|
283
|
+
declare const isModelAllowedForPlan: (selectedModel: string | undefined | null, allowedModels: string[]) => boolean;
|
|
181
284
|
/**
|
|
182
285
|
* Input type for capability checks. Can be a single capability string or an
|
|
183
286
|
* array of capability strings for checking multiple capabilities at once.
|
|
@@ -322,4 +425,4 @@ declare function toCapabilitySet(capabilities: string[] | undefined | null): Set
|
|
|
322
425
|
*/
|
|
323
426
|
declare function isEntitled(capabilitiesOrSet: string[] | Set<string> | null | undefined, required: CapabilityInput, options?: IsEntitledOptions): boolean;
|
|
324
427
|
|
|
325
|
-
export { ALL_MODELS, ALL_PROVIDERS, ALL_REASONING_MODELS, APPLICATION_NAME, APPROXIMATE_MODELS_PER_PROVIDER, CAPABILITIES, type CapabilityInput, DEFAULT_PROVIDER, DIGGIDY_CHAT_ID_HEADER, type EntitlementStateLike, type IsEntitledOptions, MODELS_PER_PROVIDER, MODEL_CLAUDE_HAIKU, MODEL_CLAUDE_SONNET, MODEL_DEV, MODEL_DISPLAY_NAMES, MODEL_EMBEDDING_TEXT, MODEL_GEMINI_FLASH, MODEL_GEMINI_PRO, MODEL_GPT4_NANO, MODEL_GPT5, MODEL_GPT5_MINI, MODEL_GPT5_NANO, MODEL_MEMORY_INFERENCE, MODEL_SONAR, MODEL_SONAR_PRO, PLAN_BASIC, PLAN_PLUS, PLAN_PREMIUM, PROVIDER_ANTHROPIC, PROVIDER_GOOGLE, PROVIDER_MEMORY, PROVIDER_MISTRAL, PROVIDER_OPENAI, PROVIDER_PERPLEXITY, PROVIDER_ROLE_MAP, PROVIDER_SUMMARY, ROLE_ASSISTANT, ROLE_HIDDEN, ROLE_INTERNAL, ROLE_SYSTEM, ROLE_USER, SORT_BY_TIMESTAMP, SORT_BY_TOKEN_USAGE, findProvider, getProvidersFromModels, isEntitled, isEntitlementLoaded, toCapabilitySet };
|
|
428
|
+
export { ALL_MODELS, ALL_PROVIDERS, ALL_REASONING_MODELS, APPLICATION_NAME, APPROXIMATE_MODELS_PER_PROVIDER, CAPABILITIES, type CapabilityInput, DEFAULT_PROVIDER, DIGGIDY_CHAT_ID_HEADER, type EntitlementStateLike, type IsEntitledOptions, MODELS_PER_PROVIDER, MODEL_CLAUDE_HAIKU, MODEL_CLAUDE_SONNET, MODEL_DEV, MODEL_DISPLAY_NAMES, MODEL_EMBEDDING_TEXT, MODEL_GEMINI_FLASH, MODEL_GEMINI_PRO, MODEL_GPT4_NANO, MODEL_GPT5, MODEL_GPT5_MINI, MODEL_GPT5_NANO, MODEL_MEMORY_INFERENCE, MODEL_SONAR, MODEL_SONAR_PRO, PLAN_BASIC, PLAN_PLUS, PLAN_PREMIUM, PROVIDER_ANTHROPIC, PROVIDER_GOOGLE, PROVIDER_MEMORY, PROVIDER_MISTRAL, PROVIDER_OPENAI, PROVIDER_PERPLEXITY, PROVIDER_ROLE_MAP, PROVIDER_SUMMARY, ROLE_ASSISTANT, ROLE_HIDDEN, ROLE_INTERNAL, ROLE_SYSTEM, ROLE_USER, SORT_BY_TIMESTAMP, SORT_BY_TOKEN_USAGE, findProvider, getModelsGroupedByProvider, getProvidersFromModels, hasMultipleModelsPerProvider, isEntitled, isEntitlementLoaded, isModelAllowedForPlan, toCapabilitySet };
|
package/dist/index.js
CHANGED
|
@@ -1,62 +1,62 @@
|
|
|
1
|
-
const
|
|
1
|
+
const u = "system", e = "user", E = "assistant", X = "hidden", Y = "data", r = "OpenAI", O = "Anthropic", c = "Google", N = "Summary", g = "Memory", I = "Perplexity", b = "Mistral", B = r, f = [
|
|
2
|
+
r,
|
|
2
3
|
O,
|
|
3
|
-
_,
|
|
4
4
|
c
|
|
5
|
-
],
|
|
6
|
-
[
|
|
7
|
-
[
|
|
8
|
-
[
|
|
5
|
+
], _ = "gpt-5", A = "gpt-5-mini", a = "gpt-5-nano", T = "gpt-4.1-nano", D = "claude-haiku-4-5-20251001", R = "claude-sonnet-4-5-20250929", L = "gemini-2.5-flash", P = "gemini-2.5-pro", l = "sonar", S = "sonar-pro", F = "mistralai/mistral-small-3.2-24b-instruct:free", W = "gpt-4o-mini", k = "text-embedding-3-small", x = {
|
|
6
|
+
[_]: "GPT-5",
|
|
7
|
+
[A]: "GPT-5 Mini",
|
|
8
|
+
[a]: "GPT-5 Nano",
|
|
9
9
|
[T]: "GPT-4.1 Nano",
|
|
10
|
-
[
|
|
11
|
-
[
|
|
12
|
-
[
|
|
13
|
-
[
|
|
14
|
-
[
|
|
15
|
-
[
|
|
16
|
-
},
|
|
10
|
+
[D]: "Claude Haiku 4.5",
|
|
11
|
+
[R]: "Claude Sonnet 4.5",
|
|
12
|
+
[L]: "Gemini 2.5 Flash",
|
|
13
|
+
[P]: "Gemini 2.5 Pro",
|
|
14
|
+
[l]: "Sonar",
|
|
15
|
+
[S]: "Sonar Pro"
|
|
16
|
+
}, j = [
|
|
17
|
+
_,
|
|
17
18
|
A,
|
|
18
|
-
|
|
19
|
-
r,
|
|
20
|
-
I,
|
|
21
|
-
i,
|
|
19
|
+
a,
|
|
22
20
|
D,
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
R,
|
|
22
|
+
L,
|
|
23
|
+
P
|
|
24
|
+
], w = [
|
|
25
|
+
_,
|
|
25
26
|
A,
|
|
27
|
+
a,
|
|
26
28
|
R,
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
], u = {
|
|
31
|
-
[O]: [
|
|
29
|
+
P
|
|
30
|
+
], d = {
|
|
31
|
+
[r]: [
|
|
32
32
|
T,
|
|
33
|
+
_,
|
|
33
34
|
A,
|
|
34
|
-
|
|
35
|
-
r
|
|
36
|
-
],
|
|
37
|
-
[_]: [I, i],
|
|
38
|
-
[c]: [D, a],
|
|
39
|
-
[M]: [S, N]
|
|
40
|
-
}, w = {
|
|
41
|
-
[O]: [l, E, e],
|
|
42
|
-
[_]: [E, e],
|
|
43
|
-
[d]: [E, e],
|
|
44
|
-
[g]: [E, e],
|
|
45
|
-
[c]: [E, e],
|
|
46
|
-
[M]: [E, e]
|
|
47
|
-
}, G = "claude-sonnet-4", f = "claude-3", p = "gpt-", y = "o3", h = "o4", C = "gemini", U = "sonar", H = {
|
|
48
|
-
[_]: [
|
|
49
|
-
G,
|
|
50
|
-
f
|
|
35
|
+
a
|
|
51
36
|
],
|
|
37
|
+
[O]: [D, R],
|
|
38
|
+
[c]: [L, P],
|
|
39
|
+
[I]: [l, S]
|
|
40
|
+
}, z = {
|
|
41
|
+
[r]: [u, e, E],
|
|
42
|
+
[O]: [e, E],
|
|
43
|
+
[N]: [e, E],
|
|
44
|
+
[g]: [e, E],
|
|
45
|
+
[c]: [e, E],
|
|
46
|
+
[I]: [e, E]
|
|
47
|
+
}, p = "claude-sonnet-4", G = "claude-3", m = "gpt-", h = "o3", y = "o4", C = "gemini", U = "sonar", v = {
|
|
52
48
|
[O]: [
|
|
53
49
|
p,
|
|
54
|
-
|
|
55
|
-
|
|
50
|
+
G
|
|
51
|
+
],
|
|
52
|
+
[r]: [
|
|
53
|
+
m,
|
|
54
|
+
h,
|
|
55
|
+
y
|
|
56
56
|
],
|
|
57
57
|
[c]: [C],
|
|
58
|
-
[
|
|
59
|
-
},
|
|
58
|
+
[I]: [U]
|
|
59
|
+
}, K = "x-diggidy-chat-id", Z = "timestamp", J = "tokenUsage", Q = "Diggidy", $ = "sassy:basic", q = "sassy:plus", tt = "sassy:advanced", nt = {
|
|
60
60
|
TOOL: {
|
|
61
61
|
DATETIME: "getDateTime",
|
|
62
62
|
IMAGES: "getImages",
|
|
@@ -74,81 +74,103 @@ const l = "system", E = "user", e = "assistant", X = "hidden", Y = "data", O = "
|
|
|
74
74
|
REASONING: "addon:reasoning",
|
|
75
75
|
CODEINTERPRETER: "addon:codeinterpreter"
|
|
76
76
|
}
|
|
77
|
-
},
|
|
77
|
+
}, ot = (t) => {
|
|
78
78
|
for (const [n, s] of Object.entries(
|
|
79
|
-
|
|
79
|
+
v
|
|
80
80
|
))
|
|
81
81
|
if (s.some((o) => t.startsWith(o)))
|
|
82
82
|
return n;
|
|
83
83
|
return null;
|
|
84
|
-
},
|
|
84
|
+
}, st = (t) => {
|
|
85
85
|
if (!t || t.length === 0)
|
|
86
86
|
return [];
|
|
87
87
|
const n = /* @__PURE__ */ new Set();
|
|
88
88
|
for (const s of t)
|
|
89
|
-
for (const [o,
|
|
90
|
-
|
|
89
|
+
for (const [o, i] of Object.entries(
|
|
90
|
+
d
|
|
91
91
|
))
|
|
92
|
-
|
|
93
|
-
return
|
|
94
|
-
}
|
|
95
|
-
|
|
92
|
+
i.includes(s) && (o === r || o === O || o === c) && n.add(o);
|
|
93
|
+
return f.filter((s) => n.has(s));
|
|
94
|
+
}, H = (t) => {
|
|
95
|
+
const n = /* @__PURE__ */ new Map();
|
|
96
|
+
if (!t || t.length === 0)
|
|
97
|
+
return n;
|
|
98
|
+
for (const s of t)
|
|
99
|
+
for (const [o, i] of Object.entries(
|
|
100
|
+
d
|
|
101
|
+
))
|
|
102
|
+
if (i.includes(s)) {
|
|
103
|
+
n.has(o) || n.set(o, []), n.get(o)?.push(s);
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
return n;
|
|
107
|
+
}, et = (t) => {
|
|
108
|
+
const n = H(t);
|
|
109
|
+
for (const s of n.values())
|
|
110
|
+
if (s.length > 1)
|
|
111
|
+
return !0;
|
|
112
|
+
return !1;
|
|
113
|
+
}, Et = (t, n) => !t || !n || n.length === 0 ? !1 : n.includes(t);
|
|
114
|
+
function rt(t) {
|
|
96
115
|
return !!t && Array.isArray(t.capabilities) && t.capabilities.length >= 0;
|
|
97
116
|
}
|
|
98
117
|
function V(t) {
|
|
99
118
|
return t ? new Set(t) : null;
|
|
100
119
|
}
|
|
101
|
-
function
|
|
120
|
+
function Ot(t, n, s) {
|
|
102
121
|
if (!n || Array.isArray(n) && n.length === 0)
|
|
103
122
|
return !0;
|
|
104
123
|
const o = t instanceof Set ? t : V(t);
|
|
105
|
-
return !o || o.size === 0 ? !1 : typeof n == "string" ? o.has(n) : s?.any === !0 ? n.some((
|
|
124
|
+
return !o || o.size === 0 ? !1 : typeof n == "string" ? o.has(n) : s?.any === !0 ? n.some((M) => o.has(M)) : n.every((M) => o.has(M));
|
|
106
125
|
}
|
|
107
126
|
export {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
127
|
+
j as ALL_MODELS,
|
|
128
|
+
f as ALL_PROVIDERS,
|
|
129
|
+
w as ALL_REASONING_MODELS,
|
|
130
|
+
Q as APPLICATION_NAME,
|
|
131
|
+
v as APPROXIMATE_MODELS_PER_PROVIDER,
|
|
132
|
+
nt as CAPABILITIES,
|
|
133
|
+
B as DEFAULT_PROVIDER,
|
|
134
|
+
K as DIGGIDY_CHAT_ID_HEADER,
|
|
135
|
+
d as MODELS_PER_PROVIDER,
|
|
136
|
+
D as MODEL_CLAUDE_HAIKU,
|
|
137
|
+
R as MODEL_CLAUDE_SONNET,
|
|
138
|
+
F as MODEL_DEV,
|
|
120
139
|
x as MODEL_DISPLAY_NAMES,
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
140
|
+
k as MODEL_EMBEDDING_TEXT,
|
|
141
|
+
L as MODEL_GEMINI_FLASH,
|
|
142
|
+
P as MODEL_GEMINI_PRO,
|
|
124
143
|
T as MODEL_GPT4_NANO,
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
144
|
+
_ as MODEL_GPT5,
|
|
145
|
+
A as MODEL_GPT5_MINI,
|
|
146
|
+
a as MODEL_GPT5_NANO,
|
|
147
|
+
W as MODEL_MEMORY_INFERENCE,
|
|
148
|
+
l as MODEL_SONAR,
|
|
149
|
+
S as MODEL_SONAR_PRO,
|
|
150
|
+
$ as PLAN_BASIC,
|
|
151
|
+
q as PLAN_PLUS,
|
|
152
|
+
tt as PLAN_PREMIUM,
|
|
153
|
+
O as PROVIDER_ANTHROPIC,
|
|
135
154
|
c as PROVIDER_GOOGLE,
|
|
136
155
|
g as PROVIDER_MEMORY,
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
156
|
+
b as PROVIDER_MISTRAL,
|
|
157
|
+
r as PROVIDER_OPENAI,
|
|
158
|
+
I as PROVIDER_PERPLEXITY,
|
|
159
|
+
z as PROVIDER_ROLE_MAP,
|
|
160
|
+
N as PROVIDER_SUMMARY,
|
|
161
|
+
E as ROLE_ASSISTANT,
|
|
143
162
|
X as ROLE_HIDDEN,
|
|
144
163
|
Y as ROLE_INTERNAL,
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
164
|
+
u as ROLE_SYSTEM,
|
|
165
|
+
e as ROLE_USER,
|
|
166
|
+
Z as SORT_BY_TIMESTAMP,
|
|
167
|
+
J as SORT_BY_TOKEN_USAGE,
|
|
168
|
+
ot as findProvider,
|
|
169
|
+
H as getModelsGroupedByProvider,
|
|
170
|
+
st as getProvidersFromModels,
|
|
171
|
+
et as hasMultipleModelsPerProvider,
|
|
172
|
+
Ot as isEntitled,
|
|
173
|
+
rt as isEntitlementLoaded,
|
|
174
|
+
Et as isModelAllowedForPlan,
|
|
153
175
|
V as toCapabilitySet
|
|
154
176
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@versini/sassysaint-common",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.14.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "Arno Versini",
|
|
6
6
|
"publishConfig": {
|
|
@@ -32,5 +32,5 @@
|
|
|
32
32
|
"test:watch": "vitest",
|
|
33
33
|
"watch": "npm-run-all dev"
|
|
34
34
|
},
|
|
35
|
-
"gitHead": "
|
|
35
|
+
"gitHead": "0acf9b121471aaae4654d8909a6ac0168486ee91"
|
|
36
36
|
}
|