veryfront 0.1.381 → 0.1.382
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/esm/deno.js +1 -1
- package/esm/src/provider/index.d.ts +3 -0
- package/esm/src/provider/index.d.ts.map +1 -1
- package/esm/src/provider/index.js +1 -0
- package/esm/src/provider/runtime-loader.d.ts +1 -11
- package/esm/src/provider/runtime-loader.d.ts.map +1 -1
- package/esm/src/provider/runtime-loader.js +2 -775
- package/esm/src/provider/shared/index.d.ts +2 -1
- package/esm/src/provider/shared/index.d.ts.map +1 -1
- package/esm/src/provider/shared/index.js +3 -1
- package/esm/src/provider/veryfront-cloud/model-catalog.d.ts +31 -0
- package/esm/src/provider/veryfront-cloud/model-catalog.d.ts.map +1 -0
- package/esm/src/provider/veryfront-cloud/model-catalog.js +163 -0
- package/esm/src/provider/veryfront-cloud/provider.d.ts.map +1 -1
- package/esm/src/provider/veryfront-cloud/provider.js +1 -7
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +1 -1
- package/src/deno.js +1 -1
- package/src/deps/esm.sh/@types/react-dom@19.2.3/client.d.ts +1 -1
- package/src/deps/esm.sh/@types/{react@19.2.3 → react@19.2.14}/global.d.ts +1 -0
- package/src/deps/esm.sh/@types/{react@19.2.3 → react@19.2.14}/index.d.ts +93 -24
- package/src/deps/esm.sh/react-dom@19.2.4/client.d.ts +1 -1
- package/src/src/provider/index.ts +20 -0
- package/src/src/provider/runtime-loader.ts +1 -1008
- package/src/src/provider/shared/index.ts +3 -1
- package/src/src/provider/veryfront-cloud/model-catalog.ts +220 -0
- package/src/src/provider/veryfront-cloud/provider.ts +3 -7
- package/src/src/utils/version-constant.ts +1 -1
- package/esm/src/provider/runtime-loader/provider-finish-reasons.d.ts +0 -9
- package/esm/src/provider/runtime-loader/provider-finish-reasons.d.ts.map +0 -1
- package/esm/src/provider/runtime-loader/provider-finish-reasons.js +0 -60
- package/src/src/provider/runtime-loader/provider-finish-reasons.ts +0 -69
|
@@ -33,6 +33,9 @@ export {
|
|
|
33
33
|
withToolInputStatusTransitions,
|
|
34
34
|
} from "../runtime-loader/tool-input-status.js";
|
|
35
35
|
|
|
36
|
+
// SSE chunk parser
|
|
37
|
+
export { parseSseChunk } from "../runtime-loader/provider-sse.js";
|
|
38
|
+
|
|
36
39
|
// Retry / error / HTTP plumbing (currently in runtime-loader.ts).
|
|
37
40
|
export {
|
|
38
41
|
buildProviderError,
|
|
@@ -40,7 +43,6 @@ export {
|
|
|
40
43
|
isNumberArray,
|
|
41
44
|
mergeUsage,
|
|
42
45
|
parseRetryAfterMs,
|
|
43
|
-
parseSseChunk,
|
|
44
46
|
ProviderError,
|
|
45
47
|
ProviderOverloadedError,
|
|
46
48
|
ProviderQuotaError,
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import type { VeryfrontCloudProviderId } from "./shared.js";
|
|
2
|
+
|
|
3
|
+
export type VeryfrontCloudModelThinkingConfig = {
|
|
4
|
+
enabled: boolean;
|
|
5
|
+
budgetTokens?: number;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export type VeryfrontCloudChatModel = {
|
|
9
|
+
id: string;
|
|
10
|
+
modelId: string;
|
|
11
|
+
provider: VeryfrontCloudProviderId;
|
|
12
|
+
name: string;
|
|
13
|
+
description: string;
|
|
14
|
+
thinkingBudgetTokens?: number;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export const DEFAULT_VERYFRONT_CLOUD_MODEL_ID = "opus";
|
|
18
|
+
export const VERYFRONT_CLOUD_MODEL_PREFIX = "veryfront-cloud/";
|
|
19
|
+
|
|
20
|
+
const HOSTED_MODEL_PROVIDER_PREFIXES = [
|
|
21
|
+
"anthropic/",
|
|
22
|
+
"openai/",
|
|
23
|
+
"google/",
|
|
24
|
+
"google-ai-studio/",
|
|
25
|
+
"moonshotai/",
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
export const VERYFRONT_CLOUD_CHAT_MODELS: VeryfrontCloudChatModel[] = [
|
|
29
|
+
{
|
|
30
|
+
id: "opus",
|
|
31
|
+
modelId: "anthropic/claude-opus-4-6",
|
|
32
|
+
provider: "anthropic",
|
|
33
|
+
name: "Claude Opus 4.6",
|
|
34
|
+
description: "Most capable for ambitious work",
|
|
35
|
+
thinkingBudgetTokens: 2048,
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
id: "sonnet",
|
|
39
|
+
modelId: "anthropic/claude-sonnet-4-6",
|
|
40
|
+
provider: "anthropic",
|
|
41
|
+
name: "Claude Sonnet 4.6",
|
|
42
|
+
description: "Most efficient for everyday tasks",
|
|
43
|
+
thinkingBudgetTokens: 2048,
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
id: "haiku",
|
|
47
|
+
modelId: "anthropic/claude-haiku-4-5-20251001",
|
|
48
|
+
provider: "anthropic",
|
|
49
|
+
name: "Claude Haiku 4.5",
|
|
50
|
+
description: "Fastest for quick answers",
|
|
51
|
+
thinkingBudgetTokens: 1024,
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
id: "gpt-5.2",
|
|
55
|
+
modelId: "openai/gpt-5.2",
|
|
56
|
+
provider: "openai",
|
|
57
|
+
name: "GPT-5.2",
|
|
58
|
+
description: "Most capable OpenAI model",
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
id: "gemini-2.5-pro",
|
|
62
|
+
modelId: "google-ai-studio/gemini-2.5-pro",
|
|
63
|
+
provider: "google",
|
|
64
|
+
name: "Gemini 2.5 Pro",
|
|
65
|
+
description: "Advanced reasoning and analysis",
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
id: "gemini-2.5-flash",
|
|
69
|
+
modelId: "google-ai-studio/gemini-2.5-flash",
|
|
70
|
+
provider: "google",
|
|
71
|
+
name: "Gemini 2.5 Flash",
|
|
72
|
+
description: "Fast and cost-efficient",
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
id: "kimi-k2.5",
|
|
76
|
+
modelId: "moonshotai/kimi-k2.5",
|
|
77
|
+
provider: "moonshotai",
|
|
78
|
+
name: "Kimi K2.5",
|
|
79
|
+
description: "Deep thinking and multimodal",
|
|
80
|
+
},
|
|
81
|
+
];
|
|
82
|
+
|
|
83
|
+
export function findVeryfrontCloudModel(id: string): VeryfrontCloudChatModel | undefined {
|
|
84
|
+
return VERYFRONT_CLOUD_CHAT_MODELS.find((model) => model.id === id);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export function normalizeVeryfrontCloudModelId(modelId: string): string {
|
|
88
|
+
return modelId.startsWith(VERYFRONT_CLOUD_MODEL_PREFIX)
|
|
89
|
+
? modelId.slice(VERYFRONT_CLOUD_MODEL_PREFIX.length)
|
|
90
|
+
: modelId;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export function findVeryfrontCloudModelByModelId(
|
|
94
|
+
modelId: string,
|
|
95
|
+
): VeryfrontCloudChatModel | undefined {
|
|
96
|
+
const normalizedModelId = normalizeVeryfrontCloudModelId(modelId);
|
|
97
|
+
return VERYFRONT_CLOUD_CHAT_MODELS.find((model) => model.modelId === normalizedModelId);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export function getVeryfrontCloudProviderFromModelId(
|
|
101
|
+
modelId: string,
|
|
102
|
+
): VeryfrontCloudProviderId {
|
|
103
|
+
const normalizedModelId = normalizeVeryfrontCloudModelId(modelId);
|
|
104
|
+
const prefix = normalizedModelId.split("/")[0];
|
|
105
|
+
if (prefix === "google-ai-studio") return "google";
|
|
106
|
+
if (prefix === "openai" || prefix === "anthropic" || prefix === "moonshotai") return prefix;
|
|
107
|
+
|
|
108
|
+
throw new Error(`Unknown model provider prefix "${prefix}" in model ID "${modelId}"`);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export function tryGetVeryfrontCloudProviderFromModelId(
|
|
112
|
+
modelId: string,
|
|
113
|
+
): VeryfrontCloudProviderId | undefined {
|
|
114
|
+
try {
|
|
115
|
+
return getVeryfrontCloudProviderFromModelId(modelId);
|
|
116
|
+
} catch {
|
|
117
|
+
return undefined;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export function resolveVeryfrontCloudModelId(alias?: string): string {
|
|
122
|
+
const requestedModel = alias || DEFAULT_VERYFRONT_CLOUD_MODEL_ID;
|
|
123
|
+
const catalogModel = VERYFRONT_CLOUD_CHAT_MODELS.find((model) =>
|
|
124
|
+
model.modelId === requestedModel
|
|
125
|
+
);
|
|
126
|
+
if (catalogModel) {
|
|
127
|
+
return catalogModel.modelId;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
if (requestedModel.includes("/")) {
|
|
131
|
+
return requestedModel;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const model = findVeryfrontCloudModel(requestedModel);
|
|
135
|
+
if (!model) {
|
|
136
|
+
throw new Error(`Unknown model alias "${requestedModel}"`);
|
|
137
|
+
}
|
|
138
|
+
return model.modelId;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export function resolveHostedVeryfrontCloudModelId(
|
|
142
|
+
modelId: string | undefined,
|
|
143
|
+
): string | undefined {
|
|
144
|
+
if (!modelId) {
|
|
145
|
+
return modelId;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
if (modelId.startsWith(VERYFRONT_CLOUD_MODEL_PREFIX)) {
|
|
149
|
+
return modelId;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return HOSTED_MODEL_PROVIDER_PREFIXES.some((prefix) => modelId.startsWith(prefix))
|
|
153
|
+
? `${VERYFRONT_CLOUD_MODEL_PREFIX}${modelId}`
|
|
154
|
+
: modelId;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export function resolveVeryfrontCloudModelThinking(
|
|
158
|
+
modelId: string | undefined,
|
|
159
|
+
): VeryfrontCloudModelThinkingConfig | undefined {
|
|
160
|
+
if (!modelId) {
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
const model = findVeryfrontCloudModelByModelId(modelId) ?? findVeryfrontCloudModel(modelId);
|
|
165
|
+
if (typeof model?.thinkingBudgetTokens !== "number" || model.thinkingBudgetTokens <= 0) {
|
|
166
|
+
return undefined;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
return {
|
|
170
|
+
enabled: true,
|
|
171
|
+
budgetTokens: model.thinkingBudgetTokens,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
export function resolveVeryfrontCloudThinkingProviderOptions(
|
|
176
|
+
modelId: string,
|
|
177
|
+
thinking: VeryfrontCloudModelThinkingConfig | undefined,
|
|
178
|
+
): Record<string, unknown> | undefined {
|
|
179
|
+
if (
|
|
180
|
+
!thinking?.enabled || typeof thinking.budgetTokens !== "number" || thinking.budgetTokens <= 0
|
|
181
|
+
) {
|
|
182
|
+
return undefined;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
const provider = getVeryfrontCloudProviderFromModelId(modelId);
|
|
186
|
+
if (provider !== "anthropic") {
|
|
187
|
+
return undefined;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
return {
|
|
191
|
+
anthropic: {
|
|
192
|
+
temperature: 1,
|
|
193
|
+
thinking: {
|
|
194
|
+
type: "enabled",
|
|
195
|
+
budget_tokens: Math.floor(thinking.budgetTokens),
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
const PROVIDER_LABELS: Record<VeryfrontCloudProviderId, string> = {
|
|
202
|
+
anthropic: "Anthropic",
|
|
203
|
+
openai: "OpenAI",
|
|
204
|
+
google: "Google",
|
|
205
|
+
moonshotai: "Kimi",
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
const PROVIDER_ORDER: VeryfrontCloudProviderId[] = ["anthropic", "openai", "google", "moonshotai"];
|
|
209
|
+
|
|
210
|
+
export function groupVeryfrontCloudModelsByProvider(): Array<{
|
|
211
|
+
provider: VeryfrontCloudProviderId;
|
|
212
|
+
label: string;
|
|
213
|
+
models: VeryfrontCloudChatModel[];
|
|
214
|
+
}> {
|
|
215
|
+
return PROVIDER_ORDER.map((provider) => ({
|
|
216
|
+
provider,
|
|
217
|
+
label: PROVIDER_LABELS[provider],
|
|
218
|
+
models: VERYFRONT_CLOUD_CHAT_MODELS.filter((model) => model.provider === provider),
|
|
219
|
+
})).filter((group) => group.models.length > 0);
|
|
220
|
+
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { createError, toError } from "../../errors/veryfront-error.js";
|
|
2
|
-
import { createAnthropicModelRuntime } from "../runtime-loader.js";
|
|
3
2
|
import { tryResolve } from "../../extensions/contracts.js";
|
|
4
3
|
import type { AIProviderRegistry } from "../../extensions/interfaces/index.js";
|
|
5
4
|
import { AIProviderRegistryName } from "../../extensions/interfaces/index.js";
|
|
@@ -31,12 +30,9 @@ export function createVeryfrontCloudModel(modelId: string): ModelRuntime {
|
|
|
31
30
|
fetch,
|
|
32
31
|
});
|
|
33
32
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
name: "veryfront-cloud",
|
|
38
|
-
fetch,
|
|
39
|
-
}, upstreamModelId);
|
|
33
|
+
throw new Error(
|
|
34
|
+
"Anthropic provider not installed. Add @veryfront/ext-anthropic to use anthropic/* models via veryfront-cloud.",
|
|
35
|
+
);
|
|
40
36
|
}
|
|
41
37
|
|
|
42
38
|
case "google": {
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export type NormalizedFinishReason = string | {
|
|
2
|
-
unified: string;
|
|
3
|
-
raw: string;
|
|
4
|
-
} | null;
|
|
5
|
-
export declare function normalizeAnthropicFinishReason(raw: unknown): NormalizedFinishReason;
|
|
6
|
-
export declare function normalizeGoogleFinishReason(raw: unknown): NormalizedFinishReason;
|
|
7
|
-
export declare function normalizeOpenAIFinishReason(raw: unknown): NormalizedFinishReason;
|
|
8
|
-
export declare function normalizeOpenAIResponsesFinishReason(raw: unknown): NormalizedFinishReason;
|
|
9
|
-
//# sourceMappingURL=provider-finish-reasons.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"provider-finish-reasons.d.ts","sourceRoot":"","sources":["../../../../src/src/provider/runtime-loader/provider-finish-reasons.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC;AAEtF,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,OAAO,GAAG,sBAAsB,CAgBnF;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,OAAO,GAAG,sBAAsB,CAgBhF;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,OAAO,GAAG,sBAAsB,CAchF;AAED,wBAAgB,oCAAoC,CAAC,GAAG,EAAE,OAAO,GAAG,sBAAsB,CAczF"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
export function normalizeAnthropicFinishReason(raw) {
|
|
2
|
-
if (typeof raw !== "string") {
|
|
3
|
-
return null;
|
|
4
|
-
}
|
|
5
|
-
switch (raw) {
|
|
6
|
-
case "tool_use":
|
|
7
|
-
return { unified: "tool-calls", raw };
|
|
8
|
-
case "end_turn":
|
|
9
|
-
case "stop_sequence":
|
|
10
|
-
return { unified: "stop", raw };
|
|
11
|
-
case "max_tokens":
|
|
12
|
-
return { unified: "length", raw };
|
|
13
|
-
default:
|
|
14
|
-
return raw;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
export function normalizeGoogleFinishReason(raw) {
|
|
18
|
-
if (typeof raw !== "string") {
|
|
19
|
-
return null;
|
|
20
|
-
}
|
|
21
|
-
switch (raw) {
|
|
22
|
-
case "STOP":
|
|
23
|
-
return { unified: "stop", raw };
|
|
24
|
-
case "MAX_TOKENS":
|
|
25
|
-
return { unified: "length", raw };
|
|
26
|
-
case "SAFETY":
|
|
27
|
-
case "RECITATION":
|
|
28
|
-
return { unified: "content-filter", raw };
|
|
29
|
-
default:
|
|
30
|
-
return raw.toLowerCase();
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
export function normalizeOpenAIFinishReason(raw) {
|
|
34
|
-
if (typeof raw !== "string") {
|
|
35
|
-
return null;
|
|
36
|
-
}
|
|
37
|
-
if (raw === "tool_calls") {
|
|
38
|
-
return { unified: "tool-calls", raw };
|
|
39
|
-
}
|
|
40
|
-
if (raw === "content_filter") {
|
|
41
|
-
return { unified: "content-filter", raw };
|
|
42
|
-
}
|
|
43
|
-
return raw;
|
|
44
|
-
}
|
|
45
|
-
export function normalizeOpenAIResponsesFinishReason(raw) {
|
|
46
|
-
if (typeof raw !== "string")
|
|
47
|
-
return null;
|
|
48
|
-
switch (raw) {
|
|
49
|
-
case "completed":
|
|
50
|
-
return { unified: "stop", raw };
|
|
51
|
-
case "incomplete":
|
|
52
|
-
return { unified: "length", raw };
|
|
53
|
-
case "failed":
|
|
54
|
-
return { unified: "error", raw };
|
|
55
|
-
case "in_progress":
|
|
56
|
-
return null;
|
|
57
|
-
default:
|
|
58
|
-
return raw;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
export type NormalizedFinishReason = string | { unified: string; raw: string } | null;
|
|
2
|
-
|
|
3
|
-
export function normalizeAnthropicFinishReason(raw: unknown): NormalizedFinishReason {
|
|
4
|
-
if (typeof raw !== "string") {
|
|
5
|
-
return null;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
switch (raw) {
|
|
9
|
-
case "tool_use":
|
|
10
|
-
return { unified: "tool-calls", raw };
|
|
11
|
-
case "end_turn":
|
|
12
|
-
case "stop_sequence":
|
|
13
|
-
return { unified: "stop", raw };
|
|
14
|
-
case "max_tokens":
|
|
15
|
-
return { unified: "length", raw };
|
|
16
|
-
default:
|
|
17
|
-
return raw;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export function normalizeGoogleFinishReason(raw: unknown): NormalizedFinishReason {
|
|
22
|
-
if (typeof raw !== "string") {
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
switch (raw) {
|
|
27
|
-
case "STOP":
|
|
28
|
-
return { unified: "stop", raw };
|
|
29
|
-
case "MAX_TOKENS":
|
|
30
|
-
return { unified: "length", raw };
|
|
31
|
-
case "SAFETY":
|
|
32
|
-
case "RECITATION":
|
|
33
|
-
return { unified: "content-filter", raw };
|
|
34
|
-
default:
|
|
35
|
-
return raw.toLowerCase();
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export function normalizeOpenAIFinishReason(raw: unknown): NormalizedFinishReason {
|
|
40
|
-
if (typeof raw !== "string") {
|
|
41
|
-
return null;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
if (raw === "tool_calls") {
|
|
45
|
-
return { unified: "tool-calls", raw };
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
if (raw === "content_filter") {
|
|
49
|
-
return { unified: "content-filter", raw };
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
return raw;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export function normalizeOpenAIResponsesFinishReason(raw: unknown): NormalizedFinishReason {
|
|
56
|
-
if (typeof raw !== "string") return null;
|
|
57
|
-
switch (raw) {
|
|
58
|
-
case "completed":
|
|
59
|
-
return { unified: "stop", raw };
|
|
60
|
-
case "incomplete":
|
|
61
|
-
return { unified: "length", raw };
|
|
62
|
-
case "failed":
|
|
63
|
-
return { unified: "error", raw };
|
|
64
|
-
case "in_progress":
|
|
65
|
-
return null;
|
|
66
|
-
default:
|
|
67
|
-
return raw;
|
|
68
|
-
}
|
|
69
|
-
}
|