@shop-os/modelkit 0.3.5 → 0.3.7
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 +19 -0
- package/dist/catalog.cjs +48 -3
- package/dist/catalog.cjs.map +1 -1
- package/dist/catalog.js +48 -3
- package/dist/catalog.js.map +1 -1
- package/dist/index.cjs +86 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +86 -15
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ImageModel, experimental_generateVideo, generateText as generateText$1, LanguageModel, FlexibleSchema, InferSchema, ToolSet, Output, streamText as streamText$1, JSONValue, generateObject as generateObject$1, streamObject as streamObject$1, LanguageModelUsage } from 'ai';
|
|
1
|
+
import { ImageModel, experimental_generateVideo, generateText as generateText$1, LanguageModel, FlexibleSchema, InferSchema, ToolSet, Output, streamText as streamText$1, JSONValue, generateObject as generateObject$1, streamObject as streamObject$1, LanguageModelUsage, ProviderMetadata } from 'ai';
|
|
2
2
|
export * from 'ai';
|
|
3
3
|
export { Warning as AiWarning } from 'ai';
|
|
4
4
|
import { z } from 'zod';
|
|
@@ -1302,7 +1302,7 @@ declare function mergeTextProviderOptions(catalog: CatalogModel, caller: AiTextP
|
|
|
1302
1302
|
*/
|
|
1303
1303
|
declare function passthroughTextModel(model: TextModelInstance): CatalogModel;
|
|
1304
1304
|
/** Canonical token usage for a completed text call. Quantity is total tokens. */
|
|
1305
|
-
declare function textUsageEvent(model: CatalogModel, provider: string, usage: LanguageModelUsage): UsageEvent;
|
|
1305
|
+
declare function textUsageEvent(model: CatalogModel, provider: string, usage: LanguageModelUsage, providerMetadata?: ProviderMetadata): UsageEvent;
|
|
1306
1306
|
|
|
1307
1307
|
/** The SDK's streamText option union; `experimental_prepareStep` is a generateText-only alias. */
|
|
1308
1308
|
type StreamTextCallOptions<TOOLS extends ToolSet, OUTPUT extends Output.Output = Output.Output<string, string, never>> = ModelkitStreamTextOptions<TOOLS, OUTPUT> & {
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ImageModel, experimental_generateVideo, generateText as generateText$1, LanguageModel, FlexibleSchema, InferSchema, ToolSet, Output, streamText as streamText$1, JSONValue, generateObject as generateObject$1, streamObject as streamObject$1, LanguageModelUsage } from 'ai';
|
|
1
|
+
import { ImageModel, experimental_generateVideo, generateText as generateText$1, LanguageModel, FlexibleSchema, InferSchema, ToolSet, Output, streamText as streamText$1, JSONValue, generateObject as generateObject$1, streamObject as streamObject$1, LanguageModelUsage, ProviderMetadata } from 'ai';
|
|
2
2
|
export * from 'ai';
|
|
3
3
|
export { Warning as AiWarning } from 'ai';
|
|
4
4
|
import { z } from 'zod';
|
|
@@ -1302,7 +1302,7 @@ declare function mergeTextProviderOptions(catalog: CatalogModel, caller: AiTextP
|
|
|
1302
1302
|
*/
|
|
1303
1303
|
declare function passthroughTextModel(model: TextModelInstance): CatalogModel;
|
|
1304
1304
|
/** Canonical token usage for a completed text call. Quantity is total tokens. */
|
|
1305
|
-
declare function textUsageEvent(model: CatalogModel, provider: string, usage: LanguageModelUsage): UsageEvent;
|
|
1305
|
+
declare function textUsageEvent(model: CatalogModel, provider: string, usage: LanguageModelUsage, providerMetadata?: ProviderMetadata): UsageEvent;
|
|
1306
1306
|
|
|
1307
1307
|
/** The SDK's streamText option union; `experimental_prepareStep` is a generateText-only alias. */
|
|
1308
1308
|
type StreamTextCallOptions<TOOLS extends ToolSet, OUTPUT extends Output.Output = Output.Output<string, string, never>> = ModelkitStreamTextOptions<TOOLS, OUTPUT> & {
|
package/dist/index.js
CHANGED
|
@@ -1191,12 +1191,18 @@ var TEXT_MODELS = [
|
|
|
1191
1191
|
contextWindow: 1048576
|
|
1192
1192
|
}
|
|
1193
1193
|
}),
|
|
1194
|
+
// Perplexity stopped serving Sonar Chat Completions on 2026-09-27; @ai-sdk/perplexity 3.1
|
|
1195
|
+
// speaks the Agent API, which rejects the bare `sonar*` ids. Its migration guide maps Sonar
|
|
1196
|
+
// and Sonar Pro to the `fast` preset and Sonar Reasoning Pro to `low`
|
|
1197
|
+
// (docs.perplexity.ai/docs/agent-api/migrate-from-sonar/overview).
|
|
1194
1198
|
text("sonar", "Sonar", "sonar", {
|
|
1199
|
+
lifecycle: "deprecated",
|
|
1200
|
+
replacedBy: "perplexity/sonar",
|
|
1195
1201
|
exposure: [],
|
|
1196
1202
|
display: {
|
|
1197
1203
|
provider: "perplexity",
|
|
1198
1204
|
costTier: 1,
|
|
1199
|
-
description: "Perplexity Sonar
|
|
1205
|
+
description: "Perplexity Sonar on Chat Completions, which Perplexity stopped serving on 2026-09-27; calls now fail."
|
|
1200
1206
|
},
|
|
1201
1207
|
capabilities: {
|
|
1202
1208
|
vision: true,
|
|
@@ -1204,11 +1210,13 @@ var TEXT_MODELS = [
|
|
|
1204
1210
|
}
|
|
1205
1211
|
}),
|
|
1206
1212
|
text("sonar-pro", "Sonar Pro", "sonar-pro", {
|
|
1213
|
+
lifecycle: "deprecated",
|
|
1214
|
+
replacedBy: "perplexity/fast",
|
|
1207
1215
|
exposure: [],
|
|
1208
1216
|
display: {
|
|
1209
1217
|
provider: "perplexity",
|
|
1210
1218
|
costTier: 2,
|
|
1211
|
-
description: "Perplexity Sonar Pro
|
|
1219
|
+
description: "Perplexity Sonar Pro on Chat Completions, which Perplexity stopped serving on 2026-09-27; calls now fail."
|
|
1212
1220
|
},
|
|
1213
1221
|
capabilities: {
|
|
1214
1222
|
vision: true,
|
|
@@ -1216,12 +1224,49 @@ var TEXT_MODELS = [
|
|
|
1216
1224
|
}
|
|
1217
1225
|
}),
|
|
1218
1226
|
text("sonar-reasoning-pro", "Sonar Reasoning Pro", "sonar-reasoning-pro", {
|
|
1227
|
+
lifecycle: "deprecated",
|
|
1228
|
+
replacedBy: "perplexity/fast",
|
|
1219
1229
|
exposure: [],
|
|
1220
1230
|
display: {
|
|
1221
1231
|
provider: "perplexity",
|
|
1222
1232
|
costTier: 2,
|
|
1223
|
-
description: "Perplexity Sonar Reasoning Pro
|
|
1233
|
+
description: "Perplexity Sonar Reasoning Pro on Chat Completions, which Perplexity stopped serving on 2026-09-27; calls now fail."
|
|
1234
|
+
},
|
|
1235
|
+
capabilities: {
|
|
1236
|
+
vision: true,
|
|
1237
|
+
contextWindow: 128e3
|
|
1238
|
+
}
|
|
1239
|
+
}),
|
|
1240
|
+
// Sonar as an Agent API model. A bare model searches only when given the web_search
|
|
1241
|
+
// tool, so the row sends it on every call; the answer's sources come from its results.
|
|
1242
|
+
text("perplexity/sonar", "Perplexity Sonar", "perplexity/sonar", {
|
|
1243
|
+
exposure: [],
|
|
1244
|
+
providerOptions: {
|
|
1245
|
+
modelkit: { provider: "perplexity" },
|
|
1246
|
+
perplexity: { tools: [{ type: "web_search" }] }
|
|
1247
|
+
},
|
|
1248
|
+
display: {
|
|
1249
|
+
provider: "perplexity",
|
|
1250
|
+
costTier: 1,
|
|
1251
|
+
description: "Perplexity Sonar on the Agent API with web search, returning answers grounded in cited sources."
|
|
1252
|
+
},
|
|
1253
|
+
// Perplexity publishes no Agent API context window; Sonar's own is 128K.
|
|
1254
|
+
capabilities: {
|
|
1255
|
+
vision: true,
|
|
1256
|
+
contextWindow: 128e3
|
|
1257
|
+
}
|
|
1258
|
+
}),
|
|
1259
|
+
// The Agent API `fast` preset: openai/gpt-5.6-luna with one web search, Perplexity's
|
|
1260
|
+
// recommended replacement for Sonar and Sonar Pro.
|
|
1261
|
+
text("perplexity/fast", "Perplexity Fast", "fast", {
|
|
1262
|
+
exposure: [],
|
|
1263
|
+
providerOptions: { modelkit: { provider: "perplexity" } },
|
|
1264
|
+
display: {
|
|
1265
|
+
provider: "perplexity",
|
|
1266
|
+
costTier: 1,
|
|
1267
|
+
description: "Perplexity Agent API fast preset: a quick web-grounded answer from one search."
|
|
1224
1268
|
},
|
|
1269
|
+
// No published preset window; Sonar's 128K, the size the preset replaces.
|
|
1225
1270
|
capabilities: {
|
|
1226
1271
|
vision: true,
|
|
1227
1272
|
contextWindow: 128e3
|
|
@@ -2923,7 +2968,7 @@ function detectTextProvider(modelId) {
|
|
|
2923
2968
|
if (id.startsWith("claude") || id.includes("anthropic.")) return "anthropic";
|
|
2924
2969
|
if (id.startsWith("gemini") || id.startsWith("gemma")) return "google";
|
|
2925
2970
|
if (id.startsWith("grok")) return "xai";
|
|
2926
|
-
if (id.startsWith("sonar")) return "perplexity";
|
|
2971
|
+
if (id.startsWith("sonar") || id.startsWith("perplexity/")) return "perplexity";
|
|
2927
2972
|
if (id.startsWith("deepseek")) return "deepseek";
|
|
2928
2973
|
if (id.startsWith("kimi") || id.startsWith("moonshot")) return "moonshot";
|
|
2929
2974
|
if (id.startsWith("minimax")) return "minimax";
|
|
@@ -6706,6 +6751,7 @@ var openaiImageAdapter = {
|
|
|
6706
6751
|
|
|
6707
6752
|
// src/adapters/prodia.ts
|
|
6708
6753
|
var PRODIA_JOB_URL = "https://inference.prodia.com/v2/job";
|
|
6754
|
+
var FLUX_2_PRO_T2I_JOB = "inference.flux-2.pro.txt2img.v1";
|
|
6709
6755
|
var FLUX_2_PRO_JOB = "inference.flux-2.pro.img2img.v1";
|
|
6710
6756
|
var FLUX_KLEIN_T2I_JOB = "inference.flux-2.klein.txt2img.v1";
|
|
6711
6757
|
var FLUX_KLEIN_I2I_JOB = "inference.flux-2.klein.img2img.v1";
|
|
@@ -6878,7 +6924,7 @@ async function generateProdiaImage(req, ctx) {
|
|
|
6878
6924
|
safety_tolerance: 5
|
|
6879
6925
|
};
|
|
6880
6926
|
if (req.seed !== void 0) config.seed = req.seed;
|
|
6881
|
-
job = { type: FLUX_2_PRO_JOB, config };
|
|
6927
|
+
job = { type: refs.length > 0 ? FLUX_2_PRO_JOB : FLUX_2_PRO_T2I_JOB, config };
|
|
6882
6928
|
inputs = refs;
|
|
6883
6929
|
accept = "image/png";
|
|
6884
6930
|
mime = "image/png";
|
|
@@ -8769,6 +8815,7 @@ function keysFromEnv(env, prefix = "") {
|
|
|
8769
8815
|
|
|
8770
8816
|
// src/text.ts
|
|
8771
8817
|
import "ai";
|
|
8818
|
+
import { z as z22 } from "zod";
|
|
8772
8819
|
function mergeTextProviderOptions(catalog, caller) {
|
|
8773
8820
|
const merged = {};
|
|
8774
8821
|
const catalogOptions = catalog.providerOptions ?? {};
|
|
@@ -8807,11 +8854,18 @@ function passthroughTextModel(model) {
|
|
|
8807
8854
|
pricingKind: "token"
|
|
8808
8855
|
};
|
|
8809
8856
|
}
|
|
8810
|
-
|
|
8857
|
+
var perplexityCostSchema = z22.object({
|
|
8858
|
+
perplexity: z22.object({ cost: z22.object({ totalCost: z22.number().finite().nonnegative() }) })
|
|
8859
|
+
});
|
|
8860
|
+
function reportedCostUsd(metadata) {
|
|
8861
|
+
const parsed = perplexityCostSchema.safeParse(metadata);
|
|
8862
|
+
return parsed.success ? parsed.data.perplexity.cost.totalCost : void 0;
|
|
8863
|
+
}
|
|
8864
|
+
function textUsageEvent(model, provider, usage2, providerMetadata) {
|
|
8811
8865
|
const inputTokens = usage2.inputTokens ?? 0;
|
|
8812
8866
|
const outputTokens = usage2.outputTokens ?? 0;
|
|
8813
8867
|
const total = usage2.totalTokens ?? inputTokens + outputTokens;
|
|
8814
|
-
|
|
8868
|
+
const event = {
|
|
8815
8869
|
model: model.id,
|
|
8816
8870
|
provider,
|
|
8817
8871
|
modality: "TEXT",
|
|
@@ -8820,6 +8874,9 @@ function textUsageEvent(model, provider, usage2) {
|
|
|
8820
8874
|
inputTokens,
|
|
8821
8875
|
outputTokens
|
|
8822
8876
|
};
|
|
8877
|
+
const cost = reportedCostUsd(providerMetadata);
|
|
8878
|
+
if (cost !== void 0) event.reportedCostUsd = cost;
|
|
8879
|
+
return event;
|
|
8823
8880
|
}
|
|
8824
8881
|
|
|
8825
8882
|
// src/text-steps.ts
|
|
@@ -8846,12 +8903,20 @@ function createTextSteps(initial, resolve, callerProviderOptions) {
|
|
|
8846
8903
|
const grouped = /* @__PURE__ */ new Map();
|
|
8847
8904
|
for (const [index, step] of results.entries()) {
|
|
8848
8905
|
const target = steps.get(index) ?? initial;
|
|
8849
|
-
const event = textUsageEvent(
|
|
8906
|
+
const event = textUsageEvent(
|
|
8907
|
+
target.entry,
|
|
8908
|
+
target.provider,
|
|
8909
|
+
step.usage,
|
|
8910
|
+
step.providerMetadata
|
|
8911
|
+
);
|
|
8850
8912
|
const previous = grouped.get(target.entry.id);
|
|
8851
8913
|
if (previous) {
|
|
8852
8914
|
previous.quantity += event.quantity;
|
|
8853
8915
|
previous.inputTokens = (previous.inputTokens ?? 0) + (event.inputTokens ?? 0);
|
|
8854
8916
|
previous.outputTokens = (previous.outputTokens ?? 0) + (event.outputTokens ?? 0);
|
|
8917
|
+
if (event.reportedCostUsd !== void 0) {
|
|
8918
|
+
previous.reportedCostUsd = (previous.reportedCostUsd ?? 0) + event.reportedCostUsd;
|
|
8919
|
+
}
|
|
8855
8920
|
} else {
|
|
8856
8921
|
grouped.set(target.entry.id, event);
|
|
8857
8922
|
}
|
|
@@ -8870,7 +8935,7 @@ import {
|
|
|
8870
8935
|
streamObject as aiStreamObject2,
|
|
8871
8936
|
streamText as aiStreamText2
|
|
8872
8937
|
} from "ai";
|
|
8873
|
-
import { z as
|
|
8938
|
+
import { z as z23 } from "zod";
|
|
8874
8939
|
|
|
8875
8940
|
// src/generated-image.ts
|
|
8876
8941
|
function toGeneratedImage(image) {
|
|
@@ -8952,10 +9017,10 @@ function textAbortOptions(sdk, context) {
|
|
|
8952
9017
|
if (abortSignal) return { abortSignal };
|
|
8953
9018
|
return {};
|
|
8954
9019
|
}
|
|
8955
|
-
var catalogId =
|
|
8956
|
-
var exactSize =
|
|
8957
|
-
var sdkRatio =
|
|
8958
|
-
var sizeTier =
|
|
9020
|
+
var catalogId = z23.string();
|
|
9021
|
+
var exactSize = z23.templateLiteral([z23.number(), "x", z23.number()]);
|
|
9022
|
+
var sdkRatio = z23.templateLiteral([z23.number(), ":", z23.number()]);
|
|
9023
|
+
var sizeTier = z23.enum(["512", "1K", "2K", "4K"]);
|
|
8959
9024
|
function isCatalogId(model) {
|
|
8960
9025
|
return catalogId.safeParse(model).success;
|
|
8961
9026
|
}
|
|
@@ -9524,7 +9589,9 @@ function createModelKit(config, adapters) {
|
|
|
9524
9589
|
providerOptions: mergeTextProviderOptions(entry, options.providerOptions)
|
|
9525
9590
|
};
|
|
9526
9591
|
const result = await aiGenerateObject2(sdkOptions);
|
|
9527
|
-
await emit(
|
|
9592
|
+
await emit(
|
|
9593
|
+
withRowUnit(textUsageEvent(entry, provider, result.usage, result.providerMetadata))
|
|
9594
|
+
);
|
|
9528
9595
|
return result;
|
|
9529
9596
|
},
|
|
9530
9597
|
streamObject(options, call = {}) {
|
|
@@ -9536,7 +9603,11 @@ function createModelKit(config, adapters) {
|
|
|
9536
9603
|
model: languageModel2,
|
|
9537
9604
|
providerOptions: mergeTextProviderOptions(entry, options.providerOptions),
|
|
9538
9605
|
onFinish: async (event) => {
|
|
9539
|
-
await emit(
|
|
9606
|
+
await emit(
|
|
9607
|
+
withRowUnit(
|
|
9608
|
+
textUsageEvent(entry, provider, event.usage, event.providerMetadata)
|
|
9609
|
+
)
|
|
9610
|
+
);
|
|
9540
9611
|
await callerOnFinish?.(event);
|
|
9541
9612
|
}
|
|
9542
9613
|
};
|