@kelet-ai/feedback-ui 1.1.1 → 1.1.4

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.
@@ -435,7 +435,7 @@ function getLatestEvent() {
435
435
  return { ...latestEvent };
436
436
  }
437
437
  const KeletContext = createContext(null);
438
- const DefaultKeletBaseUrl = "https://api.kelet.ai/api";
438
+ const DefaultKeletBaseUrl = "https://api.kelet.ai";
439
439
  const useKelet = () => {
440
440
  const context = useContext(KeletContext);
441
441
  if (!context) {
@@ -466,23 +466,31 @@ const KeletProvider = ({ apiKey, project, baseUrl, children }) => {
466
466
  "apiKey is required either directly or from a parent KeletProvider"
467
467
  );
468
468
  }
469
+ let resolvedBaseUrl = baseUrl || DefaultKeletBaseUrl;
470
+ if (resolvedBaseUrl.endsWith("/api")) {
471
+ resolvedBaseUrl = resolvedBaseUrl.slice(0, -4);
472
+ }
473
+ if (resolvedBaseUrl.endsWith("/")) {
474
+ resolvedBaseUrl = resolvedBaseUrl.slice(0, -1);
475
+ }
469
476
  const feedback = async (data) => {
470
- const resolvedBaseUrl = baseUrl || DefaultKeletBaseUrl;
471
- const url = `${resolvedBaseUrl}/projects/${project}/signal`;
477
+ const url = `${resolvedBaseUrl}/api/projects/${project}/signal`;
472
478
  const capturedEvent = getLatestEvent();
473
479
  const metadata = {
474
- ...data.extra_metadata ?? {},
480
+ ...data.metadata ?? {},
475
481
  ...capturedEvent && { $dom_event: capturedEvent }
476
482
  };
477
483
  const req = {
478
484
  session_id: data.session_id,
479
- source: data.source || "EXPLICIT",
480
- vote: data.vote,
481
- explanation: data.explanation,
482
- correction: data.correction,
483
- selection: data.selection,
485
+ kind: data.kind,
486
+ source: data.source,
484
487
  trigger_name: data.trigger_name,
485
- metadata: Object.keys(metadata).length > 0 ? metadata : void 0
488
+ score: data.score,
489
+ value: data.value,
490
+ confidence: data.confidence,
491
+ metadata: Object.keys(metadata).length > 0 ? metadata : void 0,
492
+ timestamp: data.timestamp || (/* @__PURE__ */ new Date()).toISOString(),
493
+ trace_id: data.trace_id
486
494
  };
487
495
  const response = await fetch(url, {
488
496
  method: "POST",
@@ -528,9 +536,7 @@ const mergeProps = (slotProps, childProps) => {
528
536
  }
529
537
  return { ...slotProps, ...overrideProps };
530
538
  };
531
- const VoteFeedbackContext = createContext(
532
- null
533
- );
539
+ const VoteFeedbackContext = createContext(null);
534
540
  const useVoteFeedbackContext = () => {
535
541
  const context = useContext(VoteFeedbackContext);
536
542
  if (!context) {
@@ -545,10 +551,12 @@ const VoteFeedbackRoot = ({
545
551
  onFeedback,
546
552
  defaultText = "",
547
553
  session_id: sessionIdProp,
548
- extra_metadata,
549
- trigger_name
554
+ metadata,
555
+ trigger_name: triggerProp,
556
+ trace_id
550
557
  }) => {
551
558
  const session_id = typeof sessionIdProp === "function" ? sessionIdProp() : sessionIdProp;
559
+ const trigger_name = triggerProp || void 0;
552
560
  const [showPopover, setShowPopover] = useState(false);
553
561
  const [feedbackText, setFeedbackText] = useState(defaultText);
554
562
  const [isSubmitting, setIsSubmitting] = useState(false);
@@ -570,9 +578,12 @@ const VoteFeedbackRoot = ({
570
578
  setVote("upvote");
571
579
  const data = {
572
580
  session_id,
573
- vote: "upvote",
574
- ...extra_metadata && { extra_metadata },
575
- ...trigger_name && { trigger_name }
581
+ kind: "feedback",
582
+ source: "human",
583
+ trigger_name,
584
+ score: 1,
585
+ ...metadata && { metadata },
586
+ ...trace_id && { trace_id }
576
587
  };
577
588
  try {
578
589
  setIsSubmitting(true);
@@ -580,15 +591,18 @@ const VoteFeedbackRoot = ({
580
591
  } finally {
581
592
  setIsSubmitting(false);
582
593
  }
583
- }, [handler, session_id, extra_metadata, trigger_name]);
594
+ }, [handler, session_id, metadata, trigger_name, trace_id]);
584
595
  const handleDownvote = useCallback(async () => {
585
596
  setVote("downvote");
586
597
  if (handler) {
587
598
  const data = {
588
599
  session_id,
589
- vote: "downvote",
590
- ...extra_metadata && { extra_metadata },
591
- ...trigger_name && { trigger_name }
600
+ kind: "feedback",
601
+ source: "human",
602
+ trigger_name,
603
+ score: 0,
604
+ ...metadata && { metadata },
605
+ ...trace_id && { trace_id }
592
606
  };
593
607
  try {
594
608
  setIsSubmitting(true);
@@ -608,7 +622,7 @@ const VoteFeedbackRoot = ({
608
622
  document.body.appendChild(announcement);
609
623
  setTimeout(() => document.body.removeChild(announcement), 1e3);
610
624
  }, 0);
611
- }, [handler, session_id, extra_metadata, trigger_name]);
625
+ }, [handler, session_id, metadata, trigger_name, trace_id]);
612
626
  const handleTextareaChange = useCallback(
613
627
  (e) => {
614
628
  setFeedbackText(e.target.value);
@@ -620,10 +634,13 @@ const VoteFeedbackRoot = ({
620
634
  if (hasText) {
621
635
  const data = {
622
636
  session_id,
623
- vote: "downvote",
624
- explanation: feedbackText,
625
- ...extra_metadata && { extra_metadata },
626
- ...trigger_name && { trigger_name }
637
+ kind: "feedback",
638
+ source: "human",
639
+ trigger_name,
640
+ score: 0,
641
+ value: feedbackText,
642
+ ...metadata && { metadata },
643
+ ...trace_id && { trace_id }
627
644
  };
628
645
  try {
629
646
  setIsSubmitting(true);
@@ -648,8 +665,9 @@ const VoteFeedbackRoot = ({
648
665
  feedbackText,
649
666
  defaultText,
650
667
  session_id,
651
- extra_metadata,
652
- trigger_name
668
+ metadata,
669
+ trigger_name,
670
+ trace_id
653
671
  ]);
654
672
  const handleKeyDown = useCallback(
655
673
  (e) => {
@@ -700,8 +718,9 @@ const VoteFeedbackRoot = ({
700
718
  popoverId,
701
719
  triggerId,
702
720
  session_id,
703
- extra_metadata,
704
- trigger_name
721
+ metadata,
722
+ trigger_name,
723
+ trace_id
705
724
  };
706
725
  return /* @__PURE__ */ jsxRuntimeExports.jsx(VoteFeedbackContext.Provider, { value: contextValue, children });
707
726
  };
@@ -1337,223 +1356,6 @@ function requireDeepDiff() {
1337
1356
  return deepDiff$1.exports;
1338
1357
  }
1339
1358
  var deepDiffExports = requireDeepDiff();
1340
- var levenshtein$1 = { exports: {} };
1341
- const peq = new Uint32Array(65536);
1342
- const myers_32 = (a, b) => {
1343
- const n = a.length;
1344
- const m = b.length;
1345
- const lst = 1 << n - 1;
1346
- let pv = -1;
1347
- let mv = 0;
1348
- let sc = n;
1349
- let i = n;
1350
- while (i--) {
1351
- peq[a.charCodeAt(i)] |= 1 << i;
1352
- }
1353
- for (i = 0; i < m; i++) {
1354
- let eq = peq[b.charCodeAt(i)];
1355
- const xv = eq | mv;
1356
- eq |= (eq & pv) + pv ^ pv;
1357
- mv |= ~(eq | pv);
1358
- pv &= eq;
1359
- if (mv & lst) {
1360
- sc++;
1361
- }
1362
- if (pv & lst) {
1363
- sc--;
1364
- }
1365
- mv = mv << 1 | 1;
1366
- pv = pv << 1 | ~(xv | mv);
1367
- mv &= xv;
1368
- }
1369
- i = n;
1370
- while (i--) {
1371
- peq[a.charCodeAt(i)] = 0;
1372
- }
1373
- return sc;
1374
- };
1375
- const myers_x = (b, a) => {
1376
- const n = a.length;
1377
- const m = b.length;
1378
- const mhc = [];
1379
- const phc = [];
1380
- const hsize = Math.ceil(n / 32);
1381
- const vsize = Math.ceil(m / 32);
1382
- for (let i = 0; i < hsize; i++) {
1383
- phc[i] = -1;
1384
- mhc[i] = 0;
1385
- }
1386
- let j = 0;
1387
- for (; j < vsize - 1; j++) {
1388
- let mv2 = 0;
1389
- let pv2 = -1;
1390
- const start2 = j * 32;
1391
- const vlen2 = Math.min(32, m) + start2;
1392
- for (let k = start2; k < vlen2; k++) {
1393
- peq[b.charCodeAt(k)] |= 1 << k;
1394
- }
1395
- for (let i = 0; i < n; i++) {
1396
- const eq = peq[a.charCodeAt(i)];
1397
- const pb = phc[i / 32 | 0] >>> i & 1;
1398
- const mb = mhc[i / 32 | 0] >>> i & 1;
1399
- const xv = eq | mv2;
1400
- const xh = ((eq | mb) & pv2) + pv2 ^ pv2 | eq | mb;
1401
- let ph = mv2 | ~(xh | pv2);
1402
- let mh = pv2 & xh;
1403
- if (ph >>> 31 ^ pb) {
1404
- phc[i / 32 | 0] ^= 1 << i;
1405
- }
1406
- if (mh >>> 31 ^ mb) {
1407
- mhc[i / 32 | 0] ^= 1 << i;
1408
- }
1409
- ph = ph << 1 | pb;
1410
- mh = mh << 1 | mb;
1411
- pv2 = mh | ~(xv | ph);
1412
- mv2 = ph & xv;
1413
- }
1414
- for (let k = start2; k < vlen2; k++) {
1415
- peq[b.charCodeAt(k)] = 0;
1416
- }
1417
- }
1418
- let mv = 0;
1419
- let pv = -1;
1420
- const start = j * 32;
1421
- const vlen = Math.min(32, m - start) + start;
1422
- for (let k = start; k < vlen; k++) {
1423
- peq[b.charCodeAt(k)] |= 1 << k;
1424
- }
1425
- let score = m;
1426
- for (let i = 0; i < n; i++) {
1427
- const eq = peq[a.charCodeAt(i)];
1428
- const pb = phc[i / 32 | 0] >>> i & 1;
1429
- const mb = mhc[i / 32 | 0] >>> i & 1;
1430
- const xv = eq | mv;
1431
- const xh = ((eq | mb) & pv) + pv ^ pv | eq | mb;
1432
- let ph = mv | ~(xh | pv);
1433
- let mh = pv & xh;
1434
- score += ph >>> m - 1 & 1;
1435
- score -= mh >>> m - 1 & 1;
1436
- if (ph >>> 31 ^ pb) {
1437
- phc[i / 32 | 0] ^= 1 << i;
1438
- }
1439
- if (mh >>> 31 ^ mb) {
1440
- mhc[i / 32 | 0] ^= 1 << i;
1441
- }
1442
- ph = ph << 1 | pb;
1443
- mh = mh << 1 | mb;
1444
- pv = mh | ~(xv | ph);
1445
- mv = ph & xv;
1446
- }
1447
- for (let k = start; k < vlen; k++) {
1448
- peq[b.charCodeAt(k)] = 0;
1449
- }
1450
- return score;
1451
- };
1452
- const distance = (a, b) => {
1453
- if (a.length < b.length) {
1454
- const tmp = b;
1455
- b = a;
1456
- a = tmp;
1457
- }
1458
- if (b.length === 0) {
1459
- return a.length;
1460
- }
1461
- if (a.length <= 32) {
1462
- return myers_32(a, b);
1463
- }
1464
- return myers_x(a, b);
1465
- };
1466
- const closest = (str, arr) => {
1467
- let min_distance = Infinity;
1468
- let min_index = 0;
1469
- for (let i = 0; i < arr.length; i++) {
1470
- const dist = distance(str, arr[i]);
1471
- if (dist < min_distance) {
1472
- min_distance = dist;
1473
- min_index = i;
1474
- }
1475
- }
1476
- return arr[min_index];
1477
- };
1478
- const mod = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1479
- __proto__: null,
1480
- closest,
1481
- distance
1482
- }, Symbol.toStringTag, { value: "Module" }));
1483
- const require$$0 = /* @__PURE__ */ getAugmentedNamespace(mod);
1484
- var hasRequiredLevenshtein;
1485
- function requireLevenshtein() {
1486
- if (hasRequiredLevenshtein) return levenshtein$1.exports;
1487
- hasRequiredLevenshtein = 1;
1488
- (function(module, exports) {
1489
- (function() {
1490
- var collator;
1491
- try {
1492
- collator = typeof Intl !== "undefined" && typeof Intl.Collator !== "undefined" ? Intl.Collator("generic", { sensitivity: "base" }) : null;
1493
- } catch (err) {
1494
- console.log("Collator could not be initialized and wouldn't be used");
1495
- }
1496
- var levenshtein2 = require$$0;
1497
- var prevRow = [], str2Char = [];
1498
- var Levenshtein = {
1499
- /**
1500
- * Calculate levenshtein distance of the two strings.
1501
- *
1502
- * @param str1 String the first string.
1503
- * @param str2 String the second string.
1504
- * @param [options] Additional options.
1505
- * @param [options.useCollator] Use `Intl.Collator` for locale-sensitive string comparison.
1506
- * @return Integer the levenshtein distance (0 and above).
1507
- */
1508
- get: function(str1, str2, options) {
1509
- var useCollator = options && collator && options.useCollator;
1510
- if (useCollator) {
1511
- var str1Len = str1.length, str2Len = str2.length;
1512
- if (str1Len === 0) return str2Len;
1513
- if (str2Len === 0) return str1Len;
1514
- var curCol, nextCol, i, j, tmp;
1515
- for (i = 0; i < str2Len; ++i) {
1516
- prevRow[i] = i;
1517
- str2Char[i] = str2.charCodeAt(i);
1518
- }
1519
- prevRow[str2Len] = str2Len;
1520
- var strCmp;
1521
- for (i = 0; i < str1Len; ++i) {
1522
- nextCol = i + 1;
1523
- for (j = 0; j < str2Len; ++j) {
1524
- curCol = nextCol;
1525
- strCmp = 0 === collator.compare(str1.charAt(i), String.fromCharCode(str2Char[j]));
1526
- nextCol = prevRow[j] + (strCmp ? 0 : 1);
1527
- tmp = curCol + 1;
1528
- if (nextCol > tmp) {
1529
- nextCol = tmp;
1530
- }
1531
- tmp = prevRow[j + 1] + 1;
1532
- if (nextCol > tmp) {
1533
- nextCol = tmp;
1534
- }
1535
- prevRow[j] = curCol;
1536
- }
1537
- prevRow[j] = nextCol;
1538
- }
1539
- return nextCol;
1540
- }
1541
- return levenshtein2.distance(str1, str2);
1542
- }
1543
- };
1544
- if (module !== null && true && module.exports === exports) {
1545
- module.exports = Levenshtein;
1546
- } else if (typeof self !== "undefined" && typeof self.postMessage === "function" && typeof self.importScripts === "function") {
1547
- self.Levenshtein = Levenshtein;
1548
- } else if (typeof window !== "undefined" && window !== null) {
1549
- window.Levenshtein = Levenshtein;
1550
- }
1551
- })();
1552
- })(levenshtein$1, levenshtein$1.exports);
1553
- return levenshtein$1.exports;
1554
- }
1555
- var levenshteinExports = requireLevenshtein();
1556
- const levenshtein = /* @__PURE__ */ getDefaultExportFromCjs(levenshteinExports);
1557
1359
  class Diff {
1558
1360
  diff(oldStr, newStr, options = {}) {
1559
1361
  let callback;
@@ -1963,6 +1765,223 @@ function splitLines(text) {
1963
1765
  }
1964
1766
  return result;
1965
1767
  }
1768
+ var levenshtein$1 = { exports: {} };
1769
+ const peq = new Uint32Array(65536);
1770
+ const myers_32 = (a, b) => {
1771
+ const n = a.length;
1772
+ const m = b.length;
1773
+ const lst = 1 << n - 1;
1774
+ let pv = -1;
1775
+ let mv = 0;
1776
+ let sc = n;
1777
+ let i = n;
1778
+ while (i--) {
1779
+ peq[a.charCodeAt(i)] |= 1 << i;
1780
+ }
1781
+ for (i = 0; i < m; i++) {
1782
+ let eq = peq[b.charCodeAt(i)];
1783
+ const xv = eq | mv;
1784
+ eq |= (eq & pv) + pv ^ pv;
1785
+ mv |= ~(eq | pv);
1786
+ pv &= eq;
1787
+ if (mv & lst) {
1788
+ sc++;
1789
+ }
1790
+ if (pv & lst) {
1791
+ sc--;
1792
+ }
1793
+ mv = mv << 1 | 1;
1794
+ pv = pv << 1 | ~(xv | mv);
1795
+ mv &= xv;
1796
+ }
1797
+ i = n;
1798
+ while (i--) {
1799
+ peq[a.charCodeAt(i)] = 0;
1800
+ }
1801
+ return sc;
1802
+ };
1803
+ const myers_x = (b, a) => {
1804
+ const n = a.length;
1805
+ const m = b.length;
1806
+ const mhc = [];
1807
+ const phc = [];
1808
+ const hsize = Math.ceil(n / 32);
1809
+ const vsize = Math.ceil(m / 32);
1810
+ for (let i = 0; i < hsize; i++) {
1811
+ phc[i] = -1;
1812
+ mhc[i] = 0;
1813
+ }
1814
+ let j = 0;
1815
+ for (; j < vsize - 1; j++) {
1816
+ let mv2 = 0;
1817
+ let pv2 = -1;
1818
+ const start2 = j * 32;
1819
+ const vlen2 = Math.min(32, m) + start2;
1820
+ for (let k = start2; k < vlen2; k++) {
1821
+ peq[b.charCodeAt(k)] |= 1 << k;
1822
+ }
1823
+ for (let i = 0; i < n; i++) {
1824
+ const eq = peq[a.charCodeAt(i)];
1825
+ const pb = phc[i / 32 | 0] >>> i & 1;
1826
+ const mb = mhc[i / 32 | 0] >>> i & 1;
1827
+ const xv = eq | mv2;
1828
+ const xh = ((eq | mb) & pv2) + pv2 ^ pv2 | eq | mb;
1829
+ let ph = mv2 | ~(xh | pv2);
1830
+ let mh = pv2 & xh;
1831
+ if (ph >>> 31 ^ pb) {
1832
+ phc[i / 32 | 0] ^= 1 << i;
1833
+ }
1834
+ if (mh >>> 31 ^ mb) {
1835
+ mhc[i / 32 | 0] ^= 1 << i;
1836
+ }
1837
+ ph = ph << 1 | pb;
1838
+ mh = mh << 1 | mb;
1839
+ pv2 = mh | ~(xv | ph);
1840
+ mv2 = ph & xv;
1841
+ }
1842
+ for (let k = start2; k < vlen2; k++) {
1843
+ peq[b.charCodeAt(k)] = 0;
1844
+ }
1845
+ }
1846
+ let mv = 0;
1847
+ let pv = -1;
1848
+ const start = j * 32;
1849
+ const vlen = Math.min(32, m - start) + start;
1850
+ for (let k = start; k < vlen; k++) {
1851
+ peq[b.charCodeAt(k)] |= 1 << k;
1852
+ }
1853
+ let score = m;
1854
+ for (let i = 0; i < n; i++) {
1855
+ const eq = peq[a.charCodeAt(i)];
1856
+ const pb = phc[i / 32 | 0] >>> i & 1;
1857
+ const mb = mhc[i / 32 | 0] >>> i & 1;
1858
+ const xv = eq | mv;
1859
+ const xh = ((eq | mb) & pv) + pv ^ pv | eq | mb;
1860
+ let ph = mv | ~(xh | pv);
1861
+ let mh = pv & xh;
1862
+ score += ph >>> m - 1 & 1;
1863
+ score -= mh >>> m - 1 & 1;
1864
+ if (ph >>> 31 ^ pb) {
1865
+ phc[i / 32 | 0] ^= 1 << i;
1866
+ }
1867
+ if (mh >>> 31 ^ mb) {
1868
+ mhc[i / 32 | 0] ^= 1 << i;
1869
+ }
1870
+ ph = ph << 1 | pb;
1871
+ mh = mh << 1 | mb;
1872
+ pv = mh | ~(xv | ph);
1873
+ mv = ph & xv;
1874
+ }
1875
+ for (let k = start; k < vlen; k++) {
1876
+ peq[b.charCodeAt(k)] = 0;
1877
+ }
1878
+ return score;
1879
+ };
1880
+ const distance = (a, b) => {
1881
+ if (a.length < b.length) {
1882
+ const tmp = b;
1883
+ b = a;
1884
+ a = tmp;
1885
+ }
1886
+ if (b.length === 0) {
1887
+ return a.length;
1888
+ }
1889
+ if (a.length <= 32) {
1890
+ return myers_32(a, b);
1891
+ }
1892
+ return myers_x(a, b);
1893
+ };
1894
+ const closest = (str, arr) => {
1895
+ let min_distance = Infinity;
1896
+ let min_index = 0;
1897
+ for (let i = 0; i < arr.length; i++) {
1898
+ const dist = distance(str, arr[i]);
1899
+ if (dist < min_distance) {
1900
+ min_distance = dist;
1901
+ min_index = i;
1902
+ }
1903
+ }
1904
+ return arr[min_index];
1905
+ };
1906
+ const mod = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1907
+ __proto__: null,
1908
+ closest,
1909
+ distance
1910
+ }, Symbol.toStringTag, { value: "Module" }));
1911
+ const require$$0 = /* @__PURE__ */ getAugmentedNamespace(mod);
1912
+ var hasRequiredLevenshtein;
1913
+ function requireLevenshtein() {
1914
+ if (hasRequiredLevenshtein) return levenshtein$1.exports;
1915
+ hasRequiredLevenshtein = 1;
1916
+ (function(module, exports) {
1917
+ (function() {
1918
+ var collator;
1919
+ try {
1920
+ collator = typeof Intl !== "undefined" && typeof Intl.Collator !== "undefined" ? Intl.Collator("generic", { sensitivity: "base" }) : null;
1921
+ } catch (err) {
1922
+ console.log("Collator could not be initialized and wouldn't be used");
1923
+ }
1924
+ var levenshtein2 = require$$0;
1925
+ var prevRow = [], str2Char = [];
1926
+ var Levenshtein = {
1927
+ /**
1928
+ * Calculate levenshtein distance of the two strings.
1929
+ *
1930
+ * @param str1 String the first string.
1931
+ * @param str2 String the second string.
1932
+ * @param [options] Additional options.
1933
+ * @param [options.useCollator] Use `Intl.Collator` for locale-sensitive string comparison.
1934
+ * @return Integer the levenshtein distance (0 and above).
1935
+ */
1936
+ get: function(str1, str2, options) {
1937
+ var useCollator = options && collator && options.useCollator;
1938
+ if (useCollator) {
1939
+ var str1Len = str1.length, str2Len = str2.length;
1940
+ if (str1Len === 0) return str2Len;
1941
+ if (str2Len === 0) return str1Len;
1942
+ var curCol, nextCol, i, j, tmp;
1943
+ for (i = 0; i < str2Len; ++i) {
1944
+ prevRow[i] = i;
1945
+ str2Char[i] = str2.charCodeAt(i);
1946
+ }
1947
+ prevRow[str2Len] = str2Len;
1948
+ var strCmp;
1949
+ for (i = 0; i < str1Len; ++i) {
1950
+ nextCol = i + 1;
1951
+ for (j = 0; j < str2Len; ++j) {
1952
+ curCol = nextCol;
1953
+ strCmp = 0 === collator.compare(str1.charAt(i), String.fromCharCode(str2Char[j]));
1954
+ nextCol = prevRow[j] + (strCmp ? 0 : 1);
1955
+ tmp = curCol + 1;
1956
+ if (nextCol > tmp) {
1957
+ nextCol = tmp;
1958
+ }
1959
+ tmp = prevRow[j + 1] + 1;
1960
+ if (nextCol > tmp) {
1961
+ nextCol = tmp;
1962
+ }
1963
+ prevRow[j] = curCol;
1964
+ }
1965
+ prevRow[j] = nextCol;
1966
+ }
1967
+ return nextCol;
1968
+ }
1969
+ return levenshtein2.distance(str1, str2);
1970
+ }
1971
+ };
1972
+ if (module !== null && true && module.exports === exports) {
1973
+ module.exports = Levenshtein;
1974
+ } else if (typeof self !== "undefined" && typeof self.postMessage === "function" && typeof self.importScripts === "function") {
1975
+ self.Levenshtein = Levenshtein;
1976
+ } else if (typeof window !== "undefined" && window !== null) {
1977
+ window.Levenshtein = Levenshtein;
1978
+ }
1979
+ })();
1980
+ })(levenshtein$1, levenshtein$1.exports);
1981
+ return levenshtein$1.exports;
1982
+ }
1983
+ var levenshteinExports = requireLevenshtein();
1984
+ const levenshtein = /* @__PURE__ */ getDefaultExportFromCjs(levenshteinExports);
1966
1985
  function formatDiff(oldValue, newValue, diffType = "git", context = 1) {
1967
1986
  switch (diffType) {
1968
1987
  case "git":
@@ -2139,25 +2158,17 @@ function useStateChangeTracking(currentState, session_id, options) {
2139
2158
  (startState, endState, triggerName) => {
2140
2159
  const diffPercentage = calculateDiffPercentage(startState, endState);
2141
2160
  const diffString = formatDiff(startState, endState, diffType);
2142
- let vote;
2143
- if (options?.vote) {
2144
- if (typeof options.vote === "function") {
2145
- vote = options.vote(startState, endState, diffPercentage);
2146
- } else {
2147
- vote = options.vote;
2148
- }
2149
- } else {
2150
- vote = diffPercentage > 0.5 ? "downvote" : "upvote";
2151
- }
2161
+ const score = typeof options?.score === "function" ? options.score(startState, endState, diffPercentage) : options?.score ?? (diffPercentage > 0.5 ? 0 : 1);
2152
2162
  const idString = typeof session_id === "function" ? session_id(endState) : session_id;
2153
2163
  feedbackHandler({
2154
2164
  session_id: idString,
2155
- vote,
2156
- explanation: `State change with diff percentage: ${(diffPercentage * 100).toFixed(1)}%`,
2157
- correction: diffString,
2158
- source: "IMPLICIT",
2159
- extra_metadata: options?.metadata,
2160
- trigger_name: triggerName
2165
+ kind: "edit",
2166
+ source: "human",
2167
+ trigger_name: triggerName,
2168
+ score,
2169
+ value: diffString,
2170
+ confidence: diffPercentage,
2171
+ metadata: options?.metadata
2161
2172
  });
2162
2173
  },
2163
2174
  [options, session_id, diffType, feedbackHandler]