@nemesis-oss/ollama-sdk 1.17.0 → 1.18.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.cjs CHANGED
@@ -4179,7 +4179,7 @@ var SystemOneNoulQuestionSchema = zod.z.object({
4179
4179
  var SystemOneScoreQuestionSchema = zod.z.object({
4180
4180
  type: zod.z.enum(["score"]),
4181
4181
  instructions: SystemOneContentSchema,
4182
- criteria: zod.z.array(zod.z.string()).min(2).max(26)
4182
+ criteria: zod.z.array(zod.z.string()).min(2).max(10)
4183
4183
  });
4184
4184
 
4185
4185
  // src/generated/models/SystemOneRequest.schema.ts
@@ -4214,7 +4214,7 @@ var SystemOneNoulAnswerSchema = zod.z.object({
4214
4214
  });
4215
4215
  var SystemOneScoreAnswerSchema = zod.z.object({
4216
4216
  type: zod.z.enum(["score"]),
4217
- score: zod.z.number().min(0).max(25),
4217
+ score: zod.z.number().min(0).max(9),
4218
4218
  legend: zod.z.object({}).catchall(zod.z.string()),
4219
4219
  probabilities: SystemOneProbabilitiesSchema,
4220
4220
  confidence: SystemOneConfidenceSchema
@@ -5525,9 +5525,16 @@ var FailoverHttpClient = class {
5525
5525
  };
5526
5526
 
5527
5527
  // src/decision.ts
5528
+ function validateThreshold(value, name) {
5529
+ if (value === void 0) return;
5530
+ if (typeof value !== "number" || !Number.isFinite(value) || value <= 0 || value > 1) {
5531
+ throw new RangeError(`${name} must be a number in (0, 1] \u2014 got ${String(value)}`);
5532
+ }
5533
+ }
5528
5534
  function createDecision(client) {
5529
5535
  return {
5530
5536
  async choice(params) {
5537
+ validateThreshold(params.minConfidence, "minConfidence");
5531
5538
  const response = await client.systemOne({
5532
5539
  model: params.model,
5533
5540
  state: params.state,
@@ -5546,10 +5553,12 @@ function createDecision(client) {
5546
5553
  choice: answer.choice,
5547
5554
  probabilities: answer.probabilities,
5548
5555
  confidence: answer.confidence,
5556
+ ...params.minConfidence !== void 0 ? { isConfident: answer.confidence >= params.minConfidence } : {},
5549
5557
  usage: response.usage
5550
5558
  };
5551
5559
  },
5552
5560
  async noul(params) {
5561
+ validateThreshold(params.minProbability, "minProbability");
5553
5562
  const response = await client.systemOne({
5554
5563
  model: params.model,
5555
5564
  state: params.state,
@@ -5565,11 +5574,12 @@ function createDecision(client) {
5565
5574
  const answer = response.answers.decision;
5566
5575
  return {
5567
5576
  noul: answer.noul,
5568
- bool: answer.noul >= 0.5,
5577
+ bool: answer.noul >= (params.minProbability ?? 0.5),
5569
5578
  usage: response.usage
5570
5579
  };
5571
5580
  },
5572
5581
  async score(params) {
5582
+ validateThreshold(params.minConfidence, "minConfidence");
5573
5583
  const response = await client.systemOne({
5574
5584
  model: params.model,
5575
5585
  state: params.state,
@@ -5589,10 +5599,12 @@ function createDecision(client) {
5589
5599
  legend: answer.legend,
5590
5600
  probabilities: answer.probabilities,
5591
5601
  confidence: answer.confidence,
5602
+ ...params.minConfidence !== void 0 ? { isConfident: answer.confidence >= params.minConfidence } : {},
5592
5603
  usage: response.usage
5593
5604
  };
5594
5605
  },
5595
5606
  async route(params) {
5607
+ validateThreshold(params.minConfidence, "minConfidence");
5596
5608
  const response = await client.systemOne({
5597
5609
  model: params.model,
5598
5610
  state: params.state,
@@ -5609,10 +5621,12 @@ function createDecision(client) {
5609
5621
  const answer = response.answers.decision;
5610
5622
  return {
5611
5623
  route: answer.choice,
5612
- confidence: answer.confidence
5624
+ confidence: answer.confidence,
5625
+ ...params.minConfidence !== void 0 ? { isConfident: answer.confidence >= params.minConfidence } : {}
5613
5626
  };
5614
5627
  },
5615
5628
  async verify(params) {
5629
+ validateThreshold(params.minProbability, "minProbability");
5616
5630
  const state = {
5617
5631
  claim: params.claim,
5618
5632
  evidence: params.evidence
@@ -5631,11 +5645,12 @@ function createDecision(client) {
5631
5645
  });
5632
5646
  const answer = response.answers.decision;
5633
5647
  return {
5634
- verified: answer.noul >= 0.5,
5648
+ verified: answer.noul >= (params.minProbability ?? 0.5),
5635
5649
  probability: answer.noul
5636
5650
  };
5637
5651
  },
5638
5652
  async rank(params) {
5653
+ validateThreshold(params.minConfidence, "minConfidence");
5639
5654
  const promises = params.candidates.map(async (candidate) => {
5640
5655
  const response = await client.systemOne({
5641
5656
  model: params.model,
@@ -5654,7 +5669,8 @@ function createDecision(client) {
5654
5669
  return {
5655
5670
  candidate: candidate.id,
5656
5671
  score: answer.score,
5657
- confidence: answer.confidence
5672
+ confidence: answer.confidence,
5673
+ ...params.minConfidence !== void 0 ? { isConfident: answer.confidence >= params.minConfidence } : {}
5658
5674
  };
5659
5675
  });
5660
5676
  const results = await Promise.all(promises);
@@ -6786,6 +6802,64 @@ function toResponse(stream, init = {}) {
6786
6802
  return new Response(body, { ...init, headers });
6787
6803
  }
6788
6804
 
6805
+ // src/streaming/progress.ts
6806
+ function computeProgressPercent(chunk) {
6807
+ if (typeof chunk.total !== "number" || typeof chunk.completed !== "number") return void 0;
6808
+ if (chunk.total <= 0) return void 0;
6809
+ const ratio = chunk.completed / chunk.total;
6810
+ const clamped = Math.max(0, Math.min(1, ratio));
6811
+ return Math.round(clamped * 1e4) / 100;
6812
+ }
6813
+ function toPullProgressEvent(chunk) {
6814
+ return {
6815
+ status: chunk.status,
6816
+ ...chunk.digest !== void 0 ? { digest: chunk.digest } : {},
6817
+ ...chunk.total !== void 0 ? { total: chunk.total } : {},
6818
+ ...chunk.completed !== void 0 ? { completed: chunk.completed } : {},
6819
+ percent: computeProgressPercent(chunk),
6820
+ raw: chunk
6821
+ };
6822
+ }
6823
+ function createProgressSpeedTracker() {
6824
+ let epochDigest;
6825
+ let epochStartMs = 0;
6826
+ let epochStartCompleted = 0;
6827
+ return (chunk) => {
6828
+ if (typeof chunk.completed !== "number") return {};
6829
+ const digestChanged = chunk.digest !== void 0 && chunk.digest !== epochDigest;
6830
+ const regressed = chunk.completed < epochStartCompleted;
6831
+ if (digestChanged || regressed) {
6832
+ epochDigest = chunk.digest;
6833
+ epochStartMs = performance.now();
6834
+ epochStartCompleted = chunk.completed;
6835
+ return {};
6836
+ }
6837
+ const elapsedSeconds = (performance.now() - epochStartMs) / 1e3;
6838
+ if (elapsedSeconds <= 0) return {};
6839
+ const transferred = chunk.completed - epochStartCompleted;
6840
+ if (transferred <= 0) return {};
6841
+ const bytesPerSecond = transferred / elapsedSeconds;
6842
+ const etaSeconds = typeof chunk.total === "number" ? Math.max(0, (chunk.total - chunk.completed) / bytesPerSecond) : void 0;
6843
+ return { bytesPerSecond, etaSeconds };
6844
+ };
6845
+ }
6846
+ async function onProgress(stream, callback) {
6847
+ void stream.finalResult.catch(() => void 0);
6848
+ const speed = createProgressSpeedTracker();
6849
+ for await (const event of stream) {
6850
+ if (event.type === "message") {
6851
+ callback({ ...toPullProgressEvent(event.data.chunk), ...speed(event.data.chunk) });
6852
+ }
6853
+ if (event.type === "done") {
6854
+ return event.data.result;
6855
+ }
6856
+ if (event.type === "error") {
6857
+ throw event.data.error;
6858
+ }
6859
+ }
6860
+ throw new OllamaStreamError("Pull/push stream ended before reporting success");
6861
+ }
6862
+
6789
6863
  // src/streaming/observe.ts
6790
6864
  async function* observeStream(source, callbacks = {}) {
6791
6865
  const { onChunk, onError, onDone, onAbandon, onListenerError } = callbacks;
@@ -8289,11 +8363,13 @@ exports.checkGenerateContext = checkGenerateContext;
8289
8363
  exports.compactConversationHistory = compactConversationHistory;
8290
8364
  exports.compareDraftPerformance = compareDraftPerformance;
8291
8365
  exports.composeMiddleware = composeMiddleware;
8366
+ exports.computeProgressPercent = computeProgressPercent;
8292
8367
  exports.contextWarningMessage = contextWarningMessage;
8293
8368
  exports.createConsoleLogger = createConsoleLogger;
8294
8369
  exports.createDecision = createDecision;
8295
8370
  exports.createModelAffinityScheduler = createModelAffinityScheduler;
8296
8371
  exports.createOllamaCloudFreeTierQuota = createOllamaCloudFreeTierQuota;
8372
+ exports.createProgressSpeedTracker = createProgressSpeedTracker;
8297
8373
  exports.createTimeoutSignal = createTimeoutSignal;
8298
8374
  exports.createWebFetchTool = createWebFetchTool;
8299
8375
  exports.createWebSearchTool = createWebSearchTool;
@@ -8335,6 +8411,7 @@ exports.normalizeGenerateStream = normalizeGenerateStream;
8335
8411
  exports.normalizeKeepAlive = normalizeKeepAlive;
8336
8412
  exports.normalizeProgressStream = normalizeProgressStream;
8337
8413
  exports.observeStream = observeStream;
8414
+ exports.onProgress = onProgress;
8338
8415
  exports.parseFrontmatter = parseFrontmatter;
8339
8416
  exports.parseNdjsonStream = parseNdjsonStream;
8340
8417
  exports.parseSseStream = parseSseStream;
@@ -8347,6 +8424,7 @@ exports.resolveImageInput = resolveImageInput;
8347
8424
  exports.sanitizeHistoryForNextTurn = sanitizeHistoryForNextTurn;
8348
8425
  exports.setSpanError = setSpanError;
8349
8426
  exports.toDataStream = toDataStream;
8427
+ exports.toPullProgressEvent = toPullProgressEvent;
8350
8428
  exports.toResponse = toResponse;
8351
8429
  exports.toTextStream = toTextStream;
8352
8430
  exports.withRetry = withRetry;