@shop-os/modelkit 0.2.6 → 0.2.8

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.cjs CHANGED
@@ -2985,7 +2985,7 @@ function createTextSteps(initial, resolve, callerProviderOptions) {
2985
2985
  }
2986
2986
 
2987
2987
  // src/client.ts
2988
- var import_ai2 = require("ai");
2988
+ var import_ai3 = require("ai");
2989
2989
  var import_zod6 = require("zod");
2990
2990
 
2991
2991
  // src/adapters/media-ref.ts
@@ -3067,10 +3067,12 @@ function toGeneratedImage(image) {
3067
3067
  var import_anthropic = require("@ai-sdk/anthropic");
3068
3068
  var import_google = require("@ai-sdk/google");
3069
3069
  var import_openai = require("@ai-sdk/openai");
3070
+ var import_openai_compatible = require("@ai-sdk/openai-compatible");
3070
3071
  var import_perplexity = require("@ai-sdk/perplexity");
3071
3072
  var import_xai = require("@ai-sdk/xai");
3072
3073
  var import_deepseek = require("@ai-sdk/deepseek");
3073
3074
  var import_moonshotai = require("@ai-sdk/moonshotai");
3075
+ var import_ai2 = require("ai");
3074
3076
  var import_zod5 = require("zod");
3075
3077
  var TEXT_PROVIDERS = [
3076
3078
  "openai",
@@ -3198,6 +3200,40 @@ function missingKey(ctx, name) {
3198
3200
  retryable: false
3199
3201
  });
3200
3202
  }
3203
+ function minimaxDefaults(params) {
3204
+ return params.responseFormat?.type === "json" ? { reasoning_split: true, thinking: { type: "disabled" } } : { reasoning_split: true };
3205
+ }
3206
+ var JSON_FENCE = /^\s*```(?:json)?\s*\n?([\s\S]*?)\n?\s*```\s*$/;
3207
+ function stripJsonFence(text2) {
3208
+ const match = JSON_FENCE.exec(text2);
3209
+ return match?.[1] ?? text2;
3210
+ }
3211
+ function minimaxMiddleware(providerName) {
3212
+ return {
3213
+ specificationVersion: "v3",
3214
+ transformParams: async ({ params }) => {
3215
+ if (providerName !== "minimax") return params;
3216
+ const existing = params.providerOptions?.[providerName] ?? {};
3217
+ return {
3218
+ ...params,
3219
+ providerOptions: {
3220
+ ...params.providerOptions,
3221
+ [providerName]: { ...minimaxDefaults(params), ...existing }
3222
+ }
3223
+ };
3224
+ },
3225
+ wrapGenerate: async ({ doGenerate, params }) => {
3226
+ const result = await doGenerate();
3227
+ if (providerName !== "minimax" || params.responseFormat?.type !== "json") return result;
3228
+ return {
3229
+ ...result,
3230
+ content: result.content.map(
3231
+ (part) => part.type === "text" ? { ...part, text: stripJsonFence(part.text) } : part
3232
+ )
3233
+ };
3234
+ }
3235
+ };
3236
+ }
3201
3237
  var aiSdkTextAdapter = {
3202
3238
  id: "ai-sdk-text",
3203
3239
  languageModel(ctx) {
@@ -3220,11 +3256,22 @@ var aiSdkTextAdapter = {
3220
3256
  return (0, import_deepseek.createDeepSeek)(settings)(route2.modelId);
3221
3257
  case "moonshot":
3222
3258
  return (0, import_moonshotai.createMoonshotAI)(settings)(route2.modelId);
3223
- case "openai-compatible":
3224
- return (0, import_openai.createOpenAI)({
3225
- ...settings,
3226
- name: route2.provider
3227
- }).chat(route2.modelId);
3259
+ case "openai-compatible": {
3260
+ const model = (0, import_openai_compatible.createOpenAICompatible)({
3261
+ name: route2.provider,
3262
+ apiKey,
3263
+ baseURL: route2.baseURL,
3264
+ fetch: ctx.fetch,
3265
+ ...route2.headers ? { headers: route2.headers } : {}
3266
+ })(route2.modelId);
3267
+ return (0, import_ai2.wrapLanguageModel)({
3268
+ model,
3269
+ middleware: [
3270
+ minimaxMiddleware(route2.provider),
3271
+ (0, import_ai2.extractReasoningMiddleware)({ tagName: "think" })
3272
+ ]
3273
+ });
3274
+ }
3228
3275
  case "openai":
3229
3276
  return (0, import_openai.createOpenAI)(settings)(route2.modelId);
3230
3277
  }
@@ -3438,7 +3485,7 @@ function createModelKit(config, adapters) {
3438
3485
  logCoercions(logger, model.modelId, warnings);
3439
3486
  const abortSignal = combineSignals(req.abortSignal, call.signal);
3440
3487
  if (abortSignal) options.abortSignal = abortSignal;
3441
- const result = await (0, import_ai2.generateImage)(options);
3488
+ const result = await (0, import_ai3.generateImage)(options);
3442
3489
  const images = result.images.map(
3443
3490
  (file) => toGeneratedImage({ bytes: file.uint8Array, mime: file.mediaType })
3444
3491
  );
@@ -3520,7 +3567,7 @@ function createModelKit(config, adapters) {
3520
3567
  if (providerOptions) options.providerOptions = providerOptions;
3521
3568
  if (abortSignal) options.abortSignal = abortSignal;
3522
3569
  logCoercions(logger, model.modelId, warnings);
3523
- const pending = (0, import_ai2.experimental_generateVideo)(options);
3570
+ const pending = (0, import_ai3.experimental_generateVideo)(options);
3524
3571
  let settled;
3525
3572
  let failed = false;
3526
3573
  const done = pending.then(async (result) => {
@@ -3711,7 +3758,7 @@ function createModelKit(config, adapters) {
3711
3758
  (model) => textTarget(model, call),
3712
3759
  options.providerOptions
3713
3760
  );
3714
- const result = await (0, import_ai2.generateText)({
3761
+ const result = await (0, import_ai3.generateText)({
3715
3762
  ...options,
3716
3763
  ...textAbortOptions(options.abortSignal, call.signal),
3717
3764
  model: target.languageModel,
@@ -3731,7 +3778,7 @@ function createModelKit(config, adapters) {
3731
3778
  options.providerOptions
3732
3779
  );
3733
3780
  const callerOnFinish = options.onFinish;
3734
- return (0, import_ai2.streamText)({
3781
+ return (0, import_ai3.streamText)({
3735
3782
  ...options,
3736
3783
  ...textAbortOptions(options.abortSignal, call.signal),
3737
3784
  model: target.languageModel,
@@ -3753,7 +3800,7 @@ function createModelKit(config, adapters) {
3753
3800
  model: languageModel2,
3754
3801
  providerOptions: mergeTextProviderOptions(entry, options.providerOptions)
3755
3802
  };
3756
- const result = await (0, import_ai2.generateObject)(sdkOptions);
3803
+ const result = await (0, import_ai3.generateObject)(sdkOptions);
3757
3804
  await emit(withRowUnit(textUsageEvent(entry, provider, result.usage)));
3758
3805
  return result;
3759
3806
  },
@@ -3770,7 +3817,7 @@ function createModelKit(config, adapters) {
3770
3817
  await callerOnFinish?.(event);
3771
3818
  }
3772
3819
  };
3773
- return (0, import_ai2.streamObject)(sdkOptions);
3820
+ return (0, import_ai3.streamObject)(sdkOptions);
3774
3821
  }
3775
3822
  };
3776
3823
  }
@@ -5486,12 +5533,12 @@ async function prepareGoogleMediaPart(ref, mediaType, ctx) {
5486
5533
 
5487
5534
  // src/adapters/google-image.ts
5488
5535
  var import_google2 = require("@ai-sdk/google");
5489
- var import_ai3 = require("ai");
5536
+ var import_ai4 = require("ai");
5490
5537
  var import_zod11 = require("zod");
5491
5538
  var GEMINI_IMAGE_TIMEOUT_MS = 6e5;
5492
5539
  var defaultGoogleImageDeps = {
5493
5540
  createGoogleClient: (opts) => (0, import_google2.createGoogleGenerativeAI)(opts),
5494
- runTextGeneration: (opts) => (0, import_ai3.generateText)(opts)
5541
+ runTextGeneration: (opts) => (0, import_ai4.generateText)(opts)
5495
5542
  };
5496
5543
  var causeChainNodeSchema = import_zod11.z.object({
5497
5544
  message: import_zod11.z.string().optional(),
@@ -7218,13 +7265,13 @@ async function generateReplicateAudio(req, ctx, deps) {
7218
7265
  }
7219
7266
 
7220
7267
  // src/adapters/xai-video.ts
7221
- var import_ai4 = require("ai");
7268
+ var import_ai5 = require("ai");
7222
7269
  var import_xai2 = require("@ai-sdk/xai");
7223
7270
  var import_zod15 = require("zod");
7224
7271
  var POLL_INTERVAL_MS2 = 1e4;
7225
7272
  var POLL_TIMEOUT_MS2 = 15 * 6e4;
7226
7273
  var defaultXaiDeps = {
7227
- createXaiClient: () => ({ generateVideo: import_ai4.experimental_generateVideo })
7274
+ createXaiClient: () => ({ generateVideo: import_ai5.experimental_generateVideo })
7228
7275
  };
7229
7276
  function createXaiVideoAdapter(deps = defaultXaiDeps) {
7230
7277
  return {