@smart-cloud/ai-kit-core 1.2.6 → 1.3.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 +3 -3
- package/dist/index.d.cts +20 -3
- package/dist/index.d.ts +20 -3
- package/dist/index.js +4 -4
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";var $=Object.defineProperty;var je=Object.getOwnPropertyDescriptor;var Ve=Object.getOwnPropertyNames;var Ge=Object.prototype.hasOwnProperty;var P=(e,t)=>()=>(e&&(t=e(e=0)),t);var H=(e,t)=>{for(var r in t)$(e,r,{get:t[r],enumerable:!0})},$e=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of Ve(t))!Ge.call(e,a)&&a!==r&&$(e,a,{get:()=>t[a],enumerable:!(n=je(t,a))||n.enumerable});return e};var Xe=e=>$e($({},"__esModule",{value:!0}),e);function T(){return globalThis.WpSuite?.plugins?.aiKit}async function X(e=8e3){let t=T();if(t?.status!=="available"){if(t?.status==="error")throw new Error("AiKit failed");await new Promise((r,n)=>{let a=()=>s(r),o=()=>s(()=>n(new Error("AiKit failed"))),s=u=>{window.removeEventListener("wpsuite:ai-kit:ready",a),window.removeEventListener("wpsuite:ai-kit:error",o),i&&clearTimeout(i),u()};window.addEventListener("wpsuite:ai-kit:ready",a,{once:!0}),window.addEventListener("wpsuite:ai-kit:error",o,{once:!0});let i=e?window.setTimeout(()=>s(()=>n(new Error("AiKit timeout"))),e):0})}}async function ce(e=1e4){await X(e);let r=T()?.features?.store;if(!r)throw new Error("AiKit store is not available");return r}var J=P(()=>{"use strict"});var le,A,Q,Z,Y,Je,Qe,Ze,Ye,et,de,U,ge,pe,q=P(()=>{"use strict";le=require("@smart-cloud/wpsuite-core"),A=require("@wordpress/data"),Q=require("aws-amplify/utils");J();typeof WpSuite<"u"?Z=WpSuite.siteSettings:Z={};Y=e=>{let t=e&&typeof e=="object"?e:{},r={};return typeof t.mode=="string"&&(r.mode=t.mode),typeof t.backendTransport=="string"&&(r.backendTransport=t.backendTransport),typeof t.backendApiName=="string"&&(r.backendApiName=t.backendApiName),typeof t.backendBaseUrl=="string"&&(r.backendBaseUrl=t.backendBaseUrl),typeof t.subscriptionType=="string"&&(r.subscriptionType=t.subscriptionType),typeof t.enableChatbot=="boolean"&&(r.enableChatbot=t.enableChatbot),typeof t.chatbot=="object"&&t.chatbot!==null&&(r.chatbot=t.chatbot),r},Je=async()=>{let e=T();if(!e)throw new Error("AI-Kit plugin is not available");let t=null;return e.settings.customTranslationsUrl&&(t=await fetch(e.settings.customTranslationsUrl+(e.settings.customTranslationsUrl.includes("?")?"&":"?")+"t="+Z.lastUpdate).then(r=>r.ok?r.text():null).then(r=>r?JSON.parse(r):null).catch(()=>null)),t??null},Qe=async()=>{let e=Y(await(0,le.getConfig)("aiKit")),t=await Je();return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},Ze={setShowChatbotPreview(e){return{type:"SET_SHOW_CHATBOT_PREVIEW",showChatbotPreview:e}},setLanguage(e){return!e||e==="system"?Q.I18n.setLanguage(""):Q.I18n.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}}},Ye={getConfig(e){return e.config},isShowChatbotPreview(e){return e.showChatbotPreview},getCustomTranslations(e){return e.customTranslations},getLanguage(e){return e.language},getDirection(e){return e.direction},getState(e){return e}},et={},de=e=>(0,A.dispatch)(e),U=e=>(0,A.select)(e),ge=async()=>{let e=await Qe(),t=(0,A.createReduxStore)("wpsuite/ai-kit",{reducer(r=e,n){switch(n.type){case"SET_LANGUAGE":return{...r,language:n.language};case"SET_DIRECTION":return{...r,direction:n.direction};case"SET_SHOW_CHATBOT_PREVIEW":return{...r,showChatbotPreview:n.showChatbotPreview}}return r},actions:Ze,selectors:Ye,resolvers:et});return(0,A.register)(t),t},pe=(e,t,r)=>{let n;function a(){let s=U(e).getState(),i=t(s);if(i!==n){let u=n;n=i,r(n,u)}}let o=(0,A.subscribe)(a,e);return a(),o}});var y,me=P(()=>{"use strict";y="smartcloud-ai-kit"});var h,tt,rt,nt,fe=P(()=>{"use strict";h=require("react/jsx-runtime"),tt=e=>(0,h.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[(0,h.jsx)("path",{d:"M19 27H33"}),(0,h.jsx)("path",{d:"M19 33H33"}),(0,h.jsx)("path",{d:"M8 21L9.5 24L12.5 25.5L9.5 27L8 30L6.5 27L3.5 25.5L6.5 24Z"}),(0,h.jsx)("path",{d:"M36 4L38 8L42 10L38 12L36 16L34 12L30 10L34 8Z"}),(0,h.jsx)("path",{d:"M16 10V40H36V22"}),(0,h.jsx)("path",{d:"M16 10H22"}),(0,h.jsx)("path",{d:"M22 10V23H36"}),(0,h.jsx)("path",{d:"M22 10L36 22"})]}),rt=e=>(0,h.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[(0,h.jsx)("path",{d:"M42 38L34 30H10C7.79086 30 6 28.2091 6 26V8C6 5.79086 7.79086 4 10 4H38C40.2091 4 42 5.79086 42 8V38Z"}),(0,h.jsx)("rect",{x:"14",y:"13",width:"6",height:"6",rx:"1"}),(0,h.jsx)("rect",{x:"28",y:"13",width:"6",height:"6",rx:"1"}),(0,h.jsx)("path",{d:"M16 24H32"})]}),nt=e=>(0,h.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"48",height:"48",viewBox:"0 0 48 48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[(0,h.jsx)("path",{stroke:"none",d:"M0 0h48v48H0z",fill:"none"}),(0,h.jsx)("path",{d:"M6 20a14 14 0 1 0 28 0a14 14 0 1 0 -28 0"}),(0,h.jsx)("path",{d:"M42 42l-12 -12"}),(0,h.jsx)("path",{d:"M20 20a3 3 0 1 0 -2.28 -4.948"}),(0,h.jsx)("circle",{cx:"20",cy:"26",r:"0.9",fill:"currentColor",stroke:"none"})]})});var x,ee=P(()=>{"use strict";x=class extends Error{constructor(r,n,a){super(r);this.decision=n;this.status=a;this.name="AiBackendError"}}});var Ce={};H(Ce,{MIN_CHROME_VERSION:()=>he,checkOnDeviceAvailability:()=>ke,decideCapability:()=>V,resolveBackend:()=>K});async function ye(){let t=await at?.plugins?.aiKit?.features.store;return U(t).getConfig()??{}}function we(e){let t=e.backendApiName?.trim()||void 0,r=e.backendBaseUrl?.trim()||void 0;return{transport:e.backendTransport??(r?"fetch":t?"gatey":void 0),backendApiName:t,backendBaseUrl:r}}function ot(e){if(e.mode)return e.mode;let{transport:t}=we(e);return t?"backend-fallback":"local-only"}async function K(){let e=await ye(),{transport:t,backendApiName:r,backendBaseUrl:n}=we(e);if(!t)return{available:!1,reason:"No backend configured"};if(t==="fetch")return n?{available:!0,transport:t,baseUrl:n,reason:"Custom fetch backend"}:{available:!1,reason:"backendBaseUrl is missing"};if(!r)return{available:!1,reason:"backendApiName is missing"};let a=globalThis.WpSuite?.plugins?.gatey;return!a?.availability||await a.availability()!=="available"?{available:!1,reason:"Gatey is not available"}:{available:!0,transport:t,apiName:r,reason:"Gatey backend"}}function O(e){return typeof globalThis[e]<"u"}function ve(e){if(!e)return;let t=Number.parseInt(String(e).split(".")[0]??"",10);return Number.isFinite(t)?t:void 0}function j(e,t){return e?.find(r=>r.brand===t)?.version}async function st(){let e=navigator?.userAgentData;if(e){try{let r=(await e.getHighEntropyValues?.(["fullVersionList"]))?.fullVersionList;if(Array.isArray(r)&&r.length>0)return r}catch{}if(Array.isArray(e.brands)&&e.brands.length>0)return e.brands}}function it(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?ve(t[1]):void 0}function ut(){return!!navigator?.brave}async function ct(e){if(typeof navigator>"u")return{allowed:!1,reason:"no-navigator"};if(typeof globalThis.isSecureContext=="boolean"&&!globalThis.isSecureContext)return{allowed:!1,reason:"not-secure-context"};let t=navigator.userAgent??"",r=await st(),n=j(r,"Microsoft Edge")??j(r,"Microsoft Edge WebView2"),a=j(r,"Google Chrome")??j(r,"Chromium"),o=!!n||/\bEdg\//i.test(t)||/\bEdgiOS\//i.test(t),s=/\bOPR\//i.test(t),i=/\bVivaldi\//i.test(t),u=/\bSamsungBrowser\//i.test(t),c=/\bFirefox\//i.test(t),g=!/\bChrome\//i.test(t)&&/\bSafari\//i.test(t)&&!/\bChromium\//i.test(t),l=ut()||/\bBrave\//i.test(t);if(o||s||i||u||c||g||l)return{allowed:!1,reason:o?"edge":l?"brave":c?"firefox":g?"safari":s?"opera":i?"vivaldi":u?"samsung":"unsupported-browser"};let p=ve(a)??it(t),f=he[e];return f?p?p<f?{allowed:!1,reason:`chrome-too-old-${p}-lt-${f}`,chromeMajor:p}:{allowed:!0,reason:"ok",chromeMajor:p}:{allowed:!1,reason:"unknown-chrome-version"}:{allowed:!1,reason:"no-min-version",chromeMajor:p}}async function ke(e,t){try{let r=await ct(e),n=`browser-gate:${r.reason}${r.chromeMajor?` (chrome ${r.chromeMajor})`:""}`;if(!r.allowed)return{available:!1,status:"unavailable",reason:n};switch(e){case"writer":{if(!O("Writer")||!Writer?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Writer.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"rewriter":{if(!O("Rewriter")||!Rewriter?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Rewriter.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"summarizer":{if(!O("Summarizer")||!Summarizer?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Summarizer.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"proofreader":{if(!O("Proofreader")||!Proofreader?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Proofreader.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"language-detector":{if(!O("LanguageDetector")||!LanguageDetector?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await LanguageDetector.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"translator":{if(!O("Translator")||!Translator?.availability)return{available:!1,status:"api-not-present",reason:n};let a=t;if(!a?.sourceLanguage||!a?.targetLanguage)return{available:!1,status:"error",reason:n,error:new Error("Translator.availability requires sourceLanguage/targetLanguage")};let o=await Translator.availability({...a,sourceLanguage:a.sourceLanguage==="auto"?"en":a.sourceLanguage,targetLanguage:a.sourceLanguage==="auto"||a.sourceLanguage===a.targetLanguage?"hu":a.targetLanguage});return{available:o!=="unavailable",status:o,reason:n}}case"prompt":{if(!O("LanguageModel")||!LanguageModel?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await LanguageModel.availability(t);return{available:a!=="unavailable",status:a,reason:n}}default:return{available:!1,status:"unknown-feature",reason:n}}}catch(r){return{available:!1,status:"error",reason:"exception in availability()",error:r}}}async function V(e,t,r){let n=await ye(),a=r||ot(n),o=await K(),s=await ke(e,t),i=s.available,u=o.available,c={feature:e,mode:a,onDeviceAvailable:i,onDeviceStatus:s.status,onDeviceReason:s.reason,backendAvailable:u,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason};return a==="local-only"?i?{...c,source:"on-device",reason:`local-only: on-device available (${s.reason??s.status})`}:{...c,source:"none",reason:`local-only: on-device unavailable (${s.reason??s.status})`}:a==="backend-only"?u?{...c,source:"backend",reason:`backend-only: backend available (${o.reason??"n/a"})`}:{...c,source:"none",reason:`backend-only: backend unavailable (${o.reason??"n/a"})`}:i?{...c,source:"on-device",reason:`backend-fallback: using on-device (${s.reason??s.status})`}:u?{...c,source:"backend",reason:`backend-fallback: using backend (${o.reason??"n/a"}; on-device: ${s.reason??s.status})`}:{...c,source:"none",reason:`No on-device AI or backend available (on-device: ${s.reason??s.status}; backend: ${o.reason??"n/a"})`}}var be,at,he,te=P(()=>{"use strict";be=require("@smart-cloud/wpsuite-core");q();at=(0,be.getWpSuite)();he={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138}});var Te={};H(Te,{dispatchBackend:()=>I,withRecaptchaHeaders:()=>z});function lt(){return globalThis.WpSuite?.plugins?.aiKit?.settings??{}}function dt(e){if(!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function gt(e){let t=e?.reCaptchaChatTtlSeconds,r=typeof t=="number"&&Number.isFinite(t)?Math.max(0,t):120;return Math.min(3600,r)*1e3}function pt(e,t){let r=gt(t);if(r<=0)return!1;let n=Pe.get(e);return n?Date.now()-n<r:!1}function re(e,t){let r=dt(t);r&&Pe.set(e,r)}function xe(e,t,r){if(e!=="frontend"||t!=="prompt"||!Le(r)||r.saveChatSession!==!0)return;let n=r.sessionId;return typeof n=="string"&&n.trim()?n.trim():void 0}function Se(e,t){if(!e)return;try{if(typeof e.get=="function")return e.get(t)??void 0}catch{}let r=Object.keys(e).find(a=>a.toLowerCase()===t.toLowerCase());if(!r)return;let n=e[r];return typeof n=="string"&&n?n:void 0}async function mt(e,t){if(e!=="frontend")return;let r=lt();if(!r?.reCaptchaSiteKey||t?.cacheKey&&pt(t.cacheKey,r))return;let{execute:n}=await(0,Ae.getRecaptcha)(r?.useRecaptchaEnterprise||!1);if(typeof n=="function")try{let o=await n(r.reCaptchaSiteKey,{action:"generate"});return typeof o=="string"&&o?o:void 0}catch{return}}async function z(e,t,r){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let n=await mt(e,r);return n?{...t,"X-Recaptcha-Token":n}:t}function E(e,t){try{e?.onStatus?.(t)}catch{}}function Le(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function bt(e,t){if(!Le(t))return t;let r=ft[e];if(!r)return t;let n={};for(let a of r)a in t&&(n[a]=t[a]);return n}function ht(e,t){return(e==="admin"?yt:wt)[t]}async function I(e,t,r,n,a={}){let o=ht(t,r),s=bt(r,n);if(!o)throw new x(`No backend path configured for "${r}" (${t}).`,e);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new x("backendTransport=fetch but backendBaseUrl is missing.",e);return vt(e.backendBaseUrl,o,s,a,e,r,t)}if(!e.backendApiName)throw new x("backendTransport=gatey but backendApiName is missing.",e);return kt(e.backendApiName,o,s,a,e,r,t)}async function vt(e,t,r,n,a,o,s){let i=`${e.replace(/\/+$/,"")}${t}`,u={"content-type":"application/json",...n.headers??{}},c=xe(s,o,r),g=await z(s,u,{cacheKey:c}),l=n.query&&Object.keys(n.query).length>0?"?"+new URLSearchParams(Object.entries(n.query).map(([m,k])=>[m,String(k)])).toString():"";E(n,{feature:o,context:s,step:"backend:request",source:"backend"}),E(n,{feature:o,context:s,step:"backend:waiting",source:"backend"});let p=await fetch(i+l,{method:"POST",headers:g,body:JSON.stringify(r??{}),signal:n.signal,credentials:"omit"});if(E(n,{feature:o,context:s,step:"backend:response",source:"backend"}),!p.ok){let m=`HTTP ${p.status}`;try{let k=await p.text();k&&(m=`${m}: ${k.substring(0,400)}`)}catch{}throw new x(`Fetch backend call failed: ${m}`,a,p.status)}let f=p.headers.get("content-type")||"",v=Se(p.headers,"x-recaptcha-verified-at");if(f.includes("application/json")){let m=await p.json(),k=(m&&typeof m.sessionId=="string"&&m.sessionId.trim()?m.sessionId.trim():void 0)??c;return v&&k&&re(k,v),m}return v&&c&&re(c,v),await p.text()}async function kt(e,t,r,n,a,o,s){let u=globalThis.WpSuite?.plugins?.gatey;if(!u?.cognito?.post)throw new x("Gatey backend selected, but Gatey.cognito.post is not available.",a);let c=xe(s,o,r),g=await z(s,{...n.headers??{}},{cacheKey:c});E(n,{feature:o,context:s,step:"backend:request",source:"backend"}),E(n,{feature:o,context:s,step:"backend:waiting",source:"backend"});let l=u.cognito.post({apiName:e,path:t,options:{body:r,headers:g,retryStrategy:{strategy:"no-retry"}}});n?.signal?.addEventListener?.("abort",()=>{l.cancel()});let p=await l.response,f=Se(p.headers,"x-recaptcha-verified-at"),v=await p.body.json(),m=v?.sessionId??c;return f&&typeof m=="string"&&m.trim()&&re(m.trim(),f),E(n,{feature:o,context:s,step:"backend:response",source:"backend"}),v}var Ae,Pe,ft,yt,wt,ne=P(()=>{"use strict";Ae=require("@smart-cloud/wpsuite-core");ee();Pe=new Map;ft={prompt:["text","systemPrompt","context","responseConstraint","saveChatSession","engine","sessionId","images","imageUrls","feedbackMessageId","feedbackType","knowledgeBaseId","disableKB","enableRerank","topK","temperature"],writer:["text","outputLanguage","instruction","context","tone","format","length","knowledgeBaseId","disableKB"],rewriter:["text","outputLanguage","instruction","context","tone","format","length"],summarizer:["text","outputLanguage","instruction","context","type","format","length"],translator:["text","sourceLanguage","targetLanguage"],"language-detector":["text","maxCandidates"],proofreader:["text","expectedInputLanguages"]};yt={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},wt={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});var Ne={};H(Ne,{detectLanguage:()=>zt,getPromptOptions:()=>We,getProofreadOptions:()=>Fe,getRewriteOptions:()=>Ie,getSummarizeOptions:()=>De,getTranslateOptions:()=>Ue,getWriteOptions:()=>Ee,prompt:()=>Xt,proofread:()=>Dt,rewrite:()=>Ft,sendChatMessage:()=>Jt,sendFeedbackMessage:()=>Zt,sendSearchMessage:()=>Qt,summarize:()=>Ut,translate:()=>_,write:()=>It});function oe(e){if(e==null)return String(e);if(typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return"["+e.map(oe).join(",")+"]";let t=e;return"{"+Object.keys(t).sort().map(n=>JSON.stringify(n)+":"+oe(t[n])).join(",")+"}"}function Ct(e){let t=5381;for(let r=0;r<e.length;r++)t=t*33^e.charCodeAt(r);return(t>>>0).toString(36)}function At(e,t){return`${e}:${Ct(oe(t))}`}function ae(){let e=new Map;for(let r of C.values()){let n=e.get(r.kind)??[];n.push(r),e.set(r.kind,n)}for(let[r,n]of e.entries())if(!(n.length<=Re)){n.sort((a,o)=>a.refCount-o.refCount||a.lastUsed-o.lastUsed||a.key.localeCompare(o.key));for(let a of n){if(e.get(r).length<=Re)break;if(!(a.refCount>0)){try{a.destroy()}catch{}C.delete(a.key),e.set(r,(e.get(r)??[]).filter(o=>o.key!==a.key))}}}if(C.size<=Oe)return;let t=Array.from(C.values());t.sort((r,n)=>r.refCount-n.refCount||r.lastUsed-n.lastUsed||r.key.localeCompare(n.key));for(let r of t){if(C.size<=Oe)break;if(!(r.refCount>0)){try{r.destroy()}catch{}C.delete(r.key)}}}async function R(e,t,r,n){let a=At(e,t),o=C.get(a);if(o)return o.refCount++,o.lastUsed=Date.now(),C.delete(a),C.set(a,o),{model:o.model,fromCache:!0,release:()=>{let u=C.get(a);u&&(u.refCount=Math.max(0,u.refCount-1),u.lastUsed=Date.now(),ae())}};let s=W.get(a);if(s)return s;let i=(async()=>{let u=await r(),c={kind:e,key:a,model:u,refCount:1,lastUsed:Date.now(),destroy:()=>n(u)};return C.set(a,c),W.delete(a),ae(),{model:u,fromCache:!1,release:()=>{let g=C.get(a);g&&(g.refCount=Math.max(0,g.refCount-1),g.lastUsed=Date.now(),ae())}}})().catch(u=>{throw W.delete(a),u});return W.set(a,i),i}function S(){return(Me?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function N(e){let t=["en","ja","es"],r=e.toLowerCase();return t.some(n=>r===n.toLowerCase())}function d(e,t,r,n){try{r?.onStatus?.({feature:e,context:t,...n})}catch{}}function F(){return Me?.plugins?.aiKit?.settings?.sharedContext??void 0}function L(e){return e?.context??"admin"}function B(e,t=Pt){let r=new AbortController,n=e?.signal,a=typeof e?.onDeviceTimeoutOverride=="number"?e.onDeviceTimeoutOverride:void 0,o=typeof a=="number"?a:t,s,i=!1,u=()=>{if(r.signal.aborted)return;let c=typeof n?.reason<"u"?n?.reason:void 0;r.abort(c??new DOMException("Aborted","AbortError"))};return n&&(n.aborted?u():n.addEventListener("abort",u)),o&&o>0&&(s=setTimeout(()=>{r.signal.aborted||(i=!0,r.abort(new se(o)))},o)),{signal:r.signal,timedOut:()=>i,dispose:()=>{s&&(clearTimeout(s),s=void 0),n&&n.removeEventListener("abort",u)}}}function G(e){let t=e;return{knowledgeBaseId:typeof t.knowledgeBaseId=="string"?t.knowledgeBaseId:void 0,disableKB:typeof t.disableKB=="boolean"?t.disableKB:void 0}}async function xt(e,t,r,n){let a=G(e),o=await ze(e.images,r,t,n);return{text:e.messages.filter(s=>s.role==="user").map(s=>s.content).join(`
|
|
1
|
+
"use strict";var $=Object.defineProperty;var je=Object.getOwnPropertyDescriptor;var Ve=Object.getOwnPropertyNames;var Ge=Object.prototype.hasOwnProperty;var P=(e,t)=>()=>(e&&(t=e(e=0)),t);var H=(e,t)=>{for(var r in t)$(e,r,{get:t[r],enumerable:!0})},$e=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of Ve(t))!Ge.call(e,a)&&a!==r&&$(e,a,{get:()=>t[a],enumerable:!(n=je(t,a))||n.enumerable});return e};var Xe=e=>$e($({},"__esModule",{value:!0}),e);function T(){return globalThis.WpSuite?.plugins?.aiKit}async function X(e=8e3){let t=T();if(t?.status!=="available"){if(t?.status==="error")throw new Error("AiKit failed");await new Promise((r,n)=>{let a=()=>s(r),o=()=>s(()=>n(new Error("AiKit failed"))),s=u=>{window.removeEventListener("wpsuite:ai-kit:ready",a),window.removeEventListener("wpsuite:ai-kit:error",o),i&&clearTimeout(i),u()};window.addEventListener("wpsuite:ai-kit:ready",a,{once:!0}),window.addEventListener("wpsuite:ai-kit:error",o,{once:!0});let i=e?window.setTimeout(()=>s(()=>n(new Error("AiKit timeout"))),e):0})}}async function ce(e=1e4){await X(e);let r=T()?.features?.store;if(!r)throw new Error("AiKit store is not available");return r}var J=P(()=>{"use strict"});var le,A,Q,Z,Y,Je,Qe,Ze,Ye,et,de,U,ge,pe,q=P(()=>{"use strict";le=require("@smart-cloud/wpsuite-core"),A=require("@wordpress/data"),Q=require("aws-amplify/utils");J();typeof WpSuite<"u"?Z=WpSuite.siteSettings:Z={};Y=e=>{let t=e&&typeof e=="object"?e:{},r={};return typeof t.mode=="string"&&(r.mode=t.mode),typeof t.backendTransport=="string"&&(r.backendTransport=t.backendTransport),typeof t.backendApiName=="string"&&(r.backendApiName=t.backendApiName),typeof t.backendBaseUrl=="string"&&(r.backendBaseUrl=t.backendBaseUrl),typeof t.subscriptionType=="string"&&(r.subscriptionType=t.subscriptionType),typeof t.enableChatbot=="boolean"&&(r.enableChatbot=t.enableChatbot),typeof t.chatbot=="object"&&t.chatbot!==null&&(r.chatbot=t.chatbot),r},Je=async()=>{let e=T();if(!e)throw new Error("AI-Kit plugin is not available");let t=null;return e.settings.customTranslationsUrl&&(t=await fetch(e.settings.customTranslationsUrl+(e.settings.customTranslationsUrl.includes("?")?"&":"?")+"t="+Z.lastUpdate).then(r=>r.ok?r.text():null).then(r=>r?JSON.parse(r):null).catch(()=>null)),t??null},Qe=async()=>{let e=Y(await(0,le.getConfig)("aiKit")),t=await Je();return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},Ze={setShowChatbotPreview(e){return{type:"SET_SHOW_CHATBOT_PREVIEW",showChatbotPreview:e}},setLanguage(e){return!e||e==="system"?Q.I18n.setLanguage(""):Q.I18n.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}}},Ye={getConfig(e){return e.config},isShowChatbotPreview(e){return e.showChatbotPreview},getCustomTranslations(e){return e.customTranslations},getLanguage(e){return e.language},getDirection(e){return e.direction},getState(e){return e}},et={},de=e=>(0,A.dispatch)(e),U=e=>(0,A.select)(e),ge=async()=>{let e=await Qe(),t=(0,A.createReduxStore)("wpsuite/ai-kit",{reducer(r=e,n){switch(n.type){case"SET_LANGUAGE":return{...r,language:n.language};case"SET_DIRECTION":return{...r,direction:n.direction};case"SET_SHOW_CHATBOT_PREVIEW":return{...r,showChatbotPreview:n.showChatbotPreview}}return r},actions:Ze,selectors:Ye,resolvers:et});return(0,A.register)(t),t},pe=(e,t,r)=>{let n;function a(){let s=U(e).getState(),i=t(s);if(i!==n){let u=n;n=i,r(n,u)}}let o=(0,A.subscribe)(a,e);return a(),o}});var y,me=P(()=>{"use strict";y="smartcloud-ai-kit"});var h,tt,rt,nt,fe=P(()=>{"use strict";h=require("react/jsx-runtime"),tt=e=>(0,h.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[(0,h.jsx)("path",{d:"M19 27H33"}),(0,h.jsx)("path",{d:"M19 33H33"}),(0,h.jsx)("path",{d:"M8 21L9.5 24L12.5 25.5L9.5 27L8 30L6.5 27L3.5 25.5L6.5 24Z"}),(0,h.jsx)("path",{d:"M36 4L38 8L42 10L38 12L36 16L34 12L30 10L34 8Z"}),(0,h.jsx)("path",{d:"M16 10V40H36V22"}),(0,h.jsx)("path",{d:"M16 10H22"}),(0,h.jsx)("path",{d:"M22 10V23H36"}),(0,h.jsx)("path",{d:"M22 10L36 22"})]}),rt=e=>(0,h.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[(0,h.jsx)("path",{d:"M42 38L34 30H10C7.79086 30 6 28.2091 6 26V8C6 5.79086 7.79086 4 10 4H38C40.2091 4 42 5.79086 42 8V38Z"}),(0,h.jsx)("rect",{x:"14",y:"13",width:"6",height:"6",rx:"1"}),(0,h.jsx)("rect",{x:"28",y:"13",width:"6",height:"6",rx:"1"}),(0,h.jsx)("path",{d:"M16 24H32"})]}),nt=e=>(0,h.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"48",height:"48",viewBox:"0 0 48 48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[(0,h.jsx)("path",{stroke:"none",d:"M0 0h48v48H0z",fill:"none"}),(0,h.jsx)("path",{d:"M6 20a14 14 0 1 0 28 0a14 14 0 1 0 -28 0"}),(0,h.jsx)("path",{d:"M42 42l-12 -12"}),(0,h.jsx)("path",{d:"M20 20a3 3 0 1 0 -2.28 -4.948"}),(0,h.jsx)("circle",{cx:"20",cy:"26",r:"0.9",fill:"currentColor",stroke:"none"})]})});var x,ee=P(()=>{"use strict";x=class extends Error{constructor(r,n,a){super(r);this.decision=n;this.status=a;this.name="AiBackendError"}}});var Ce={};H(Ce,{MIN_CHROME_VERSION:()=>he,checkOnDeviceAvailability:()=>ke,decideCapability:()=>V,resolveBackend:()=>K});async function ye(){let t=await at?.plugins?.aiKit?.features.store;return U(t).getConfig()??{}}function we(e){let t=e.backendApiName?.trim()||void 0,r=e.backendBaseUrl?.trim()||void 0;return{transport:e.backendTransport??(r?"fetch":t?"gatey":void 0),backendApiName:t,backendBaseUrl:r}}function ot(e){if(e.mode)return e.mode;let{transport:t}=we(e);return t?"backend-fallback":"local-only"}async function K(){let e=await ye(),{transport:t,backendApiName:r,backendBaseUrl:n}=we(e);if(!t)return{available:!1,reason:"No backend configured"};if(t==="fetch")return n?{available:!0,transport:t,baseUrl:n,reason:"Custom fetch backend"}:{available:!1,reason:"backendBaseUrl is missing"};if(!r)return{available:!1,reason:"backendApiName is missing"};let a=globalThis.WpSuite?.plugins?.gatey;return!a?.availability||await a.availability()!=="available"?{available:!1,reason:"Gatey is not available"}:{available:!0,transport:t,apiName:r,reason:"Gatey backend"}}function O(e){return typeof globalThis[e]<"u"}function ve(e){if(!e)return;let t=Number.parseInt(String(e).split(".")[0]??"",10);return Number.isFinite(t)?t:void 0}function j(e,t){return e?.find(r=>r.brand===t)?.version}async function st(){let e=navigator?.userAgentData;if(e){try{let r=(await e.getHighEntropyValues?.(["fullVersionList"]))?.fullVersionList;if(Array.isArray(r)&&r.length>0)return r}catch{}if(Array.isArray(e.brands)&&e.brands.length>0)return e.brands}}function it(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?ve(t[1]):void 0}function ut(){return!!navigator?.brave}async function ct(e){if(typeof navigator>"u")return{allowed:!1,reason:"no-navigator"};if(typeof globalThis.isSecureContext=="boolean"&&!globalThis.isSecureContext)return{allowed:!1,reason:"not-secure-context"};let t=navigator.userAgent??"",r=await st(),n=j(r,"Microsoft Edge")??j(r,"Microsoft Edge WebView2"),a=j(r,"Google Chrome")??j(r,"Chromium"),o=!!n||/\bEdg\//i.test(t)||/\bEdgiOS\//i.test(t),s=/\bOPR\//i.test(t),i=/\bVivaldi\//i.test(t),u=/\bSamsungBrowser\//i.test(t),c=/\bFirefox\//i.test(t),g=!/\bChrome\//i.test(t)&&/\bSafari\//i.test(t)&&!/\bChromium\//i.test(t),l=ut()||/\bBrave\//i.test(t);if(o||s||i||u||c||g||l)return{allowed:!1,reason:o?"edge":l?"brave":c?"firefox":g?"safari":s?"opera":i?"vivaldi":u?"samsung":"unsupported-browser"};let p=ve(a)??it(t),f=he[e];return f?p?p<f?{allowed:!1,reason:`chrome-too-old-${p}-lt-${f}`,chromeMajor:p}:{allowed:!0,reason:"ok",chromeMajor:p}:{allowed:!1,reason:"unknown-chrome-version"}:{allowed:!1,reason:"no-min-version",chromeMajor:p}}async function ke(e,t){try{let r=await ct(e),n=`browser-gate:${r.reason}${r.chromeMajor?` (chrome ${r.chromeMajor})`:""}`;if(!r.allowed)return{available:!1,status:"unavailable",reason:n};switch(e){case"writer":{if(!O("Writer")||!Writer?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Writer.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"rewriter":{if(!O("Rewriter")||!Rewriter?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Rewriter.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"summarizer":{if(!O("Summarizer")||!Summarizer?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Summarizer.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"proofreader":{if(!O("Proofreader")||!Proofreader?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Proofreader.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"language-detector":{if(!O("LanguageDetector")||!LanguageDetector?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await LanguageDetector.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"translator":{if(!O("Translator")||!Translator?.availability)return{available:!1,status:"api-not-present",reason:n};let a=t;if(!a?.sourceLanguage||!a?.targetLanguage)return{available:!1,status:"error",reason:n,error:new Error("Translator.availability requires sourceLanguage/targetLanguage")};let o=await Translator.availability({...a,sourceLanguage:a.sourceLanguage==="auto"?"en":a.sourceLanguage,targetLanguage:a.sourceLanguage==="auto"||a.sourceLanguage===a.targetLanguage?"hu":a.targetLanguage});return{available:o!=="unavailable",status:o,reason:n}}case"prompt":{if(!O("LanguageModel")||!LanguageModel?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await LanguageModel.availability(t);return{available:a!=="unavailable",status:a,reason:n}}default:return{available:!1,status:"unknown-feature",reason:n}}}catch(r){return{available:!1,status:"error",reason:"exception in availability()",error:r}}}async function V(e,t,r){let n=await ye(),a=r||ot(n),o=await K(),s=await ke(e,t),i=s.available,u=o.available,c={feature:e,mode:a,onDeviceAvailable:i,onDeviceStatus:s.status,onDeviceReason:s.reason,backendAvailable:u,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason};return a==="local-only"?i?{...c,source:"on-device",reason:`local-only: on-device available (${s.reason??s.status})`}:{...c,source:"none",reason:`local-only: on-device unavailable (${s.reason??s.status})`}:a==="backend-only"?u?{...c,source:"backend",reason:`backend-only: backend available (${o.reason??"n/a"})`}:{...c,source:"none",reason:`backend-only: backend unavailable (${o.reason??"n/a"})`}:i?{...c,source:"on-device",reason:`backend-fallback: using on-device (${s.reason??s.status})`}:u?{...c,source:"backend",reason:`backend-fallback: using backend (${o.reason??"n/a"}; on-device: ${s.reason??s.status})`}:{...c,source:"none",reason:`No on-device AI or backend available (on-device: ${s.reason??s.status}; backend: ${o.reason??"n/a"})`}}var be,at,he,te=P(()=>{"use strict";be=require("@smart-cloud/wpsuite-core");q();at=(0,be.getWpSuite)();he={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138}});var Te={};H(Te,{dispatchBackend:()=>E,withRecaptchaHeaders:()=>z});function lt(){return globalThis.WpSuite?.plugins?.aiKit?.settings??{}}function dt(e){if(!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function gt(e){let t=e?.reCaptchaChatTtlSeconds,r=typeof t=="number"&&Number.isFinite(t)?Math.max(0,t):120;return Math.min(3600,r)*1e3}function pt(e,t){let r=gt(t);if(r<=0)return!1;let n=Pe.get(e);return n?Date.now()-n<r:!1}function re(e,t){let r=dt(t);r&&Pe.set(e,r)}function xe(e,t,r){if(e!=="frontend"||t!=="prompt"||!Le(r)||r.saveChatSession!==!0)return;let n=r.sessionId;return typeof n=="string"&&n.trim()?n.trim():void 0}function Se(e,t){if(!e)return;try{if(typeof e.get=="function")return e.get(t)??void 0}catch{}let r=Object.keys(e).find(a=>a.toLowerCase()===t.toLowerCase());if(!r)return;let n=e[r];return typeof n=="string"&&n?n:void 0}async function mt(e,t){if(e!=="frontend")return;let r=lt();if(!r?.reCaptchaSiteKey||t?.cacheKey&&pt(t.cacheKey,r))return;let{execute:n}=await(0,Ae.getRecaptcha)(r?.useRecaptchaEnterprise||!1);if(typeof n=="function")try{let o=await n(r.reCaptchaSiteKey,{action:"generate"});return typeof o=="string"&&o?o:void 0}catch{return}}async function z(e,t,r){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let n=await mt(e,r);return n?{...t,"X-Recaptcha-Token":n}:t}function I(e,t){try{e?.onStatus?.(t)}catch{}}function Le(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function bt(e,t){if(!Le(t))return t;let r=ft[e];if(!r)return t;let n={};for(let a of r)a in t&&(n[a]=t[a]);return n}function ht(e,t){return(e==="admin"?yt:wt)[t]}async function E(e,t,r,n,a={}){let o=ht(t,r),s=bt(r,n);if(!o)throw new x(`No backend path configured for "${r}" (${t}).`,e);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new x("backendTransport=fetch but backendBaseUrl is missing.",e);return vt(e.backendBaseUrl,o,s,a,e,r,t)}if(!e.backendApiName)throw new x("backendTransport=gatey but backendApiName is missing.",e);return kt(e.backendApiName,o,s,a,e,r,t)}async function vt(e,t,r,n,a,o,s){let i=`${e.replace(/\/+$/,"")}${t}`,u={"content-type":"application/json",...n.headers??{}},c=xe(s,o,r),g=await z(s,u,{cacheKey:c}),l=n.query&&Object.keys(n.query).length>0?"?"+new URLSearchParams(Object.entries(n.query).map(([m,k])=>[m,String(k)])).toString():"";I(n,{feature:o,context:s,step:"backend:request",source:"backend"}),I(n,{feature:o,context:s,step:"backend:waiting",source:"backend"});let p=await fetch(i+l,{method:"POST",headers:g,body:JSON.stringify(r??{}),signal:n.signal,credentials:"omit"});if(I(n,{feature:o,context:s,step:"backend:response",source:"backend"}),!p.ok){let m=`HTTP ${p.status}`;try{let k=await p.text();k&&(m=`${m}: ${k.substring(0,400)}`)}catch{}throw new x(`Fetch backend call failed: ${m}`,a,p.status)}let f=p.headers.get("content-type")||"",v=Se(p.headers,"x-recaptcha-verified-at");if(f.includes("application/json")){let m=await p.json(),k=(m&&typeof m.sessionId=="string"&&m.sessionId.trim()?m.sessionId.trim():void 0)??c;return v&&k&&re(k,v),m}return v&&c&&re(c,v),await p.text()}async function kt(e,t,r,n,a,o,s){let u=globalThis.WpSuite?.plugins?.gatey;if(!u?.cognito?.post)throw new x("Gatey backend selected, but Gatey.cognito.post is not available.",a);let c=xe(s,o,r),g=await z(s,{...n.headers??{}},{cacheKey:c});I(n,{feature:o,context:s,step:"backend:request",source:"backend"}),I(n,{feature:o,context:s,step:"backend:waiting",source:"backend"});let l=u.cognito.post({apiName:e,path:t,options:{body:r,headers:g,retryStrategy:{strategy:"no-retry"}}});n?.signal?.addEventListener?.("abort",()=>{l.cancel()});let p=await l.response,f=Se(p.headers,"x-recaptcha-verified-at"),v=await p.body.json(),m=v?.sessionId??c;return f&&typeof m=="string"&&m.trim()&&re(m.trim(),f),I(n,{feature:o,context:s,step:"backend:response",source:"backend"}),v}var Ae,Pe,ft,yt,wt,ne=P(()=>{"use strict";Ae=require("@smart-cloud/wpsuite-core");ee();Pe=new Map;ft={prompt:["text","systemPrompt","context","responseConstraint","saveChatSession","engine","sessionId","images","imageUrls","feedbackMessageId","feedbackType","knowledgeBaseId","disableKB","enableRerank","topK","temperature"],writer:["text","outputLanguage","instruction","context","tone","format","length","knowledgeBaseId","disableKB"],rewriter:["text","outputLanguage","instruction","context","tone","format","length"],summarizer:["text","outputLanguage","instruction","context","type","format","length"],translator:["text","sourceLanguage","targetLanguage"],"language-detector":["text","maxCandidates"],proofreader:["text","expectedInputLanguages"]};yt={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},wt={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});var Ne={};H(Ne,{detectLanguage:()=>zt,getPromptOptions:()=>We,getProofreadOptions:()=>Fe,getRewriteOptions:()=>Ee,getSummarizeOptions:()=>De,getTranslateOptions:()=>Ue,getWriteOptions:()=>Ie,prompt:()=>Xt,proofread:()=>Dt,rewrite:()=>Ft,sendChatMessage:()=>Jt,sendFeedbackMessage:()=>Zt,sendSearchMessage:()=>Qt,summarize:()=>Ut,translate:()=>_,write:()=>Et});function oe(e){if(e==null)return String(e);if(typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return"["+e.map(oe).join(",")+"]";let t=e;return"{"+Object.keys(t).sort().map(n=>JSON.stringify(n)+":"+oe(t[n])).join(",")+"}"}function Ct(e){let t=5381;for(let r=0;r<e.length;r++)t=t*33^e.charCodeAt(r);return(t>>>0).toString(36)}function At(e,t){return`${e}:${Ct(oe(t))}`}function ae(){let e=new Map;for(let r of C.values()){let n=e.get(r.kind)??[];n.push(r),e.set(r.kind,n)}for(let[r,n]of e.entries())if(!(n.length<=Re)){n.sort((a,o)=>a.refCount-o.refCount||a.lastUsed-o.lastUsed||a.key.localeCompare(o.key));for(let a of n){if(e.get(r).length<=Re)break;if(!(a.refCount>0)){try{a.destroy()}catch{}C.delete(a.key),e.set(r,(e.get(r)??[]).filter(o=>o.key!==a.key))}}}if(C.size<=Oe)return;let t=Array.from(C.values());t.sort((r,n)=>r.refCount-n.refCount||r.lastUsed-n.lastUsed||r.key.localeCompare(n.key));for(let r of t){if(C.size<=Oe)break;if(!(r.refCount>0)){try{r.destroy()}catch{}C.delete(r.key)}}}async function R(e,t,r,n){let a=At(e,t),o=C.get(a);if(o)return o.refCount++,o.lastUsed=Date.now(),C.delete(a),C.set(a,o),{model:o.model,fromCache:!0,release:()=>{let u=C.get(a);u&&(u.refCount=Math.max(0,u.refCount-1),u.lastUsed=Date.now(),ae())}};let s=W.get(a);if(s)return s;let i=(async()=>{let u=await r(),c={kind:e,key:a,model:u,refCount:1,lastUsed:Date.now(),destroy:()=>n(u)};return C.set(a,c),W.delete(a),ae(),{model:u,fromCache:!1,release:()=>{let g=C.get(a);g&&(g.refCount=Math.max(0,g.refCount-1),g.lastUsed=Date.now(),ae())}}})().catch(u=>{throw W.delete(a),u});return W.set(a,i),i}function S(){return(Me?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function N(e){let t=["en","ja","es"],r=e.toLowerCase();return t.some(n=>r===n.toLowerCase())}function d(e,t,r,n){try{r?.onStatus?.({feature:e,context:t,...n})}catch{}}function F(){return Me?.plugins?.aiKit?.settings?.sharedContext??void 0}function L(e){return e?.context??"admin"}function B(e,t=Pt){let r=new AbortController,n=e?.signal,a=typeof e?.onDeviceTimeoutOverride=="number"?e.onDeviceTimeoutOverride:void 0,o=typeof a=="number"?a:t,s,i=!1,u=()=>{if(r.signal.aborted)return;let c=typeof n?.reason<"u"?n?.reason:void 0;r.abort(c??new DOMException("Aborted","AbortError"))};return n&&(n.aborted?u():n.addEventListener("abort",u)),o&&o>0&&(s=setTimeout(()=>{r.signal.aborted||(i=!0,r.abort(new se(o)))},o)),{signal:r.signal,timedOut:()=>i,dispose:()=>{s&&(clearTimeout(s),s=void 0),n&&n.removeEventListener("abort",u)}}}function G(e){let t=e;return{knowledgeBaseId:typeof t.knowledgeBaseId=="string"?t.knowledgeBaseId:void 0,disableKB:typeof t.disableKB=="boolean"?t.disableKB:void 0}}async function xt(e,t,r,n){let a=G(e),o=await ze(e.images,r,t,n);return{text:e.messages.filter(s=>s.role==="user").map(s=>s.content).join(`
|
|
2
2
|
`),systemPrompt:e.messages.filter(s=>s.role==="system").map(s=>s.content).join(`
|
|
3
|
-
`),images:o?.images,imageUrls:o?.imageUrls,context:e.sharedContext,saveChatSession:!1,responseConstraint:e.responseConstraint,...a}}async function St(e,t,r){let n=G(e),a=await ze(e.images,t,"frontend",r);return{sessionId:e.sessionId,text:e.message,images:a?.images,imageUrls:a?.imageUrls,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!0,...n}}async function Lt(e){let t=G(e);return{engine:"kb_rag",sessionId:e.sessionId,text:e.query,topK:e.topK,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!1,...t}}async function Tt(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function Ot(e){let t=G(e);return{text:e.prompt,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length,...t}}function Rt(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length}}function Bt(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,type:e.type,format:e.format,length:e.length}}function Mt(e,t,r){return{text:e,sourceLanguage:t,targetLanguage:r}}function Kt(e,t){let r=t;return{text:e,maxCandidates:typeof r?.maxCandidates=="number"?r.maxCandidates:void 0}}function Et(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function M(e,t,r,n,a,o,s,i){d(n,e,i,{step:"decide",message:"Deciding capability",silent:r});let u=await V(n,a,t);if(d(n,e,i,{step:"decide",source:u.source,message:`Using ${u.source}`,silent:r}),u.source==="on-device")try{let c=await o();return d(n,e,i,{step:"done",source:"on-device",silent:r}),c}catch(c){console.error(`Error in on-device ${n}:`,c),d(n,e,i,{step:"error",source:"on-device",message:c.message,silent:r}),i?.signal?.throwIfAborted()}if(u.mode!=="local-only"&&u.backendAvailable){d(n,e,i,{step:"backend:request",source:"backend",silent:r});let c=typeof s=="function"?await s(u):s,g=await I(u,e,n,c,i);return d(n,e,i,{step:"done",source:"backend",silent:r}),g}throw new Error(`No capability for "${n}" (${e}). Reason: ${u.reason}`)}function Wt(e){let t=Array.isArray(e.images)&&e.images.length>0,r=e.images??[],n=t?r.map(o=>({type:"image",value:o})):[],a;if(typeof e.messages=="string")a=t?[{role:"user",content:[{type:"text",value:e.messages},...n]}]:e.messages;else{let o=e.messages.filter(s=>s.role!=="system").map(s=>({role:s.role==="assistant"?"assistant":"user",content:s.content}));if(t){let s=-1;for(let i=o.length-1;i>=0;i--)if(o[i].role==="user"){s=i;break}if(s===-1)o.push({role:"user",content:[{type:"text",value:""},...n]});else{let i=String(o[s].content??"");o[s]={...o[s],content:[{type:"text",value:i},...n]}}}a=o}return a}function _t(e){return typeof Blob<"u"&&e instanceof Blob}function Ht(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function qt(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}async function jt(e){return new Promise((t,r)=>{let n=new FileReader;n.onerror=()=>r(n.error??new Error("FileReader error")),n.onload=()=>t(String(n.result??"")),n.readAsDataURL(e)})}async function Vt(e){let t=await jt(e),r=t.indexOf(",");return r>=0?t.substring(r+1):t}async function Gt(e,t,r,n,a,o){let s=t==="admin"?"/admin/generate-upload-url":"/frontend/generate-upload-url",i={...o?.headers??{}},u=await z(t,i);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new Error("backendBaseUrl missing for fetch transport");let f=new URLSearchParams({fileName:r,contentType:n,contentLength:String(a)}).toString(),v=`${e.backendBaseUrl.replace(/\/+$/,"")}${s}?${f}`,m=await fetch(v,{method:"GET",headers:u,signal:o?.signal,credentials:"omit"});if(!m.ok){let D=await m.text().catch(()=>"");throw new Error(`generate-upload-url failed (fetch): HTTP ${m.status}${D?": "+D.substring(0,200):""}`)}let k=await m.json();if(!k?.uploadUrl||!k?.imageKey)throw new Error("generate-upload-url response missing uploadUrl/imageKey");return{uploadUrl:k.uploadUrl,imageKey:k.imageKey}}if(!e.backendApiName)throw new Error("backendApiName missing for gatey transport");let c=globalThis.WpSuite?.plugins?.gatey,g={fileName:r,contentType:n,contentLength:a};if(c?.cognito?.get){let f=c.cognito.get({apiName:e.backendApiName,path:s,options:{queryParams:Object.keys(g).reduce((m,k)=>(m[k]=String(g[k]),m),{}),headers:u,retryStrategy:{strategy:"no-retry"}}});o?.signal?.addEventListener?.("abort",()=>{f.cancel()});let v=await f.response.then(m=>m.body.json());if(!v?.uploadUrl||!v?.imageKey)throw new Error("generate-upload-url (gatey get) response missing uploadUrl/imageKey");return{uploadUrl:v.uploadUrl,imageKey:v.imageKey}}if(!c?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let l=c.cognito.post({apiName:e.backendApiName,path:s,options:{body:g,headers:u,retryStrategy:{strategy:"no-retry"}}});o?.signal?.addEventListener?.("abort",()=>{l.cancel()});let p=await l.response.then(f=>f.body.json());if(!p?.uploadUrl||!p?.imageKey)throw new Error("generate-upload-url (gatey post) response missing uploadUrl/imageKey");return{uploadUrl:p.uploadUrl,imageKey:p.imageKey}}async function $t(e,t,r,n){let a=await fetch(e,{method:"PUT",headers:{"Content-Type":r||"application/octet-stream"},body:t,signal:n?.signal});if(!a.ok){let o=await a.text().catch(()=>"");throw new Error(`S3 upload failed: HTTP ${a.status}${o?": "+o.substring(0,200):""}`)}}async function ze(e,t,r,n){if(!e||e.length===0)return;let a=[];for(let c of e){if(!_t(c))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");a.push(c)}let o=a.reduce((c,g)=>c+(g.size||0),0);if(Math.ceil(o*1.37+2048*a.length)<=Nt){d("prompt",r,n,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let c=[];for(let g of a)c.push({format:qt(g.type),data:await Vt(g)});return{images:c}}d("prompt",r,n,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let u=[];for(let c=0;c<a.length;c++){let g=a[c],l=g.type||"application/octet-stream",p=g.name||`image_${c}.${Ht(l)}`;d("prompt",r,n,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:f,imageKey:v}=await Gt(t,r,p,l,g.size||0,n);d("prompt",r,n,{step:"backend:waiting",source:"backend",message:"Uploading"}),await $t(f,g,l,n),u.push(v)}return{imageUrls:u}}var Be,Oe,Re,C,W,Me,Pt,Ke,se,Ee,It,Ie,Ft,Fe,Dt,De,Ut,zt,Ue,_,Nt,We,Xt,Jt,Qt,Zt,_e=P(()=>{"use strict";Be=require("@smart-cloud/wpsuite-core");ne();te();He();Oe=8,Re=2,C=new Map,W=new Map;typeof window<"u"&&window.addEventListener("beforeunload",()=>{for(let e of C.values())try{e.destroy()}catch{}C.clear(),W.clear()});Me=(0,Be.getWpSuite)();Pt=45e3,Ke=5e3,se=class extends Error{timeoutMs;constructor(t){super(`On-device execution exceeded ${t}ms`),this.name="OnDeviceTimeoutError",this.timeoutMs=t}};Ee=e=>{let t=e.outputLanguage?e.outputLanguage:S(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},It=async(e,t)=>{let r=L(t),n=e.sharedContext??F(),a=e.outputLanguage?e.outputLanguage:S(),o=a,s=!1;N(a)||(s=!0,a="en");let i=Ee({...e,outputLanguage:a});return M(r,t?.modeOverride,!1,"writer",i,async()=>{if(typeof Writer>"u")throw new Error("Writer API not available in this browser.");d("writer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Writer session"});let u=B(t);try{let{model:c,release:g}=await R("writer",{core:i,sharedContext:n},()=>Writer.create({...i,sharedContext:n,monitor(l){l.addEventListener("downloadprogress",p=>{let f=p.loaded;d("writer",r,t,{step:"on-device:download",source:"on-device",progress:f,loaded:f})})}}),l=>l.destroy());d("writer",r,t,{step:"on-device:ready",source:"on-device"});try{d("writer",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let l=await c.write(e.prompt,{context:e.context,signal:u.signal});return s?{result:(await _({text:l,sourceLanguage:a,targetLanguage:o},{context:r,signal:u.signal})).result}:{result:l}}finally{try{g()}catch(l){console.error("Error destroying writer:",l)}}}finally{u.dispose()}},Ot({...e,sharedContext:n,outputLanguage:o}),t)},Ie=e=>{let t=e.outputLanguage?e.outputLanguage:S(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},Ft=async(e,t)=>{let r=L(t),n=e.sharedContext??F(),a=e.outputLanguage?e.outputLanguage:S(),o=a,s=!1;N(a)||(s=!0,a="en");let i=Ie({...e,outputLanguage:a});return M(r,t?.modeOverride,!1,"rewriter",i,async()=>{if(typeof Rewriter>"u")throw new Error("Rewriter API not available in this browser.");d("rewriter",r,t,{step:"on-device:init",source:"on-device",message:"Creating Rewriter session"});let u=B(t);try{let{model:c,release:g}=await R("rewriter",{core:i,sharedContext:n},()=>Rewriter.create({...i,sharedContext:n,monitor(l){l.addEventListener("downloadprogress",p=>{let f=p.loaded;d("rewriter",r,t,{step:"on-device:download",source:"on-device",progress:f,loaded:f})})}}),l=>l.destroy());d("rewriter",r,t,{step:"on-device:ready",source:"on-device"});try{d("rewriter",r,t,{step:"on-device:run",source:"on-device",message:"Rewriting text"});let l=await c.rewrite(e.text,{context:e.context,signal:u.signal});return s?{result:(await _({text:l,sourceLanguage:a,targetLanguage:o},{context:r,signal:u.signal})).result}:{result:l}}finally{try{g()}catch(l){console.error("Error destroying rewriter:",l)}}}finally{u.dispose()}},Rt({...e,sharedContext:n,outputLanguage:o}),t)},Fe=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),Dt=async(e,t)=>{let r=L(t),n=await Fe();return M(r,t?.modeOverride,!1,"proofreader",n,async()=>{if(typeof Proofreader>"u")throw new Error("Proofreader API not available in this browser.");d("proofreader",r,t,{step:"on-device:init",source:"on-device",message:"Creating Proofreader session"});let a=B(t);try{let{model:o,release:s}=await R("proofreader",{core:n},()=>Proofreader.create({...n,monitor(i){i.addEventListener("downloadprogress",u=>{let c=u.loaded;d("proofreader",r,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c})})}}),i=>i.destroy());d("proofreader",r,t,{step:"on-device:ready",source:"on-device"});try{return d("proofreader",r,t,{step:"on-device:run",source:"on-device",message:"Proofreading"}),{result:await o.proofread(e.text,{signal:a.signal})}}finally{try{s()}catch(i){console.error("Error destroying proofreader:",i)}}}finally{a.dispose()}},Et(e),t)},De=e=>{let t=e.outputLanguage?e.outputLanguage:S(),r={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},Ut=async(e,t)=>{let r=L(t),n=e.sharedContext??F(),a=e.outputLanguage?e.outputLanguage:S(),o=a,s=!1;N(a)||(s=!0,a="en");let i=await De({...e,outputLanguage:a});return M(r,t?.modeOverride,!1,"summarizer",i,async()=>{if(typeof Summarizer>"u")throw new Error("Summarizer API not available in this browser.");d("summarizer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Summarizer session"});let u=B(t);try{let{model:c,release:g}=await R("summarizer",{core:i,sharedContext:n},()=>Summarizer.create({...i,sharedContext:n,monitor(l){l.addEventListener("downloadprogress",p=>{let f=p.loaded;d("summarizer",r,t,{step:"on-device:download",source:"on-device",progress:f,loaded:f})})}}),l=>l.destroy());d("summarizer",r,t,{step:"on-device:ready",source:"on-device"});try{d("summarizer",r,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let l=await c.summarize(e.text,{context:e.context,signal:u.signal});return s?{result:(await _({text:l,sourceLanguage:a,targetLanguage:o},{context:r,signal:u.signal})).result}:{result:l}}finally{try{g()}catch(l){console.error("Error destroying summarizer:",l)}}}finally{u.dispose()}},Bt({...e,sharedContext:n,outputLanguage:o}),t)},zt=async(e,t)=>{let r=L(t);return M(r,t?.modeOverride,t?.silent,"language-detector",void 0,async()=>{if(typeof LanguageDetector>"u")throw new Error("LanguageDetector API not available in this browser.");d("language-detector",r,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageDetector session",silent:t?.silent});let n=B(t,Ke);try{let{model:a,release:o}=await R("language-detector",{},()=>LanguageDetector.create({monitor(s){s.addEventListener("downloadprogress",i=>{let u=i.loaded;d("language-detector",r,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u,silent:t?.silent})})}}),s=>s.destroy());d("language-detector",r,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{return d("language-detector",r,t,{step:"on-device:run",source:"on-device",message:"Detecting language",silent:t?.silent}),{result:{candidates:(await a.detect(e.text,{signal:n.signal})).filter(i=>ie.find(u=>u.value===i.detectedLanguage))}}}finally{try{o()}catch(s){console.error("Error destroying language detector:",s)}}}finally{n.dispose()}},Kt(e.text,t),t)},Ue=e=>{let t={sourceLanguage:e.sourceLanguage??"auto",targetLanguage:e.targetLanguage??S()??"en"};return Promise.resolve(t)},_=async(e,t)=>{let r=L(t),n=await Ue({...e});return M(r,t?.modeOverride,t?.silent,"translator",n,async()=>{if(typeof Translator>"u")throw new Error("Translator API not available in this browser.");d("translator",r,t,{step:"on-device:init",source:"on-device",message:"Creating Translator session",silent:t?.silent});let a=B(t,Ke);try{let{model:o,release:s}=await R("translator",{core:n},()=>Translator.create({...n,monitor(i){i.addEventListener("downloadprogress",u=>{let c=u.loaded;d("translator",r,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c,silent:t?.silent})})}}),i=>i.destroy());d("translator",r,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{d("translator",r,t,{step:"on-device:run",source:"on-device",message:"Translating",silent:t?.silent});let i=[],u=()=>{if(typeof a.signal.throwIfAborted=="function")a.signal.throwIfAborted();else if(a.signal.aborted)throw a.signal.reason??new DOMException("Aborted","AbortError")};for(let g of e.text.split(`
|
|
3
|
+
`),images:o?.images,imageUrls:o?.imageUrls,audio:e.audio,context:e.sharedContext,saveChatSession:!1,responseConstraint:e.responseConstraint,...a}}async function St(e,t,r){let n=G(e),a=await ze(e.images,t,"frontend",r);return{sessionId:e.sessionId,text:e.message,images:a?.images,imageUrls:a?.imageUrls,audio:e.audio,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!0,...n}}async function Lt(e){let t=G(e);return{engine:"kb_rag",sessionId:e.sessionId,text:e.query,audio:e.audio,topK:e.topK,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!1,...t}}async function Tt(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function Ot(e){let t=G(e);return{text:e.prompt,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length,...t}}function Rt(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length}}function Bt(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,type:e.type,format:e.format,length:e.length}}function Mt(e,t,r){return{text:e,sourceLanguage:t,targetLanguage:r}}function Kt(e,t){let r=t;return{text:e,maxCandidates:typeof r?.maxCandidates=="number"?r.maxCandidates:void 0}}function It(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function M(e,t,r,n,a,o,s,i){d(n,e,i,{step:"decide",message:"Deciding capability",silent:r});let u=await V(n,a,t);if(d(n,e,i,{step:"decide",source:u.source,message:`Using ${u.source}`,silent:r}),u.source==="on-device")try{let c=await o();return d(n,e,i,{step:"done",source:"on-device",silent:r}),c}catch(c){console.error(`Error in on-device ${n}:`,c),d(n,e,i,{step:"error",source:"on-device",message:c.message,silent:r}),i?.signal?.throwIfAborted()}if(u.mode!=="local-only"&&u.backendAvailable){d(n,e,i,{step:"backend:request",source:"backend",silent:r});let c=typeof s=="function"?await s(u):s,g=await E(u,e,n,c,i);return d(n,e,i,{step:"done",source:"backend",silent:r}),g}throw new Error(`No capability for "${n}" (${e}). Reason: ${u.reason}`)}function Wt(e){let t=Array.isArray(e.images)&&e.images.length>0,r=e.images??[],n=t?r.map(o=>({type:"image",value:o})):[],a;if(typeof e.messages=="string")a=t?[{role:"user",content:[{type:"text",value:e.messages},...n]}]:e.messages;else{let o=e.messages.filter(s=>s.role!=="system").map(s=>({role:s.role==="assistant"?"assistant":"user",content:s.content}));if(t){let s=-1;for(let i=o.length-1;i>=0;i--)if(o[i].role==="user"){s=i;break}if(s===-1)o.push({role:"user",content:[{type:"text",value:""},...n]});else{let i=String(o[s].content??"");o[s]={...o[s],content:[{type:"text",value:i},...n]}}}a=o}return a}function _t(e){return typeof Blob<"u"&&e instanceof Blob}function Ht(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function qt(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}async function jt(e){return new Promise((t,r)=>{let n=new FileReader;n.onerror=()=>r(n.error??new Error("FileReader error")),n.onload=()=>t(String(n.result??"")),n.readAsDataURL(e)})}async function Vt(e){let t=await jt(e),r=t.indexOf(",");return r>=0?t.substring(r+1):t}async function Gt(e,t,r,n,a,o){let s=t==="admin"?"/admin/generate-upload-url":"/frontend/generate-upload-url",i={...o?.headers??{}},u=await z(t,i);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new Error("backendBaseUrl missing for fetch transport");let f=new URLSearchParams({fileName:r,contentType:n,contentLength:String(a)}).toString(),v=`${e.backendBaseUrl.replace(/\/+$/,"")}${s}?${f}`,m=await fetch(v,{method:"GET",headers:u,signal:o?.signal,credentials:"omit"});if(!m.ok){let D=await m.text().catch(()=>"");throw new Error(`generate-upload-url failed (fetch): HTTP ${m.status}${D?": "+D.substring(0,200):""}`)}let k=await m.json();if(!k?.uploadUrl||!k?.imageKey)throw new Error("generate-upload-url response missing uploadUrl/imageKey");return{uploadUrl:k.uploadUrl,imageKey:k.imageKey}}if(!e.backendApiName)throw new Error("backendApiName missing for gatey transport");let c=globalThis.WpSuite?.plugins?.gatey,g={fileName:r,contentType:n,contentLength:a};if(c?.cognito?.get){let f=c.cognito.get({apiName:e.backendApiName,path:s,options:{queryParams:Object.keys(g).reduce((m,k)=>(m[k]=String(g[k]),m),{}),headers:u,retryStrategy:{strategy:"no-retry"}}});o?.signal?.addEventListener?.("abort",()=>{f.cancel()});let v=await f.response.then(m=>m.body.json());if(!v?.uploadUrl||!v?.imageKey)throw new Error("generate-upload-url (gatey get) response missing uploadUrl/imageKey");return{uploadUrl:v.uploadUrl,imageKey:v.imageKey}}if(!c?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let l=c.cognito.post({apiName:e.backendApiName,path:s,options:{body:g,headers:u,retryStrategy:{strategy:"no-retry"}}});o?.signal?.addEventListener?.("abort",()=>{l.cancel()});let p=await l.response.then(f=>f.body.json());if(!p?.uploadUrl||!p?.imageKey)throw new Error("generate-upload-url (gatey post) response missing uploadUrl/imageKey");return{uploadUrl:p.uploadUrl,imageKey:p.imageKey}}async function $t(e,t,r,n){let a=await fetch(e,{method:"PUT",headers:{"Content-Type":r||"application/octet-stream"},body:t,signal:n?.signal});if(!a.ok){let o=await a.text().catch(()=>"");throw new Error(`S3 upload failed: HTTP ${a.status}${o?": "+o.substring(0,200):""}`)}}async function ze(e,t,r,n){if(!e||e.length===0)return;let a=[];for(let c of e){if(!_t(c))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");a.push(c)}let o=a.reduce((c,g)=>c+(g.size||0),0);if(Math.ceil(o*1.37+2048*a.length)<=Nt){d("prompt",r,n,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let c=[];for(let g of a)c.push({format:qt(g.type),data:await Vt(g)});return{images:c}}d("prompt",r,n,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let u=[];for(let c=0;c<a.length;c++){let g=a[c],l=g.type||"application/octet-stream",p=g.name||`image_${c}.${Ht(l)}`;d("prompt",r,n,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:f,imageKey:v}=await Gt(t,r,p,l,g.size||0,n);d("prompt",r,n,{step:"backend:waiting",source:"backend",message:"Uploading"}),await $t(f,g,l,n),u.push(v)}return{imageUrls:u}}var Be,Oe,Re,C,W,Me,Pt,Ke,se,Ie,Et,Ee,Ft,Fe,Dt,De,Ut,zt,Ue,_,Nt,We,Xt,Jt,Qt,Zt,_e=P(()=>{"use strict";Be=require("@smart-cloud/wpsuite-core");ne();te();He();Oe=8,Re=2,C=new Map,W=new Map;typeof window<"u"&&window.addEventListener("beforeunload",()=>{for(let e of C.values())try{e.destroy()}catch{}C.clear(),W.clear()});Me=(0,Be.getWpSuite)();Pt=45e3,Ke=5e3,se=class extends Error{timeoutMs;constructor(t){super(`On-device execution exceeded ${t}ms`),this.name="OnDeviceTimeoutError",this.timeoutMs=t}};Ie=e=>{let t=e.outputLanguage?e.outputLanguage:S(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},Et=async(e,t)=>{let r=L(t),n=e.sharedContext??F(),a=e.outputLanguage?e.outputLanguage:S(),o=a,s=!1;N(a)||(s=!0,a="en");let i=Ie({...e,outputLanguage:a});return M(r,t?.modeOverride,!1,"writer",i,async()=>{if(typeof Writer>"u")throw new Error("Writer API not available in this browser.");d("writer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Writer session"});let u=B(t);try{let{model:c,release:g}=await R("writer",{core:i,sharedContext:n},()=>Writer.create({...i,sharedContext:n,monitor(l){l.addEventListener("downloadprogress",p=>{let f=p.loaded;d("writer",r,t,{step:"on-device:download",source:"on-device",progress:f,loaded:f})})}}),l=>l.destroy());d("writer",r,t,{step:"on-device:ready",source:"on-device"});try{d("writer",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let l=await c.write(e.prompt,{context:e.context,signal:u.signal});return s?{result:(await _({text:l,sourceLanguage:a,targetLanguage:o},{context:r,signal:u.signal})).result}:{result:l}}finally{try{g()}catch(l){console.error("Error destroying writer:",l)}}}finally{u.dispose()}},Ot({...e,sharedContext:n,outputLanguage:o}),t)},Ee=e=>{let t=e.outputLanguage?e.outputLanguage:S(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},Ft=async(e,t)=>{let r=L(t),n=e.sharedContext??F(),a=e.outputLanguage?e.outputLanguage:S(),o=a,s=!1;N(a)||(s=!0,a="en");let i=Ee({...e,outputLanguage:a});return M(r,t?.modeOverride,!1,"rewriter",i,async()=>{if(typeof Rewriter>"u")throw new Error("Rewriter API not available in this browser.");d("rewriter",r,t,{step:"on-device:init",source:"on-device",message:"Creating Rewriter session"});let u=B(t);try{let{model:c,release:g}=await R("rewriter",{core:i,sharedContext:n},()=>Rewriter.create({...i,sharedContext:n,monitor(l){l.addEventListener("downloadprogress",p=>{let f=p.loaded;d("rewriter",r,t,{step:"on-device:download",source:"on-device",progress:f,loaded:f})})}}),l=>l.destroy());d("rewriter",r,t,{step:"on-device:ready",source:"on-device"});try{d("rewriter",r,t,{step:"on-device:run",source:"on-device",message:"Rewriting text"});let l=await c.rewrite(e.text,{context:e.context,signal:u.signal});return s?{result:(await _({text:l,sourceLanguage:a,targetLanguage:o},{context:r,signal:u.signal})).result}:{result:l}}finally{try{g()}catch(l){console.error("Error destroying rewriter:",l)}}}finally{u.dispose()}},Rt({...e,sharedContext:n,outputLanguage:o}),t)},Fe=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),Dt=async(e,t)=>{let r=L(t),n=await Fe();return M(r,t?.modeOverride,!1,"proofreader",n,async()=>{if(typeof Proofreader>"u")throw new Error("Proofreader API not available in this browser.");d("proofreader",r,t,{step:"on-device:init",source:"on-device",message:"Creating Proofreader session"});let a=B(t);try{let{model:o,release:s}=await R("proofreader",{core:n},()=>Proofreader.create({...n,monitor(i){i.addEventListener("downloadprogress",u=>{let c=u.loaded;d("proofreader",r,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c})})}}),i=>i.destroy());d("proofreader",r,t,{step:"on-device:ready",source:"on-device"});try{return d("proofreader",r,t,{step:"on-device:run",source:"on-device",message:"Proofreading"}),{result:await o.proofread(e.text,{signal:a.signal})}}finally{try{s()}catch(i){console.error("Error destroying proofreader:",i)}}}finally{a.dispose()}},It(e),t)},De=e=>{let t=e.outputLanguage?e.outputLanguage:S(),r={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},Ut=async(e,t)=>{let r=L(t),n=e.sharedContext??F(),a=e.outputLanguage?e.outputLanguage:S(),o=a,s=!1;N(a)||(s=!0,a="en");let i=await De({...e,outputLanguage:a});return M(r,t?.modeOverride,!1,"summarizer",i,async()=>{if(typeof Summarizer>"u")throw new Error("Summarizer API not available in this browser.");d("summarizer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Summarizer session"});let u=B(t);try{let{model:c,release:g}=await R("summarizer",{core:i,sharedContext:n},()=>Summarizer.create({...i,sharedContext:n,monitor(l){l.addEventListener("downloadprogress",p=>{let f=p.loaded;d("summarizer",r,t,{step:"on-device:download",source:"on-device",progress:f,loaded:f})})}}),l=>l.destroy());d("summarizer",r,t,{step:"on-device:ready",source:"on-device"});try{d("summarizer",r,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let l=await c.summarize(e.text,{context:e.context,signal:u.signal});return s?{result:(await _({text:l,sourceLanguage:a,targetLanguage:o},{context:r,signal:u.signal})).result}:{result:l}}finally{try{g()}catch(l){console.error("Error destroying summarizer:",l)}}}finally{u.dispose()}},Bt({...e,sharedContext:n,outputLanguage:o}),t)},zt=async(e,t)=>{let r=L(t);return M(r,t?.modeOverride,t?.silent,"language-detector",void 0,async()=>{if(typeof LanguageDetector>"u")throw new Error("LanguageDetector API not available in this browser.");d("language-detector",r,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageDetector session",silent:t?.silent});let n=B(t,Ke);try{let{model:a,release:o}=await R("language-detector",{},()=>LanguageDetector.create({monitor(s){s.addEventListener("downloadprogress",i=>{let u=i.loaded;d("language-detector",r,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u,silent:t?.silent})})}}),s=>s.destroy());d("language-detector",r,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{return d("language-detector",r,t,{step:"on-device:run",source:"on-device",message:"Detecting language",silent:t?.silent}),{result:{candidates:(await a.detect(e.text,{signal:n.signal})).filter(i=>ie.find(u=>u.value===i.detectedLanguage))}}}finally{try{o()}catch(s){console.error("Error destroying language detector:",s)}}}finally{n.dispose()}},Kt(e.text,t),t)},Ue=e=>{let t={sourceLanguage:e.sourceLanguage??"auto",targetLanguage:e.targetLanguage??S()??"en"};return Promise.resolve(t)},_=async(e,t)=>{let r=L(t),n=await Ue({...e});return M(r,t?.modeOverride,t?.silent,"translator",n,async()=>{if(typeof Translator>"u")throw new Error("Translator API not available in this browser.");d("translator",r,t,{step:"on-device:init",source:"on-device",message:"Creating Translator session",silent:t?.silent});let a=B(t,Ke);try{let{model:o,release:s}=await R("translator",{core:n},()=>Translator.create({...n,monitor(i){i.addEventListener("downloadprogress",u=>{let c=u.loaded;d("translator",r,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c,silent:t?.silent})})}}),i=>i.destroy());d("translator",r,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{d("translator",r,t,{step:"on-device:run",source:"on-device",message:"Translating",silent:t?.silent});let i=[],u=()=>{if(typeof a.signal.throwIfAborted=="function")a.signal.throwIfAborted();else if(a.signal.aborted)throw a.signal.reason??new DOMException("Aborted","AbortError")};for(let g of e.text.split(`
|
|
4
4
|
`))u(),i.push(o.translate(g.trim()));return{result:(await Promise.all(i)).join(`
|
|
5
5
|
`)}}finally{try{s()}catch(i){console.error("Error destroying translator:",i)}}}finally{a.dispose()}},Mt(e.text,e.sourceLanguage,e.targetLanguage),t)};Nt=4*1024*1024;We=async e=>{let t=e.outputLanguage?e.outputLanguage:S();return N(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},Xt=async(e,t)=>{let r=L(t),n=e.sharedContext??F(),a=e.outputLanguage?e.outputLanguage:S(),o=a,s=!1;N(a)||(s=!0,a="en");let i=await We({...e,outputLanguage:a}),u=await V("prompt",i,t?.modeOverride);return M(r,t?.modeOverride,!1,"prompt",i,async()=>{if(typeof LanguageModel>"u")throw new Error("LanguageModel API not available in this browser.");d("prompt",r,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageModel session"});let c=[];if(typeof e.messages!="string"){for(let f of e.messages)f.role==="system"&&f.content.trim()&&c.push(f.content.trim());n&&n.trim()&&c.push("SHARED CONTEXT: "+n.trim())}let g=c.length>0?c.join(`
|
|
6
6
|
|
|
7
|
-
`):void 0,l=g?[{role:"system",content:g}]:void 0,p=B(t);try{let{model:f,release:v}=await R("language-model",{core:i,initialPrompts:l},()=>LanguageModel.create({...i,initialPrompts:l,monitor(m){m.addEventListener("downloadprogress",k=>{let D=k.loaded;d("prompt",r,t,{step:"on-device:download",source:"on-device",progress:D,loaded:D})})}}),m=>m.destroy());d("prompt",r,t,{step:"on-device:ready",source:"on-device"});try{d("prompt",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let m=await f.prompt(Wt(e),{signal:p.signal,responseConstraint:e.responseConstraint});return s?{result:(await _({text:m,sourceLanguage:a,targetLanguage:o},{context:r,signal:p.signal})).result}:{result:m}}finally{try{v()}catch(m){console.error("Error destroying LanguageModel:",m)}}}finally{p.dispose()}},await xt({...e,sharedContext:n},r,u,t),t)},Jt=async(e,t)=>{let r="frontend",n=e.sharedContext??F(),a="prompt",o=await K(),s={feature:a,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},i=await St({sessionId:e.sessionId,message:e.message,images:e.images,sharedContext:n},s,t);d(a,r,t,{step:"backend:request",source:"backend"});let u=await
|
|
7
|
+
`):void 0,l=g?[{role:"system",content:g}]:void 0,p=B(t);try{let{model:f,release:v}=await R("language-model",{core:i,initialPrompts:l},()=>LanguageModel.create({...i,initialPrompts:l,monitor(m){m.addEventListener("downloadprogress",k=>{let D=k.loaded;d("prompt",r,t,{step:"on-device:download",source:"on-device",progress:D,loaded:D})})}}),m=>m.destroy());d("prompt",r,t,{step:"on-device:ready",source:"on-device"});try{d("prompt",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let m=await f.prompt(Wt(e),{signal:p.signal,responseConstraint:e.responseConstraint});return s?{result:(await _({text:m,sourceLanguage:a,targetLanguage:o},{context:r,signal:p.signal})).result}:{result:m}}finally{try{v()}catch(m){console.error("Error destroying LanguageModel:",m)}}}finally{p.dispose()}},await xt({...e,sharedContext:n},r,u,t),t)},Jt=async(e,t)=>{let r="frontend",n=e.sharedContext??F(),a="prompt",o=await K(),s={feature:a,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},i=await St({sessionId:e.sessionId,message:e.message,images:e.images,sharedContext:n},s,t);d(a,r,t,{step:"backend:request",source:"backend"});let u=await E(s,r,a,i,t);return d(a,r,t,{step:"done",source:"backend"}),u},Qt=async(e,t)=>{let r=L(t),n=e.sharedContext??F(),a="prompt",o=await K(),s={feature:a,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},i=await Lt({query:e.query,topK:e.topK,sessionId:e.sessionId,sharedContext:n,knowledgeBaseId:e.knowledgeBaseId});d(a,r,t,{step:"backend:request",source:"backend"});let u=await E(s,r,a,i,t);return d(a,r,t,{step:"done",source:"backend"}),u},Zt=async(e,t)=>{let r="frontend",n="prompt",a=await K(),o={feature:n,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:a.available,backendTransport:a.transport,backendApiName:a.apiName,backendBaseUrl:a.baseUrl,backendReason:a.reason},s=await Tt({sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType});d(n,r,t,{step:"backend:request",source:"backend"});let i=await E(o,r,n,s,t);return d(n,r,t,{step:"done",source:"backend"}),i}});var kr={};H(kr,{AiKitChatbotIcon:()=>rt,AiKitDocSearchIcon:()=>nt,AiKitFeatureIcon:()=>tt,BackendError:()=>x,LANGUAGE_OPTIONS:()=>ie,TEXT_DOMAIN:()=>y,checkOnDeviceAvailability:()=>tr,decideCapability:()=>er,detectLanguage:()=>mr,dispatchBackend:()=>nr,getAiKitPlugin:()=>T,getMinChromeVersions:()=>Yt,getPromptOptions:()=>fr,getProofreadOptions:()=>ur,getRewriteOptions:()=>sr,getStore:()=>ce,getStoreDispatch:()=>de,getStoreSelect:()=>U,getSummarizeOptions:()=>lr,getTranslateOptions:()=>gr,getWriteOptions:()=>ar,initializeAiKit:()=>vr,observeStore:()=>pe,prompt:()=>br,proofread:()=>cr,rewrite:()=>ir,sanitizeAiKitConfig:()=>Y,sendChatMessage:()=>yr,sendFeedbackMessage:()=>wr,sendSearchMessage:()=>hr,summarize:()=>dr,translate:()=>pr,waitForAiKitReady:()=>X,write:()=>or});module.exports=Xe(kr);var qe,w,ie,ue,Yt,er,tr,rr,nr,b,ar,or,sr,ir,ur,cr,lr,dr,gr,pr,mr,fr,br,yr,wr,hr,vr,He=P(()=>{qe=require("@smart-cloud/wpsuite-core"),w=require("@wordpress/i18n");J();q();me();q();fe();ee();ie=[{label:(0,w.__)("Arabic",y),value:"ar"},{label:(0,w.__)("Chinese",y),value:"zh"},{label:(0,w.__)("Dutch",y),value:"nl"},{label:(0,w.__)("English",y),value:"en"},{label:(0,w.__)("French",y),value:"fr"},{label:(0,w.__)("German",y),value:"de"},{label:(0,w.__)("Hebrew",y),value:"he"},{label:(0,w.__)("Hindi",y),value:"hi"},{label:(0,w.__)("Hungarian",y),value:"hu"},{label:(0,w.__)("Indonesian",y),value:"id"},{label:(0,w.__)("Italian",y),value:"it"},{label:(0,w.__)("Japanese",y),value:"ja"},{label:(0,w.__)("Korean",y),value:"ko"},{label:(0,w.__)("Norwegian",y),value:"no"},{label:(0,w.__)("Polish",y),value:"pl"},{label:(0,w.__)("Portuguese",y),value:"pt"},{label:(0,w.__)("Russian",y),value:"ru"},{label:(0,w.__)("Spanish",y),value:"es"},{label:(0,w.__)("Swedish",y),value:"sv"},{label:(0,w.__)("Thai",y),value:"th"},{label:(0,w.__)("Turkish",y),value:"tr"},{label:(0,w.__)("Ukrainian",y),value:"uk"}],ue=Promise.resolve().then(()=>(te(),Ce)),Yt=async()=>(await ue).MIN_CHROME_VERSION,er=async(...e)=>(await ue).decideCapability(...e),tr=async(...e)=>(await ue).checkOnDeviceAvailability(...e),rr=Promise.resolve().then(()=>(ne(),Te)),nr=async(...e)=>(await rr).dispatchBackend(...e),b=Promise.resolve().then(()=>(_e(),Ne)),ar=async(...e)=>(await b).getWriteOptions(...e),or=async(...e)=>(await b).write(...e),sr=async(...e)=>(await b).getRewriteOptions(...e),ir=async(...e)=>(await b).rewrite(...e),ur=async(...e)=>(await b).getProofreadOptions(...e),cr=async(...e)=>(await b).proofread(...e),lr=async(...e)=>(await b).getSummarizeOptions(...e),dr=async(...e)=>(await b).summarize(...e),gr=async(...e)=>(await b).getTranslateOptions(...e),pr=async(...e)=>(await b).translate(...e),mr=async(...e)=>(await b).detectLanguage(...e),fr=async(...e)=>(await b).getPromptOptions(...e),br=async(...e)=>(await b).prompt(...e),yr=async(...e)=>(await b).sendChatMessage(...e),wr=async(...e)=>(await b).sendFeedbackMessage(...e),hr=async(...e)=>(await b).sendSearchMessage(...e),vr=(e,t)=>{let r=globalThis.WpSuite,n=T();if(!n)throw console.error("AiKit plugin is not available"),new Error("AiKit plugin is not available");(0,qe.attachDefaultPluginRuntime)(n),n.status=n.status??"initializing";let a=ge();return n.features={store:a,renderFeature:async o=>await e({...o,store:await a}),renderSearchComponent:async o=>{if(!t)throw new Error("renderSearchComponent is not configured");return await t({...o,store:await a})},write:async(...o)=>{let s=await b,i=o[1]||{};return o[1]={context:"frontend",...i},s.write(...o)},rewrite:async(...o)=>{let s=await b,i=o[1]||{};return o[1]={context:"frontend",...i},s.rewrite(...o)},proofread:async(...o)=>{let s=await b,i=o[1]||{};return o[1]={context:"frontend",...i},s.proofread(...o)},summarize:async(...o)=>{let s=await b,i=o[1]||{};return o[1]={context:"frontend",...i},s.summarize(...o)},translate:async(...o)=>{let s=await b,i=o[1]||{};return o[1]={context:"frontend",...i},s.translate(...o)},detectLanguage:async(...o)=>{let s=await b,i=o[1]||{};return o[1]={context:"frontend",...i},s.detectLanguage(...o)},prompt:async(...o)=>{let s=await b,i=o[1]||{};return o[1]={context:"frontend",...i},s.prompt(...o)},sendChatMessage:async(...o)=>(await b).sendChatMessage(...o),sendFeedbackMessage:async(...o)=>(await b).sendFeedbackMessage(...o),sendSearchMessage:async(...o)=>(await b).sendSearchMessage(...o)},a.then(()=>{n.status="available",r?.events?.emit("wpsuite:ai-kit:ready",{key:n.key,version:n.version})}).catch(o=>{n.status="error",console.error("AiKit plugin failed to initialize:",o),r?.events?.emit("wpsuite:ai-kit:error",{key:n.key,error:String(o)})}),n}});He();0&&(module.exports={AiKitChatbotIcon,AiKitDocSearchIcon,AiKitFeatureIcon,BackendError,LANGUAGE_OPTIONS,TEXT_DOMAIN,checkOnDeviceAvailability,decideCapability,detectLanguage,dispatchBackend,getAiKitPlugin,getMinChromeVersions,getPromptOptions,getProofreadOptions,getRewriteOptions,getStore,getStoreDispatch,getStoreSelect,getSummarizeOptions,getTranslateOptions,getWriteOptions,initializeAiKit,observeStore,prompt,proofread,rewrite,sanitizeAiKitConfig,sendChatMessage,sendFeedbackMessage,sendSearchMessage,summarize,translate,waitForAiKitReady,write});
|
package/dist/index.d.cts
CHANGED
|
@@ -363,6 +363,14 @@ type PromptMessages = Array<{
|
|
|
363
363
|
* Note: For backend uploads we only handle Blob/File inputs.
|
|
364
364
|
*/
|
|
365
365
|
type PromptImageInput = Blob | File | HTMLImageElement | SVGImageElement | HTMLVideoElement | HTMLCanvasElement | OffscreenCanvas | ImageBitmap | VideoFrame | ImageData;
|
|
366
|
+
/**
|
|
367
|
+
* Audio input for multimodal prompting.
|
|
368
|
+
* Backend supports base64-encoded audio with format specification.
|
|
369
|
+
*/
|
|
370
|
+
type PromptAudioInput = {
|
|
371
|
+
format: string;
|
|
372
|
+
data: string;
|
|
373
|
+
};
|
|
366
374
|
interface PromptArgs {
|
|
367
375
|
messages: PromptMessages;
|
|
368
376
|
sharedContext?: string;
|
|
@@ -373,6 +381,12 @@ interface PromptArgs {
|
|
|
373
381
|
* - Backend: only Blob/File inputs are handled (inline data URLs or signed upload).
|
|
374
382
|
*/
|
|
375
383
|
images?: PromptImageInput[];
|
|
384
|
+
/**
|
|
385
|
+
* Optional multimodal audio.
|
|
386
|
+
* - Backend only (Nova models support audio input)
|
|
387
|
+
* - Formats: audio/webm, audio/mp3, audio/wav, audio/flac, audio/aac
|
|
388
|
+
*/
|
|
389
|
+
audio?: PromptAudioInput;
|
|
376
390
|
/**
|
|
377
391
|
* Optional response constraint schema.
|
|
378
392
|
*/
|
|
@@ -434,8 +448,10 @@ interface SearchResult {
|
|
|
434
448
|
};
|
|
435
449
|
}
|
|
436
450
|
interface SearchMessageArgs {
|
|
437
|
-
/** Search query in the user's language. */
|
|
438
|
-
query
|
|
451
|
+
/** Search query in the user's language (required if no audio). */
|
|
452
|
+
query?: string;
|
|
453
|
+
/** Optional audio query (alternative to text query). */
|
|
454
|
+
audio?: PromptAudioInput;
|
|
439
455
|
/** Optional backend session for future optimizations. */
|
|
440
456
|
sessionId?: string;
|
|
441
457
|
/** Optional shared context (defaults to AiKit settings sharedContext). */
|
|
@@ -450,6 +466,7 @@ interface SearchMessageArgs {
|
|
|
450
466
|
interface ChatMessageArgs {
|
|
451
467
|
sessionId?: string;
|
|
452
468
|
message?: string;
|
|
469
|
+
audio?: PromptAudioInput;
|
|
453
470
|
sharedContext?: string;
|
|
454
471
|
images?: PromptImageInput[];
|
|
455
472
|
/**
|
|
@@ -568,4 +585,4 @@ declare const sendFeedbackMessage: (...args: Parameters<Features["sendFeedbackMe
|
|
|
568
585
|
declare const sendSearchMessage: (...args: Parameters<Features["sendSearchMessage"]>) => Promise<SearchResult>;
|
|
569
586
|
declare const initializeAiKit: (renderFeature: (args: AiFeatureArgs) => Promise<AiWorkerHandle>, renderSearchComponent?: (args: DocSearchArgs) => Promise<AiWorkerHandle>) => AiKitPlugin;
|
|
570
587
|
|
|
571
|
-
export { type AiChatbotLabels, type AiChatbotProps, type AiFeatureArgs, type AiFeatureMode, type AiFeatureOptions, type AiFeatureProps, type AiKit, AiKitChatbotIcon, type AiKitConfig, AiKitDocSearchIcon, type AiKitErrorEvent, AiKitFeatureIcon, type AiKitFeatures, type AiKitLanguageCode, type AiKitLanguageProfile, type AiKitLanguageRef, type AiKitPlugin, type AiKitReadyEvent, type AiKitSettings, type AiKitStatusEvent, type AiKitStatusStep, type AiModePreference, type AiWorkerHandle, type AiWorkerProps, type AnyCreateCoreOptions, type Backend, type BackendCallOptions, BackendError, type BackendTransport, type BuiltInAiFeature, type Capabilities, type CapabilityDecision, type CapabilitySource, type ChatMessageArgs, type ContextKind, type CustomTranslations, type DetectLanguageArgs, type DetectLanguageOutput, type DeviceAvailability, type DocSearchArgs, type DocSearchProps, type FeatureOptions, type Features, type FeedbackMessageArgs, type HistoryStorageMode, LANGUAGE_OPTIONS, type OnDeviceUnsupportedLanguageStrategy, type OpenButtonIconLayout, type OpenButtonPosition, type ProcessedCitations, type PromptArgs, type PromptImageInput, type PromptMessages, type PromptResult, type ProofreadArgs, type ProofreadOutput, type RetrievedChunk, type RetrievedDoc, type RewriteArgs, type RewriteResult, type SearchMessageArgs, type SearchResult, type State, type Store, type SummarizeArgs, type SummarizeResult, TEXT_DOMAIN, type TranslateArgs, type TranslateResult, type WriteArgs, type WriteResult, checkOnDeviceAvailability, decideCapability, detectLanguage, dispatchBackend, getAiKitPlugin, getMinChromeVersions, getPromptOptions, getProofreadOptions, getRewriteOptions, getStore, getStoreDispatch, getStoreSelect, getSummarizeOptions, getTranslateOptions, getWriteOptions, initializeAiKit, observeStore, prompt, proofread, rewrite, sanitizeAiKitConfig, sendChatMessage, sendFeedbackMessage, sendSearchMessage, summarize, translate, waitForAiKitReady, write };
|
|
588
|
+
export { type AiChatbotLabels, type AiChatbotProps, type AiFeatureArgs, type AiFeatureMode, type AiFeatureOptions, type AiFeatureProps, type AiKit, AiKitChatbotIcon, type AiKitConfig, AiKitDocSearchIcon, type AiKitErrorEvent, AiKitFeatureIcon, type AiKitFeatures, type AiKitLanguageCode, type AiKitLanguageProfile, type AiKitLanguageRef, type AiKitPlugin, type AiKitReadyEvent, type AiKitSettings, type AiKitStatusEvent, type AiKitStatusStep, type AiModePreference, type AiWorkerHandle, type AiWorkerProps, type AnyCreateCoreOptions, type Backend, type BackendCallOptions, BackendError, type BackendTransport, type BuiltInAiFeature, type Capabilities, type CapabilityDecision, type CapabilitySource, type ChatMessageArgs, type ContextKind, type CustomTranslations, type DetectLanguageArgs, type DetectLanguageOutput, type DeviceAvailability, type DocSearchArgs, type DocSearchProps, type FeatureOptions, type Features, type FeedbackMessageArgs, type HistoryStorageMode, LANGUAGE_OPTIONS, type OnDeviceUnsupportedLanguageStrategy, type OpenButtonIconLayout, type OpenButtonPosition, type ProcessedCitations, type PromptArgs, type PromptAudioInput, type PromptImageInput, type PromptMessages, type PromptResult, type ProofreadArgs, type ProofreadOutput, type RetrievedChunk, type RetrievedDoc, type RewriteArgs, type RewriteResult, type SearchMessageArgs, type SearchResult, type State, type Store, type SummarizeArgs, type SummarizeResult, TEXT_DOMAIN, type TranslateArgs, type TranslateResult, type WriteArgs, type WriteResult, checkOnDeviceAvailability, decideCapability, detectLanguage, dispatchBackend, getAiKitPlugin, getMinChromeVersions, getPromptOptions, getProofreadOptions, getRewriteOptions, getStore, getStoreDispatch, getStoreSelect, getSummarizeOptions, getTranslateOptions, getWriteOptions, initializeAiKit, observeStore, prompt, proofread, rewrite, sanitizeAiKitConfig, sendChatMessage, sendFeedbackMessage, sendSearchMessage, summarize, translate, waitForAiKitReady, write };
|
package/dist/index.d.ts
CHANGED
|
@@ -363,6 +363,14 @@ type PromptMessages = Array<{
|
|
|
363
363
|
* Note: For backend uploads we only handle Blob/File inputs.
|
|
364
364
|
*/
|
|
365
365
|
type PromptImageInput = Blob | File | HTMLImageElement | SVGImageElement | HTMLVideoElement | HTMLCanvasElement | OffscreenCanvas | ImageBitmap | VideoFrame | ImageData;
|
|
366
|
+
/**
|
|
367
|
+
* Audio input for multimodal prompting.
|
|
368
|
+
* Backend supports base64-encoded audio with format specification.
|
|
369
|
+
*/
|
|
370
|
+
type PromptAudioInput = {
|
|
371
|
+
format: string;
|
|
372
|
+
data: string;
|
|
373
|
+
};
|
|
366
374
|
interface PromptArgs {
|
|
367
375
|
messages: PromptMessages;
|
|
368
376
|
sharedContext?: string;
|
|
@@ -373,6 +381,12 @@ interface PromptArgs {
|
|
|
373
381
|
* - Backend: only Blob/File inputs are handled (inline data URLs or signed upload).
|
|
374
382
|
*/
|
|
375
383
|
images?: PromptImageInput[];
|
|
384
|
+
/**
|
|
385
|
+
* Optional multimodal audio.
|
|
386
|
+
* - Backend only (Nova models support audio input)
|
|
387
|
+
* - Formats: audio/webm, audio/mp3, audio/wav, audio/flac, audio/aac
|
|
388
|
+
*/
|
|
389
|
+
audio?: PromptAudioInput;
|
|
376
390
|
/**
|
|
377
391
|
* Optional response constraint schema.
|
|
378
392
|
*/
|
|
@@ -434,8 +448,10 @@ interface SearchResult {
|
|
|
434
448
|
};
|
|
435
449
|
}
|
|
436
450
|
interface SearchMessageArgs {
|
|
437
|
-
/** Search query in the user's language. */
|
|
438
|
-
query
|
|
451
|
+
/** Search query in the user's language (required if no audio). */
|
|
452
|
+
query?: string;
|
|
453
|
+
/** Optional audio query (alternative to text query). */
|
|
454
|
+
audio?: PromptAudioInput;
|
|
439
455
|
/** Optional backend session for future optimizations. */
|
|
440
456
|
sessionId?: string;
|
|
441
457
|
/** Optional shared context (defaults to AiKit settings sharedContext). */
|
|
@@ -450,6 +466,7 @@ interface SearchMessageArgs {
|
|
|
450
466
|
interface ChatMessageArgs {
|
|
451
467
|
sessionId?: string;
|
|
452
468
|
message?: string;
|
|
469
|
+
audio?: PromptAudioInput;
|
|
453
470
|
sharedContext?: string;
|
|
454
471
|
images?: PromptImageInput[];
|
|
455
472
|
/**
|
|
@@ -568,4 +585,4 @@ declare const sendFeedbackMessage: (...args: Parameters<Features["sendFeedbackMe
|
|
|
568
585
|
declare const sendSearchMessage: (...args: Parameters<Features["sendSearchMessage"]>) => Promise<SearchResult>;
|
|
569
586
|
declare const initializeAiKit: (renderFeature: (args: AiFeatureArgs) => Promise<AiWorkerHandle>, renderSearchComponent?: (args: DocSearchArgs) => Promise<AiWorkerHandle>) => AiKitPlugin;
|
|
570
587
|
|
|
571
|
-
export { type AiChatbotLabels, type AiChatbotProps, type AiFeatureArgs, type AiFeatureMode, type AiFeatureOptions, type AiFeatureProps, type AiKit, AiKitChatbotIcon, type AiKitConfig, AiKitDocSearchIcon, type AiKitErrorEvent, AiKitFeatureIcon, type AiKitFeatures, type AiKitLanguageCode, type AiKitLanguageProfile, type AiKitLanguageRef, type AiKitPlugin, type AiKitReadyEvent, type AiKitSettings, type AiKitStatusEvent, type AiKitStatusStep, type AiModePreference, type AiWorkerHandle, type AiWorkerProps, type AnyCreateCoreOptions, type Backend, type BackendCallOptions, BackendError, type BackendTransport, type BuiltInAiFeature, type Capabilities, type CapabilityDecision, type CapabilitySource, type ChatMessageArgs, type ContextKind, type CustomTranslations, type DetectLanguageArgs, type DetectLanguageOutput, type DeviceAvailability, type DocSearchArgs, type DocSearchProps, type FeatureOptions, type Features, type FeedbackMessageArgs, type HistoryStorageMode, LANGUAGE_OPTIONS, type OnDeviceUnsupportedLanguageStrategy, type OpenButtonIconLayout, type OpenButtonPosition, type ProcessedCitations, type PromptArgs, type PromptImageInput, type PromptMessages, type PromptResult, type ProofreadArgs, type ProofreadOutput, type RetrievedChunk, type RetrievedDoc, type RewriteArgs, type RewriteResult, type SearchMessageArgs, type SearchResult, type State, type Store, type SummarizeArgs, type SummarizeResult, TEXT_DOMAIN, type TranslateArgs, type TranslateResult, type WriteArgs, type WriteResult, checkOnDeviceAvailability, decideCapability, detectLanguage, dispatchBackend, getAiKitPlugin, getMinChromeVersions, getPromptOptions, getProofreadOptions, getRewriteOptions, getStore, getStoreDispatch, getStoreSelect, getSummarizeOptions, getTranslateOptions, getWriteOptions, initializeAiKit, observeStore, prompt, proofread, rewrite, sanitizeAiKitConfig, sendChatMessage, sendFeedbackMessage, sendSearchMessage, summarize, translate, waitForAiKitReady, write };
|
|
588
|
+
export { type AiChatbotLabels, type AiChatbotProps, type AiFeatureArgs, type AiFeatureMode, type AiFeatureOptions, type AiFeatureProps, type AiKit, AiKitChatbotIcon, type AiKitConfig, AiKitDocSearchIcon, type AiKitErrorEvent, AiKitFeatureIcon, type AiKitFeatures, type AiKitLanguageCode, type AiKitLanguageProfile, type AiKitLanguageRef, type AiKitPlugin, type AiKitReadyEvent, type AiKitSettings, type AiKitStatusEvent, type AiKitStatusStep, type AiModePreference, type AiWorkerHandle, type AiWorkerProps, type AnyCreateCoreOptions, type Backend, type BackendCallOptions, BackendError, type BackendTransport, type BuiltInAiFeature, type Capabilities, type CapabilityDecision, type CapabilitySource, type ChatMessageArgs, type ContextKind, type CustomTranslations, type DetectLanguageArgs, type DetectLanguageOutput, type DeviceAvailability, type DocSearchArgs, type DocSearchProps, type FeatureOptions, type Features, type FeedbackMessageArgs, type HistoryStorageMode, LANGUAGE_OPTIONS, type OnDeviceUnsupportedLanguageStrategy, type OpenButtonIconLayout, type OpenButtonPosition, type ProcessedCitations, type PromptArgs, type PromptAudioInput, type PromptImageInput, type PromptMessages, type PromptResult, type ProofreadArgs, type ProofreadOutput, type RetrievedChunk, type RetrievedDoc, type RewriteArgs, type RewriteResult, type SearchMessageArgs, type SearchResult, type State, type Store, type SummarizeArgs, type SummarizeResult, TEXT_DOMAIN, type TranslateArgs, type TranslateResult, type WriteArgs, type WriteResult, checkOnDeviceAvailability, decideCapability, detectLanguage, dispatchBackend, getAiKitPlugin, getMinChromeVersions, getPromptOptions, getProofreadOptions, getRewriteOptions, getStore, getStoreDispatch, getStoreSelect, getSummarizeOptions, getTranslateOptions, getWriteOptions, initializeAiKit, observeStore, prompt, proofread, rewrite, sanitizeAiKitConfig, sendChatMessage, sendFeedbackMessage, sendSearchMessage, summarize, translate, waitForAiKitReady, write };
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
var Fe=Object.defineProperty;var A=(e,t)=>()=>(e&&(t=e(e=0)),t);var V=(e,t)=>{for(var r in t)Fe(e,r,{get:t[r],enumerable:!0})};function B(){return globalThis.WpSuite?.plugins?.aiKit}async function ae(e=8e3){let t=B();if(t?.status!=="available"){if(t?.status==="error")throw new Error("AiKit failed");await new Promise((r,n)=>{let a=()=>s(r),o=()=>s(()=>n(new Error("AiKit failed"))),s=u=>{window.removeEventListener("wpsuite:ai-kit:ready",a),window.removeEventListener("wpsuite:ai-kit:error",o),i&&clearTimeout(i),u()};window.addEventListener("wpsuite:ai-kit:ready",a,{once:!0}),window.addEventListener("wpsuite:ai-kit:error",o,{once:!0});let i=e?window.setTimeout(()=>s(()=>n(new Error("AiKit timeout"))),e):0})}}async function De(e=1e4){await ae(e);let r=B()?.features?.store;if(!r)throw new Error("AiKit store is not available");return r}var G=A(()=>{"use strict"});import{getConfig as Ue}from"@smart-cloud/wpsuite-core";import{createReduxStore as ze,dispatch as We,register as Ne,select as _e,subscribe as He}from"@wordpress/data";import{I18n as oe}from"aws-amplify/utils";var $,se,qe,je,Ve,Ge,$e,Xe,N,ie,Je,_=A(()=>{"use strict";G();typeof WpSuite<"u"?$=WpSuite.siteSettings:$={};se=e=>{let t=e&&typeof e=="object"?e:{},r={};return typeof t.mode=="string"&&(r.mode=t.mode),typeof t.backendTransport=="string"&&(r.backendTransport=t.backendTransport),typeof t.backendApiName=="string"&&(r.backendApiName=t.backendApiName),typeof t.backendBaseUrl=="string"&&(r.backendBaseUrl=t.backendBaseUrl),typeof t.subscriptionType=="string"&&(r.subscriptionType=t.subscriptionType),typeof t.enableChatbot=="boolean"&&(r.enableChatbot=t.enableChatbot),typeof t.chatbot=="object"&&t.chatbot!==null&&(r.chatbot=t.chatbot),r},qe=async()=>{let e=B();if(!e)throw new Error("AI-Kit plugin is not available");let t=null;return e.settings.customTranslationsUrl&&(t=await fetch(e.settings.customTranslationsUrl+(e.settings.customTranslationsUrl.includes("?")?"&":"?")+"t="+$.lastUpdate).then(r=>r.ok?r.text():null).then(r=>r?JSON.parse(r):null).catch(()=>null)),t??null},je=async()=>{let e=se(await Ue("aiKit")),t=await qe();return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},Ve={setShowChatbotPreview(e){return{type:"SET_SHOW_CHATBOT_PREVIEW",showChatbotPreview:e}},setLanguage(e){return!e||e==="system"?oe.setLanguage(""):oe.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}}},Ge={getConfig(e){return e.config},isShowChatbotPreview(e){return e.showChatbotPreview},getCustomTranslations(e){return e.customTranslations},getLanguage(e){return e.language},getDirection(e){return e.direction},getState(e){return e}},$e={},Xe=e=>We(e),N=e=>_e(e),ie=async()=>{let e=await je(),t=ze("wpsuite/ai-kit",{reducer(r=e,n){switch(n.type){case"SET_LANGUAGE":return{...r,language:n.language};case"SET_DIRECTION":return{...r,direction:n.direction};case"SET_SHOW_CHATBOT_PREVIEW":return{...r,showChatbotPreview:n.showChatbotPreview}}return r},actions:Ve,selectors:Ge,resolvers:$e});return Ne(t),t},Je=(e,t,r)=>{let n;function a(){let s=N(e).getState(),i=t(s);if(i!==n){let u=n;n=i,r(n,u)}}let o=He(a,e);return a(),o}});var y,ue=A(()=>{"use strict";y="smartcloud-ai-kit"});import{jsx as k,jsxs as X}from"react/jsx-runtime";var sr,ir,ur,ce=A(()=>{"use strict";sr=e=>X("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[k("path",{d:"M19 27H33"}),k("path",{d:"M19 33H33"}),k("path",{d:"M8 21L9.5 24L12.5 25.5L9.5 27L8 30L6.5 27L3.5 25.5L6.5 24Z"}),k("path",{d:"M36 4L38 8L42 10L38 12L36 16L34 12L30 10L34 8Z"}),k("path",{d:"M16 10V40H36V22"}),k("path",{d:"M16 10H22"}),k("path",{d:"M22 10V23H36"}),k("path",{d:"M22 10L36 22"})]}),ir=e=>X("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[k("path",{d:"M42 38L34 30H10C7.79086 30 6 28.2091 6 26V8C6 5.79086 7.79086 4 10 4H38C40.2091 4 42 5.79086 42 8V38Z"}),k("rect",{x:"14",y:"13",width:"6",height:"6",rx:"1"}),k("rect",{x:"28",y:"13",width:"6",height:"6",rx:"1"}),k("path",{d:"M16 24H32"})]}),ur=e=>X("svg",{xmlns:"http://www.w3.org/2000/svg",width:"48",height:"48",viewBox:"0 0 48 48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[k("path",{stroke:"none",d:"M0 0h48v48H0z",fill:"none"}),k("path",{d:"M6 20a14 14 0 1 0 28 0a14 14 0 1 0 -28 0"}),k("path",{d:"M42 42l-12 -12"}),k("path",{d:"M20 20a3 3 0 1 0 -2.28 -4.948"}),k("circle",{cx:"20",cy:"26",r:"0.9",fill:"currentColor",stroke:"none"})]})});var x,J=A(()=>{"use strict";x=class extends Error{constructor(r,n,a){super(r);this.decision=n;this.status=a;this.name="AiBackendError"}}});var fe={};V(fe,{MIN_CHROME_VERSION:()=>ge,checkOnDeviceAvailability:()=>me,decideCapability:()=>q,resolveBackend:()=>M});import{getWpSuite as Qe}from"@smart-cloud/wpsuite-core";async function le(){let t=await Ze?.plugins?.aiKit?.features.store;return N(t).getConfig()??{}}function de(e){let t=e.backendApiName?.trim()||void 0,r=e.backendBaseUrl?.trim()||void 0;return{transport:e.backendTransport??(r?"fetch":t?"gatey":void 0),backendApiName:t,backendBaseUrl:r}}function Ye(e){if(e.mode)return e.mode;let{transport:t}=de(e);return t?"backend-fallback":"local-only"}async function M(){let e=await le(),{transport:t,backendApiName:r,backendBaseUrl:n}=de(e);if(!t)return{available:!1,reason:"No backend configured"};if(t==="fetch")return n?{available:!0,transport:t,baseUrl:n,reason:"Custom fetch backend"}:{available:!1,reason:"backendBaseUrl is missing"};if(!r)return{available:!1,reason:"backendApiName is missing"};let a=globalThis.WpSuite?.plugins?.gatey;return!a?.availability||await a.availability()!=="available"?{available:!1,reason:"Gatey is not available"}:{available:!0,transport:t,apiName:r,reason:"Gatey backend"}}function L(e){return typeof globalThis[e]<"u"}function pe(e){if(!e)return;let t=Number.parseInt(String(e).split(".")[0]??"",10);return Number.isFinite(t)?t:void 0}function H(e,t){return e?.find(r=>r.brand===t)?.version}async function et(){let e=navigator?.userAgentData;if(e){try{let r=(await e.getHighEntropyValues?.(["fullVersionList"]))?.fullVersionList;if(Array.isArray(r)&&r.length>0)return r}catch{}if(Array.isArray(e.brands)&&e.brands.length>0)return e.brands}}function tt(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?pe(t[1]):void 0}function rt(){return!!navigator?.brave}async function nt(e){if(typeof navigator>"u")return{allowed:!1,reason:"no-navigator"};if(typeof globalThis.isSecureContext=="boolean"&&!globalThis.isSecureContext)return{allowed:!1,reason:"not-secure-context"};let t=navigator.userAgent??"",r=await et(),n=H(r,"Microsoft Edge")??H(r,"Microsoft Edge WebView2"),a=H(r,"Google Chrome")??H(r,"Chromium"),o=!!n||/\bEdg\//i.test(t)||/\bEdgiOS\//i.test(t),s=/\bOPR\//i.test(t),i=/\bVivaldi\//i.test(t),u=/\bSamsungBrowser\//i.test(t),c=/\bFirefox\//i.test(t),g=!/\bChrome\//i.test(t)&&/\bSafari\//i.test(t)&&!/\bChromium\//i.test(t),l=rt()||/\bBrave\//i.test(t);if(o||s||i||u||c||g||l)return{allowed:!1,reason:o?"edge":l?"brave":c?"firefox":g?"safari":s?"opera":i?"vivaldi":u?"samsung":"unsupported-browser"};let p=pe(a)??tt(t),f=ge[e];return f?p?p<f?{allowed:!1,reason:`chrome-too-old-${p}-lt-${f}`,chromeMajor:p}:{allowed:!0,reason:"ok",chromeMajor:p}:{allowed:!1,reason:"unknown-chrome-version"}:{allowed:!1,reason:"no-min-version",chromeMajor:p}}async function me(e,t){try{let r=await nt(e),n=`browser-gate:${r.reason}${r.chromeMajor?` (chrome ${r.chromeMajor})`:""}`;if(!r.allowed)return{available:!1,status:"unavailable",reason:n};switch(e){case"writer":{if(!L("Writer")||!Writer?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Writer.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"rewriter":{if(!L("Rewriter")||!Rewriter?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Rewriter.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"summarizer":{if(!L("Summarizer")||!Summarizer?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Summarizer.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"proofreader":{if(!L("Proofreader")||!Proofreader?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Proofreader.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"language-detector":{if(!L("LanguageDetector")||!LanguageDetector?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await LanguageDetector.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"translator":{if(!L("Translator")||!Translator?.availability)return{available:!1,status:"api-not-present",reason:n};let a=t;if(!a?.sourceLanguage||!a?.targetLanguage)return{available:!1,status:"error",reason:n,error:new Error("Translator.availability requires sourceLanguage/targetLanguage")};let o=await Translator.availability({...a,sourceLanguage:a.sourceLanguage==="auto"?"en":a.sourceLanguage,targetLanguage:a.sourceLanguage==="auto"||a.sourceLanguage===a.targetLanguage?"hu":a.targetLanguage});return{available:o!=="unavailable",status:o,reason:n}}case"prompt":{if(!L("LanguageModel")||!LanguageModel?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await LanguageModel.availability(t);return{available:a!=="unavailable",status:a,reason:n}}default:return{available:!1,status:"unknown-feature",reason:n}}}catch(r){return{available:!1,status:"error",reason:"exception in availability()",error:r}}}async function q(e,t,r){let n=await le(),a=r||Ye(n),o=await M(),s=await me(e,t),i=s.available,u=o.available,c={feature:e,mode:a,onDeviceAvailable:i,onDeviceStatus:s.status,onDeviceReason:s.reason,backendAvailable:u,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason};return a==="local-only"?i?{...c,source:"on-device",reason:`local-only: on-device available (${s.reason??s.status})`}:{...c,source:"none",reason:`local-only: on-device unavailable (${s.reason??s.status})`}:a==="backend-only"?u?{...c,source:"backend",reason:`backend-only: backend available (${o.reason??"n/a"})`}:{...c,source:"none",reason:`backend-only: backend unavailable (${o.reason??"n/a"})`}:i?{...c,source:"on-device",reason:`backend-fallback: using on-device (${s.reason??s.status})`}:u?{...c,source:"backend",reason:`backend-fallback: using backend (${o.reason??"n/a"}; on-device: ${s.reason??s.status})`}:{...c,source:"none",reason:`No on-device AI or backend available (on-device: ${s.reason??s.status}; backend: ${o.reason??"n/a"})`}}var Ze,ge,Q=A(()=>{"use strict";_();Ze=Qe();ge={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138}});var ve={};V(ve,{dispatchBackend:()=>E,withRecaptchaHeaders:()=>D});import{getRecaptcha as at}from"@smart-cloud/wpsuite-core";function ot(){return globalThis.WpSuite?.plugins?.aiKit?.settings??{}}function st(e){if(!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function it(e){let t=e?.reCaptchaChatTtlSeconds,r=typeof t=="number"&&Number.isFinite(t)?Math.max(0,t):120;return Math.min(3600,r)*1e3}function ut(e,t){let r=it(t);if(r<=0)return!1;let n=be.get(e);return n?Date.now()-n<r:!1}function Z(e,t){let r=st(t);r&&be.set(e,r)}function ye(e,t,r){if(e!=="frontend"||t!=="prompt"||!he(r)||r.saveChatSession!==!0)return;let n=r.sessionId;return typeof n=="string"&&n.trim()?n.trim():void 0}function we(e,t){if(!e)return;try{if(typeof e.get=="function")return e.get(t)??void 0}catch{}let r=Object.keys(e).find(a=>a.toLowerCase()===t.toLowerCase());if(!r)return;let n=e[r];return typeof n=="string"&&n?n:void 0}async function ct(e,t){if(e!=="frontend")return;let r=ot();if(!r?.reCaptchaSiteKey||t?.cacheKey&&ut(t.cacheKey,r))return;let{execute:n}=await at(r?.useRecaptchaEnterprise||!1);if(typeof n=="function")try{let o=await n(r.reCaptchaSiteKey,{action:"generate"});return typeof o=="string"&&o?o:void 0}catch{return}}async function D(e,t,r){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let n=await ct(e,r);return n?{...t,"X-Recaptcha-Token":n}:t}function K(e,t){try{e?.onStatus?.(t)}catch{}}function he(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function dt(e,t){if(!he(t))return t;let r=lt[e];if(!r)return t;let n={};for(let a of r)a in t&&(n[a]=t[a]);return n}function mt(e,t){return(e==="admin"?gt:pt)[t]}async function E(e,t,r,n,a={}){let o=mt(t,r),s=dt(r,n);if(!o)throw new x(`No backend path configured for "${r}" (${t}).`,e);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new x("backendTransport=fetch but backendBaseUrl is missing.",e);return ft(e.backendBaseUrl,o,s,a,e,r,t)}if(!e.backendApiName)throw new x("backendTransport=gatey but backendApiName is missing.",e);return bt(e.backendApiName,o,s,a,e,r,t)}async function ft(e,t,r,n,a,o,s){let i=`${e.replace(/\/+$/,"")}${t}`,u={"content-type":"application/json",...n.headers??{}},c=ye(s,o,r),g=await D(s,u,{cacheKey:c}),l=n.query&&Object.keys(n.query).length>0?"?"+new URLSearchParams(Object.entries(n.query).map(([m,v])=>[m,String(v)])).toString():"";K(n,{feature:o,context:s,step:"backend:request",source:"backend"}),K(n,{feature:o,context:s,step:"backend:waiting",source:"backend"});let p=await fetch(i+l,{method:"POST",headers:g,body:JSON.stringify(r??{}),signal:n.signal,credentials:"omit"});if(K(n,{feature:o,context:s,step:"backend:response",source:"backend"}),!p.ok){let m=`HTTP ${p.status}`;try{let v=await p.text();v&&(m=`${m}: ${v.substring(0,400)}`)}catch{}throw new x(`Fetch backend call failed: ${m}`,a,p.status)}let f=p.headers.get("content-type")||"",h=we(p.headers,"x-recaptcha-verified-at");if(f.includes("application/json")){let m=await p.json(),v=(m&&typeof m.sessionId=="string"&&m.sessionId.trim()?m.sessionId.trim():void 0)??c;return h&&v&&Z(v,h),m}return h&&c&&Z(c,h),await p.text()}async function bt(e,t,r,n,a,o,s){let u=globalThis.WpSuite?.plugins?.gatey;if(!u?.cognito?.post)throw new x("Gatey backend selected, but Gatey.cognito.post is not available.",a);let c=ye(s,o,r),g=await D(s,{...n.headers??{}},{cacheKey:c});K(n,{feature:o,context:s,step:"backend:request",source:"backend"}),K(n,{feature:o,context:s,step:"backend:waiting",source:"backend"});let l=u.cognito.post({apiName:e,path:t,options:{body:r,headers:g,retryStrategy:{strategy:"no-retry"}}});n?.signal?.addEventListener?.("abort",()=>{l.cancel()});let p=await l.response,f=we(p.headers,"x-recaptcha-verified-at"),h=await p.body.json(),m=h?.sessionId??c;return f&&typeof m=="string"&&m.trim()&&Z(m.trim(),f),K(n,{feature:o,context:s,step:"backend:response",source:"backend"}),h}var be,lt,gt,pt,Y=A(()=>{"use strict";J();be=new Map;lt={prompt:["text","systemPrompt","context","responseConstraint","saveChatSession","engine","sessionId","images","imageUrls","feedbackMessageId","feedbackType","knowledgeBaseId","disableKB","enableRerank","topK","temperature"],writer:["text","outputLanguage","instruction","context","tone","format","length","knowledgeBaseId","disableKB"],rewriter:["text","outputLanguage","instruction","context","tone","format","length"],summarizer:["text","outputLanguage","instruction","context","type","format","length"],translator:["text","sourceLanguage","targetLanguage"],"language-detector":["text","maxCandidates"],proofreader:["text","expectedInputLanguages"]};gt={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},pt={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});var Me={};V(Me,{detectLanguage:()=>It,getPromptOptions:()=>Be,getProofreadOptions:()=>Le,getRewriteOptions:()=>Se,getSummarizeOptions:()=>Te,getTranslateOptions:()=>Oe,getWriteOptions:()=>xe,prompt:()=>jt,proofread:()=>Kt,rewrite:()=>Mt,sendChatMessage:()=>Vt,sendFeedbackMessage:()=>$t,sendSearchMessage:()=>Gt,summarize:()=>Et,translate:()=>W,write:()=>Bt});import{getWpSuite as yt}from"@smart-cloud/wpsuite-core";function te(e){if(e==null)return String(e);if(typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return"["+e.map(te).join(",")+"]";let t=e;return"{"+Object.keys(t).sort().map(n=>JSON.stringify(n)+":"+te(t[n])).join(",")+"}"}function wt(e){let t=5381;for(let r=0;r<e.length;r++)t=t*33^e.charCodeAt(r);return(t>>>0).toString(36)}function ht(e,t){return`${e}:${wt(te(t))}`}function ee(){let e=new Map;for(let r of C.values()){let n=e.get(r.kind)??[];n.push(r),e.set(r.kind,n)}for(let[r,n]of e.entries())if(!(n.length<=Ce)){n.sort((a,o)=>a.refCount-o.refCount||a.lastUsed-o.lastUsed||a.key.localeCompare(o.key));for(let a of n){if(e.get(r).length<=Ce)break;if(!(a.refCount>0)){try{a.destroy()}catch{}C.delete(a.key),e.set(r,(e.get(r)??[]).filter(o=>o.key!==a.key))}}}if(C.size<=ke)return;let t=Array.from(C.values());t.sort((r,n)=>r.refCount-n.refCount||r.lastUsed-n.lastUsed||r.key.localeCompare(n.key));for(let r of t){if(C.size<=ke)break;if(!(r.refCount>0)){try{r.destroy()}catch{}C.delete(r.key)}}}async function T(e,t,r,n){let a=ht(e,t),o=C.get(a);if(o)return o.refCount++,o.lastUsed=Date.now(),C.delete(a),C.set(a,o),{model:o.model,fromCache:!0,release:()=>{let u=C.get(a);u&&(u.refCount=Math.max(0,u.refCount-1),u.lastUsed=Date.now(),ee())}};let s=U.get(a);if(s)return s;let i=(async()=>{let u=await r(),c={kind:e,key:a,model:u,refCount:1,lastUsed:Date.now(),destroy:()=>n(u)};return C.set(a,c),U.delete(a),ee(),{model:u,fromCache:!1,release:()=>{let g=C.get(a);g&&(g.refCount=Math.max(0,g.refCount-1),g.lastUsed=Date.now(),ee())}}})().catch(u=>{throw U.delete(a),u});return U.set(a,i),i}function P(){return(Ae?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function z(e){let t=["en","ja","es"],r=e.toLowerCase();return t.some(n=>r===n.toLowerCase())}function d(e,t,r,n){try{r?.onStatus?.({feature:e,context:t,...n})}catch{}}function I(){return Ae?.plugins?.aiKit?.settings?.sharedContext??void 0}function S(e){return e?.context??"admin"}function O(e,t=vt){let r=new AbortController,n=e?.signal,a=typeof e?.onDeviceTimeoutOverride=="number"?e.onDeviceTimeoutOverride:void 0,o=typeof a=="number"?a:t,s,i=!1,u=()=>{if(r.signal.aborted)return;let c=typeof n?.reason<"u"?n?.reason:void 0;r.abort(c??new DOMException("Aborted","AbortError"))};return n&&(n.aborted?u():n.addEventListener("abort",u)),o&&o>0&&(s=setTimeout(()=>{r.signal.aborted||(i=!0,r.abort(new re(o)))},o)),{signal:r.signal,timedOut:()=>i,dispose:()=>{s&&(clearTimeout(s),s=void 0),n&&n.removeEventListener("abort",u)}}}function j(e){let t=e;return{knowledgeBaseId:typeof t.knowledgeBaseId=="string"?t.knowledgeBaseId:void 0,disableKB:typeof t.disableKB=="boolean"?t.disableKB:void 0}}async function kt(e,t,r,n){let a=j(e),o=await Re(e.images,r,t,n);return{text:e.messages.filter(s=>s.role==="user").map(s=>s.content).join(`
|
|
1
|
+
var Fe=Object.defineProperty;var A=(e,t)=>()=>(e&&(t=e(e=0)),t);var V=(e,t)=>{for(var r in t)Fe(e,r,{get:t[r],enumerable:!0})};function B(){return globalThis.WpSuite?.plugins?.aiKit}async function ae(e=8e3){let t=B();if(t?.status!=="available"){if(t?.status==="error")throw new Error("AiKit failed");await new Promise((r,n)=>{let a=()=>s(r),o=()=>s(()=>n(new Error("AiKit failed"))),s=u=>{window.removeEventListener("wpsuite:ai-kit:ready",a),window.removeEventListener("wpsuite:ai-kit:error",o),i&&clearTimeout(i),u()};window.addEventListener("wpsuite:ai-kit:ready",a,{once:!0}),window.addEventListener("wpsuite:ai-kit:error",o,{once:!0});let i=e?window.setTimeout(()=>s(()=>n(new Error("AiKit timeout"))),e):0})}}async function De(e=1e4){await ae(e);let r=B()?.features?.store;if(!r)throw new Error("AiKit store is not available");return r}var G=A(()=>{"use strict"});import{getConfig as Ue}from"@smart-cloud/wpsuite-core";import{createReduxStore as ze,dispatch as We,register as Ne,select as _e,subscribe as He}from"@wordpress/data";import{I18n as oe}from"aws-amplify/utils";var $,se,qe,je,Ve,Ge,$e,Xe,N,ie,Je,_=A(()=>{"use strict";G();typeof WpSuite<"u"?$=WpSuite.siteSettings:$={};se=e=>{let t=e&&typeof e=="object"?e:{},r={};return typeof t.mode=="string"&&(r.mode=t.mode),typeof t.backendTransport=="string"&&(r.backendTransport=t.backendTransport),typeof t.backendApiName=="string"&&(r.backendApiName=t.backendApiName),typeof t.backendBaseUrl=="string"&&(r.backendBaseUrl=t.backendBaseUrl),typeof t.subscriptionType=="string"&&(r.subscriptionType=t.subscriptionType),typeof t.enableChatbot=="boolean"&&(r.enableChatbot=t.enableChatbot),typeof t.chatbot=="object"&&t.chatbot!==null&&(r.chatbot=t.chatbot),r},qe=async()=>{let e=B();if(!e)throw new Error("AI-Kit plugin is not available");let t=null;return e.settings.customTranslationsUrl&&(t=await fetch(e.settings.customTranslationsUrl+(e.settings.customTranslationsUrl.includes("?")?"&":"?")+"t="+$.lastUpdate).then(r=>r.ok?r.text():null).then(r=>r?JSON.parse(r):null).catch(()=>null)),t??null},je=async()=>{let e=se(await Ue("aiKit")),t=await qe();return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},Ve={setShowChatbotPreview(e){return{type:"SET_SHOW_CHATBOT_PREVIEW",showChatbotPreview:e}},setLanguage(e){return!e||e==="system"?oe.setLanguage(""):oe.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}}},Ge={getConfig(e){return e.config},isShowChatbotPreview(e){return e.showChatbotPreview},getCustomTranslations(e){return e.customTranslations},getLanguage(e){return e.language},getDirection(e){return e.direction},getState(e){return e}},$e={},Xe=e=>We(e),N=e=>_e(e),ie=async()=>{let e=await je(),t=ze("wpsuite/ai-kit",{reducer(r=e,n){switch(n.type){case"SET_LANGUAGE":return{...r,language:n.language};case"SET_DIRECTION":return{...r,direction:n.direction};case"SET_SHOW_CHATBOT_PREVIEW":return{...r,showChatbotPreview:n.showChatbotPreview}}return r},actions:Ve,selectors:Ge,resolvers:$e});return Ne(t),t},Je=(e,t,r)=>{let n;function a(){let s=N(e).getState(),i=t(s);if(i!==n){let u=n;n=i,r(n,u)}}let o=He(a,e);return a(),o}});var y,ue=A(()=>{"use strict";y="smartcloud-ai-kit"});import{jsx as k,jsxs as X}from"react/jsx-runtime";var sr,ir,ur,ce=A(()=>{"use strict";sr=e=>X("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[k("path",{d:"M19 27H33"}),k("path",{d:"M19 33H33"}),k("path",{d:"M8 21L9.5 24L12.5 25.5L9.5 27L8 30L6.5 27L3.5 25.5L6.5 24Z"}),k("path",{d:"M36 4L38 8L42 10L38 12L36 16L34 12L30 10L34 8Z"}),k("path",{d:"M16 10V40H36V22"}),k("path",{d:"M16 10H22"}),k("path",{d:"M22 10V23H36"}),k("path",{d:"M22 10L36 22"})]}),ir=e=>X("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[k("path",{d:"M42 38L34 30H10C7.79086 30 6 28.2091 6 26V8C6 5.79086 7.79086 4 10 4H38C40.2091 4 42 5.79086 42 8V38Z"}),k("rect",{x:"14",y:"13",width:"6",height:"6",rx:"1"}),k("rect",{x:"28",y:"13",width:"6",height:"6",rx:"1"}),k("path",{d:"M16 24H32"})]}),ur=e=>X("svg",{xmlns:"http://www.w3.org/2000/svg",width:"48",height:"48",viewBox:"0 0 48 48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[k("path",{stroke:"none",d:"M0 0h48v48H0z",fill:"none"}),k("path",{d:"M6 20a14 14 0 1 0 28 0a14 14 0 1 0 -28 0"}),k("path",{d:"M42 42l-12 -12"}),k("path",{d:"M20 20a3 3 0 1 0 -2.28 -4.948"}),k("circle",{cx:"20",cy:"26",r:"0.9",fill:"currentColor",stroke:"none"})]})});var x,J=A(()=>{"use strict";x=class extends Error{constructor(r,n,a){super(r);this.decision=n;this.status=a;this.name="AiBackendError"}}});var fe={};V(fe,{MIN_CHROME_VERSION:()=>ge,checkOnDeviceAvailability:()=>me,decideCapability:()=>q,resolveBackend:()=>M});import{getWpSuite as Qe}from"@smart-cloud/wpsuite-core";async function le(){let t=await Ze?.plugins?.aiKit?.features.store;return N(t).getConfig()??{}}function de(e){let t=e.backendApiName?.trim()||void 0,r=e.backendBaseUrl?.trim()||void 0;return{transport:e.backendTransport??(r?"fetch":t?"gatey":void 0),backendApiName:t,backendBaseUrl:r}}function Ye(e){if(e.mode)return e.mode;let{transport:t}=de(e);return t?"backend-fallback":"local-only"}async function M(){let e=await le(),{transport:t,backendApiName:r,backendBaseUrl:n}=de(e);if(!t)return{available:!1,reason:"No backend configured"};if(t==="fetch")return n?{available:!0,transport:t,baseUrl:n,reason:"Custom fetch backend"}:{available:!1,reason:"backendBaseUrl is missing"};if(!r)return{available:!1,reason:"backendApiName is missing"};let a=globalThis.WpSuite?.plugins?.gatey;return!a?.availability||await a.availability()!=="available"?{available:!1,reason:"Gatey is not available"}:{available:!0,transport:t,apiName:r,reason:"Gatey backend"}}function L(e){return typeof globalThis[e]<"u"}function pe(e){if(!e)return;let t=Number.parseInt(String(e).split(".")[0]??"",10);return Number.isFinite(t)?t:void 0}function H(e,t){return e?.find(r=>r.brand===t)?.version}async function et(){let e=navigator?.userAgentData;if(e){try{let r=(await e.getHighEntropyValues?.(["fullVersionList"]))?.fullVersionList;if(Array.isArray(r)&&r.length>0)return r}catch{}if(Array.isArray(e.brands)&&e.brands.length>0)return e.brands}}function tt(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?pe(t[1]):void 0}function rt(){return!!navigator?.brave}async function nt(e){if(typeof navigator>"u")return{allowed:!1,reason:"no-navigator"};if(typeof globalThis.isSecureContext=="boolean"&&!globalThis.isSecureContext)return{allowed:!1,reason:"not-secure-context"};let t=navigator.userAgent??"",r=await et(),n=H(r,"Microsoft Edge")??H(r,"Microsoft Edge WebView2"),a=H(r,"Google Chrome")??H(r,"Chromium"),o=!!n||/\bEdg\//i.test(t)||/\bEdgiOS\//i.test(t),s=/\bOPR\//i.test(t),i=/\bVivaldi\//i.test(t),u=/\bSamsungBrowser\//i.test(t),c=/\bFirefox\//i.test(t),g=!/\bChrome\//i.test(t)&&/\bSafari\//i.test(t)&&!/\bChromium\//i.test(t),l=rt()||/\bBrave\//i.test(t);if(o||s||i||u||c||g||l)return{allowed:!1,reason:o?"edge":l?"brave":c?"firefox":g?"safari":s?"opera":i?"vivaldi":u?"samsung":"unsupported-browser"};let p=pe(a)??tt(t),f=ge[e];return f?p?p<f?{allowed:!1,reason:`chrome-too-old-${p}-lt-${f}`,chromeMajor:p}:{allowed:!0,reason:"ok",chromeMajor:p}:{allowed:!1,reason:"unknown-chrome-version"}:{allowed:!1,reason:"no-min-version",chromeMajor:p}}async function me(e,t){try{let r=await nt(e),n=`browser-gate:${r.reason}${r.chromeMajor?` (chrome ${r.chromeMajor})`:""}`;if(!r.allowed)return{available:!1,status:"unavailable",reason:n};switch(e){case"writer":{if(!L("Writer")||!Writer?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Writer.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"rewriter":{if(!L("Rewriter")||!Rewriter?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Rewriter.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"summarizer":{if(!L("Summarizer")||!Summarizer?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Summarizer.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"proofreader":{if(!L("Proofreader")||!Proofreader?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Proofreader.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"language-detector":{if(!L("LanguageDetector")||!LanguageDetector?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await LanguageDetector.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"translator":{if(!L("Translator")||!Translator?.availability)return{available:!1,status:"api-not-present",reason:n};let a=t;if(!a?.sourceLanguage||!a?.targetLanguage)return{available:!1,status:"error",reason:n,error:new Error("Translator.availability requires sourceLanguage/targetLanguage")};let o=await Translator.availability({...a,sourceLanguage:a.sourceLanguage==="auto"?"en":a.sourceLanguage,targetLanguage:a.sourceLanguage==="auto"||a.sourceLanguage===a.targetLanguage?"hu":a.targetLanguage});return{available:o!=="unavailable",status:o,reason:n}}case"prompt":{if(!L("LanguageModel")||!LanguageModel?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await LanguageModel.availability(t);return{available:a!=="unavailable",status:a,reason:n}}default:return{available:!1,status:"unknown-feature",reason:n}}}catch(r){return{available:!1,status:"error",reason:"exception in availability()",error:r}}}async function q(e,t,r){let n=await le(),a=r||Ye(n),o=await M(),s=await me(e,t),i=s.available,u=o.available,c={feature:e,mode:a,onDeviceAvailable:i,onDeviceStatus:s.status,onDeviceReason:s.reason,backendAvailable:u,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason};return a==="local-only"?i?{...c,source:"on-device",reason:`local-only: on-device available (${s.reason??s.status})`}:{...c,source:"none",reason:`local-only: on-device unavailable (${s.reason??s.status})`}:a==="backend-only"?u?{...c,source:"backend",reason:`backend-only: backend available (${o.reason??"n/a"})`}:{...c,source:"none",reason:`backend-only: backend unavailable (${o.reason??"n/a"})`}:i?{...c,source:"on-device",reason:`backend-fallback: using on-device (${s.reason??s.status})`}:u?{...c,source:"backend",reason:`backend-fallback: using backend (${o.reason??"n/a"}; on-device: ${s.reason??s.status})`}:{...c,source:"none",reason:`No on-device AI or backend available (on-device: ${s.reason??s.status}; backend: ${o.reason??"n/a"})`}}var Ze,ge,Q=A(()=>{"use strict";_();Ze=Qe();ge={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138}});var ve={};V(ve,{dispatchBackend:()=>I,withRecaptchaHeaders:()=>D});import{getRecaptcha as at}from"@smart-cloud/wpsuite-core";function ot(){return globalThis.WpSuite?.plugins?.aiKit?.settings??{}}function st(e){if(!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function it(e){let t=e?.reCaptchaChatTtlSeconds,r=typeof t=="number"&&Number.isFinite(t)?Math.max(0,t):120;return Math.min(3600,r)*1e3}function ut(e,t){let r=it(t);if(r<=0)return!1;let n=be.get(e);return n?Date.now()-n<r:!1}function Z(e,t){let r=st(t);r&&be.set(e,r)}function ye(e,t,r){if(e!=="frontend"||t!=="prompt"||!he(r)||r.saveChatSession!==!0)return;let n=r.sessionId;return typeof n=="string"&&n.trim()?n.trim():void 0}function we(e,t){if(!e)return;try{if(typeof e.get=="function")return e.get(t)??void 0}catch{}let r=Object.keys(e).find(a=>a.toLowerCase()===t.toLowerCase());if(!r)return;let n=e[r];return typeof n=="string"&&n?n:void 0}async function ct(e,t){if(e!=="frontend")return;let r=ot();if(!r?.reCaptchaSiteKey||t?.cacheKey&&ut(t.cacheKey,r))return;let{execute:n}=await at(r?.useRecaptchaEnterprise||!1);if(typeof n=="function")try{let o=await n(r.reCaptchaSiteKey,{action:"generate"});return typeof o=="string"&&o?o:void 0}catch{return}}async function D(e,t,r){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let n=await ct(e,r);return n?{...t,"X-Recaptcha-Token":n}:t}function K(e,t){try{e?.onStatus?.(t)}catch{}}function he(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function dt(e,t){if(!he(t))return t;let r=lt[e];if(!r)return t;let n={};for(let a of r)a in t&&(n[a]=t[a]);return n}function mt(e,t){return(e==="admin"?gt:pt)[t]}async function I(e,t,r,n,a={}){let o=mt(t,r),s=dt(r,n);if(!o)throw new x(`No backend path configured for "${r}" (${t}).`,e);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new x("backendTransport=fetch but backendBaseUrl is missing.",e);return ft(e.backendBaseUrl,o,s,a,e,r,t)}if(!e.backendApiName)throw new x("backendTransport=gatey but backendApiName is missing.",e);return bt(e.backendApiName,o,s,a,e,r,t)}async function ft(e,t,r,n,a,o,s){let i=`${e.replace(/\/+$/,"")}${t}`,u={"content-type":"application/json",...n.headers??{}},c=ye(s,o,r),g=await D(s,u,{cacheKey:c}),l=n.query&&Object.keys(n.query).length>0?"?"+new URLSearchParams(Object.entries(n.query).map(([m,v])=>[m,String(v)])).toString():"";K(n,{feature:o,context:s,step:"backend:request",source:"backend"}),K(n,{feature:o,context:s,step:"backend:waiting",source:"backend"});let p=await fetch(i+l,{method:"POST",headers:g,body:JSON.stringify(r??{}),signal:n.signal,credentials:"omit"});if(K(n,{feature:o,context:s,step:"backend:response",source:"backend"}),!p.ok){let m=`HTTP ${p.status}`;try{let v=await p.text();v&&(m=`${m}: ${v.substring(0,400)}`)}catch{}throw new x(`Fetch backend call failed: ${m}`,a,p.status)}let f=p.headers.get("content-type")||"",h=we(p.headers,"x-recaptcha-verified-at");if(f.includes("application/json")){let m=await p.json(),v=(m&&typeof m.sessionId=="string"&&m.sessionId.trim()?m.sessionId.trim():void 0)??c;return h&&v&&Z(v,h),m}return h&&c&&Z(c,h),await p.text()}async function bt(e,t,r,n,a,o,s){let u=globalThis.WpSuite?.plugins?.gatey;if(!u?.cognito?.post)throw new x("Gatey backend selected, but Gatey.cognito.post is not available.",a);let c=ye(s,o,r),g=await D(s,{...n.headers??{}},{cacheKey:c});K(n,{feature:o,context:s,step:"backend:request",source:"backend"}),K(n,{feature:o,context:s,step:"backend:waiting",source:"backend"});let l=u.cognito.post({apiName:e,path:t,options:{body:r,headers:g,retryStrategy:{strategy:"no-retry"}}});n?.signal?.addEventListener?.("abort",()=>{l.cancel()});let p=await l.response,f=we(p.headers,"x-recaptcha-verified-at"),h=await p.body.json(),m=h?.sessionId??c;return f&&typeof m=="string"&&m.trim()&&Z(m.trim(),f),K(n,{feature:o,context:s,step:"backend:response",source:"backend"}),h}var be,lt,gt,pt,Y=A(()=>{"use strict";J();be=new Map;lt={prompt:["text","systemPrompt","context","responseConstraint","saveChatSession","engine","sessionId","images","imageUrls","feedbackMessageId","feedbackType","knowledgeBaseId","disableKB","enableRerank","topK","temperature"],writer:["text","outputLanguage","instruction","context","tone","format","length","knowledgeBaseId","disableKB"],rewriter:["text","outputLanguage","instruction","context","tone","format","length"],summarizer:["text","outputLanguage","instruction","context","type","format","length"],translator:["text","sourceLanguage","targetLanguage"],"language-detector":["text","maxCandidates"],proofreader:["text","expectedInputLanguages"]};gt={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},pt={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});var Me={};V(Me,{detectLanguage:()=>Et,getPromptOptions:()=>Be,getProofreadOptions:()=>Le,getRewriteOptions:()=>Se,getSummarizeOptions:()=>Te,getTranslateOptions:()=>Oe,getWriteOptions:()=>xe,prompt:()=>jt,proofread:()=>Kt,rewrite:()=>Mt,sendChatMessage:()=>Vt,sendFeedbackMessage:()=>$t,sendSearchMessage:()=>Gt,summarize:()=>It,translate:()=>W,write:()=>Bt});import{getWpSuite as yt}from"@smart-cloud/wpsuite-core";function te(e){if(e==null)return String(e);if(typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return"["+e.map(te).join(",")+"]";let t=e;return"{"+Object.keys(t).sort().map(n=>JSON.stringify(n)+":"+te(t[n])).join(",")+"}"}function wt(e){let t=5381;for(let r=0;r<e.length;r++)t=t*33^e.charCodeAt(r);return(t>>>0).toString(36)}function ht(e,t){return`${e}:${wt(te(t))}`}function ee(){let e=new Map;for(let r of C.values()){let n=e.get(r.kind)??[];n.push(r),e.set(r.kind,n)}for(let[r,n]of e.entries())if(!(n.length<=Ce)){n.sort((a,o)=>a.refCount-o.refCount||a.lastUsed-o.lastUsed||a.key.localeCompare(o.key));for(let a of n){if(e.get(r).length<=Ce)break;if(!(a.refCount>0)){try{a.destroy()}catch{}C.delete(a.key),e.set(r,(e.get(r)??[]).filter(o=>o.key!==a.key))}}}if(C.size<=ke)return;let t=Array.from(C.values());t.sort((r,n)=>r.refCount-n.refCount||r.lastUsed-n.lastUsed||r.key.localeCompare(n.key));for(let r of t){if(C.size<=ke)break;if(!(r.refCount>0)){try{r.destroy()}catch{}C.delete(r.key)}}}async function T(e,t,r,n){let a=ht(e,t),o=C.get(a);if(o)return o.refCount++,o.lastUsed=Date.now(),C.delete(a),C.set(a,o),{model:o.model,fromCache:!0,release:()=>{let u=C.get(a);u&&(u.refCount=Math.max(0,u.refCount-1),u.lastUsed=Date.now(),ee())}};let s=U.get(a);if(s)return s;let i=(async()=>{let u=await r(),c={kind:e,key:a,model:u,refCount:1,lastUsed:Date.now(),destroy:()=>n(u)};return C.set(a,c),U.delete(a),ee(),{model:u,fromCache:!1,release:()=>{let g=C.get(a);g&&(g.refCount=Math.max(0,g.refCount-1),g.lastUsed=Date.now(),ee())}}})().catch(u=>{throw U.delete(a),u});return U.set(a,i),i}function P(){return(Ae?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function z(e){let t=["en","ja","es"],r=e.toLowerCase();return t.some(n=>r===n.toLowerCase())}function d(e,t,r,n){try{r?.onStatus?.({feature:e,context:t,...n})}catch{}}function E(){return Ae?.plugins?.aiKit?.settings?.sharedContext??void 0}function S(e){return e?.context??"admin"}function O(e,t=vt){let r=new AbortController,n=e?.signal,a=typeof e?.onDeviceTimeoutOverride=="number"?e.onDeviceTimeoutOverride:void 0,o=typeof a=="number"?a:t,s,i=!1,u=()=>{if(r.signal.aborted)return;let c=typeof n?.reason<"u"?n?.reason:void 0;r.abort(c??new DOMException("Aborted","AbortError"))};return n&&(n.aborted?u():n.addEventListener("abort",u)),o&&o>0&&(s=setTimeout(()=>{r.signal.aborted||(i=!0,r.abort(new re(o)))},o)),{signal:r.signal,timedOut:()=>i,dispose:()=>{s&&(clearTimeout(s),s=void 0),n&&n.removeEventListener("abort",u)}}}function j(e){let t=e;return{knowledgeBaseId:typeof t.knowledgeBaseId=="string"?t.knowledgeBaseId:void 0,disableKB:typeof t.disableKB=="boolean"?t.disableKB:void 0}}async function kt(e,t,r,n){let a=j(e),o=await Re(e.images,r,t,n);return{text:e.messages.filter(s=>s.role==="user").map(s=>s.content).join(`
|
|
2
2
|
`),systemPrompt:e.messages.filter(s=>s.role==="system").map(s=>s.content).join(`
|
|
3
|
-
`),images:o?.images,imageUrls:o?.imageUrls,context:e.sharedContext,saveChatSession:!1,responseConstraint:e.responseConstraint,...a}}async function Ct(e,t,r){let n=j(e),a=await Re(e.images,t,"frontend",r);return{sessionId:e.sessionId,text:e.message,images:a?.images,imageUrls:a?.imageUrls,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!0,...n}}async function At(e){let t=j(e);return{engine:"kb_rag",sessionId:e.sessionId,text:e.query,topK:e.topK,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!1,...t}}async function Pt(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function xt(e){let t=j(e);return{text:e.prompt,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length,...t}}function St(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length}}function Lt(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,type:e.type,format:e.format,length:e.length}}function Tt(e,t,r){return{text:e,sourceLanguage:t,targetLanguage:r}}function Ot(e,t){let r=t;return{text:e,maxCandidates:typeof r?.maxCandidates=="number"?r.maxCandidates:void 0}}function Rt(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function R(e,t,r,n,a,o,s,i){d(n,e,i,{step:"decide",message:"Deciding capability",silent:r});let u=await q(n,a,t);if(d(n,e,i,{step:"decide",source:u.source,message:`Using ${u.source}`,silent:r}),u.source==="on-device")try{let c=await o();return d(n,e,i,{step:"done",source:"on-device",silent:r}),c}catch(c){console.error(`Error in on-device ${n}:`,c),d(n,e,i,{step:"error",source:"on-device",message:c.message,silent:r}),i?.signal?.throwIfAborted()}if(u.mode!=="local-only"&&u.backendAvailable){d(n,e,i,{step:"backend:request",source:"backend",silent:r});let c=typeof s=="function"?await s(u):s,g=await E(u,e,n,c,i);return d(n,e,i,{step:"done",source:"backend",silent:r}),g}throw new Error(`No capability for "${n}" (${e}). Reason: ${u.reason}`)}function Ft(e){let t=Array.isArray(e.images)&&e.images.length>0,r=e.images??[],n=t?r.map(o=>({type:"image",value:o})):[],a;if(typeof e.messages=="string")a=t?[{role:"user",content:[{type:"text",value:e.messages},...n]}]:e.messages;else{let o=e.messages.filter(s=>s.role!=="system").map(s=>({role:s.role==="assistant"?"assistant":"user",content:s.content}));if(t){let s=-1;for(let i=o.length-1;i>=0;i--)if(o[i].role==="user"){s=i;break}if(s===-1)o.push({role:"user",content:[{type:"text",value:""},...n]});else{let i=String(o[s].content??"");o[s]={...o[s],content:[{type:"text",value:i},...n]}}}a=o}return a}function Ut(e){return typeof Blob<"u"&&e instanceof Blob}function zt(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function Wt(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}async function Nt(e){return new Promise((t,r)=>{let n=new FileReader;n.onerror=()=>r(n.error??new Error("FileReader error")),n.onload=()=>t(String(n.result??"")),n.readAsDataURL(e)})}async function _t(e){let t=await Nt(e),r=t.indexOf(",");return r>=0?t.substring(r+1):t}async function Ht(e,t,r,n,a,o){let s=t==="admin"?"/admin/generate-upload-url":"/frontend/generate-upload-url",i={...o?.headers??{}},u=await D(t,i);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new Error("backendBaseUrl missing for fetch transport");let f=new URLSearchParams({fileName:r,contentType:n,contentLength:String(a)}).toString(),h=`${e.backendBaseUrl.replace(/\/+$/,"")}${s}?${f}`,m=await fetch(h,{method:"GET",headers:u,signal:o?.signal,credentials:"omit"});if(!m.ok){let F=await m.text().catch(()=>"");throw new Error(`generate-upload-url failed (fetch): HTTP ${m.status}${F?": "+F.substring(0,200):""}`)}let v=await m.json();if(!v?.uploadUrl||!v?.imageKey)throw new Error("generate-upload-url response missing uploadUrl/imageKey");return{uploadUrl:v.uploadUrl,imageKey:v.imageKey}}if(!e.backendApiName)throw new Error("backendApiName missing for gatey transport");let c=globalThis.WpSuite?.plugins?.gatey,g={fileName:r,contentType:n,contentLength:a};if(c?.cognito?.get){let f=c.cognito.get({apiName:e.backendApiName,path:s,options:{queryParams:Object.keys(g).reduce((m,v)=>(m[v]=String(g[v]),m),{}),headers:u,retryStrategy:{strategy:"no-retry"}}});o?.signal?.addEventListener?.("abort",()=>{f.cancel()});let h=await f.response.then(m=>m.body.json());if(!h?.uploadUrl||!h?.imageKey)throw new Error("generate-upload-url (gatey get) response missing uploadUrl/imageKey");return{uploadUrl:h.uploadUrl,imageKey:h.imageKey}}if(!c?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let l=c.cognito.post({apiName:e.backendApiName,path:s,options:{body:g,headers:u,retryStrategy:{strategy:"no-retry"}}});o?.signal?.addEventListener?.("abort",()=>{l.cancel()});let p=await l.response.then(f=>f.body.json());if(!p?.uploadUrl||!p?.imageKey)throw new Error("generate-upload-url (gatey post) response missing uploadUrl/imageKey");return{uploadUrl:p.uploadUrl,imageKey:p.imageKey}}async function qt(e,t,r,n){let a=await fetch(e,{method:"PUT",headers:{"Content-Type":r||"application/octet-stream"},body:t,signal:n?.signal});if(!a.ok){let o=await a.text().catch(()=>"");throw new Error(`S3 upload failed: HTTP ${a.status}${o?": "+o.substring(0,200):""}`)}}async function Re(e,t,r,n){if(!e||e.length===0)return;let a=[];for(let c of e){if(!Ut(c))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");a.push(c)}let o=a.reduce((c,g)=>c+(g.size||0),0);if(Math.ceil(o*1.37+2048*a.length)<=Dt){d("prompt",r,n,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let c=[];for(let g of a)c.push({format:Wt(g.type),data:await _t(g)});return{images:c}}d("prompt",r,n,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let u=[];for(let c=0;c<a.length;c++){let g=a[c],l=g.type||"application/octet-stream",p=g.name||`image_${c}.${zt(l)}`;d("prompt",r,n,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:f,imageKey:h}=await Ht(t,r,p,l,g.size||0,n);d("prompt",r,n,{step:"backend:waiting",source:"backend",message:"Uploading"}),await qt(f,g,l,n),u.push(h)}return{imageUrls:u}}var ke,Ce,C,U,Ae,vt,Pe,re,xe,Bt,Se,Mt,Le,Kt,Te,Et,It,Oe,W,Dt,Be,jt,Vt,Gt,$t,Ke=A(()=>{"use strict";Y();Q();Ie();ke=8,Ce=2,C=new Map,U=new Map;typeof window<"u"&&window.addEventListener("beforeunload",()=>{for(let e of C.values())try{e.destroy()}catch{}C.clear(),U.clear()});Ae=yt();vt=45e3,Pe=5e3,re=class extends Error{timeoutMs;constructor(t){super(`On-device execution exceeded ${t}ms`),this.name="OnDeviceTimeoutError",this.timeoutMs=t}};xe=e=>{let t=e.outputLanguage?e.outputLanguage:P(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},Bt=async(e,t)=>{let r=S(t),n=e.sharedContext??I(),a=e.outputLanguage?e.outputLanguage:P(),o=a,s=!1;z(a)||(s=!0,a="en");let i=xe({...e,outputLanguage:a});return R(r,t?.modeOverride,!1,"writer",i,async()=>{if(typeof Writer>"u")throw new Error("Writer API not available in this browser.");d("writer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Writer session"});let u=O(t);try{let{model:c,release:g}=await T("writer",{core:i,sharedContext:n},()=>Writer.create({...i,sharedContext:n,monitor(l){l.addEventListener("downloadprogress",p=>{let f=p.loaded;d("writer",r,t,{step:"on-device:download",source:"on-device",progress:f,loaded:f})})}}),l=>l.destroy());d("writer",r,t,{step:"on-device:ready",source:"on-device"});try{d("writer",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let l=await c.write(e.prompt,{context:e.context,signal:u.signal});return s?{result:(await W({text:l,sourceLanguage:a,targetLanguage:o},{context:r,signal:u.signal})).result}:{result:l}}finally{try{g()}catch(l){console.error("Error destroying writer:",l)}}}finally{u.dispose()}},xt({...e,sharedContext:n,outputLanguage:o}),t)},Se=e=>{let t=e.outputLanguage?e.outputLanguage:P(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},Mt=async(e,t)=>{let r=S(t),n=e.sharedContext??I(),a=e.outputLanguage?e.outputLanguage:P(),o=a,s=!1;z(a)||(s=!0,a="en");let i=Se({...e,outputLanguage:a});return R(r,t?.modeOverride,!1,"rewriter",i,async()=>{if(typeof Rewriter>"u")throw new Error("Rewriter API not available in this browser.");d("rewriter",r,t,{step:"on-device:init",source:"on-device",message:"Creating Rewriter session"});let u=O(t);try{let{model:c,release:g}=await T("rewriter",{core:i,sharedContext:n},()=>Rewriter.create({...i,sharedContext:n,monitor(l){l.addEventListener("downloadprogress",p=>{let f=p.loaded;d("rewriter",r,t,{step:"on-device:download",source:"on-device",progress:f,loaded:f})})}}),l=>l.destroy());d("rewriter",r,t,{step:"on-device:ready",source:"on-device"});try{d("rewriter",r,t,{step:"on-device:run",source:"on-device",message:"Rewriting text"});let l=await c.rewrite(e.text,{context:e.context,signal:u.signal});return s?{result:(await W({text:l,sourceLanguage:a,targetLanguage:o},{context:r,signal:u.signal})).result}:{result:l}}finally{try{g()}catch(l){console.error("Error destroying rewriter:",l)}}}finally{u.dispose()}},St({...e,sharedContext:n,outputLanguage:o}),t)},Le=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),Kt=async(e,t)=>{let r=S(t),n=await Le();return R(r,t?.modeOverride,!1,"proofreader",n,async()=>{if(typeof Proofreader>"u")throw new Error("Proofreader API not available in this browser.");d("proofreader",r,t,{step:"on-device:init",source:"on-device",message:"Creating Proofreader session"});let a=O(t);try{let{model:o,release:s}=await T("proofreader",{core:n},()=>Proofreader.create({...n,monitor(i){i.addEventListener("downloadprogress",u=>{let c=u.loaded;d("proofreader",r,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c})})}}),i=>i.destroy());d("proofreader",r,t,{step:"on-device:ready",source:"on-device"});try{return d("proofreader",r,t,{step:"on-device:run",source:"on-device",message:"Proofreading"}),{result:await o.proofread(e.text,{signal:a.signal})}}finally{try{s()}catch(i){console.error("Error destroying proofreader:",i)}}}finally{a.dispose()}},Rt(e),t)},Te=e=>{let t=e.outputLanguage?e.outputLanguage:P(),r={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},Et=async(e,t)=>{let r=S(t),n=e.sharedContext??I(),a=e.outputLanguage?e.outputLanguage:P(),o=a,s=!1;z(a)||(s=!0,a="en");let i=await Te({...e,outputLanguage:a});return R(r,t?.modeOverride,!1,"summarizer",i,async()=>{if(typeof Summarizer>"u")throw new Error("Summarizer API not available in this browser.");d("summarizer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Summarizer session"});let u=O(t);try{let{model:c,release:g}=await T("summarizer",{core:i,sharedContext:n},()=>Summarizer.create({...i,sharedContext:n,monitor(l){l.addEventListener("downloadprogress",p=>{let f=p.loaded;d("summarizer",r,t,{step:"on-device:download",source:"on-device",progress:f,loaded:f})})}}),l=>l.destroy());d("summarizer",r,t,{step:"on-device:ready",source:"on-device"});try{d("summarizer",r,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let l=await c.summarize(e.text,{context:e.context,signal:u.signal});return s?{result:(await W({text:l,sourceLanguage:a,targetLanguage:o},{context:r,signal:u.signal})).result}:{result:l}}finally{try{g()}catch(l){console.error("Error destroying summarizer:",l)}}}finally{u.dispose()}},Lt({...e,sharedContext:n,outputLanguage:o}),t)},It=async(e,t)=>{let r=S(t);return R(r,t?.modeOverride,t?.silent,"language-detector",void 0,async()=>{if(typeof LanguageDetector>"u")throw new Error("LanguageDetector API not available in this browser.");d("language-detector",r,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageDetector session",silent:t?.silent});let n=O(t,Pe);try{let{model:a,release:o}=await T("language-detector",{},()=>LanguageDetector.create({monitor(s){s.addEventListener("downloadprogress",i=>{let u=i.loaded;d("language-detector",r,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u,silent:t?.silent})})}}),s=>s.destroy());d("language-detector",r,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{return d("language-detector",r,t,{step:"on-device:run",source:"on-device",message:"Detecting language",silent:t?.silent}),{result:{candidates:(await a.detect(e.text,{signal:n.signal})).filter(i=>Ee.find(u=>u.value===i.detectedLanguage))}}}finally{try{o()}catch(s){console.error("Error destroying language detector:",s)}}}finally{n.dispose()}},Ot(e.text,t),t)},Oe=e=>{let t={sourceLanguage:e.sourceLanguage??"auto",targetLanguage:e.targetLanguage??P()??"en"};return Promise.resolve(t)},W=async(e,t)=>{let r=S(t),n=await Oe({...e});return R(r,t?.modeOverride,t?.silent,"translator",n,async()=>{if(typeof Translator>"u")throw new Error("Translator API not available in this browser.");d("translator",r,t,{step:"on-device:init",source:"on-device",message:"Creating Translator session",silent:t?.silent});let a=O(t,Pe);try{let{model:o,release:s}=await T("translator",{core:n},()=>Translator.create({...n,monitor(i){i.addEventListener("downloadprogress",u=>{let c=u.loaded;d("translator",r,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c,silent:t?.silent})})}}),i=>i.destroy());d("translator",r,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{d("translator",r,t,{step:"on-device:run",source:"on-device",message:"Translating",silent:t?.silent});let i=[],u=()=>{if(typeof a.signal.throwIfAborted=="function")a.signal.throwIfAborted();else if(a.signal.aborted)throw a.signal.reason??new DOMException("Aborted","AbortError")};for(let g of e.text.split(`
|
|
3
|
+
`),images:o?.images,imageUrls:o?.imageUrls,audio:e.audio,context:e.sharedContext,saveChatSession:!1,responseConstraint:e.responseConstraint,...a}}async function Ct(e,t,r){let n=j(e),a=await Re(e.images,t,"frontend",r);return{sessionId:e.sessionId,text:e.message,images:a?.images,imageUrls:a?.imageUrls,audio:e.audio,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!0,...n}}async function At(e){let t=j(e);return{engine:"kb_rag",sessionId:e.sessionId,text:e.query,audio:e.audio,topK:e.topK,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!1,...t}}async function Pt(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function xt(e){let t=j(e);return{text:e.prompt,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length,...t}}function St(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length}}function Lt(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,type:e.type,format:e.format,length:e.length}}function Tt(e,t,r){return{text:e,sourceLanguage:t,targetLanguage:r}}function Ot(e,t){let r=t;return{text:e,maxCandidates:typeof r?.maxCandidates=="number"?r.maxCandidates:void 0}}function Rt(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function R(e,t,r,n,a,o,s,i){d(n,e,i,{step:"decide",message:"Deciding capability",silent:r});let u=await q(n,a,t);if(d(n,e,i,{step:"decide",source:u.source,message:`Using ${u.source}`,silent:r}),u.source==="on-device")try{let c=await o();return d(n,e,i,{step:"done",source:"on-device",silent:r}),c}catch(c){console.error(`Error in on-device ${n}:`,c),d(n,e,i,{step:"error",source:"on-device",message:c.message,silent:r}),i?.signal?.throwIfAborted()}if(u.mode!=="local-only"&&u.backendAvailable){d(n,e,i,{step:"backend:request",source:"backend",silent:r});let c=typeof s=="function"?await s(u):s,g=await I(u,e,n,c,i);return d(n,e,i,{step:"done",source:"backend",silent:r}),g}throw new Error(`No capability for "${n}" (${e}). Reason: ${u.reason}`)}function Ft(e){let t=Array.isArray(e.images)&&e.images.length>0,r=e.images??[],n=t?r.map(o=>({type:"image",value:o})):[],a;if(typeof e.messages=="string")a=t?[{role:"user",content:[{type:"text",value:e.messages},...n]}]:e.messages;else{let o=e.messages.filter(s=>s.role!=="system").map(s=>({role:s.role==="assistant"?"assistant":"user",content:s.content}));if(t){let s=-1;for(let i=o.length-1;i>=0;i--)if(o[i].role==="user"){s=i;break}if(s===-1)o.push({role:"user",content:[{type:"text",value:""},...n]});else{let i=String(o[s].content??"");o[s]={...o[s],content:[{type:"text",value:i},...n]}}}a=o}return a}function Ut(e){return typeof Blob<"u"&&e instanceof Blob}function zt(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function Wt(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}async function Nt(e){return new Promise((t,r)=>{let n=new FileReader;n.onerror=()=>r(n.error??new Error("FileReader error")),n.onload=()=>t(String(n.result??"")),n.readAsDataURL(e)})}async function _t(e){let t=await Nt(e),r=t.indexOf(",");return r>=0?t.substring(r+1):t}async function Ht(e,t,r,n,a,o){let s=t==="admin"?"/admin/generate-upload-url":"/frontend/generate-upload-url",i={...o?.headers??{}},u=await D(t,i);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new Error("backendBaseUrl missing for fetch transport");let f=new URLSearchParams({fileName:r,contentType:n,contentLength:String(a)}).toString(),h=`${e.backendBaseUrl.replace(/\/+$/,"")}${s}?${f}`,m=await fetch(h,{method:"GET",headers:u,signal:o?.signal,credentials:"omit"});if(!m.ok){let F=await m.text().catch(()=>"");throw new Error(`generate-upload-url failed (fetch): HTTP ${m.status}${F?": "+F.substring(0,200):""}`)}let v=await m.json();if(!v?.uploadUrl||!v?.imageKey)throw new Error("generate-upload-url response missing uploadUrl/imageKey");return{uploadUrl:v.uploadUrl,imageKey:v.imageKey}}if(!e.backendApiName)throw new Error("backendApiName missing for gatey transport");let c=globalThis.WpSuite?.plugins?.gatey,g={fileName:r,contentType:n,contentLength:a};if(c?.cognito?.get){let f=c.cognito.get({apiName:e.backendApiName,path:s,options:{queryParams:Object.keys(g).reduce((m,v)=>(m[v]=String(g[v]),m),{}),headers:u,retryStrategy:{strategy:"no-retry"}}});o?.signal?.addEventListener?.("abort",()=>{f.cancel()});let h=await f.response.then(m=>m.body.json());if(!h?.uploadUrl||!h?.imageKey)throw new Error("generate-upload-url (gatey get) response missing uploadUrl/imageKey");return{uploadUrl:h.uploadUrl,imageKey:h.imageKey}}if(!c?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let l=c.cognito.post({apiName:e.backendApiName,path:s,options:{body:g,headers:u,retryStrategy:{strategy:"no-retry"}}});o?.signal?.addEventListener?.("abort",()=>{l.cancel()});let p=await l.response.then(f=>f.body.json());if(!p?.uploadUrl||!p?.imageKey)throw new Error("generate-upload-url (gatey post) response missing uploadUrl/imageKey");return{uploadUrl:p.uploadUrl,imageKey:p.imageKey}}async function qt(e,t,r,n){let a=await fetch(e,{method:"PUT",headers:{"Content-Type":r||"application/octet-stream"},body:t,signal:n?.signal});if(!a.ok){let o=await a.text().catch(()=>"");throw new Error(`S3 upload failed: HTTP ${a.status}${o?": "+o.substring(0,200):""}`)}}async function Re(e,t,r,n){if(!e||e.length===0)return;let a=[];for(let c of e){if(!Ut(c))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");a.push(c)}let o=a.reduce((c,g)=>c+(g.size||0),0);if(Math.ceil(o*1.37+2048*a.length)<=Dt){d("prompt",r,n,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let c=[];for(let g of a)c.push({format:Wt(g.type),data:await _t(g)});return{images:c}}d("prompt",r,n,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let u=[];for(let c=0;c<a.length;c++){let g=a[c],l=g.type||"application/octet-stream",p=g.name||`image_${c}.${zt(l)}`;d("prompt",r,n,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:f,imageKey:h}=await Ht(t,r,p,l,g.size||0,n);d("prompt",r,n,{step:"backend:waiting",source:"backend",message:"Uploading"}),await qt(f,g,l,n),u.push(h)}return{imageUrls:u}}var ke,Ce,C,U,Ae,vt,Pe,re,xe,Bt,Se,Mt,Le,Kt,Te,It,Et,Oe,W,Dt,Be,jt,Vt,Gt,$t,Ke=A(()=>{"use strict";Y();Q();Ee();ke=8,Ce=2,C=new Map,U=new Map;typeof window<"u"&&window.addEventListener("beforeunload",()=>{for(let e of C.values())try{e.destroy()}catch{}C.clear(),U.clear()});Ae=yt();vt=45e3,Pe=5e3,re=class extends Error{timeoutMs;constructor(t){super(`On-device execution exceeded ${t}ms`),this.name="OnDeviceTimeoutError",this.timeoutMs=t}};xe=e=>{let t=e.outputLanguage?e.outputLanguage:P(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},Bt=async(e,t)=>{let r=S(t),n=e.sharedContext??E(),a=e.outputLanguage?e.outputLanguage:P(),o=a,s=!1;z(a)||(s=!0,a="en");let i=xe({...e,outputLanguage:a});return R(r,t?.modeOverride,!1,"writer",i,async()=>{if(typeof Writer>"u")throw new Error("Writer API not available in this browser.");d("writer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Writer session"});let u=O(t);try{let{model:c,release:g}=await T("writer",{core:i,sharedContext:n},()=>Writer.create({...i,sharedContext:n,monitor(l){l.addEventListener("downloadprogress",p=>{let f=p.loaded;d("writer",r,t,{step:"on-device:download",source:"on-device",progress:f,loaded:f})})}}),l=>l.destroy());d("writer",r,t,{step:"on-device:ready",source:"on-device"});try{d("writer",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let l=await c.write(e.prompt,{context:e.context,signal:u.signal});return s?{result:(await W({text:l,sourceLanguage:a,targetLanguage:o},{context:r,signal:u.signal})).result}:{result:l}}finally{try{g()}catch(l){console.error("Error destroying writer:",l)}}}finally{u.dispose()}},xt({...e,sharedContext:n,outputLanguage:o}),t)},Se=e=>{let t=e.outputLanguage?e.outputLanguage:P(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},Mt=async(e,t)=>{let r=S(t),n=e.sharedContext??E(),a=e.outputLanguage?e.outputLanguage:P(),o=a,s=!1;z(a)||(s=!0,a="en");let i=Se({...e,outputLanguage:a});return R(r,t?.modeOverride,!1,"rewriter",i,async()=>{if(typeof Rewriter>"u")throw new Error("Rewriter API not available in this browser.");d("rewriter",r,t,{step:"on-device:init",source:"on-device",message:"Creating Rewriter session"});let u=O(t);try{let{model:c,release:g}=await T("rewriter",{core:i,sharedContext:n},()=>Rewriter.create({...i,sharedContext:n,monitor(l){l.addEventListener("downloadprogress",p=>{let f=p.loaded;d("rewriter",r,t,{step:"on-device:download",source:"on-device",progress:f,loaded:f})})}}),l=>l.destroy());d("rewriter",r,t,{step:"on-device:ready",source:"on-device"});try{d("rewriter",r,t,{step:"on-device:run",source:"on-device",message:"Rewriting text"});let l=await c.rewrite(e.text,{context:e.context,signal:u.signal});return s?{result:(await W({text:l,sourceLanguage:a,targetLanguage:o},{context:r,signal:u.signal})).result}:{result:l}}finally{try{g()}catch(l){console.error("Error destroying rewriter:",l)}}}finally{u.dispose()}},St({...e,sharedContext:n,outputLanguage:o}),t)},Le=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),Kt=async(e,t)=>{let r=S(t),n=await Le();return R(r,t?.modeOverride,!1,"proofreader",n,async()=>{if(typeof Proofreader>"u")throw new Error("Proofreader API not available in this browser.");d("proofreader",r,t,{step:"on-device:init",source:"on-device",message:"Creating Proofreader session"});let a=O(t);try{let{model:o,release:s}=await T("proofreader",{core:n},()=>Proofreader.create({...n,monitor(i){i.addEventListener("downloadprogress",u=>{let c=u.loaded;d("proofreader",r,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c})})}}),i=>i.destroy());d("proofreader",r,t,{step:"on-device:ready",source:"on-device"});try{return d("proofreader",r,t,{step:"on-device:run",source:"on-device",message:"Proofreading"}),{result:await o.proofread(e.text,{signal:a.signal})}}finally{try{s()}catch(i){console.error("Error destroying proofreader:",i)}}}finally{a.dispose()}},Rt(e),t)},Te=e=>{let t=e.outputLanguage?e.outputLanguage:P(),r={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},It=async(e,t)=>{let r=S(t),n=e.sharedContext??E(),a=e.outputLanguage?e.outputLanguage:P(),o=a,s=!1;z(a)||(s=!0,a="en");let i=await Te({...e,outputLanguage:a});return R(r,t?.modeOverride,!1,"summarizer",i,async()=>{if(typeof Summarizer>"u")throw new Error("Summarizer API not available in this browser.");d("summarizer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Summarizer session"});let u=O(t);try{let{model:c,release:g}=await T("summarizer",{core:i,sharedContext:n},()=>Summarizer.create({...i,sharedContext:n,monitor(l){l.addEventListener("downloadprogress",p=>{let f=p.loaded;d("summarizer",r,t,{step:"on-device:download",source:"on-device",progress:f,loaded:f})})}}),l=>l.destroy());d("summarizer",r,t,{step:"on-device:ready",source:"on-device"});try{d("summarizer",r,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let l=await c.summarize(e.text,{context:e.context,signal:u.signal});return s?{result:(await W({text:l,sourceLanguage:a,targetLanguage:o},{context:r,signal:u.signal})).result}:{result:l}}finally{try{g()}catch(l){console.error("Error destroying summarizer:",l)}}}finally{u.dispose()}},Lt({...e,sharedContext:n,outputLanguage:o}),t)},Et=async(e,t)=>{let r=S(t);return R(r,t?.modeOverride,t?.silent,"language-detector",void 0,async()=>{if(typeof LanguageDetector>"u")throw new Error("LanguageDetector API not available in this browser.");d("language-detector",r,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageDetector session",silent:t?.silent});let n=O(t,Pe);try{let{model:a,release:o}=await T("language-detector",{},()=>LanguageDetector.create({monitor(s){s.addEventListener("downloadprogress",i=>{let u=i.loaded;d("language-detector",r,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u,silent:t?.silent})})}}),s=>s.destroy());d("language-detector",r,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{return d("language-detector",r,t,{step:"on-device:run",source:"on-device",message:"Detecting language",silent:t?.silent}),{result:{candidates:(await a.detect(e.text,{signal:n.signal})).filter(i=>Ie.find(u=>u.value===i.detectedLanguage))}}}finally{try{o()}catch(s){console.error("Error destroying language detector:",s)}}}finally{n.dispose()}},Ot(e.text,t),t)},Oe=e=>{let t={sourceLanguage:e.sourceLanguage??"auto",targetLanguage:e.targetLanguage??P()??"en"};return Promise.resolve(t)},W=async(e,t)=>{let r=S(t),n=await Oe({...e});return R(r,t?.modeOverride,t?.silent,"translator",n,async()=>{if(typeof Translator>"u")throw new Error("Translator API not available in this browser.");d("translator",r,t,{step:"on-device:init",source:"on-device",message:"Creating Translator session",silent:t?.silent});let a=O(t,Pe);try{let{model:o,release:s}=await T("translator",{core:n},()=>Translator.create({...n,monitor(i){i.addEventListener("downloadprogress",u=>{let c=u.loaded;d("translator",r,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c,silent:t?.silent})})}}),i=>i.destroy());d("translator",r,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{d("translator",r,t,{step:"on-device:run",source:"on-device",message:"Translating",silent:t?.silent});let i=[],u=()=>{if(typeof a.signal.throwIfAborted=="function")a.signal.throwIfAborted();else if(a.signal.aborted)throw a.signal.reason??new DOMException("Aborted","AbortError")};for(let g of e.text.split(`
|
|
4
4
|
`))u(),i.push(o.translate(g.trim()));return{result:(await Promise.all(i)).join(`
|
|
5
|
-
`)}}finally{try{s()}catch(i){console.error("Error destroying translator:",i)}}}finally{a.dispose()}},Tt(e.text,e.sourceLanguage,e.targetLanguage),t)};Dt=4*1024*1024;Be=async e=>{let t=e.outputLanguage?e.outputLanguage:P();return z(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},jt=async(e,t)=>{let r=S(t),n=e.sharedContext??
|
|
5
|
+
`)}}finally{try{s()}catch(i){console.error("Error destroying translator:",i)}}}finally{a.dispose()}},Tt(e.text,e.sourceLanguage,e.targetLanguage),t)};Dt=4*1024*1024;Be=async e=>{let t=e.outputLanguage?e.outputLanguage:P();return z(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},jt=async(e,t)=>{let r=S(t),n=e.sharedContext??E(),a=e.outputLanguage?e.outputLanguage:P(),o=a,s=!1;z(a)||(s=!0,a="en");let i=await Be({...e,outputLanguage:a}),u=await q("prompt",i,t?.modeOverride);return R(r,t?.modeOverride,!1,"prompt",i,async()=>{if(typeof LanguageModel>"u")throw new Error("LanguageModel API not available in this browser.");d("prompt",r,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageModel session"});let c=[];if(typeof e.messages!="string"){for(let f of e.messages)f.role==="system"&&f.content.trim()&&c.push(f.content.trim());n&&n.trim()&&c.push("SHARED CONTEXT: "+n.trim())}let g=c.length>0?c.join(`
|
|
6
6
|
|
|
7
|
-
`):void 0,l=g?[{role:"system",content:g}]:void 0,p=O(t);try{let{model:f,release:h}=await T("language-model",{core:i,initialPrompts:l},()=>LanguageModel.create({...i,initialPrompts:l,monitor(m){m.addEventListener("downloadprogress",v=>{let F=v.loaded;d("prompt",r,t,{step:"on-device:download",source:"on-device",progress:F,loaded:F})})}}),m=>m.destroy());d("prompt",r,t,{step:"on-device:ready",source:"on-device"});try{d("prompt",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let m=await f.prompt(Ft(e),{signal:p.signal,responseConstraint:e.responseConstraint});return s?{result:(await W({text:m,sourceLanguage:a,targetLanguage:o},{context:r,signal:p.signal})).result}:{result:m}}finally{try{h()}catch(m){console.error("Error destroying LanguageModel:",m)}}}finally{p.dispose()}},await kt({...e,sharedContext:n},r,u,t),t)},Vt=async(e,t)=>{let r="frontend",n=e.sharedContext??
|
|
7
|
+
`):void 0,l=g?[{role:"system",content:g}]:void 0,p=O(t);try{let{model:f,release:h}=await T("language-model",{core:i,initialPrompts:l},()=>LanguageModel.create({...i,initialPrompts:l,monitor(m){m.addEventListener("downloadprogress",v=>{let F=v.loaded;d("prompt",r,t,{step:"on-device:download",source:"on-device",progress:F,loaded:F})})}}),m=>m.destroy());d("prompt",r,t,{step:"on-device:ready",source:"on-device"});try{d("prompt",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let m=await f.prompt(Ft(e),{signal:p.signal,responseConstraint:e.responseConstraint});return s?{result:(await W({text:m,sourceLanguage:a,targetLanguage:o},{context:r,signal:p.signal})).result}:{result:m}}finally{try{h()}catch(m){console.error("Error destroying LanguageModel:",m)}}}finally{p.dispose()}},await kt({...e,sharedContext:n},r,u,t),t)},Vt=async(e,t)=>{let r="frontend",n=e.sharedContext??E(),a="prompt",o=await M(),s={feature:a,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},i=await Ct({sessionId:e.sessionId,message:e.message,images:e.images,sharedContext:n},s,t);d(a,r,t,{step:"backend:request",source:"backend"});let u=await I(s,r,a,i,t);return d(a,r,t,{step:"done",source:"backend"}),u},Gt=async(e,t)=>{let r=S(t),n=e.sharedContext??E(),a="prompt",o=await M(),s={feature:a,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},i=await At({query:e.query,topK:e.topK,sessionId:e.sessionId,sharedContext:n,knowledgeBaseId:e.knowledgeBaseId});d(a,r,t,{step:"backend:request",source:"backend"});let u=await I(s,r,a,i,t);return d(a,r,t,{step:"done",source:"backend"}),u},$t=async(e,t)=>{let r="frontend",n="prompt",a=await M(),o={feature:n,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:a.available,backendTransport:a.transport,backendApiName:a.apiName,backendBaseUrl:a.baseUrl,backendReason:a.reason},s=await Pt({sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType});d(n,r,t,{step:"backend:request",source:"backend"});let i=await I(o,r,n,s,t);return d(n,r,t,{step:"done",source:"backend"}),i}});import{attachDefaultPluginRuntime as Xt}from"@smart-cloud/wpsuite-core";import{__ as w}from"@wordpress/i18n";var Ie,ne,xr,Sr,Lr,Jt,Tr,b,Or,Rr,Br,Mr,Kr,Ir,Er,Fr,Dr,Ur,zr,Wr,Nr,_r,Hr,qr,jr,Ee=A(()=>{G();_();ue();_();ce();J();Ie=[{label:w("Arabic",y),value:"ar"},{label:w("Chinese",y),value:"zh"},{label:w("Dutch",y),value:"nl"},{label:w("English",y),value:"en"},{label:w("French",y),value:"fr"},{label:w("German",y),value:"de"},{label:w("Hebrew",y),value:"he"},{label:w("Hindi",y),value:"hi"},{label:w("Hungarian",y),value:"hu"},{label:w("Indonesian",y),value:"id"},{label:w("Italian",y),value:"it"},{label:w("Japanese",y),value:"ja"},{label:w("Korean",y),value:"ko"},{label:w("Norwegian",y),value:"no"},{label:w("Polish",y),value:"pl"},{label:w("Portuguese",y),value:"pt"},{label:w("Russian",y),value:"ru"},{label:w("Spanish",y),value:"es"},{label:w("Swedish",y),value:"sv"},{label:w("Thai",y),value:"th"},{label:w("Turkish",y),value:"tr"},{label:w("Ukrainian",y),value:"uk"}],ne=Promise.resolve().then(()=>(Q(),fe)),xr=async()=>(await ne).MIN_CHROME_VERSION,Sr=async(...e)=>(await ne).decideCapability(...e),Lr=async(...e)=>(await ne).checkOnDeviceAvailability(...e),Jt=Promise.resolve().then(()=>(Y(),ve)),Tr=async(...e)=>(await Jt).dispatchBackend(...e),b=Promise.resolve().then(()=>(Ke(),Me)),Or=async(...e)=>(await b).getWriteOptions(...e),Rr=async(...e)=>(await b).write(...e),Br=async(...e)=>(await b).getRewriteOptions(...e),Mr=async(...e)=>(await b).rewrite(...e),Kr=async(...e)=>(await b).getProofreadOptions(...e),Ir=async(...e)=>(await b).proofread(...e),Er=async(...e)=>(await b).getSummarizeOptions(...e),Fr=async(...e)=>(await b).summarize(...e),Dr=async(...e)=>(await b).getTranslateOptions(...e),Ur=async(...e)=>(await b).translate(...e),zr=async(...e)=>(await b).detectLanguage(...e),Wr=async(...e)=>(await b).getPromptOptions(...e),Nr=async(...e)=>(await b).prompt(...e),_r=async(...e)=>(await b).sendChatMessage(...e),Hr=async(...e)=>(await b).sendFeedbackMessage(...e),qr=async(...e)=>(await b).sendSearchMessage(...e),jr=(e,t)=>{let r=globalThis.WpSuite,n=B();if(!n)throw console.error("AiKit plugin is not available"),new Error("AiKit plugin is not available");Xt(n),n.status=n.status??"initializing";let a=ie();return n.features={store:a,renderFeature:async o=>await e({...o,store:await a}),renderSearchComponent:async o=>{if(!t)throw new Error("renderSearchComponent is not configured");return await t({...o,store:await a})},write:async(...o)=>{let s=await b,i=o[1]||{};return o[1]={context:"frontend",...i},s.write(...o)},rewrite:async(...o)=>{let s=await b,i=o[1]||{};return o[1]={context:"frontend",...i},s.rewrite(...o)},proofread:async(...o)=>{let s=await b,i=o[1]||{};return o[1]={context:"frontend",...i},s.proofread(...o)},summarize:async(...o)=>{let s=await b,i=o[1]||{};return o[1]={context:"frontend",...i},s.summarize(...o)},translate:async(...o)=>{let s=await b,i=o[1]||{};return o[1]={context:"frontend",...i},s.translate(...o)},detectLanguage:async(...o)=>{let s=await b,i=o[1]||{};return o[1]={context:"frontend",...i},s.detectLanguage(...o)},prompt:async(...o)=>{let s=await b,i=o[1]||{};return o[1]={context:"frontend",...i},s.prompt(...o)},sendChatMessage:async(...o)=>(await b).sendChatMessage(...o),sendFeedbackMessage:async(...o)=>(await b).sendFeedbackMessage(...o),sendSearchMessage:async(...o)=>(await b).sendSearchMessage(...o)},a.then(()=>{n.status="available",r?.events?.emit("wpsuite:ai-kit:ready",{key:n.key,version:n.version})}).catch(o=>{n.status="error",console.error("AiKit plugin failed to initialize:",o),r?.events?.emit("wpsuite:ai-kit:error",{key:n.key,error:String(o)})}),n}});Ee();export{ir as AiKitChatbotIcon,ur as AiKitDocSearchIcon,sr as AiKitFeatureIcon,x as BackendError,Ie as LANGUAGE_OPTIONS,y as TEXT_DOMAIN,Lr as checkOnDeviceAvailability,Sr as decideCapability,zr as detectLanguage,Tr as dispatchBackend,B as getAiKitPlugin,xr as getMinChromeVersions,Wr as getPromptOptions,Kr as getProofreadOptions,Br as getRewriteOptions,De as getStore,Xe as getStoreDispatch,N as getStoreSelect,Er as getSummarizeOptions,Dr as getTranslateOptions,Or as getWriteOptions,jr as initializeAiKit,Je as observeStore,Nr as prompt,Ir as proofread,Mr as rewrite,se as sanitizeAiKitConfig,_r as sendChatMessage,Hr as sendFeedbackMessage,qr as sendSearchMessage,Fr as summarize,Ur as translate,ae as waitForAiKitReady,Rr as write};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@smart-cloud/ai-kit-core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "AI Kit Core Package",
|
|
5
5
|
"author": "Smart Cloud Solutions Inc.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"scope": "@smart-cloud/ai-kit-core"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@smart-cloud/gatey-core": "^2.1.
|
|
32
|
+
"@smart-cloud/gatey-core": "^2.1.9",
|
|
33
33
|
"@smart-cloud/wpsuite-core": "^2.2.6",
|
|
34
34
|
"aws-amplify": "^6.16.2"
|
|
35
35
|
},
|