@umituz/web-ai 1.0.4 → 1.0.5

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
@@ -5111,6 +5111,15 @@ var BlogService = class {
5111
5111
  };
5112
5112
  }
5113
5113
  };
5114
+
5115
+ // src/content/infrastructure/utils/requestQueue.ts
5116
+ var RequestPriority = /* @__PURE__ */ ((RequestPriority2) => {
5117
+ RequestPriority2[RequestPriority2["LOW"] = 0] = "LOW";
5118
+ RequestPriority2[RequestPriority2["NORMAL"] = 1] = "NORMAL";
5119
+ RequestPriority2[RequestPriority2["HIGH"] = 2] = "HIGH";
5120
+ RequestPriority2[RequestPriority2["URGENT"] = 3] = "URGENT";
5121
+ return RequestPriority2;
5122
+ })(RequestPriority || {});
5114
5123
  async function batchRequest(requests, options = {}) {
5115
5124
  const {
5116
5125
  concurrency = 3,
@@ -5594,7 +5603,10 @@ function safeJSONParse(text, fallback, onError) {
5594
5603
  const positionMatch = error.message.match(/position (\d+)/);
5595
5604
  const position = positionMatch ? parseInt(positionMatch[1], 10) : -1;
5596
5605
  if (position > 0) {
5597
- text.substring(Math.max(0, position - 50), position + 50);
5606
+ const context = text.substring(Math.max(0, position - 50), position + 50);
5607
+ onError?.(`JSON parse error at position ${position}: "${context}"`);
5608
+ } else {
5609
+ onError?.(`JSON parse error: ${error.message}`);
5598
5610
  }
5599
5611
  }
5600
5612
  return fallback;
@@ -5621,9 +5633,23 @@ function extractJSON(text) {
5621
5633
  function parseAIResponse(response, fallback, onError) {
5622
5634
  const json = extractJSON(response);
5623
5635
  if (!json) {
5636
+ onError?.("No JSON payload found in response");
5624
5637
  return fallback;
5625
5638
  }
5626
- return safeJSONParse(json, fallback);
5639
+ return safeJSONParse(json, fallback, onError);
5640
+ }
5641
+ function isValidJSON(text) {
5642
+ const trimmed = text.trim();
5643
+ if (trimmed.length === 0) return false;
5644
+ if (!(trimmed.startsWith("{") && trimmed.endsWith("}") || trimmed.startsWith("[") && trimmed.endsWith("]"))) {
5645
+ return false;
5646
+ }
5647
+ try {
5648
+ JSON.parse(trimmed);
5649
+ return true;
5650
+ } catch {
5651
+ return false;
5652
+ }
5627
5653
  }
5628
5654
 
5629
5655
  // src/content/application/services/GenerationExecutor.ts
@@ -5684,7 +5710,48 @@ function toAIProviderConfig(config) {
5684
5710
  ...pruna ? { pruna } : {}
5685
5711
  };
5686
5712
  }
5687
- var buildServices = (configOrGenerator) => {
5713
+ var buildServices = (configOrGenerator, model, customGenerator) => {
5714
+ if (customGenerator) {
5715
+ const executor2 = new GenerationExecutor(customGenerator);
5716
+ const emptyFactory = new ProviderFactory({
5717
+ priority: [],
5718
+ fallbackEnabled: false
5719
+ });
5720
+ return {
5721
+ providerFactory: emptyFactory,
5722
+ blogService: new BlogService(executor2),
5723
+ socialService: new SocialService(executor2),
5724
+ videoScriptService: new VideoScriptService(executor2),
5725
+ analysisService: new AnalysisService(executor2),
5726
+ seoService: new SeoService(executor2),
5727
+ abTestService: new ABTestService(executor2),
5728
+ imagePromptService: new ImagePromptService(executor2),
5729
+ contentCalendarService: new ContentCalendarService(executor2),
5730
+ mediaGenerationService: new MediaGenerationService(emptyFactory)
5731
+ };
5732
+ }
5733
+ if (typeof configOrGenerator === "string") {
5734
+ const aiConfig = {
5735
+ anthropic: {
5736
+ apiKey: configOrGenerator,
5737
+ ...model ? { models: { balanced: model } } : {}
5738
+ }
5739
+ };
5740
+ const factory2 = createAI(aiConfig);
5741
+ const executor2 = new GenerationExecutor(factory2);
5742
+ return {
5743
+ providerFactory: factory2,
5744
+ blogService: new BlogService(executor2),
5745
+ socialService: new SocialService(executor2),
5746
+ videoScriptService: new VideoScriptService(executor2),
5747
+ analysisService: new AnalysisService(executor2),
5748
+ seoService: new SeoService(executor2),
5749
+ abTestService: new ABTestService(executor2),
5750
+ imagePromptService: new ImagePromptService(executor2),
5751
+ contentCalendarService: new ContentCalendarService(executor2),
5752
+ mediaGenerationService: new MediaGenerationService(factory2)
5753
+ };
5754
+ }
5688
5755
  if (isTextGenerator(configOrGenerator)) {
5689
5756
  const executor2 = new GenerationExecutor(configOrGenerator);
5690
5757
  const emptyFactory = new ProviderFactory({
@@ -5730,8 +5797,8 @@ var AIContentService = class {
5730
5797
  imagePromptService;
5731
5798
  contentCalendarService;
5732
5799
  mediaGenerationService;
5733
- constructor(configOrGenerator) {
5734
- const bundle = buildServices(configOrGenerator);
5800
+ constructor(configOrGenerator, model, textGenerator) {
5801
+ const bundle = buildServices(configOrGenerator, model, textGenerator);
5735
5802
  this.providerFactory = bundle.providerFactory;
5736
5803
  this.blogService = bundle.blogService;
5737
5804
  this.socialService = bundle.socialService;
@@ -6104,6 +6171,7 @@ exports.ProviderUnavailableError = ProviderUnavailableError;
6104
6171
  exports.PrunaProvider = PrunaProvider;
6105
6172
  exports.QueueExecutor = QueueExecutor;
6106
6173
  exports.RequestDeduplicator = RequestDeduplicator;
6174
+ exports.RequestPriority = RequestPriority;
6107
6175
  exports.RequestQueue = RequestQueue;
6108
6176
  exports.RetryExecutor = RetryExecutor;
6109
6177
  exports.RetryManager = RetryManager;
@@ -6132,6 +6200,7 @@ exports.asObjectArray = asObjectArray;
6132
6200
  exports.asRecord = asRecord;
6133
6201
  exports.asStringArray = asStringArray;
6134
6202
  exports.asTrimmedOptionalString = asTrimmedOptionalString;
6203
+ exports.batchRequest = batchRequest;
6135
6204
  exports.buildCacheKey = buildCacheKey;
6136
6205
  exports.buildContentRequest = buildContentRequest;
6137
6206
  exports.buildHttpStatusFallback = buildHttpStatusFallback;
@@ -6163,6 +6232,7 @@ exports.describeAIErrorType = describeAIErrorType;
6163
6232
  exports.extractContentFromSsePayload = extractContentFromSsePayload;
6164
6233
  exports.extractErrorMessageFromJsonBody = extractErrorMessageFromJsonBody;
6165
6234
  exports.extractErrorMessageFromResponse = extractErrorMessageFromResponse;
6235
+ exports.extractJSON = extractJSON;
6166
6236
  exports.extractJsonArray = extractJsonArray;
6167
6237
  exports.extractJsonCandidate = extractJsonCandidate;
6168
6238
  exports.extractJsonFromCodeFence = extractJsonFromCodeFence;
@@ -6186,11 +6256,13 @@ exports.isSseDoneMarker = isSseDoneMarker;
6186
6256
  exports.isTextProvider = isTextProvider;
6187
6257
  exports.isTextTier = isTextTier;
6188
6258
  exports.isValidApiKey = isValidApiKey;
6259
+ exports.isValidJSON = isValidJSON;
6189
6260
  exports.mapAnthropicStopReason = mapAnthropicStopReason;
6190
6261
  exports.mergeTierOverrides = mergeTierOverrides;
6191
6262
  exports.messageFormatter = messageFormatter;
6192
6263
  exports.normalizeSseChunk = normalizeSseChunk;
6193
6264
  exports.oneOfCatalog = oneOfCatalog;
6265
+ exports.parseAIResponse = parseAIResponse;
6194
6266
  exports.pollForResult = pollForResult;
6195
6267
  exports.promptToMessages = promptToMessages;
6196
6268
  exports.repairCommonJsonDefects = repairCommonJsonDefects;
@@ -6202,6 +6274,7 @@ exports.resolveModel = resolveModel;
6202
6274
  exports.resolveUserFriendlyErrorMessage = resolveUserFriendlyErrorMessage;
6203
6275
  exports.resolveUserFriendlyMessage = resolveUserFriendlyMessage;
6204
6276
  exports.retryManager = retryManager;
6277
+ exports.safeJSONParse = safeJSONParse;
6205
6278
  exports.splitSseLines = splitSseLines;
6206
6279
  exports.submitPrediction = submitPrediction;
6207
6280
  exports.throttle = throttle;