prompt-api-polyfill 1.11.0 → 1.12.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/README.md CHANGED
@@ -7,7 +7,7 @@ supporting dynamic backends:
7
7
  - **Firebase AI Logic** (cloud)
8
8
  - **Google Gemini API** (cloud)
9
9
  - **OpenAI API** (cloud)
10
- - **Transformers.js** (local after initial model download)
10
+ - **Transformers.js** (local after initial model download, **default backend**)
11
11
 
12
12
  When loaded in the browser, it defines a global:
13
13
 
@@ -20,6 +20,9 @@ natively available.
20
20
 
21
21
  ## Supported Backends
22
22
 
23
+ You can choose between multiple cloud and local backends. If no backend is
24
+ configured, the polyfill will use Transformers.js with the default model.
25
+
23
26
  ### Firebase AI Logic (cloud)
24
27
 
25
28
  - **Uses**: `firebase/ai` SDK.
@@ -49,6 +52,7 @@ natively available.
49
52
 
50
53
  - **Uses**: `@huggingface/transformers` SDK.
51
54
  - **Select by setting**: `window.TRANSFORMERS_CONFIG`.
55
+ - **Note**: This is the **default backend** if no other configuration is provided.
52
56
  - **Model**: Uses default if not specified (see
53
57
  [`backends/defaults.js`](backends/defaults.js)).
54
58
 
@@ -1,6 +1,6 @@
1
1
  import { initializeApp as Fe } from "firebase/app";
2
2
  import { VertexAIBackend as ze, GoogleAIBackend as Ue, getAI as je, getGenerativeModel as Ve, InferenceMode as We } from "firebase/ai";
3
- import { P as Ke, D as Ge } from "../chunks/defaults-DD5ZWEDv.js";
3
+ import { P as Ke, D as Ge } from "../chunks/defaults-j68Er1oH.js";
4
4
  const qe = () => {
5
5
  };
6
6
  const be = function(t) {
@@ -89,9 +89,9 @@ const be = function(t) {
89
89
  this.init_();
90
90
  const r = e ? this.byteToCharMapWebSafe_ : this.byteToCharMap_, n = [];
91
91
  for (let s = 0; s < t.length; s += 3) {
92
- const o = t[s], i = s + 1 < t.length, c = i ? t[s + 1] : 0, a = s + 2 < t.length, l = a ? t[s + 2] : 0, y = o >> 2, f = (o & 3) << 4 | c >> 4;
92
+ const o = t[s], i = s + 1 < t.length, c = i ? t[s + 1] : 0, a = s + 2 < t.length, l = a ? t[s + 2] : 0, p = o >> 2, f = (o & 3) << 4 | c >> 4;
93
93
  let k = (c & 15) << 2 | l >> 6, S = l & 63;
94
- a || (S = 64, i || (k = 64)), n.push(r[y], r[f], r[k], r[S]);
94
+ a || (S = 64, i || (k = 64)), n.push(r[p], r[f], r[k], r[S]);
95
95
  }
96
96
  return n.join("");
97
97
  },
@@ -321,7 +321,7 @@ function dt(t, e = at, r = ct) {
321
321
  function ut(t) {
322
322
  return t && t._delegate ? t._delegate : t;
323
323
  }
324
- class w {
324
+ class y {
325
325
  /**
326
326
  *
327
327
  * @param name The public service name, e.g. app, auth, firestore, database
@@ -344,7 +344,7 @@ class w {
344
344
  return this.onInstanceCreated = e, this;
345
345
  }
346
346
  }
347
- const E = "[DEFAULT]";
347
+ const _ = "[DEFAULT]";
348
348
  class ft {
349
349
  constructor(e, r) {
350
350
  this.name = e, this.container = r, this.component = null, this.instances = /* @__PURE__ */ new Map(), this.instancesDeferred = /* @__PURE__ */ new Map(), this.instancesOptions = /* @__PURE__ */ new Map(), this.onInitCallbacks = /* @__PURE__ */ new Map();
@@ -397,7 +397,7 @@ class ft {
397
397
  if (this.component = e, !!this.shouldAutoInitialize()) {
398
398
  if (gt(e))
399
399
  try {
400
- this.getOrInitializeService({ instanceIdentifier: E });
400
+ this.getOrInitializeService({ instanceIdentifier: _ });
401
401
  } catch {
402
402
  }
403
403
  for (const [r, n] of this.instancesDeferred.entries()) {
@@ -412,7 +412,7 @@ class ft {
412
412
  }
413
413
  }
414
414
  }
415
- clearInstance(e = E) {
415
+ clearInstance(e = _) {
416
416
  this.instancesDeferred.delete(e), this.instancesOptions.delete(e), this.instances.delete(e);
417
417
  }
418
418
  // app.delete() will call this method on every provider to delete the services
@@ -427,10 +427,10 @@ class ft {
427
427
  isComponentSet() {
428
428
  return this.component != null;
429
429
  }
430
- isInitialized(e = E) {
430
+ isInitialized(e = _) {
431
431
  return this.instances.has(e);
432
432
  }
433
- getOptions(e = E) {
433
+ getOptions(e = _) {
434
434
  return this.instancesOptions.get(e) || {};
435
435
  }
436
436
  initialize(e = {}) {
@@ -490,15 +490,15 @@ class ft {
490
490
  }
491
491
  return n || null;
492
492
  }
493
- normalizeInstanceIdentifier(e = E) {
494
- return this.component ? this.component.multipleInstances ? e : E : e;
493
+ normalizeInstanceIdentifier(e = _) {
494
+ return this.component ? this.component.multipleInstances ? e : _ : e;
495
495
  }
496
496
  shouldAutoInitialize() {
497
497
  return !!this.component && this.component.instantiationMode !== "EXPLICIT";
498
498
  }
499
499
  }
500
500
  function pt(t) {
501
- return t === E ? void 0 : t;
501
+ return t === _ ? void 0 : t;
502
502
  }
503
503
  function gt(t) {
504
504
  return t.instantiationMode === "EAGER";
@@ -647,7 +647,7 @@ function Tt(t) {
647
647
  const s = () => {
648
648
  t.removeEventListener("success", o), t.removeEventListener("error", i);
649
649
  }, o = () => {
650
- r(m(t.result)), s();
650
+ r(b(t.result)), s();
651
651
  }, i = () => {
652
652
  n(t.error), s();
653
653
  };
@@ -683,7 +683,7 @@ let U = {
683
683
  if (e === "store")
684
684
  return r.objectStoreNames[1] ? void 0 : r.objectStore(r.objectStoreNames[0]);
685
685
  }
686
- return m(t[e]);
686
+ return b(t[e]);
687
687
  },
688
688
  set(t, e, r) {
689
689
  return t[e] = r, !0;
@@ -698,17 +698,17 @@ function Dt(t) {
698
698
  function kt(t) {
699
699
  return t === IDBDatabase.prototype.transaction && !("objectStoreNames" in IDBTransaction.prototype) ? function(e, ...r) {
700
700
  const n = t.call(N(this), e, ...r);
701
- return Ie.set(n, e.sort ? e.sort() : [e]), m(n);
701
+ return Ie.set(n, e.sort ? e.sort() : [e]), b(n);
702
702
  } : It().includes(t) ? function(...e) {
703
- return t.apply(N(this), e), m(Ae.get(this));
703
+ return t.apply(N(this), e), b(Ae.get(this));
704
704
  } : function(...e) {
705
- return m(t.apply(N(this), e));
705
+ return b(t.apply(N(this), e));
706
706
  };
707
707
  }
708
708
  function St(t) {
709
709
  return typeof t == "function" ? kt(t) : (t instanceof IDBTransaction && Ct(t), yt(t, At()) ? new Proxy(t, U) : t);
710
710
  }
711
- function m(t) {
711
+ function b(t) {
712
712
  if (t instanceof IDBRequest)
713
713
  return Tt(t);
714
714
  if (O.has(t))
@@ -718,9 +718,9 @@ function m(t) {
718
718
  }
719
719
  const N = (t) => J.get(t);
720
720
  function vt(t, e, { blocked: r, upgrade: n, blocking: s, terminated: o } = {}) {
721
- const i = indexedDB.open(t, e), c = m(i);
721
+ const i = indexedDB.open(t, e), c = b(i);
722
722
  return n && i.addEventListener("upgradeneeded", (a) => {
723
- n(m(i.result), a.oldVersion, a.newVersion, m(i.transaction), a);
723
+ n(b(i.result), a.oldVersion, a.newVersion, b(i.transaction), a);
724
724
  }), r && i.addEventListener("blocked", (a) => r(
725
725
  // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405
726
726
  a.oldVersion,
@@ -777,8 +777,8 @@ class Pt {
777
777
  function Mt(t) {
778
778
  return t.getComponent()?.type === "VERSION";
779
779
  }
780
- const j = "@firebase/app", ae = "0.14.8";
781
- const p = new ye("@firebase/app"), Ot = "@firebase/app-compat", Nt = "@firebase/analytics-compat", $t = "@firebase/analytics", xt = "@firebase/app-check-compat", Lt = "@firebase/app-check", Ht = "@firebase/auth", Ft = "@firebase/auth-compat", zt = "@firebase/database", Ut = "@firebase/data-connect", jt = "@firebase/database-compat", Vt = "@firebase/functions", Wt = "@firebase/functions-compat", Kt = "@firebase/installations", Gt = "@firebase/installations-compat", qt = "@firebase/messaging", Xt = "@firebase/messaging-compat", Yt = "@firebase/performance", Jt = "@firebase/performance-compat", Zt = "@firebase/remote-config", Qt = "@firebase/remote-config-compat", er = "@firebase/storage", tr = "@firebase/storage-compat", rr = "@firebase/firestore", nr = "@firebase/ai", sr = "@firebase/firestore-compat", or = "firebase";
780
+ const j = "@firebase/app", ae = "0.14.9";
781
+ const g = new ye("@firebase/app"), Ot = "@firebase/app-compat", Nt = "@firebase/analytics-compat", $t = "@firebase/analytics", xt = "@firebase/app-check-compat", Lt = "@firebase/app-check", Ht = "@firebase/auth", Ft = "@firebase/auth-compat", zt = "@firebase/database", Ut = "@firebase/data-connect", jt = "@firebase/database-compat", Vt = "@firebase/functions", Wt = "@firebase/functions-compat", Kt = "@firebase/installations", Gt = "@firebase/installations-compat", qt = "@firebase/messaging", Xt = "@firebase/messaging-compat", Yt = "@firebase/performance", Jt = "@firebase/performance-compat", Zt = "@firebase/remote-config", Qt = "@firebase/remote-config-compat", er = "@firebase/storage", tr = "@firebase/storage-compat", rr = "@firebase/firestore", nr = "@firebase/ai", sr = "@firebase/firestore-compat", or = "firebase";
782
782
  const V = "[DEFAULT]", ir = {
783
783
  [j]: "fire-core",
784
784
  [Ot]: "fire-core-compat",
@@ -815,13 +815,13 @@ function ce(t, e) {
815
815
  try {
816
816
  t.container.addComponent(e);
817
817
  } catch (r) {
818
- p.debug(`Component ${e.name} failed to register with FirebaseApp ${t.name}`, r);
818
+ g.debug(`Component ${e.name} failed to register with FirebaseApp ${t.name}`, r);
819
819
  }
820
820
  }
821
821
  function I(t) {
822
822
  const e = t.name;
823
823
  if (W.has(e))
824
- return p.debug(`There were multiple attempts to register component ${e}.`), !1;
824
+ return g.debug(`There were multiple attempts to register component ${e}.`), !1;
825
825
  W.set(e, t);
826
826
  for (const r of P.values())
827
827
  ce(r, t);
@@ -848,10 +848,10 @@ const cr = {
848
848
  "idb-delete": "Error thrown when deleting from IndexedDB. Original error: {$originalErrorMessage}.",
849
849
  "finalization-registry-not-supported": "FirebaseServerApp deleteOnDeref field defined but the JS runtime does not support FinalizationRegistry.",
850
850
  "invalid-server-app-environment": "FirebaseServerApp is not for use in browser environments."
851
- }, b = new Y("app", "Firebase", cr);
851
+ }, E = new Y("app", "Firebase", cr);
852
852
  class lr {
853
853
  constructor(e, r, n) {
854
- this._isDeleted = !1, this._options = { ...e }, this._config = { ...r }, this._name = r.name, this._automaticDataCollectionEnabled = r.automaticDataCollectionEnabled, this._container = n, this.container.addComponent(new w(
854
+ this._isDeleted = !1, this._options = { ...e }, this._config = { ...r }, this._name = r.name, this._automaticDataCollectionEnabled = r.automaticDataCollectionEnabled, this._container = n, this.container.addComponent(new y(
855
855
  "app",
856
856
  () => this,
857
857
  "PUBLIC"
@@ -888,7 +888,7 @@ class lr {
888
888
  */
889
889
  checkDestroyed() {
890
890
  if (this.isDeleted)
891
- throw b.create("app-deleted", { appName: this._name });
891
+ throw E.create("app-deleted", { appName: this._name });
892
892
  }
893
893
  }
894
894
  function hr(t, e = {}) {
@@ -900,11 +900,11 @@ function hr(t, e = {}) {
900
900
  ...e
901
901
  }, s = n.name;
902
902
  if (typeof s != "string" || !s)
903
- throw b.create("bad-app-name", {
903
+ throw E.create("bad-app-name", {
904
904
  appName: String(s)
905
905
  });
906
906
  if (r || (r = we()), !r)
907
- throw b.create(
907
+ throw E.create(
908
908
  "no-options"
909
909
  /* AppError.NO_OPTIONS */
910
910
  );
@@ -912,7 +912,7 @@ function hr(t, e = {}) {
912
912
  if (o) {
913
913
  if (F(r, o.options) && F(n, o.config))
914
914
  return o;
915
- throw b.create("duplicate-app", { appName: s });
915
+ throw E.create("duplicate-app", { appName: s });
916
916
  }
917
917
  const i = new mt(s);
918
918
  for (const a of W.values())
@@ -925,7 +925,7 @@ function dr(t = V) {
925
925
  if (!e && t === V && we())
926
926
  return hr();
927
927
  if (!e)
928
- throw b.create("no-app", { appName: t });
928
+ throw E.create("no-app", { appName: t });
929
929
  return e;
930
930
  }
931
931
  function B(t, e, r) {
@@ -936,10 +936,10 @@ function B(t, e, r) {
936
936
  const i = [
937
937
  `Unable to register library "${n}" with version "${e}":`
938
938
  ];
939
- s && i.push(`library name "${n}" contains illegal characters (whitespace or "/")`), s && o && i.push("and"), o && i.push(`version name "${e}" contains illegal characters (whitespace or "/")`), p.warn(i.join(" "));
939
+ s && i.push(`library name "${n}" contains illegal characters (whitespace or "/")`), s && o && i.push("and"), o && i.push(`version name "${e}" contains illegal characters (whitespace or "/")`), g.warn(i.join(" "));
940
940
  return;
941
941
  }
942
- I(new w(
942
+ I(new y(
943
943
  `${n}-version`,
944
944
  () => ({ library: n, version: e }),
945
945
  "VERSION"
@@ -961,7 +961,7 @@ function Ce() {
961
961
  }
962
962
  }
963
963
  }).catch((t) => {
964
- throw b.create("idb-open", {
964
+ throw E.create("idb-open", {
965
965
  originalErrorMessage: t.message
966
966
  });
967
967
  })), x;
@@ -972,12 +972,12 @@ async function pr(t) {
972
972
  return await r.done, n;
973
973
  } catch (e) {
974
974
  if (e instanceof D)
975
- p.warn(e.message);
975
+ g.warn(e.message);
976
976
  else {
977
- const r = b.create("idb-get", {
977
+ const r = E.create("idb-get", {
978
978
  originalErrorMessage: e?.message
979
979
  });
980
- p.warn(r.message);
980
+ g.warn(r.message);
981
981
  }
982
982
  }
983
983
  }
@@ -987,12 +987,12 @@ async function le(t, e) {
987
987
  await n.objectStore(T).put(e, De(t)), await n.done;
988
988
  } catch (r) {
989
989
  if (r instanceof D)
990
- p.warn(r.message);
990
+ g.warn(r.message);
991
991
  else {
992
- const n = b.create("idb-set", {
992
+ const n = E.create("idb-set", {
993
993
  originalErrorMessage: r?.message
994
994
  });
995
- p.warn(n.message);
995
+ g.warn(n.message);
996
996
  }
997
997
  }
998
998
  }
@@ -1024,7 +1024,7 @@ class br {
1024
1024
  }
1025
1025
  return this._storage.overwrite(this._heartbeatsCache);
1026
1026
  } catch (e) {
1027
- p.warn(e);
1027
+ g.warn(e);
1028
1028
  }
1029
1029
  }
1030
1030
  /**
@@ -1041,7 +1041,7 @@ class br {
1041
1041
  const e = he(), { heartbeatsToSend: r, unsentEntries: n } = Er(this._heartbeatsCache.heartbeats), s = Ee(JSON.stringify({ version: 2, heartbeats: r }));
1042
1042
  return this._heartbeatsCache.lastSentHeartbeatDate = e, n.length > 0 ? (this._heartbeatsCache.heartbeats = n, await this._storage.overwrite(this._heartbeatsCache)) : (this._heartbeatsCache.heartbeats = [], this._storage.overwrite(this._heartbeatsCache)), s;
1043
1043
  } catch (e) {
1044
- return p.warn(e), "";
1044
+ return g.warn(e), "";
1045
1045
  }
1046
1046
  }
1047
1047
  }
@@ -1130,12 +1130,12 @@ function wr(t) {
1130
1130
  return e;
1131
1131
  }
1132
1132
  function yr(t) {
1133
- I(new w(
1133
+ I(new y(
1134
1134
  "platform-logger",
1135
1135
  (e) => new Pt(e),
1136
1136
  "PRIVATE"
1137
1137
  /* ComponentType.PRIVATE */
1138
- )), I(new w(
1138
+ )), I(new y(
1139
1139
  "heartbeat",
1140
1140
  (e) => new br(e),
1141
1141
  "PRIVATE"
@@ -1281,11 +1281,11 @@ async function Q({ url: t, body: e }, r) {
1281
1281
  throw u.create("fetch-parse-error", {
1282
1282
  originalErrorMessage: `ttl field (timeToLive) is not in standard Protobuf Duration format: ${c.ttl}`
1283
1283
  });
1284
- const l = Number(a[1]) * 1e3, y = Date.now();
1284
+ const l = Number(a[1]) * 1e3, p = Date.now();
1285
1285
  return {
1286
1286
  token: c.token,
1287
- expireTimeMillis: y + l,
1288
- issuedAtTimeMillis: y
1287
+ expireTimeMillis: p + l,
1288
+ issuedAtTimeMillis: p
1289
1289
  };
1290
1290
  }
1291
1291
  function Rr(t, e) {
@@ -1375,21 +1375,21 @@ async function Oe(t) {
1375
1375
  function Ne(t) {
1376
1376
  return `${t.options.appId}-${t.name}`;
1377
1377
  }
1378
- const g = new ye("@firebase/app-check");
1378
+ const m = new ye("@firebase/app-check");
1379
1379
  async function xr(t) {
1380
1380
  if (X()) {
1381
1381
  let e;
1382
1382
  try {
1383
1383
  e = await Mr(t);
1384
1384
  } catch (r) {
1385
- g.warn(`Failed to read token from IndexedDB. Error: ${r}`);
1385
+ m.warn(`Failed to read token from IndexedDB. Error: ${r}`);
1386
1386
  }
1387
1387
  return e;
1388
1388
  }
1389
1389
  }
1390
1390
  function L(t, e) {
1391
1391
  return X() ? Or(t, e).catch((r) => {
1392
- g.warn(`Failed to write token to IndexedDB. Error: ${r}`);
1392
+ m.warn(`Failed to write token to IndexedDB. Error: ${r}`);
1393
1393
  }) : Promise.resolve();
1394
1394
  }
1395
1395
  async function Lr() {
@@ -1402,7 +1402,7 @@ async function Lr() {
1402
1402
  return t;
1403
1403
  {
1404
1404
  const e = crypto.randomUUID();
1405
- return Nr(e).catch((r) => g.warn(`Failed to persist debug token to IndexedDB. Error: ${r}`)), e;
1405
+ return Nr(e).catch((r) => m.warn(`Failed to persist debug token to IndexedDB. Error: ${r}`)), e;
1406
1406
  }
1407
1407
  }
1408
1408
  function ee() {
@@ -1437,34 +1437,35 @@ async function G(t, e = !1, r = !1) {
1437
1437
  Z(n);
1438
1438
  const s = d(n);
1439
1439
  let o = s.token, i;
1440
- if (o && !_(o) && (s.token = void 0, o = void 0), !o) {
1440
+ if (o && !w(o) && (s.token = void 0, o = void 0), !o) {
1441
1441
  const l = await s.cachedTokenPromise;
1442
- l && (_(l) ? o = l : await L(n, void 0));
1442
+ l && (w(l) ? o = l : await L(n, void 0));
1443
1443
  }
1444
- if (!e && o && _(o))
1444
+ if (!e && o && w(o))
1445
1445
  return {
1446
1446
  token: o.token
1447
1447
  };
1448
1448
  let c = !1;
1449
1449
  if (ee())
1450
1450
  try {
1451
- s.exchangeTokenPromise || (s.exchangeTokenPromise = Q(Re(n, await te()), t.heartbeatServiceProvider).finally(() => {
1451
+ const l = await te();
1452
+ s.exchangeTokenPromise || (s.exchangeTokenPromise = Q(Re(n, l), t.heartbeatServiceProvider).finally(() => {
1452
1453
  s.exchangeTokenPromise = void 0;
1453
1454
  }), c = !0);
1454
- const l = await s.exchangeTokenPromise;
1455
- return await L(n, l), s.token = l, { token: l.token };
1455
+ const p = await s.exchangeTokenPromise;
1456
+ return await L(n, p), s.token = p, { token: p.token };
1456
1457
  } catch (l) {
1457
- return l.code === "appCheck/throttled" || l.code === "appCheck/initial-throttle" ? g.warn(l.message) : r && g.error(l), H(l);
1458
+ return l.code === "appCheck/throttled" || l.code === "appCheck/initial-throttle" ? m.warn(l.message) : r && m.error(l), H(l);
1458
1459
  }
1459
1460
  try {
1460
1461
  s.exchangeTokenPromise || (s.exchangeTokenPromise = s.provider.getToken().finally(() => {
1461
1462
  s.exchangeTokenPromise = void 0;
1462
1463
  }), c = !0), o = await d(n).exchangeTokenPromise;
1463
1464
  } catch (l) {
1464
- l.code === "appCheck/throttled" || l.code === "appCheck/initial-throttle" ? g.warn(l.message) : r && g.error(l), i = l;
1465
+ l.code === "appCheck/throttled" || l.code === "appCheck/initial-throttle" ? m.warn(l.message) : r && m.error(l), i = l;
1465
1466
  }
1466
1467
  let a;
1467
- return o ? i ? _(o) ? a = {
1468
+ return o ? i ? w(o) ? a = {
1468
1469
  token: o.token,
1469
1470
  internalError: i
1470
1471
  } : a = H(i) : (a = {
@@ -1489,7 +1490,7 @@ function $e(t, e, r, n) {
1489
1490
  error: n,
1490
1491
  type: e
1491
1492
  };
1492
- if (o.tokenObservers = [...o.tokenObservers, i], o.token && _(o.token)) {
1493
+ if (o.tokenObservers = [...o.tokenObservers, i], o.token && w(o.token)) {
1493
1494
  const c = o.token;
1494
1495
  Promise.resolve().then(() => {
1495
1496
  r({ token: c.token }), pe(t);
@@ -1542,7 +1543,7 @@ function Le(t, e) {
1542
1543
  } catch {
1543
1544
  }
1544
1545
  }
1545
- function _(t) {
1546
+ function w(t) {
1546
1547
  return t.expireTimeMillis - Date.now() > 0;
1547
1548
  }
1548
1549
  function H(t) {
@@ -1573,7 +1574,7 @@ function Kr(t) {
1573
1574
  removeTokenListener: (e) => xe(t.app, e)
1574
1575
  };
1575
1576
  }
1576
- const Gr = "@firebase/app-check", qr = "0.11.0", Xr = "https://www.google.com/recaptcha/enterprise.js";
1577
+ const Gr = "@firebase/app-check", qr = "0.11.1", Xr = "https://www.google.com/recaptcha/enterprise.js";
1577
1578
  function Yr(t, e) {
1578
1579
  const r = new A(), n = d(t);
1579
1580
  n.reCAPTCHAState = { initialized: r };
@@ -1728,11 +1729,11 @@ function nn(t = dr(), e) {
1728
1729
  }
1729
1730
  function sn(t, e, r = !1) {
1730
1731
  const n = Ir(t, { ...ke });
1731
- n.activated = !0, n.provider = e, n.cachedTokenPromise = xr(t).then((s) => (s && _(s) && (n.token = s, Le(t, { token: s.token })), s)), n.isTokenAutoRefreshEnabled = r && t.automaticDataCollectionEnabled, !t.automaticDataCollectionEnabled && r && g.warn("`isTokenAutoRefreshEnabled` is true but `automaticDataCollectionEnabled` was set to false during `initializeApp()`. This blocks automatic token refresh."), n.provider.initialize(t);
1732
+ n.activated = !0, n.provider = e, n.cachedTokenPromise = xr(t).then((s) => (s && w(s) && (n.token = s, Le(t, { token: s.token })), s)), n.isTokenAutoRefreshEnabled = r && t.automaticDataCollectionEnabled, !t.automaticDataCollectionEnabled && r && m.warn("`isTokenAutoRefreshEnabled` is true but `automaticDataCollectionEnabled` was set to false during `initializeApp()`. This blocks automatic token refresh."), n.provider.initialize(t);
1732
1733
  }
1733
1734
  const on = "app-check", me = "app-check-internal";
1734
1735
  function an() {
1735
- I(new w(
1736
+ I(new y(
1736
1737
  on,
1737
1738
  (t) => {
1738
1739
  const e = t.getProvider("app").getImmediate(), r = t.getProvider("heartbeat");
@@ -1745,7 +1746,7 @@ function an() {
1745
1746
  /* InstantiationMode.EXPLICIT */
1746
1747
  ).setInstanceCreatedCallback((t, e, r) => {
1747
1748
  t.getProvider(me).initialize();
1748
- })), I(new w(
1749
+ })), I(new y(
1749
1750
  me,
1750
1751
  (t) => {
1751
1752
  const e = t.getProvider("app-check").getImmediate();
@@ -1782,19 +1783,40 @@ class dn extends Ke {
1782
1783
  useLimitedUseAppCheckTokens: i || !0
1783
1784
  });
1784
1785
  }
1786
+ /**
1787
+ * Creates a model session and stores it.
1788
+ * @param {Object} _options - LanguageModel options.
1789
+ * @param {Object} sessionParams - Parameters for the cloud or local model.
1790
+ * @returns {any} The created session object.
1791
+ */
1785
1792
  createSession(e, r) {
1786
1793
  return this.#e = Ve(this.ai, {
1787
1794
  mode: We.ONLY_IN_CLOUD,
1788
1795
  inCloudParams: r
1789
1796
  }), this.#e;
1790
1797
  }
1798
+ /**
1799
+ * Generates content (non-streaming).
1800
+ * @param {Array} contents - The history + new message content.
1801
+ * @returns {Promise<{text: string, usage: number}>}
1802
+ */
1791
1803
  async generateContent(e) {
1792
1804
  const r = await this.#e.generateContent({ contents: e }), n = r.response.usageMetadata?.promptTokenCount || 0;
1793
1805
  return { text: r.response.text(), usage: n };
1794
1806
  }
1807
+ /**
1808
+ * Generates content stream.
1809
+ * @param {Array} contents - The history + new content.
1810
+ * @returns {Promise<AsyncIterable>} Stream of chunks.
1811
+ */
1795
1812
  async generateContentStream(e) {
1796
1813
  return (await this.#e.generateContentStream({ contents: e })).stream;
1797
1814
  }
1815
+ /**
1816
+ * Counts tokens.
1817
+ * @param {Array} contents - The content to count.
1818
+ * @returns {Promise<number>} Total tokens.
1819
+ */
1798
1820
  async countTokens(e) {
1799
1821
  const { totalTokens: r } = await this.#e.countTokens({
1800
1822
  contents: e
@@ -1,5 +1,5 @@
1
1
  import { GoogleGenAI as s } from "@google/genai";
2
- import { P as a, D as i } from "../chunks/defaults-DD5ZWEDv.js";
2
+ import { P as a, D as i } from "../chunks/defaults-j68Er1oH.js";
3
3
  class u extends a {
4
4
  #n;
5
5
  #e;
@@ -7,9 +7,20 @@ class u extends a {
7
7
  constructor(t) {
8
8
  super(t.modelName || i.gemini.modelName), this.#n = new s({ apiKey: t.apiKey });
9
9
  }
10
+ /**
11
+ * Creates a model session.
12
+ * @param {Object} options - LanguageModel options.
13
+ * @param {Object} sessionParams - Session parameters.
14
+ * @returns {Object} The session object.
15
+ */
10
16
  createSession(t, e) {
11
17
  return this.#t = e, this.#e = t.modelName || this.modelName, { model: this.#e, params: e };
12
18
  }
19
+ /**
20
+ * Generates content (non-streaming).
21
+ * @param {Array} contents - The history + new message content.
22
+ * @returns {Promise<{text: string, usage: number}>}
23
+ */
13
24
  async generateContent(t) {
14
25
  const e = {
15
26
  systemInstruction: this.#t.systemInstruction,
@@ -22,6 +33,11 @@ class u extends a {
22
33
  }), o = n.usageMetadata?.promptTokenCount || 0;
23
34
  return { text: n.text, usage: o };
24
35
  }
36
+ /**
37
+ * Generates content stream.
38
+ * @param {Array} contents - The history + new content.
39
+ * @returns {Promise<AsyncIterable>} Stream of chunks.
40
+ */
25
41
  async generateContentStream(t) {
26
42
  const e = {
27
43
  systemInstruction: this.#t.systemInstruction,
@@ -42,6 +58,11 @@ class u extends a {
42
58
  };
43
59
  })();
44
60
  }
61
+ /**
62
+ * Counts tokens.
63
+ * @param {Array} contents - The content to count.
64
+ * @returns {Promise<number>} Total tokens.
65
+ */
45
66
  async countTokens(t) {
46
67
  const { totalTokens: e } = await this.#n.models.countTokens({
47
68
  model: this.#e,
@@ -1,5 +1,5 @@
1
1
  import u from "openai";
2
- import { P as m, D as l } from "../chunks/defaults-DD5ZWEDv.js";
2
+ import { P as m, D as l } from "../chunks/defaults-j68Er1oH.js";
3
3
  class y extends m {
4
4
  #e;
5
5
  constructor(t) {
@@ -21,6 +21,12 @@ class y extends m {
21
21
  }
22
22
  return "available";
23
23
  }
24
+ /**
25
+ * Creates a model session and stores it.
26
+ * @param {Object} options - LanguageModel options.
27
+ * @param {Object} sessionParams - Parameters for the cloud or local model.
28
+ * @returns {any} The created session object.
29
+ */
24
30
  createSession(t, s) {
25
31
  this.#e = {
26
32
  model: t.modelName || this.modelName,
@@ -93,6 +99,11 @@ class y extends m {
93
99
  #s(t) {
94
100
  return this.#e.model !== this.modelName ? this.#e.model : t ? `${this.modelName}-audio-preview` : this.modelName;
95
101
  }
102
+ /**
103
+ * Generates content (non-streaming).
104
+ * @param {Array} contents - The history + new message content.
105
+ * @returns {Promise<{text: string, usage: number}>}
106
+ */
96
107
  async generateContent(t) {
97
108
  const { messages: s } = this.#r(
98
109
  t,
@@ -123,6 +134,11 @@ class y extends m {
123
134
  throw console.error("OpenAI Generate Content Error:", a), a;
124
135
  }
125
136
  }
137
+ /**
138
+ * Generates content stream.
139
+ * @param {Array} contents - The history + new content.
140
+ * @returns {Promise<AsyncIterable>} Stream of chunks.
141
+ */
126
142
  async generateContentStream(t) {
127
143
  const { messages: s } = this.#r(
128
144
  t,
@@ -154,6 +170,11 @@ class y extends m {
154
170
  throw console.error("OpenAI Generate Content Stream Error:", a), a;
155
171
  }
156
172
  }
173
+ /**
174
+ * Counts tokens.
175
+ * @param {Array} contents - The content to count.
176
+ * @returns {Promise<number>} Total tokens.
177
+ */
157
178
  async countTokens(t) {
158
179
  let s = "";
159
180
  if (Array.isArray(t)) {
@@ -1,18 +1,20 @@
1
- import { env as j, pipeline as z, TextStreamer as C } from "@huggingface/transformers";
2
- import { P as $, D as y } from "../chunks/defaults-DD5ZWEDv.js";
3
- class I extends $ {
1
+ import { env as p, pipeline as m, TextStreamer as f } from "@huggingface/transformers";
2
+ import { P as h, D as c } from "../chunks/defaults-j68Er1oH.js";
3
+ class w extends h {
4
4
  #e;
5
5
  #t;
6
- #i;
7
6
  #o;
7
+ #a;
8
8
  #n;
9
- constructor(o = {}) {
10
- if (super(o.modelName || y.transformers.modelName), this.#i = o.device || y.transformers.device, this.#o = o.dtype || y.transformers.dtype, o.env) {
11
- const t = (n, a) => {
12
- for (const [l, e] of Object.entries(a))
13
- e && typeof e == "object" && !Array.isArray(e) && n[l] && typeof n[l] == "object" ? t(n[l], e) : n[l] = e;
9
+ constructor(s = {}) {
10
+ if (super(s.modelName || c.transformers.modelName), this.#o = s.device || c.transformers.device, this.#a = s.dtype || c.transformers.dtype, s.isDefault && console.log(
11
+ `Prompt API Polyfill: No backend configuration found. Defaulting to Transformers.js with model: ${this.modelName}`
12
+ ), p.experimental_useCrossOriginStorage = !0, s.env) {
13
+ const e = (n, r) => {
14
+ for (const [o, t] of Object.entries(r))
15
+ t && typeof t == "object" && !Array.isArray(t) && n[o] && typeof n[o] == "object" ? e(n[o], t) : n[o] = t;
14
16
  };
15
- t(j, o.env);
17
+ e(p, s.env);
16
18
  }
17
19
  }
18
20
  /**
@@ -20,56 +22,26 @@ class I extends $ {
20
22
  * @param {EventTarget} [monitorTarget] - The event target to dispatch download progress events to.
21
23
  * @returns {Promise<Object>} The generator.
22
24
  */
23
- async #s(o) {
25
+ async #s(s) {
24
26
  if (!this.#e) {
25
- const t = /* @__PURE__ */ new Map(), n = await M(this.modelName, {
26
- dtype: this.#o
27
- });
28
- for (const { path: e, size: r } of n)
29
- t.set(e, { loaded: 0, total: r });
30
- const a = (e) => {
31
- if (!o)
27
+ const e = (r) => {
28
+ if (!s)
32
29
  return;
33
- const r = 1 / 65536, c = Math.floor(e / r) * r;
34
- c <= o.__lastProgressLoaded || (o.dispatchEvent(
30
+ const o = 1 / 65536, t = Math.floor(r / o) * o;
31
+ t <= s.__lastProgressLoaded || (s.dispatchEvent(
35
32
  new ProgressEvent("downloadprogress", {
36
- loaded: c,
33
+ loaded: t,
37
34
  total: 1,
38
35
  lengthComputable: !0
39
36
  })
40
- ), o.__lastProgressLoaded = c);
41
- }, l = (e) => {
42
- if (e.status === "initiate")
43
- if (t.has(e.file)) {
44
- const r = t.get(e.file);
45
- e.total && (r.total = e.total);
46
- } else
47
- t.set(e.file, { loaded: 0, total: e.total || 0 });
48
- else if (e.status === "progress")
49
- t.has(e.file) && (t.get(e.file).loaded = e.loaded);
50
- else if (e.status === "done") {
51
- if (t.has(e.file)) {
52
- const r = t.get(e.file);
53
- r.loaded = r.total;
54
- }
55
- } else if (e.status === "ready") {
56
- a(1);
57
- return;
58
- }
59
- if (e.status === "progress" || e.status === "done") {
60
- let r = 0, c = 0;
61
- for (const { loaded: f, total: d } of t.values())
62
- r += f, c += d;
63
- if (c > 0) {
64
- const f = r / c;
65
- a(Math.min(f, 0.9999));
66
- }
67
- }
37
+ ), s.__lastProgressLoaded = t);
38
+ }, n = (r) => {
39
+ r.status === "progress_total" ? e(r.progress / 100) : r.status === "ready" && e(1);
68
40
  };
69
- a(0), this.#e = await z("text-generation", this.modelName, {
70
- device: this.#i,
71
- dtype: this.#o,
72
- progress_callback: l
41
+ e(0), this.#e = await m("text-generation", this.modelName, {
42
+ device: this.#o,
43
+ dtype: this.#a,
44
+ progress_callback: n
73
45
  }), this.#t = this.#e.tokenizer;
74
46
  }
75
47
  return this.#e;
@@ -79,10 +51,10 @@ class I extends $ {
79
51
  * @param {Object} options - LanguageModel options.
80
52
  * @returns {string} 'available' or 'unavailable'.
81
53
  */
82
- static availability(o) {
83
- if (o?.expectedInputs && Array.isArray(o.expectedInputs)) {
84
- for (const t of o.expectedInputs)
85
- if (t.type === "audio" || t.type === "image")
54
+ static availability(s) {
55
+ if (s?.expectedInputs && Array.isArray(s.expectedInputs)) {
56
+ for (const e of s.expectedInputs)
57
+ if (e.type === "audio" || e.type === "image")
86
58
  return "unavailable";
87
59
  }
88
60
  return "available";
@@ -94,167 +66,109 @@ class I extends $ {
94
66
  * @param {EventTarget} [monitorTarget] - The event target to dispatch download progress events to.
95
67
  * @returns {Promise<Object>} The generator.
96
68
  */
97
- async createSession(o, t, n) {
98
- return o.responseConstraint && console.warn(
69
+ async createSession(s, e, n) {
70
+ return s.responseConstraint && console.warn(
99
71
  "The `responseConstraint` flag isn't supported by the Transformers.js backend and was ignored."
100
72
  ), await this.#s(n), this.generationConfig = {
101
73
  max_new_tokens: 512,
102
74
  // Default limit
103
- temperature: t.generationConfig?.temperature ?? 1,
75
+ temperature: e.generationConfig?.temperature ?? 1,
104
76
  top_p: 1,
105
- do_sample: t.generationConfig?.temperature !== 0,
77
+ do_sample: e.generationConfig?.temperature !== 0,
106
78
  return_full_text: !1
107
- }, this.#n = t.systemInstruction, this.#e;
79
+ }, this.#n = e.systemInstruction, this.#e;
108
80
  }
109
- async generateContent(o) {
110
- const t = await this.#s(), n = this.#r(o), a = this.#t.apply_chat_template(n, {
81
+ /**
82
+ * Generates content (non-streaming).
83
+ * @param {Array} contents - The history + new message content.
84
+ * @returns {Promise<{text: string, usage: number}>}
85
+ */
86
+ async generateContent(s) {
87
+ const e = await this.#s(), n = this.#r(s), r = this.#t.apply_chat_template(n, {
111
88
  tokenize: !1,
112
89
  add_generation_prompt: !0
113
- }), e = (await t(a, {
90
+ }), t = (await e(r, {
114
91
  ...this.generationConfig,
115
92
  add_special_tokens: !1
116
- }))[0].generated_text, r = await this.countTokens(o);
117
- return { text: e, usage: r };
93
+ }))[0].generated_text, i = await this.countTokens(s);
94
+ return { text: t, usage: i };
118
95
  }
119
- async generateContentStream(o) {
120
- const t = await this.#s(), n = this.#r(o), a = this.#t.apply_chat_template(n, {
96
+ /**
97
+ * Generates content stream.
98
+ * @param {Array} contents - The history + new content.
99
+ * @returns {Promise<AsyncIterable>} Stream of chunks.
100
+ */
101
+ async generateContentStream(s) {
102
+ const e = await this.#s(), n = this.#r(s), r = this.#t.apply_chat_template(n, {
121
103
  tokenize: !1,
122
104
  add_generation_prompt: !0
123
- }), l = [];
124
- let e, r = new Promise((i) => e = i), c = !1;
125
- const f = (i) => {
126
- l.push(i), e && (e(), e = null);
127
- }, d = new C(this.#t, {
105
+ }), o = [];
106
+ let t, i = new Promise((a) => t = a), l = !1;
107
+ const u = (a) => {
108
+ o.push(a), t && (t(), t = null);
109
+ }, d = new f(this.#t, {
128
110
  skip_prompt: !0,
129
111
  skip_special_tokens: !0,
130
- callback_function: f
112
+ callback_function: u
131
113
  });
132
- return t(a, {
114
+ return e(r, {
133
115
  ...this.generationConfig,
134
116
  add_special_tokens: !1,
135
117
  streamer: d
136
118
  }).then(() => {
137
- c = !0, e && (e(), e = null);
138
- }).catch((i) => {
139
- console.error("[Transformers.js] Generation error:", i), c = !0, e && (e(), e = null);
119
+ l = !0, t && (t(), t = null);
120
+ }).catch((a) => {
121
+ console.error("[Transformers.js] Generation error:", a), l = !0, t && (t(), t = null);
140
122
  }), (async function* () {
141
123
  for (; ; ) {
142
- for (l.length === 0 && !c && (e || (r = new Promise((i) => e = i)), await r); l.length > 0; ) {
143
- const i = l.shift();
124
+ for (o.length === 0 && !l && (t || (i = new Promise((a) => t = a)), await i); o.length > 0; ) {
125
+ const a = o.shift();
144
126
  yield {
145
- text: () => i,
127
+ text: () => a,
146
128
  usageMetadata: { totalTokenCount: 0 }
147
129
  };
148
130
  }
149
- if (c)
131
+ if (l)
150
132
  break;
151
133
  }
152
134
  })();
153
135
  }
154
- async countTokens(o) {
136
+ /**
137
+ * Counts tokens.
138
+ * @param {Array} contents - The content to count.
139
+ * @returns {Promise<number>} Total tokens.
140
+ */
141
+ async countTokens(s) {
155
142
  await this.#s();
156
- const t = this.#r(o);
157
- return this.#t.apply_chat_template(t, {
143
+ const e = this.#r(s);
144
+ return this.#t.apply_chat_template(e, {
158
145
  tokenize: !0,
159
146
  add_generation_prompt: !1,
160
147
  return_tensor: !1
161
148
  }).length;
162
149
  }
163
- #r(o) {
164
- const t = o.map((n) => {
165
- let a = n.role === "model" ? "assistant" : n.role === "system" ? "system" : "user";
166
- const l = n.parts.map((e) => e.text).join("");
167
- return { role: a, content: l };
150
+ #r(s) {
151
+ const e = s.map((n) => {
152
+ let r = n.role === "model" ? "assistant" : n.role === "system" ? "system" : "user";
153
+ const o = n.parts.map((t) => t.text).join("");
154
+ return { role: r, content: o };
168
155
  });
169
- if (this.#n && !t.some((n) => n.role === "system") && t.unshift({ role: "system", content: this.#n }), this.modelName.toLowerCase().includes("gemma")) {
170
- const n = t.findIndex((a) => a.role === "system");
156
+ if (this.#n && !e.some((n) => n.role === "system") && e.unshift({ role: "system", content: this.#n }), this.modelName.toLowerCase().includes("gemma")) {
157
+ const n = e.findIndex((r) => r.role === "system");
171
158
  if (n !== -1) {
172
- const a = t[n], l = t.findIndex(
173
- (e, r) => e.role === "user" && r > n
159
+ const r = e[n], o = e.findIndex(
160
+ (t, i) => t.role === "user" && i > n
174
161
  );
175
- l !== -1 ? (t[l].content = a.content + `
162
+ o !== -1 ? (e[o].content = r.content + `
176
163
 
177
- ` + t[l].content, t.splice(n, 1)) : (a.content += `
164
+ ` + e[o].content, e.splice(n, 1)) : (r.content += `
178
165
 
179
- `, a.role = "user");
166
+ `, r.role = "user");
180
167
  }
181
168
  }
182
- return t;
183
- }
184
- }
185
- async function M(g, o = {}) {
186
- const { dtype: t = "q8", branch: n = "main" } = o;
187
- let a = null;
188
- const l = `transformers_model_files_${g}_${t}_${n}`;
189
- try {
190
- const s = localStorage.getItem(l);
191
- if (s) {
192
- a = JSON.parse(s);
193
- const { timestamp: p, files: u } = a, v = 1440 * 60 * 1e3;
194
- if (Date.now() - p < v)
195
- return u;
196
- }
197
- } catch (s) {
198
- console.warn("Failed to read from localStorage cache:", s);
199
- }
200
- const e = `https://huggingface.co/api/models/${g}/tree/${n}?recursive=true`;
201
- let r;
202
- try {
203
- if (r = await fetch(e), !r.ok)
204
- throw new Error(`Manifest fetch failed: ${r.status}`);
205
- } catch (s) {
206
- if (a)
207
- return console.warn(
208
- "Failed to fetch manifest from network, falling back to cached data (expired):",
209
- s
210
- ), a.files;
211
- throw s;
212
- }
213
- const c = await r.json(), f = new Map(c.map((s) => [s.path, s.size])), d = [], h = (s) => f.has(s), i = (s) => h(s) ? (d.push({ path: s, size: f.get(s) }), !0) : !1;
214
- i("config.json"), i("generation_config.json"), i("preprocessor_config.json"), h("tokenizer.json") ? (i("tokenizer.json"), i("tokenizer_config.json")) : (i("tokenizer_config.json"), i("special_tokens_map.json"), i("vocab.json"), i("merges.txt"), i("vocab.txt"));
215
- const w = "onnx";
216
- let m;
217
- t === "fp32" ? m = [""] : t === "quantized" ? m = ["_quantized"] : (m = [`_${t}`], t === "q8" && m.push(""));
218
- let k = [
219
- "model",
220
- "encoder_model",
221
- "decoder_model",
222
- "decoder_model_merged"
223
- ];
224
- const _ = [];
225
- for (const s of k)
226
- for (const p of m) {
227
- const u = `${w}/${s}${p}.onnx`;
228
- if (h(u)) {
229
- _.push(u);
230
- break;
231
- }
232
- }
233
- const x = _.some(
234
- (s) => s.includes("decoder_model_merged")
235
- ), b = _.filter((s) => !(x && s.includes("decoder_model") && !s.includes("merged")));
236
- for (const s of b) {
237
- i(s);
238
- const p = `${s}_data`;
239
- if (i(p)) {
240
- let u = 1;
241
- for (; i(`${p}_${u}`); )
242
- u++;
243
- }
244
- }
245
- try {
246
- localStorage.setItem(
247
- l,
248
- JSON.stringify({
249
- timestamp: Date.now(),
250
- files: d
251
- })
252
- );
253
- } catch (s) {
254
- console.warn("Failed to write to localStorage cache:", s);
169
+ return e;
255
170
  }
256
- return d;
257
171
  }
258
172
  export {
259
- I as default
173
+ w as default
260
174
  };
@@ -7,7 +7,7 @@ class a {
7
7
  }
8
8
  /**
9
9
  * Checks if the backend is available given the options.
10
- * @param {Object} options - LanguageModel options.
10
+ * @param {Object} _options - LanguageModel options.
11
11
  * @returns {string} 'available', 'unavailable', 'downloadable', or 'downloading'.
12
12
  */
13
13
  static availability(e) {
@@ -15,9 +15,9 @@ class a {
15
15
  }
16
16
  /**
17
17
  * Creates a model session and stores it.
18
- * @param {Object} options - LanguageModel options.
19
- * @param {Object} sessionParams - Parameters for the cloud or local model.
20
- * @param {EventTarget} [monitorTarget] - The event target to dispatch download progress events to.
18
+ * @param {Object} _options - LanguageModel options.
19
+ * @param {Object} _sessionParams - Parameters for the cloud or local model.
20
+ * @param {EventTarget} [_monitorTarget] - The event target to dispatch download progress events to.
21
21
  * @returns {any} The created session object.
22
22
  */
23
23
  createSession(e, n, o) {
@@ -25,7 +25,7 @@ class a {
25
25
  }
26
26
  /**
27
27
  * Generates content (non-streaming).
28
- * @param {Array} content - The history + new message content.
28
+ * @param {Array} _content - The history + new message content.
29
29
  * @returns {Promise<{text: string, usage: number}>}
30
30
  */
31
31
  async generateContent(e) {
@@ -33,7 +33,7 @@ class a {
33
33
  }
34
34
  /**
35
35
  * Generates content stream.
36
- * @param {Array} content - The history + new content.
36
+ * @param {Array} _content - The history + new content.
37
37
  * @returns {Promise<AsyncIterable>} Stream of chunks.
38
38
  */
39
39
  async generateContentStream(e) {
@@ -41,7 +41,7 @@ class a {
41
41
  }
42
42
  /**
43
43
  * Counts tokens.
44
- * @param {Array} content - The content to count.
44
+ * @param {Array} _content - The content to count.
45
45
  * @returns {Promise<number>} Total tokens.
46
46
  */
47
47
  async countTokens(e) {
@@ -180,7 +180,7 @@ class M {
180
180
  t.setUint8(e + n, r.charCodeAt(n));
181
181
  }
182
182
  }
183
- function O(s) {
183
+ function v(s) {
184
184
  if (!s)
185
185
  return;
186
186
  const t = {
@@ -204,12 +204,12 @@ function O(s) {
204
204
  return T.array({
205
205
  ...t,
206
206
  // Recursively convert the 'items' schema
207
- items: O(s.items)
207
+ items: v(s.items)
208
208
  });
209
209
  case "object": {
210
210
  const e = {}, r = s.properties ? Object.keys(s.properties) : [];
211
211
  r.forEach((i) => {
212
- e[i] = O(
212
+ e[i] = v(
213
213
  s.properties[i]
214
214
  );
215
215
  });
@@ -348,23 +348,32 @@ class h extends EventTarget {
348
348
  }
349
349
  return "unavailable";
350
350
  }
351
- return (await h.#h(e)).availability(t);
351
+ return (await h.#p(e)).availability(t);
352
352
  }
353
- static #g = A;
354
- static #d(t = globalThis) {
355
- for (const r of h.#g) {
356
- const n = t[r.config] || globalThis[r.config];
357
- if (n && n.apiKey)
358
- return { ...r, configValue: n };
353
+ static #d = A;
354
+ static #h(t = globalThis) {
355
+ for (const n of h.#d) {
356
+ const o = t[n.config] || globalThis[n.config];
357
+ if (o && o.apiKey)
358
+ return { ...n, configValue: o };
359
359
  }
360
- const e = h.#g.map((r) => `window.${r.config}`).join(", ");
360
+ const e = h.#d.find(
361
+ (n) => n.config === "TRANSFORMERS_CONFIG"
362
+ );
363
+ if (e)
364
+ return {
365
+ ...e,
366
+ configValue: { apiKey: "dummy", isDefault: !0 },
367
+ isDefault: !0
368
+ };
369
+ const r = h.#d.map((n) => `window.${n.config}`).join(", ");
361
370
  throw new (t.DOMException || globalThis.DOMException)(
362
- `Prompt API Polyfill: No backend configuration found. Please set one of: ${e}.`,
371
+ `Prompt API Polyfill: No backend configuration found. Please set one of: ${r}.`,
363
372
  "NotSupportedError"
364
373
  );
365
374
  }
366
- static async #h(t = globalThis) {
367
- const e = h.#d(t);
375
+ static async #p(t = globalThis) {
376
+ const e = h.#h(t);
368
377
  return I(e.path);
369
378
  }
370
379
  static async #x(t = {}, e = globalThis) {
@@ -455,8 +464,8 @@ class h extends EventTarget {
455
464
  "Aborted",
456
465
  "AbortError"
457
466
  );
458
- const n = h.#d(e), o = await h.#h(e), i = new o(n.configValue), a = { ...t };
459
- h.#u(
467
+ const n = h.#h(e), o = await h.#p(e), i = new o(n.configValue), a = { ...t };
468
+ h.#g(
460
469
  a.responseConstraint,
461
470
  e
462
471
  );
@@ -565,7 +574,7 @@ class h extends EventTarget {
565
574
  "Aborted",
566
575
  "AbortError"
567
576
  );
568
- const e = JSON.parse(JSON.stringify(this.#e)), r = { ...this.#a, ...t }, n = await h.#h(this.#t), o = h.#d(this.#t), i = new n(o.configValue), a = await i.createSession(
577
+ const e = JSON.parse(JSON.stringify(this.#e)), r = { ...this.#a, ...t }, n = await h.#p(this.#t), o = h.#h(this.#t), i = new n(o.configValue), a = await i.createSession(
569
578
  r,
570
579
  this.#n
571
580
  );
@@ -601,17 +610,14 @@ class h extends EventTarget {
601
610
  if (typeof t == "object" && t !== null && !Array.isArray(t) && Object.keys(t).length === 0)
602
611
  return "[object Object]";
603
612
  if (e.responseConstraint) {
604
- h.#u(
613
+ h.#g(
605
614
  e.responseConstraint,
606
615
  this.#t
607
616
  );
608
- const l = O(
617
+ const l = v(
609
618
  e.responseConstraint
610
619
  );
611
- this.#n.generationConfig.responseMimeType = "application/json", this.#n.generationConfig.responseSchema = l, this.#o.createSession(
612
- this.#a,
613
- this.#n
614
- );
620
+ this.#n.generationConfig.responseMimeType = "application/json", this.#n.generationConfig.responseSchema = l, this.#o.createSession(this.#a, this.#n);
615
621
  }
616
622
  const r = this.#E(t), n = await this.#l(t);
617
623
  if (this.#r)
@@ -642,7 +648,7 @@ class h extends EventTarget {
642
648
  { once: !0 }
643
649
  );
644
650
  }), a = (async () => {
645
- const l = this.#p(n);
651
+ const l = this.#u(n);
646
652
  if (l === "QuotaExceededError") {
647
653
  const f = this.#t && this.#t.QuotaExceededError || this.#t && this.#t.DOMException || globalThis.QuotaExceededError || globalThis.DOMException, d = new f(
648
654
  "The prompt is too large, it exceeds the quota.",
@@ -729,17 +735,14 @@ class h extends EventTarget {
729
735
  n && n.addEventListener("abort", a);
730
736
  try {
731
737
  if (e.responseConstraint) {
732
- h.#u(
738
+ h.#g(
733
739
  e.responseConstraint,
734
740
  r.#t
735
741
  );
736
- const g = O(
742
+ const g = v(
737
743
  e.responseConstraint
738
744
  );
739
- r.#n.generationConfig.responseMimeType = "application/json", r.#n.generationConfig.responseSchema = g, r.#o.createSession(
740
- r.#a,
741
- r.#n
742
- );
745
+ r.#n.generationConfig.responseMimeType = "application/json", r.#n.generationConfig.responseSchema = g, r.#o.createSession(r.#a, r.#n);
743
746
  }
744
747
  const l = r.#E(t), c = await r.#l(t);
745
748
  if (r.#r)
@@ -747,7 +750,7 @@ class h extends EventTarget {
747
750
  "Session is destroyed",
748
751
  "InvalidStateError"
749
752
  );
750
- const p = { role: "user", parts: c }, w = r.#p(c);
753
+ const p = { role: "user", parts: c }, w = r.#u(c);
751
754
  if (w === "QuotaExceededError") {
752
755
  const g = r.#t && r.#t.QuotaExceededError || r.#t && r.#t.DOMException || globalThis.QuotaExceededError || globalThis.DOMException, x = new g(
753
756
  "The prompt is too large, it exceeds the quota.",
@@ -757,8 +760,8 @@ class h extends EventTarget {
757
760
  value: 22,
758
761
  configurable: !0
759
762
  });
760
- const v = 1e7;
761
- throw x.requested = v, x.quota = r.contextWindow, x;
763
+ const O = 1e7;
764
+ throw x.requested = O, x.quota = r.contextWindow, x;
762
765
  } else if (w === "contextoverflow") {
763
766
  r.dispatchEvent(new Event("contextoverflow")), o.enqueue("Mock response for quota overflow test."), o.close();
764
767
  return;
@@ -798,9 +801,9 @@ class h extends EventTarget {
798
801
  let x = g.text();
799
802
  if (l && !d) {
800
803
  E += x;
801
- const v = E.match(/^\s*{\s*"Rating"\s*:\s*/);
802
- if (v)
803
- x = E.slice(v[0].length), d = !0, E = "";
804
+ const O = E.match(/^\s*{\s*"Rating"\s*:\s*/);
805
+ if (O)
806
+ x = E.slice(O[0].length), d = !0, E = "";
804
807
  else if (E.length > 50)
805
808
  x = E, d = !0, E = "";
806
809
  else
@@ -864,7 +867,7 @@ class h extends EventTarget {
864
867
  "Session is destroyed",
865
868
  "InvalidStateError"
866
869
  );
867
- const r = this.#p(e);
870
+ const r = this.#u(e);
868
871
  return r === "QuotaExceededError" ? 1e7 : r === "contextoverflow" ? 5e5 : await this.#o.countTokens([
869
872
  { role: "user", parts: e }
870
873
  ]) || 0;
@@ -875,7 +878,7 @@ class h extends EventTarget {
875
878
  }
876
879
  }
877
880
  // Volkswagen mode detection to avoid cloud costs for WPT tests.
878
- #p(t) {
881
+ #u(t) {
879
882
  return h.#y(t);
880
883
  }
881
884
  static #y(t) {
@@ -884,7 +887,7 @@ class h extends EventTarget {
884
887
  const e = t[0].text;
885
888
  return typeof e != "string" || !e.startsWith("Please write a sentence in English.") ? null : e.length > 1e7 ? "QuotaExceededError" : e.length > 5e4 ? "contextoverflow" : null;
886
889
  }
887
- static #u(t, e) {
890
+ static #g(t, e) {
888
891
  if (t)
889
892
  try {
890
893
  JSON.stringify(t);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prompt-api-polyfill",
3
- "version": "1.11.0",
3
+ "version": "1.12.0",
4
4
  "description": "Polyfill for the Prompt API (`LanguageModel`) backed by Firebase AI Logic, Gemini API, OpenAI API, or Transformers.js.",
5
5
  "type": "module",
6
6
  "main": "./dist/prompt-api-polyfill.js",
@@ -47,19 +47,19 @@
47
47
  },
48
48
  "devDependencies": {
49
49
  "@eslint/js": "^10.0.1",
50
- "eslint": "^10.0.2",
50
+ "eslint": "^10.0.3",
51
51
  "eslint-config-prettier": "^10.1.8",
52
- "globals": "^17.3.0",
52
+ "globals": "^17.4.0",
53
+ "node-addon-api": "^8.6.0",
54
+ "node-gyp": "^12.2.0",
53
55
  "prettier": "^3.8.1",
54
56
  "prettier-plugin-curly": "^0.4.1",
55
- "vite": "^7.3.1",
56
- "node-gyp": "^12.2.0",
57
- "node-addon-api": "^8.6.0"
57
+ "vite": "^7.3.1"
58
58
  },
59
59
  "dependencies": {
60
- "@google/genai": "^1.43.0",
61
- "@huggingface/transformers": "^3.8.1",
62
- "firebase": "^12.9.0",
63
- "openai": "^6.25.0"
60
+ "@google/genai": "^1.44.0",
61
+ "@huggingface/transformers": "^4.0.0-next.6",
62
+ "firebase": "^12.10.0",
63
+ "openai": "^6.27.0"
64
64
  }
65
65
  }