Spaces:
Sleeping
Sleeping
build update
Browse files- build/client/_app/immutable/chunks/entry.NqRdvUX4.js +3 -0
- build/client/_app/immutable/entry/app.6IH58JcQ.js +7 -0
- build/client/_app/immutable/entry/start.s6vMv-7T.js +1 -0
- build/client/_app/immutable/nodes/1.C6C6IM3d.js +1 -0
- build/client/_app/immutable/nodes/2.s-i08RHU.js +0 -0
- build/client/_app/version.json +1 -1
- build/server/chunks/1-inBcOc8r.js +9 -0
- build/server/chunks/1-inBcOc8r.js.map +1 -0
- build/server/chunks/2-Vbi53EwI.js +36 -0
- build/server/chunks/2-Vbi53EwI.js.map +1 -0
- build/server/chunks/LlamaCppService-QhLZfkhy.js +292 -0
- build/server/chunks/LlamaCppService-QhLZfkhy.js.map +1 -0
- build/server/chunks/LogService-6IleCGNg.js +308 -0
- build/server/chunks/LogService-6IleCGNg.js.map +1 -0
- build/server/chunks/SearchResultsSorter-mM-nyUk-.js +285 -0
- build/server/chunks/SearchResultsSorter-mM-nyUk-.js.map +1 -0
- build/server/chunks/_page.svelte-iF0uVy6x.js +1617 -0
- build/server/chunks/_page.svelte-iF0uVy6x.js.map +0 -0
- build/server/chunks/_server.ts-8QOft-oQ.js +130 -0
- build/server/chunks/_server.ts-8QOft-oQ.js.map +1 -0
- build/server/chunks/_server.ts-9ilSfmL3.js +29 -0
- build/server/chunks/_server.ts-9ilSfmL3.js.map +1 -0
- build/server/chunks/_server.ts-EYIERXoH.js +19 -0
- build/server/chunks/_server.ts-EYIERXoH.js.map +1 -0
- build/server/chunks/_server.ts-KVBIHTLR.js +29 -0
- build/server/chunks/_server.ts-KVBIHTLR.js.map +1 -0
- build/server/chunks/_server.ts-L4PDT8N4.js +44 -0
- build/server/chunks/_server.ts-L4PDT8N4.js.map +1 -0
- build/server/chunks/_server.ts-Quwmue9n.js +36 -0
- build/server/chunks/_server.ts-Quwmue9n.js.map +1 -0
- build/server/chunks/_server.ts-SRd81JGz.js +45 -0
- build/server/chunks/_server.ts-SRd81JGz.js.map +1 -0
- build/server/chunks/_server.ts-lrxgIAoZ.js +44 -0
- build/server/chunks/_server.ts-lrxgIAoZ.js.map +1 -0
- build/server/chunks/_server.ts-oZxvFZg4.js +32 -0
- build/server/chunks/_server.ts-oZxvFZg4.js.map +1 -0
- build/server/index.js +1 -1
- build/server/index.js.map +0 -0
- build/server/manifest.js +12 -12
- build/server/manifest.js.map +1 -1
build/client/_app/immutable/chunks/entry.NqRdvUX4.js
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
import{B as tt}from"./scheduler.OwA2AG0M.js";import{w as de}from"./index.UTqYide5.js";new URL("sveltekit-internal://");function nt(e,t){return e==="/"||t==="ignore"?e:t==="never"?e.endsWith("/")?e.slice(0,-1):e:t==="always"&&!e.endsWith("/")?e+"/":e}function at(e){return e.split("%25").map(decodeURI).join("%25")}function rt(e){for(const t in e)e[t]=decodeURIComponent(e[t]);return e}function se({href:e}){return e.split("#")[0]}const ot=["href","pathname","search","toString","toJSON"];function st(e,t,n){const a=new URL(e);Object.defineProperty(a,"searchParams",{value:new Proxy(a.searchParams,{get(r,o){if(o==="get"||o==="getAll"||o==="has")return s=>(n(s),r[o](s));t();const i=Reflect.get(r,o);return typeof i=="function"?i.bind(r):i}}),enumerable:!0,configurable:!0});for(const r of ot)Object.defineProperty(a,r,{get(){return t(),e[r]},enumerable:!0,configurable:!0});return a}const it="/__data.json",ct=".html__data.json";function lt(e){return e.endsWith(".html")?e.replace(/\.html$/,ct):e.replace(/\/$/,"")+it}function ft(...e){let t=5381;for(const n of e)if(typeof n=="string"){let a=n.length;for(;a;)t=t*33^n.charCodeAt(--a)}else if(ArrayBuffer.isView(n)){const a=new Uint8Array(n.buffer,n.byteOffset,n.byteLength);let r=a.length;for(;r;)t=t*33^a[--r]}else throw new TypeError("value must be a string or TypedArray");return(t>>>0).toString(36)}const Ue=window.fetch;window.fetch=(e,t)=>((e instanceof Request?e.method:t?.method||"GET")!=="GET"&&$.delete(he(e)),Ue(e,t));const $=new Map;function ut(e){const t=atob(e),n=new Uint8Array(t.length);for(let a=0;a<t.length;a++)n[a]=t.charCodeAt(a);return n.buffer}function dt(e,t){const n=he(e,t),a=document.querySelector(n);if(a?.textContent){let{body:r,...o}=JSON.parse(a.textContent);const i=a.getAttribute("data-ttl");return i&&$.set(n,{body:r,init:o,ttl:1e3*Number(i)}),a.getAttribute("data-b64")!==null&&(r=ut(r)),Promise.resolve(new Response(r,o))}return window.fetch(e,t)}function ht(e,t,n){if($.size>0){const a=he(e,n),r=$.get(a);if(r){if(performance.now()<r.ttl&&["default","force-cache","only-if-cached",void 0].includes(n?.cache))return new Response(r.body,r.init);$.delete(a)}}return window.fetch(t,n)}function he(e,t){let a=`script[data-sveltekit-fetched][data-url=${JSON.stringify(e instanceof Request?e.url:e)}]`;if(t?.headers||t?.body){const r=[];t.headers&&r.push([...new Headers(t.headers)].join(",")),t.body&&(typeof t.body=="string"||ArrayBuffer.isView(t.body))&&r.push(t.body),a+=`[data-hash="${ft(...r)}"]`}return a}const pt=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/;function gt(e){const t=[];return{pattern:e==="/"?/^\/$/:new RegExp(`^${mt(e).map(a=>{const r=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(a);if(r)return t.push({name:r[1],matcher:r[2],optional:!1,rest:!0,chained:!0}),"(?:/(.*))?";const o=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(a);if(o)return t.push({name:o[1],matcher:o[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!a)return;const i=a.split(/\[(.+?)\](?!\])/);return"/"+i.map((c,l)=>{if(l%2){if(c.startsWith("x+"))return ie(String.fromCharCode(parseInt(c.slice(2),16)));if(c.startsWith("u+"))return ie(String.fromCharCode(...c.slice(2).split("-").map(p=>parseInt(p,16))));const d=pt.exec(c),[,g,u,f,h]=d;return t.push({name:f,matcher:h,optional:!!g,rest:!!u,chained:u?l===1&&i[0]==="":!1}),u?"(.*?)":g?"([^/]*)?":"([^/]+?)"}return ie(c)}).join("")}).join("")}/?$`),params:t}}function _t(e){return!/^\([^)]+\)$/.test(e)}function mt(e){return e.slice(1).split("/").filter(_t)}function yt(e,t,n){const a={},r=e.slice(1),o=r.filter(s=>s!==void 0);let i=0;for(let s=0;s<t.length;s+=1){const c=t[s];let l=r[s-i];if(c.chained&&c.rest&&i&&(l=r.slice(s-i,s+1).filter(d=>d).join("/"),i=0),l===void 0){c.rest&&(a[c.name]="");continue}if(!c.matcher||n[c.matcher](l)){a[c.name]=l;const d=t[s+1],g=r[s+1];d&&!d.rest&&d.optional&&g&&c.chained&&(i=0),!d&&!g&&Object.keys(a).length===o.length&&(i=0);continue}if(c.optional&&c.chained){i++;continue}return}if(!i)return a}function ie(e){return e.normalize().replace(/[[\]]/g,"\\$&").replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}function vt({nodes:e,server_loads:t,dictionary:n,matchers:a}){const r=new Set(t);return Object.entries(n).map(([s,[c,l,d]])=>{const{pattern:g,params:u}=gt(s),f={id:s,exec:h=>{const p=g.exec(h);if(p)return yt(p,u,a)},errors:[1,...d||[]].map(h=>e[h]),layouts:[0,...l||[]].map(i),leaf:o(c)};return f.errors.length=f.layouts.length=Math.max(f.errors.length,f.layouts.length),f});function o(s){const c=s<0;return c&&(s=~s),[c,e[s]]}function i(s){return s===void 0?s:[r.has(s),e[s]]}}function xe(e,t=JSON.parse){try{return t(sessionStorage[e])}catch{}}function Ae(e,t,n=JSON.stringify){const a=n(t);try{sessionStorage[e]=a}catch{}}const S=globalThis.__sveltekit_c39tcv?.base??"",wt=globalThis.__sveltekit_c39tcv?.assets??S,bt="1727779327879",Ne="sveltekit:snapshot",Oe="sveltekit:scroll",je="sveltekit:states",Et="sveltekit:pageurl",x="sveltekit:history",V="sveltekit:navigation",K={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},q=location.origin;function De(e){if(e instanceof URL)return e;let t=document.baseURI;if(!t){const n=document.getElementsByTagName("base");t=n.length?n[0].href:document.URL}return new URL(e,t)}function pe(){return{x:pageXOffset,y:pageYOffset}}function U(e,t){return e.getAttribute(`data-sveltekit-${t}`)}const Se={...K,"":K.hover};function $e(e){let t=e.assignedSlot??e.parentNode;return t?.nodeType===11&&(t=t.host),t}function Ce(e,t){for(;e&&e!==t;){if(e.nodeName.toUpperCase()==="A"&&e.hasAttribute("href"))return e;e=$e(e)}}function le(e,t){let n;try{n=new URL(e instanceof SVGAElement?e.href.baseVal:e.href,document.baseURI)}catch{}const a=e instanceof SVGAElement?e.target.baseVal:e.target,r=!n||!!a||ee(n,t)||(e.getAttribute("rel")||"").split(/\s+/).includes("external"),o=n?.origin===q&&e.hasAttribute("download");return{url:n,external:r,target:a,download:o}}function Y(e){let t=null,n=null,a=null,r=null,o=null,i=null,s=e;for(;s&&s!==document.documentElement;)a===null&&(a=U(s,"preload-code")),r===null&&(r=U(s,"preload-data")),t===null&&(t=U(s,"keepfocus")),n===null&&(n=U(s,"noscroll")),o===null&&(o=U(s,"reload")),i===null&&(i=U(s,"replacestate")),s=$e(s);function c(l){switch(l){case"":case"true":return!0;case"off":case"false":return!1;default:return}}return{preload_code:Se[a??"off"],preload_data:Se[r??"off"],keepfocus:c(t),noscroll:c(n),reload:c(o),replace_state:c(i)}}function Re(e){const t=de(e);let n=!0;function a(){n=!0,t.update(i=>i)}function r(i){n=!1,t.set(i)}function o(i){let s;return t.subscribe(c=>{(s===void 0||n&&c!==s)&&i(s=c)})}return{notify:a,set:r,subscribe:o}}function kt(){const{set:e,subscribe:t}=de(!1);let n;async function a(){clearTimeout(n);try{const r=await fetch(`${wt}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!r.ok)return!1;const i=(await r.json()).version!==bt;return i&&(e(!0),clearTimeout(n)),i}catch{return!1}}return{subscribe:t,check:a}}function ee(e,t){return e.origin!==q||!e.pathname.startsWith(t)}const At=-1,St=-2,Rt=-3,It=-4,Lt=-5,Pt=-6;function Tt(e,t){if(typeof e=="number")return r(e,!0);if(!Array.isArray(e)||e.length===0)throw new Error("Invalid input");const n=e,a=Array(n.length);function r(o,i=!1){if(o===At)return;if(o===Rt)return NaN;if(o===It)return 1/0;if(o===Lt)return-1/0;if(o===Pt)return-0;if(i)throw new Error("Invalid input");if(o in a)return a[o];const s=n[o];if(!s||typeof s!="object")a[o]=s;else if(Array.isArray(s))if(typeof s[0]=="string"){const c=s[0],l=t?.[c];if(l)return a[o]=l(r(s[1]));switch(c){case"Date":a[o]=new Date(s[1]);break;case"Set":const d=new Set;a[o]=d;for(let f=1;f<s.length;f+=1)d.add(r(s[f]));break;case"Map":const g=new Map;a[o]=g;for(let f=1;f<s.length;f+=2)g.set(r(s[f]),r(s[f+1]));break;case"RegExp":a[o]=new RegExp(s[1],s[2]);break;case"Object":a[o]=Object(s[1]);break;case"BigInt":a[o]=BigInt(s[1]);break;case"null":const u=Object.create(null);a[o]=u;for(let f=1;f<s.length;f+=2)u[s[f]]=r(s[f+1]);break;default:throw new Error(`Unknown type ${c}`)}}else{const c=new Array(s.length);a[o]=c;for(let l=0;l<s.length;l+=1){const d=s[l];d!==St&&(c[l]=r(d))}}else{const c={};a[o]=c;for(const l in s){const d=s[l];c[l]=r(d)}}return a[o]}return r(0)}const Ve=new Set(["load","prerender","csr","ssr","trailingSlash","config"]);[...Ve];const Ut=new Set([...Ve]);[...Ut];function xt(e){return e.filter(t=>t!=null)}class te{constructor(t,n){this.status=t,typeof n=="string"?this.body={message:n}:n?this.body=n:this.body={message:`Error: ${t}`}}toString(){return JSON.stringify(this.body)}}class Fe{constructor(t,n){this.status=t,this.location=n}}class ge extends Error{constructor(t,n,a){super(a),this.status=t,this.text=n}}const Nt="x-sveltekit-invalidated",Ot="x-sveltekit-trailing-slash";function J(e){return e instanceof te||e instanceof ge?e.status:500}function jt(e){return e instanceof ge?e.text:"Internal Error"}const T=xe(Oe)??{},F=xe(Ne)??{},Dt=history.pushState,_e=history.replaceState,L={url:Re({}),page:Re({}),navigating:de(null),updated:kt()};function me(e){T[e]=pe()}function $t(e,t){let n=e+1;for(;T[n];)delete T[n],n+=1;for(n=t+1;F[n];)delete F[n],n+=1}function O(e){return location.href=e.href,new Promise(()=>{})}function Ie(){}let ne,fe,W,I,ue,j;const Ge=[],z=[];let N=null;const Me=[],Ct=[];let C=[],y={branch:[],error:null,url:null},ye=!1,X=!1,Le=!0,G=!1,D=!1,qe=!1,ve=!1,we,v,k,A,Z;async function Wt(e,t,n){document.URL!==location.href&&(location.href=location.href),j=e,ne=vt(e),I=document.documentElement,ue=t,fe=e.nodes[0],W=e.nodes[1],fe(),W(),v=history.state?.[x],k=history.state?.[V],v||(v=k=Date.now(),_e.call(history,{...history.state,[x]:v,[V]:k},""));const a=T[v];a&&(history.scrollRestoration="manual",scrollTo(a.x,a.y)),n?await Ht(ue,n):qt(location.href,{replaceState:!0}),Bt()}function Be(e){z.some(t=>t?.snapshot)&&(F[e]=z.map(t=>t?.snapshot?.capture()))}function He(e){F[e]?.forEach((t,n)=>{z[n]?.snapshot?.restore(t)})}function Pe(){me(v),Ae(Oe,T),Be(k),Ae(Ne,F)}async function Ke(e,t,n,a){return H({type:"goto",url:De(e),keepfocus:t.keepFocus,noscroll:t.noScroll,replace_state:t.replaceState,state:t.state,redirect_count:n,nav_token:a,accept:()=>{t.invalidateAll&&(ve=!0)}})}async function Vt(e){return N={id:e.id,promise:Je(e).then(t=>(t.type==="loaded"&&t.state.error&&(N=null),t))},N.promise}async function ce(e){const t=ne.find(n=>n.exec(We(e)));t&&await Promise.all([...t.layouts,t.leaf].map(n=>n?.[1]()))}function Ye(e,t){y=e.state;const n=document.querySelector("style[data-sveltekit]");n&&n.remove(),A=e.props.page,we=new j.root({target:t,props:{...e.props,stores:L,components:z},hydrate:!0}),He(k);const a={from:null,to:{params:y.params,route:{id:y.route?.id??null},url:new URL(location.href)},willUnload:!1,type:"enter",complete:Promise.resolve()};C.forEach(r=>r(a)),X=!0}async function Q({url:e,params:t,branch:n,status:a,error:r,route:o,form:i}){let s="never";if(S&&(e.pathname===S||e.pathname===S+"/"))s="always";else for(const f of n)f?.slash!==void 0&&(s=f.slash);e.pathname=nt(e.pathname,s),e.search=e.search;const c={type:"loaded",state:{url:e,params:t,branch:n,error:r,route:o},props:{constructors:xt(n).map(f=>f.node.component),page:A}};i!==void 0&&(c.props.form=i);let l={},d=!A,g=0;for(let f=0;f<Math.max(n.length,y.branch.length);f+=1){const h=n[f],p=y.branch[f];h?.data!==p?.data&&(d=!0),h&&(l={...l,...h.data},d&&(c.props[`data_${g}`]=l),g+=1)}return(!y.url||e.href!==y.url.href||y.error!==r||i!==void 0&&i!==A.form||d)&&(c.props.page={error:r,params:t,route:{id:o?.id??null},state:{},status:a,url:new URL(e),form:i??null,data:d?l:A.data}),c}async function be({loader:e,parent:t,url:n,params:a,route:r,server_data_node:o}){let i=null,s=!0;const c={dependencies:new Set,params:new Set,parent:!1,route:!1,url:!1,search_params:new Set},l=await e();if(l.universal?.load){let d=function(...u){for(const f of u){const{href:h}=new URL(f,n);c.dependencies.add(h)}};const g={route:new Proxy(r,{get:(u,f)=>(s&&(c.route=!0),u[f])}),params:new Proxy(a,{get:(u,f)=>(s&&c.params.add(f),u[f])}),data:o?.data??null,url:st(n,()=>{s&&(c.url=!0)},u=>{s&&c.search_params.add(u)}),async fetch(u,f){let h;u instanceof Request?(h=u.url,f={body:u.method==="GET"||u.method==="HEAD"?void 0:await u.blob(),cache:u.cache,credentials:u.credentials,headers:u.headers,integrity:u.integrity,keepalive:u.keepalive,method:u.method,mode:u.mode,redirect:u.redirect,referrer:u.referrer,referrerPolicy:u.referrerPolicy,signal:u.signal,...f}):h=u;const p=new URL(h,n);return s&&d(p.href),p.origin===n.origin&&(h=p.href.slice(n.origin.length)),X?ht(h,p.href,f):dt(h,f)},setHeaders:()=>{},depends:d,parent(){return s&&(c.parent=!0),t()},untrack(u){s=!1;try{return u()}finally{s=!0}}};i=await l.universal.load.call(null,g)??null}return{node:l,loader:e,server:o,universal:l.universal?.load?{type:"data",data:i,uses:c}:null,data:i??o?.data??null,slash:l.universal?.trailingSlash??o?.slash}}function Te(e,t,n,a,r,o){if(ve)return!0;if(!r)return!1;if(r.parent&&e||r.route&&t||r.url&&n)return!0;for(const i of r.search_params)if(a.has(i))return!0;for(const i of r.params)if(o[i]!==y.params[i])return!0;for(const i of r.dependencies)if(Ge.some(s=>s(new URL(i))))return!0;return!1}function Ee(e,t){return e?.type==="data"?e:e?.type==="skip"?t??null:null}function Ft(e,t){if(!e)return new Set(t.searchParams.keys());const n=new Set([...e.searchParams.keys(),...t.searchParams.keys()]);for(const a of n){const r=e.searchParams.getAll(a),o=t.searchParams.getAll(a);r.every(i=>o.includes(i))&&o.every(i=>r.includes(i))&&n.delete(a)}return n}async function Je({id:e,invalidating:t,url:n,params:a,route:r}){if(N?.id===e)return N.promise;const{errors:o,layouts:i,leaf:s}=r,c=[...i,s];o.forEach(_=>_?.().catch(()=>{})),c.forEach(_=>_?.[1]().catch(()=>{}));let l=null;const d=y.url?e!==y.url.pathname+y.url.search:!1,g=y.route?r.id!==y.route.id:!1,u=Ft(y.url,n);let f=!1;const h=c.map((_,m)=>{const w=y.branch[m],b=!!_?.[0]&&(w?.loader!==_[1]||Te(f,g,d,u,w.server?.uses,a));return b&&(f=!0),b});if(h.some(Boolean)){try{l=await Ze(n,h)}catch(_){return ae({status:J(_),error:await M(_,{url:n,params:a,route:{id:r.id}}),url:n,route:r})}if(l.type==="redirect")return l}const p=l?.nodes;let R=!1;const E=c.map(async(_,m)=>{if(!_)return;const w=y.branch[m],b=p?.[m];if((!b||b.type==="skip")&&_[1]===w?.loader&&!Te(R,g,d,u,w.universal?.uses,a))return w;if(R=!0,b?.type==="error")throw b;return be({loader:_[1],url:n,params:a,route:r,parent:async()=>{const re={};for(let oe=0;oe<m;oe+=1)Object.assign(re,(await E[oe])?.data);return re},server_data_node:Ee(b===void 0&&_[0]?{type:"skip"}:b??null,_[0]?w?.server:void 0)})});for(const _ of E)_.catch(()=>{});const P=[];for(let _=0;_<c.length;_+=1)if(c[_])try{P.push(await E[_])}catch(m){if(m instanceof Fe)return{type:"redirect",location:m.location};let w=J(m),b;if(p?.includes(m))w=m.status??w,b=m.error;else if(m instanceof te)b=m.body;else{if(await L.updated.check())return await O(n);b=await M(m,{params:a,url:n,route:{id:r.id}})}const B=await Gt(_,P,o);return B?await Q({url:n,params:a,branch:P.slice(0,B.idx).concat(B.node),status:w,error:b,route:r}):await Xe(n,{id:r.id},b,w)}else P.push(void 0);return await Q({url:n,params:a,branch:P,status:200,error:null,route:r,form:t?void 0:null})}async function Gt(e,t,n){for(;e--;)if(n[e]){let a=e;for(;!t[a];)a-=1;try{return{idx:a+1,node:{node:await n[e](),loader:n[e],data:{},server:null,universal:null}}}catch{continue}}}async function ae({status:e,error:t,url:n,route:a}){const r={};let o=null;if(j.server_loads[0]===0)try{const l=await Ze(n,[!0]);if(l.type!=="data"||l.nodes[0]&&l.nodes[0].type!=="data")throw 0;o=l.nodes[0]??null}catch{(n.origin!==q||n.pathname!==location.pathname||ye)&&await O(n)}const s=await be({loader:fe,url:n,params:r,route:a,parent:()=>Promise.resolve({}),server_data_node:Ee(o)}),c={node:await W(),loader:W,universal:null,server:null,data:null};return await Q({url:n,params:r,branch:[s,c],status:e,error:t,route:null})}function ke(e,t){if(!e||ee(e,S))return;let n;try{n=j.hooks.reroute({url:new URL(e)})??e.pathname}catch{return}const a=We(n);for(const r of ne){const o=r.exec(a);if(o)return{id:e.pathname+e.search,invalidating:t,route:r,params:rt(o),url:e}}}function We(e){return at(e.slice(S.length)||"/")}function ze({url:e,type:t,intent:n,delta:a}){let r=!1;const o=et(y,n,e,t);a!==void 0&&(o.navigation.delta=a);const i={...o.navigation,cancel:()=>{r=!0,o.reject(new Error("navigation cancelled"))}};return G||Me.forEach(s=>s(i)),r?null:o}async function H({type:e,url:t,popped:n,keepfocus:a,noscroll:r,replace_state:o,state:i={},redirect_count:s=0,nav_token:c={},accept:l=Ie,block:d=Ie}){const g=ke(t,!1),u=ze({url:t,type:e,delta:n?.delta,intent:g});if(!u){d();return}const f=v,h=k;l(),G=!0,X&&L.navigating.set(u.navigation),Z=c;let p=g&&await Je(g);if(!p){if(ee(t,S))return await O(t);p=await Xe(t,{id:null},await M(new ge(404,"Not Found",`Not found: ${t.pathname}`),{url:t,params:{},route:{id:null}}),404)}if(t=g?.url||t,Z!==c)return u.reject(new Error("navigation aborted")),!1;if(p.type==="redirect")if(s>=20)p=await ae({status:500,error:await M(new Error("Redirect loop"),{url:t,params:{},route:{id:null}}),url:t,route:{id:null}});else return Ke(new URL(p.location,t).href,{},s+1,c),!1;else p.props.page.status>=400&&await L.updated.check()&&await O(t);if(Ge.length=0,ve=!1,me(f),Be(h),p.props.page.url.pathname!==t.pathname&&(t.pathname=p.props.page.url.pathname),i=n?n.state:i,!n){const _=o?0:1,m={[x]:v+=_,[V]:k+=_,[je]:i};(o?_e:Dt).call(history,m,"",t),o||$t(v,k)}if(N=null,p.props.page.state=i,X){y=p.state,p.props.page&&(p.props.page.url=t);const _=(await Promise.all(Ct.map(m=>m(u.navigation)))).filter(m=>typeof m=="function");if(_.length>0){let m=function(){C=C.filter(w=>!_.includes(w))};_.push(m),callbacks.after_navigate.push(..._)}we.$set(p.props),qe=!0}else Ye(p,ue);const{activeElement:R}=document;await tt();const E=n?n.scroll:r?pe():null;if(Le){const _=t.hash&&document.getElementById(decodeURIComponent(t.hash.slice(1)));E?scrollTo(E.x,E.y):_?_.scrollIntoView():scrollTo(0,0)}const P=document.activeElement!==R&&document.activeElement!==document.body;!a&&!P&&Kt(),Le=!0,p.props.page&&(A=p.props.page),G=!1,e==="popstate"&&He(k),u.fulfil(void 0),C.forEach(_=>_(u.navigation)),L.navigating.set(null)}async function Xe(e,t,n,a){return e.origin===q&&e.pathname===location.pathname&&!ye?await ae({status:a,error:n,url:e,route:t}):await O(e)}function Mt(){let e;I.addEventListener("mousemove",o=>{const i=o.target;clearTimeout(e),e=setTimeout(()=>{a(i,2)},20)});function t(o){a(o.composedPath()[0],1)}I.addEventListener("mousedown",t),I.addEventListener("touchstart",t,{passive:!0});const n=new IntersectionObserver(o=>{for(const i of o)i.isIntersecting&&(ce(i.target.href),n.unobserve(i.target))},{threshold:0});function a(o,i){const s=Ce(o,I);if(!s)return;const{url:c,external:l,download:d}=le(s,S);if(l||d)return;const g=Y(s);if(!g.reload)if(i<=g.preload_data){const u=ke(c,!1);u&&Vt(u)}else i<=g.preload_code&&ce(c.pathname)}function r(){n.disconnect();for(const o of I.querySelectorAll("a")){const{url:i,external:s,download:c}=le(o,S);if(s||c)continue;const l=Y(o);l.reload||(l.preload_code===K.viewport&&n.observe(o),l.preload_code===K.eager&&ce(i.pathname))}}C.push(r),r()}function M(e,t){if(e instanceof te)return e.body;const n=J(e),a=jt(e);return j.hooks.handleError({error:e,event:t,status:n,message:a})??{message:a}}function qt(e,t={}){return e=De(e),e.origin!==q?Promise.reject(new Error("goto: invalid URL")):Ke(e,t,0)}function Bt(){history.scrollRestoration="manual",addEventListener("beforeunload",t=>{let n=!1;if(Pe(),!G){const a=et(y,void 0,null,"leave"),r={...a.navigation,cancel:()=>{n=!0,a.reject(new Error("navigation cancelled"))}};Me.forEach(o=>o(r))}n?(t.preventDefault(),t.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&Pe()}),navigator.connection?.saveData||Mt(),I.addEventListener("click",t=>{if(t.button||t.which!==1||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.defaultPrevented)return;const n=Ce(t.composedPath()[0],I);if(!n)return;const{url:a,external:r,target:o,download:i}=le(n,S);if(!a)return;if(o==="_parent"||o==="_top"){if(window.parent!==window)return}else if(o&&o!=="_self")return;const s=Y(n);if(!(n instanceof SVGAElement)&&a.protocol!==location.protocol&&!(a.protocol==="https:"||a.protocol==="http:")||i)return;if(r||s.reload){ze({url:a,type:"link"})?G=!0:t.preventDefault();return}const[l,d]=a.href.split("#");if(d!==void 0&&l===se(location)){const[,g]=y.url.href.split("#");if(g===d){t.preventDefault(),d===""||d==="top"&&n.ownerDocument.getElementById("top")===null?window.scrollTo({top:0}):n.ownerDocument.getElementById(d)?.scrollIntoView();return}if(D=!0,me(v),e(a),!s.replace_state)return;D=!1}t.preventDefault(),H({type:"link",url:a,keepfocus:s.keepfocus,noscroll:s.noscroll,replace_state:s.replace_state??a.href===location.href})}),I.addEventListener("submit",t=>{if(t.defaultPrevented)return;const n=HTMLFormElement.prototype.cloneNode.call(t.target),a=t.submitter;if((a?.formMethod||n.method)!=="get")return;const o=new URL(a?.hasAttribute("formaction")&&a?.formAction||n.action);if(ee(o,S))return;const i=t.target,s=Y(i);if(s.reload)return;t.preventDefault(),t.stopPropagation();const c=new FormData(i),l=a?.getAttribute("name");l&&c.append(l,a?.getAttribute("value")??""),o.search=new URLSearchParams(c).toString(),H({type:"form",url:o,keepfocus:s.keepfocus,noscroll:s.noscroll,replace_state:s.replace_state??o.href===location.href})}),addEventListener("popstate",async t=>{if(t.state?.[x]){const n=t.state[x];if(Z={},n===v)return;const a=T[n],r=t.state[je]??{},o=new URL(t.state[Et]??location.href),i=t.state[V],s=se(location)===se(y.url);if(i===k&&(qe||s)){e(o),T[v]=pe(),a&&scrollTo(a.x,a.y),r!==A.state&&(A={...A,state:r},we.$set({page:A})),v=n;return}const l=n-v;await H({type:"popstate",url:o,popped:{state:r,scroll:a,delta:l},accept:()=>{v=n,k=i},block:()=>{history.go(-l)},nav_token:Z})}else if(!D){const n=new URL(location.href);e(n)}}),addEventListener("hashchange",()=>{D&&(D=!1,_e.call(history,{...history.state,[x]:++v,[V]:k},"",location.href))});for(const t of document.querySelectorAll("link"))t.rel==="icon"&&(t.href=t.href);addEventListener("pageshow",t=>{t.persisted&&L.navigating.set(null)});function e(t){y.url=t,L.page.set({...A,url:t}),L.page.notify()}}async function Ht(e,{status:t=200,error:n,node_ids:a,params:r,route:o,data:i,form:s}){ye=!0;const c=new URL(location.href);({params:r={},route:o={id:null}}=ke(c,!1)||{});let l;try{const d=a.map(async(f,h)=>{const p=i[h];return p?.uses&&(p.uses=Qe(p.uses)),be({loader:j.nodes[f],url:c,params:r,route:o,parent:async()=>{const R={};for(let E=0;E<h;E+=1)Object.assign(R,(await d[E]).data);return R},server_data_node:Ee(p)})}),g=await Promise.all(d),u=ne.find(({id:f})=>f===o.id);if(u){const f=u.layouts;for(let h=0;h<f.length;h++)f[h]||g.splice(h,0,void 0)}l=await Q({url:c,params:r,branch:g,status:t,error:n,form:s,route:u??null})}catch(d){if(d instanceof Fe){await O(new URL(d.location,location.href));return}l=await ae({status:J(d),error:await M(d,{url:c,params:r,route:o}),url:c,route:o})}l.props.page&&(l.props.page.state={}),Ye(l,e)}async function Ze(e,t){const n=new URL(e);n.pathname=lt(e.pathname),e.pathname.endsWith("/")&&n.searchParams.append(Ot,"1"),n.searchParams.append(Nt,t.map(r=>r?"1":"0").join(""));const a=await Ue(n.href);if(!a.ok){let r;throw a.headers.get("content-type")?.includes("application/json")?r=await a.json():a.status===404?r="Not Found":a.status===500&&(r="Internal Error"),new te(a.status,r)}return new Promise(async r=>{const o=new Map,i=a.body.getReader(),s=new TextDecoder;function c(d){return Tt(d,{Promise:g=>new Promise((u,f)=>{o.set(g,{fulfil:u,reject:f})})})}let l="";for(;;){const{done:d,value:g}=await i.read();if(d&&!l)break;for(l+=!g&&l?`
|
2 |
+
`:s.decode(g,{stream:!0});;){const u=l.indexOf(`
|
3 |
+
`);if(u===-1)break;const f=JSON.parse(l.slice(0,u));if(l=l.slice(u+1),f.type==="redirect")return r(f);if(f.type==="data")f.nodes?.forEach(h=>{h?.type==="data"&&(h.uses=Qe(h.uses),h.data=c(h.data))}),r(f);else if(f.type==="chunk"){const{id:h,data:p,error:R}=f,E=o.get(h);o.delete(h),R?E.reject(c(R)):E.fulfil(c(p))}}}})}function Qe(e){return{dependencies:new Set(e?.dependencies??[]),params:new Set(e?.params??[]),parent:!!e?.parent,route:!!e?.route,url:!!e?.url,search_params:new Set(e?.search_params??[])}}function Kt(){const e=document.querySelector("[autofocus]");if(e)e.focus();else{const t=document.body,n=t.getAttribute("tabindex");t.tabIndex=-1,t.focus({preventScroll:!0,focusVisible:!1}),n!==null?t.setAttribute("tabindex",n):t.removeAttribute("tabindex");const a=getSelection();if(a&&a.type!=="None"){const r=[];for(let o=0;o<a.rangeCount;o+=1)r.push(a.getRangeAt(o));setTimeout(()=>{if(a.rangeCount===r.length){for(let o=0;o<a.rangeCount;o+=1){const i=r[o],s=a.getRangeAt(o);if(i.commonAncestorContainer!==s.commonAncestorContainer||i.startContainer!==s.startContainer||i.endContainer!==s.endContainer||i.startOffset!==s.startOffset||i.endOffset!==s.endOffset)return}a.removeAllRanges()}})}}}function et(e,t,n,a){let r,o;const i=new Promise((c,l)=>{r=c,o=l});return i.catch(()=>{}),{navigation:{from:{params:e.params,route:{id:e.route?.id??null},url:e.url},to:n&&{params:t?.params??null,route:{id:t?.route?.id??null},url:n},willUnload:!t,type:a,complete:i},fulfil:r,reject:o}}export{Wt as a,L as s};
|
build/client/_app/immutable/entry/app.6IH58JcQ.js
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import{s as C,a as U,w as h,g as q,i as b,f as p,x as j,v as z,e as M,c as W,b as F,m as A,y as d,t as G,d as H,j as J,z as D,A as k,B as K}from"../chunks/scheduler.OwA2AG0M.js";import{S as Q,i as X,a as g,c as P,t as w,g as L,b as v,d as I,m as E,e as y}from"../chunks/index.JlSaLmPP.js";const Y="modulepreload",Z=function(a,e){return new URL(a,e).href},N={},R=function(e,n,i){let s=Promise.resolve();if(n&&n.length>0){const c=document.getElementsByTagName("link");s=Promise.all(n.map(t=>{if(t=Z(t,i),t in N)return;N[t]=!0;const r=t.endsWith(".css"),l=r?'[rel="stylesheet"]':"";if(!!i)for(let u=c.length-1;u>=0;u--){const m=c[u];if(m.href===t&&(!r||m.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${t}"]${l}`))return;const o=document.createElement("link");if(o.rel=r?"stylesheet":Y,r||(o.as="script",o.crossOrigin=""),o.href=t,document.head.appendChild(o),r)return new Promise((u,m)=>{o.addEventListener("load",u),o.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${t}`)))})}))}return s.then(()=>e()).catch(c=>{const t=new Event("vite:preloadError",{cancelable:!0});if(t.payload=c,window.dispatchEvent(t),!t.defaultPrevented)throw c})},re={};function $(a){let e,n,i;var s=a[1][0];function c(t,r){return{props:{data:t[3],form:t[2]}}}return s&&(e=k(s,c(a)),a[12](e)),{c(){e&&v(e.$$.fragment),n=h()},l(t){e&&I(e.$$.fragment,t),n=h()},m(t,r){e&&E(e,t,r),b(t,n,r),i=!0},p(t,r){if(r&2&&s!==(s=t[1][0])){if(e){L();const l=e;g(l.$$.fragment,1,0,()=>{y(l,1)}),P()}s?(e=k(s,c(t)),t[12](e),v(e.$$.fragment),w(e.$$.fragment,1),E(e,n.parentNode,n)):e=null}else if(s){const l={};r&8&&(l.data=t[3]),r&4&&(l.form=t[2]),e.$set(l)}},i(t){i||(e&&w(e.$$.fragment,t),i=!0)},o(t){e&&g(e.$$.fragment,t),i=!1},d(t){t&&p(n),a[12](null),e&&y(e,t)}}}function x(a){let e,n,i;var s=a[1][0];function c(t,r){return{props:{data:t[3],$$slots:{default:[ee]},$$scope:{ctx:t}}}}return s&&(e=k(s,c(a)),a[11](e)),{c(){e&&v(e.$$.fragment),n=h()},l(t){e&&I(e.$$.fragment,t),n=h()},m(t,r){e&&E(e,t,r),b(t,n,r),i=!0},p(t,r){if(r&2&&s!==(s=t[1][0])){if(e){L();const l=e;g(l.$$.fragment,1,0,()=>{y(l,1)}),P()}s?(e=k(s,c(t)),t[11](e),v(e.$$.fragment),w(e.$$.fragment,1),E(e,n.parentNode,n)):e=null}else if(s){const l={};r&8&&(l.data=t[3]),r&8215&&(l.$$scope={dirty:r,ctx:t}),e.$set(l)}},i(t){i||(e&&w(e.$$.fragment,t),i=!0)},o(t){e&&g(e.$$.fragment,t),i=!1},d(t){t&&p(n),a[11](null),e&&y(e,t)}}}function ee(a){let e,n,i;var s=a[1][1];function c(t,r){return{props:{data:t[4],form:t[2]}}}return s&&(e=k(s,c(a)),a[10](e)),{c(){e&&v(e.$$.fragment),n=h()},l(t){e&&I(e.$$.fragment,t),n=h()},m(t,r){e&&E(e,t,r),b(t,n,r),i=!0},p(t,r){if(r&2&&s!==(s=t[1][1])){if(e){L();const l=e;g(l.$$.fragment,1,0,()=>{y(l,1)}),P()}s?(e=k(s,c(t)),t[10](e),v(e.$$.fragment),w(e.$$.fragment,1),E(e,n.parentNode,n)):e=null}else if(s){const l={};r&16&&(l.data=t[4]),r&4&&(l.form=t[2]),e.$set(l)}},i(t){i||(e&&w(e.$$.fragment,t),i=!0)},o(t){e&&g(e.$$.fragment,t),i=!1},d(t){t&&p(n),a[10](null),e&&y(e,t)}}}function O(a){let e,n=a[6]&&S(a);return{c(){e=M("div"),n&&n.c(),this.h()},l(i){e=W(i,"DIV",{id:!0,"aria-live":!0,"aria-atomic":!0,style:!0});var s=F(e);n&&n.l(s),s.forEach(p),this.h()},h(){A(e,"id","svelte-announcer"),A(e,"aria-live","assertive"),A(e,"aria-atomic","true"),d(e,"position","absolute"),d(e,"left","0"),d(e,"top","0"),d(e,"clip","rect(0 0 0 0)"),d(e,"clip-path","inset(50%)"),d(e,"overflow","hidden"),d(e,"white-space","nowrap"),d(e,"width","1px"),d(e,"height","1px")},m(i,s){b(i,e,s),n&&n.m(e,null)},p(i,s){i[6]?n?n.p(i,s):(n=S(i),n.c(),n.m(e,null)):n&&(n.d(1),n=null)},d(i){i&&p(e),n&&n.d()}}}function S(a){let e;return{c(){e=G(a[7])},l(n){e=H(n,a[7])},m(n,i){b(n,e,i)},p(n,i){i&128&&J(e,n[7])},d(n){n&&p(e)}}}function te(a){let e,n,i,s,c;const t=[x,$],r=[];function l(o,u){return o[1][1]?0:1}e=l(a),n=r[e]=t[e](a);let _=a[5]&&O(a);return{c(){n.c(),i=U(),_&&_.c(),s=h()},l(o){n.l(o),i=q(o),_&&_.l(o),s=h()},m(o,u){r[e].m(o,u),b(o,i,u),_&&_.m(o,u),b(o,s,u),c=!0},p(o,[u]){let m=e;e=l(o),e===m?r[e].p(o,u):(L(),g(r[m],1,1,()=>{r[m]=null}),P(),n=r[e],n?n.p(o,u):(n=r[e]=t[e](o),n.c()),w(n,1),n.m(i.parentNode,i)),o[5]?_?_.p(o,u):(_=O(o),_.c(),_.m(s.parentNode,s)):_&&(_.d(1),_=null)},i(o){c||(w(n),c=!0)},o(o){g(n),c=!1},d(o){o&&(p(i),p(s)),r[e].d(o),_&&_.d(o)}}}function ne(a,e,n){let{stores:i}=e,{page:s}=e,{constructors:c}=e,{components:t=[]}=e,{form:r}=e,{data_0:l=null}=e,{data_1:_=null}=e;j(i.page.notify);let o=!1,u=!1,m=null;z(()=>{const f=i.page.subscribe(()=>{o&&(n(6,u=!0),K().then(()=>{n(7,m=document.title||"untitled page")}))});return n(5,o=!0),f});function T(f){D[f?"unshift":"push"](()=>{t[1]=f,n(0,t)})}function V(f){D[f?"unshift":"push"](()=>{t[0]=f,n(0,t)})}function B(f){D[f?"unshift":"push"](()=>{t[0]=f,n(0,t)})}return a.$$set=f=>{"stores"in f&&n(8,i=f.stores),"page"in f&&n(9,s=f.page),"constructors"in f&&n(1,c=f.constructors),"components"in f&&n(0,t=f.components),"form"in f&&n(2,r=f.form),"data_0"in f&&n(3,l=f.data_0),"data_1"in f&&n(4,_=f.data_1)},a.$$.update=()=>{a.$$.dirty&768&&i.page.set(s)},[t,c,r,l,_,o,u,m,i,s,T,V,B]}class oe extends Q{constructor(e){super(),X(this,e,ne,te,C,{stores:8,page:9,constructors:1,components:0,form:2,data_0:3,data_1:4})}}const ae=[()=>R(()=>import("../nodes/0.UBYIs98P.js"),__vite__mapDeps([0,1,2,3,4,5,6]),import.meta.url),()=>R(()=>import("../nodes/1.C6C6IM3d.js"),__vite__mapDeps([7,1,2,8,4]),import.meta.url),()=>R(()=>import("../nodes/2.s-i08RHU.js"),__vite__mapDeps([9,1,2,8,4,10,3,5,11,12]),import.meta.url),()=>R(()=>import("../nodes/3.5iLzfAc3.js"),__vite__mapDeps([13,1,10,2,14]),import.meta.url),()=>R(()=>import("../nodes/4.k8vZBuaR.js"),__vite__mapDeps([15,1,2,11,3,4,5,16]),import.meta.url)],le=[],fe={"/":[-3],"/chat":[3],"/logs":[4]},ce={handleError:({error:a})=>{console.error(a)},reroute:()=>{}};export{fe as dictionary,ce as hooks,re as matchers,ae as nodes,oe as root,le as server_loads};
|
2 |
+
function __vite__mapDeps(indexes) {
|
3 |
+
if (!__vite__mapDeps.viteFileDeps) {
|
4 |
+
__vite__mapDeps.viteFileDeps = ["../nodes/0.UBYIs98P.js","../chunks/scheduler.OwA2AG0M.js","../chunks/index.JlSaLmPP.js","../chunks/ProgressBar.svelte_svelte_type_style_lang.9muE4jOP.js","../chunks/index.UTqYide5.js","../assets/ProgressBar.oq5aOWfL.css","../assets/0.Cn2YjZcW.css","../nodes/1.C6C6IM3d.js","../chunks/entry.NqRdvUX4.js","../nodes/2.s-i08RHU.js","../chunks/each.N0yHvFdK.js","../chunks/LogService.hUlSDADx.js","../assets/2.VP-gOi1X.css","../nodes/3.5iLzfAc3.js","../assets/3.zBATg92h.css","../nodes/4.k8vZBuaR.js","../assets/4.wLw7i_OC.css"]
|
5 |
+
}
|
6 |
+
return indexes.map((i) => __vite__mapDeps.viteFileDeps[i])
|
7 |
+
}
|
build/client/_app/immutable/entry/start.s6vMv-7T.js
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
import{a as t}from"../chunks/entry.NqRdvUX4.js";export{t as start};
|
build/client/_app/immutable/nodes/1.C6C6IM3d.js
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
import{s as E,e as b,t as _,a as S,c as f,b as d,d as g,f as p,g as x,i as l,h,j as v,n as $,k as j}from"../chunks/scheduler.OwA2AG0M.js";import{S as k,i as q}from"../chunks/index.JlSaLmPP.js";import{s as y}from"../chunks/entry.NqRdvUX4.js";const C=()=>{const s=y;return{page:{subscribe:s.page.subscribe},navigating:{subscribe:s.navigating.subscribe},updated:s.updated}},H={subscribe(s){return C().page.subscribe(s)}};function P(s){let t,r=s[0].status+"",o,n,i,c=s[0].error?.message+"",u;return{c(){t=b("h1"),o=_(r),n=S(),i=b("p"),u=_(c)},l(e){t=f(e,"H1",{});var a=d(t);o=g(a,r),a.forEach(p),n=x(e),i=f(e,"P",{});var m=d(i);u=g(m,c),m.forEach(p)},m(e,a){l(e,t,a),h(t,o),l(e,n,a),l(e,i,a),h(i,u)},p(e,[a]){a&1&&r!==(r=e[0].status+"")&&v(o,r),a&1&&c!==(c=e[0].error?.message+"")&&v(u,c)},i:$,o:$,d(e){e&&(p(t),p(n),p(i))}}}function w(s,t,r){let o;return j(s,H,n=>r(0,o=n)),[o]}let D=class extends k{constructor(t){super(),q(this,t,w,P,E,{})}};export{D as component};
|
build/client/_app/immutable/nodes/2.s-i08RHU.js
ADDED
The diff for this file is too large to render.
See raw diff
|
|
build/client/_app/version.json
CHANGED
@@ -1 +1 @@
|
|
1 |
-
{"version":"
|
|
|
1 |
+
{"version":"1727779327879"}
|
build/server/chunks/1-inBcOc8r.js
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const index = 1;
|
2 |
+
let component_cache;
|
3 |
+
const component = async () => component_cache ??= (await import('./error.svelte-2eVkhI77.js')).default;
|
4 |
+
const imports = ["_app/immutable/nodes/1.C6C6IM3d.js","_app/immutable/chunks/scheduler.OwA2AG0M.js","_app/immutable/chunks/index.JlSaLmPP.js","_app/immutable/chunks/entry.NqRdvUX4.js","_app/immutable/chunks/index.UTqYide5.js"];
|
5 |
+
const stylesheets = [];
|
6 |
+
const fonts = [];
|
7 |
+
|
8 |
+
export { component, fonts, imports, index, stylesheets };
|
9 |
+
//# sourceMappingURL=1-inBcOc8r.js.map
|
build/server/chunks/1-inBcOc8r.js.map
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
{"version":3,"file":"1-inBcOc8r.js","sources":["../../../.svelte-kit/adapter-node/nodes/1.js"],"sourcesContent":["\n\nexport const index = 1;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/fallbacks/error.svelte.js')).default;\nexport const imports = [\"_app/immutable/nodes/1.C6C6IM3d.js\",\"_app/immutable/chunks/scheduler.OwA2AG0M.js\",\"_app/immutable/chunks/index.JlSaLmPP.js\",\"_app/immutable/chunks/entry.NqRdvUX4.js\",\"_app/immutable/chunks/index.UTqYide5.js\"];\nexport const stylesheets = [];\nexport const fonts = [];\n"],"names":[],"mappings":"AAEY,MAAC,KAAK,GAAG,EAAE;AACvB,IAAI,eAAe,CAAC;AACR,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,4BAAsC,CAAC,EAAE,QAAQ;AAC5G,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,6CAA6C,CAAC,yCAAyC,CAAC,yCAAyC,CAAC,yCAAyC,EAAE;AAC9N,MAAC,WAAW,GAAG,GAAG;AAClB,MAAC,KAAK,GAAG;;;;"}
|
build/server/chunks/2-Vbi53EwI.js
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { d as private_env } from './shared-server-49TKSBDM.js';
|
2 |
+
|
3 |
+
const prerender = false;
|
4 |
+
|
5 |
+
var _page_ts = /*#__PURE__*/Object.freeze({
|
6 |
+
__proto__: null,
|
7 |
+
prerender: prerender
|
8 |
+
});
|
9 |
+
|
10 |
+
async function load() {
|
11 |
+
return {
|
12 |
+
ENV_ENABLE_DOCUMENT_DB: private_env.ENABLE_DOCUMENT_DB,
|
13 |
+
ENV_DOCUMENT_DB_URL: private_env.DOCUMENT_DB_URL,
|
14 |
+
ENV_ENABLE_DB_SUPPORT: private_env.ENABLE_DB_SUPPORT,
|
15 |
+
ENV_ENABLE_DEV_FEATURES: private_env.ENV_ENABLE_DEV_FEATURES,
|
16 |
+
ENV_DISABLE_HEALTH_CHECKS: private_env.ENV_DISABLE_HEALTH_CHECKS,
|
17 |
+
ENV_FAQ_DOCUMENT_ID: private_env.ENV_FAQ_DOCUMENT_ID
|
18 |
+
};
|
19 |
+
}
|
20 |
+
|
21 |
+
var _page_server = /*#__PURE__*/Object.freeze({
|
22 |
+
__proto__: null,
|
23 |
+
load: load
|
24 |
+
});
|
25 |
+
|
26 |
+
const index = 2;
|
27 |
+
let component_cache;
|
28 |
+
const component = async () => component_cache ??= (await import('./_page.svelte-iF0uVy6x.js')).default;
|
29 |
+
const universal_id = "src/routes/+page.ts";
|
30 |
+
const server_id = "src/routes/+page.server.js";
|
31 |
+
const imports = ["_app/immutable/nodes/2.s-i08RHU.js","_app/immutable/chunks/scheduler.OwA2AG0M.js","_app/immutable/chunks/index.JlSaLmPP.js","_app/immutable/chunks/entry.NqRdvUX4.js","_app/immutable/chunks/index.UTqYide5.js","_app/immutable/chunks/each.N0yHvFdK.js","_app/immutable/chunks/ProgressBar.svelte_svelte_type_style_lang.9muE4jOP.js","_app/immutable/chunks/LogService.hUlSDADx.js"];
|
32 |
+
const stylesheets = ["_app/immutable/assets/2.VP-gOi1X.css","_app/immutable/assets/ProgressBar.oq5aOWfL.css"];
|
33 |
+
const fonts = [];
|
34 |
+
|
35 |
+
export { component, fonts, imports, index, _page_server as server, server_id, stylesheets, _page_ts as universal, universal_id };
|
36 |
+
//# sourceMappingURL=2-Vbi53EwI.js.map
|
build/server/chunks/2-Vbi53EwI.js.map
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
{"version":3,"file":"2-Vbi53EwI.js","sources":["../../../.svelte-kit/adapter-node/entries/pages/_page.ts.js","../../../.svelte-kit/adapter-node/entries/pages/_page.server.js","../../../.svelte-kit/adapter-node/nodes/2.js"],"sourcesContent":["const prerender = false;\nexport {\n prerender\n};\n","import { d as private_env } from \"../../chunks/shared-server.js\";\nasync function load() {\n return {\n ENV_ENABLE_DOCUMENT_DB: private_env.ENABLE_DOCUMENT_DB,\n ENV_DOCUMENT_DB_URL: private_env.DOCUMENT_DB_URL,\n ENV_ENABLE_DB_SUPPORT: private_env.ENABLE_DB_SUPPORT,\n ENV_ENABLE_DEV_FEATURES: private_env.ENV_ENABLE_DEV_FEATURES,\n ENV_DISABLE_HEALTH_CHECKS: private_env.ENV_DISABLE_HEALTH_CHECKS,\n ENV_FAQ_DOCUMENT_ID: private_env.ENV_FAQ_DOCUMENT_ID\n };\n}\nexport {\n load\n};\n","import * as universal from '../entries/pages/_page.ts.js';\nimport * as server from '../entries/pages/_page.server.js';\n\nexport const index = 2;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/pages/_page.svelte.js')).default;\nexport { universal };\nexport const universal_id = \"src/routes/+page.ts\";\nexport { server };\nexport const server_id = \"src/routes/+page.server.js\";\nexport const imports = [\"_app/immutable/nodes/2.s-i08RHU.js\",\"_app/immutable/chunks/scheduler.OwA2AG0M.js\",\"_app/immutable/chunks/index.JlSaLmPP.js\",\"_app/immutable/chunks/entry.NqRdvUX4.js\",\"_app/immutable/chunks/index.UTqYide5.js\",\"_app/immutable/chunks/each.N0yHvFdK.js\",\"_app/immutable/chunks/ProgressBar.svelte_svelte_type_style_lang.9muE4jOP.js\",\"_app/immutable/chunks/LogService.hUlSDADx.js\"];\nexport const stylesheets = [\"_app/immutable/assets/2.VP-gOi1X.css\",\"_app/immutable/assets/ProgressBar.oq5aOWfL.css\"];\nexport const fonts = [];\n"],"names":[],"mappings":";;AAAA,MAAM,SAAS,GAAG,KAAK;;;;;;;ACCvB,eAAe,IAAI,GAAG;AACtB,EAAE,OAAO;AACT,IAAI,sBAAsB,EAAE,WAAW,CAAC,kBAAkB;AAC1D,IAAI,mBAAmB,EAAE,WAAW,CAAC,eAAe;AACpD,IAAI,qBAAqB,EAAE,WAAW,CAAC,iBAAiB;AACxD,IAAI,uBAAuB,EAAE,WAAW,CAAC,uBAAuB;AAChE,IAAI,yBAAyB,EAAE,WAAW,CAAC,yBAAyB;AACpE,IAAI,mBAAmB,EAAE,WAAW,CAAC,mBAAmB;AACxD,GAAG,CAAC;AACJ;;;;;;;ACPY,MAAC,KAAK,GAAG,EAAE;AACvB,IAAI,eAAe,CAAC;AACR,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,4BAAkC,CAAC,EAAE,QAAQ;AAExG,MAAC,YAAY,GAAG,sBAAsB;AAEtC,MAAC,SAAS,GAAG,6BAA6B;AAC1C,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,6CAA6C,CAAC,yCAAyC,CAAC,yCAAyC,CAAC,yCAAyC,CAAC,wCAAwC,CAAC,6EAA6E,CAAC,8CAA8C,EAAE;AACpY,MAAC,WAAW,GAAG,CAAC,sCAAsC,CAAC,gDAAgD,EAAE;AACzG,MAAC,KAAK,GAAG;;;;"}
|
build/server/chunks/LlamaCppService-QhLZfkhy.js
ADDED
@@ -0,0 +1,292 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { existsSync, mkdirSync, writeFileSync } from 'fs';
|
2 |
+
import { resolve } from 'path';
|
3 |
+
import { d as private_env } from './shared-server-49TKSBDM.js';
|
4 |
+
import dns from 'node:dns';
|
5 |
+
|
6 |
+
dns.setDefaultResultOrder("ipv4first");
|
7 |
+
class LlamaCppService {
|
8 |
+
url = "";
|
9 |
+
constructor(url) {
|
10 |
+
this.url = url;
|
11 |
+
}
|
12 |
+
async health() {
|
13 |
+
try {
|
14 |
+
const r = await fetch(`${this.url}/health`, {
|
15 |
+
method: "GET",
|
16 |
+
headers: {
|
17 |
+
"Content-Type": "application/json"
|
18 |
+
}
|
19 |
+
});
|
20 |
+
const data = await r.json();
|
21 |
+
if (data.status === "ok" || data.status === "error" || data.status === "loading model") {
|
22 |
+
return data.status;
|
23 |
+
}
|
24 |
+
} catch (error) {
|
25 |
+
console.log(JSON.parse(JSON.stringify(error)));
|
26 |
+
}
|
27 |
+
return "unavailable";
|
28 |
+
}
|
29 |
+
async tokenize(prompt, abortController) {
|
30 |
+
const response = await fetch(`${this.url}/tokenize`, {
|
31 |
+
method: "POST",
|
32 |
+
headers: {
|
33 |
+
"Content-Type": "application/json"
|
34 |
+
},
|
35 |
+
body: JSON.stringify({
|
36 |
+
"content": prompt
|
37 |
+
}),
|
38 |
+
signal: abortController.signal
|
39 |
+
});
|
40 |
+
if (response.ok) {
|
41 |
+
const data = await response.json();
|
42 |
+
if (data.tokens) {
|
43 |
+
return data.tokens;
|
44 |
+
}
|
45 |
+
} else if (response.status === 404) {
|
46 |
+
console.log("Tokenization endpoint not found (404).");
|
47 |
+
} else {
|
48 |
+
console.log(`Failed to tokenize: ${await response.text()}`);
|
49 |
+
}
|
50 |
+
return null;
|
51 |
+
}
|
52 |
+
async detokenize(tokens, abortController) {
|
53 |
+
const response = await fetch(`${this.url}/detokenize`, {
|
54 |
+
method: "POST",
|
55 |
+
headers: {
|
56 |
+
"Content-Type": "application/json"
|
57 |
+
},
|
58 |
+
body: JSON.stringify({
|
59 |
+
"tokens": tokens
|
60 |
+
}),
|
61 |
+
signal: abortController.signal
|
62 |
+
});
|
63 |
+
if (response.ok) {
|
64 |
+
const data = await response.json();
|
65 |
+
if (data.content) {
|
66 |
+
return data.content.trim();
|
67 |
+
}
|
68 |
+
} else if (response.status === 404) {
|
69 |
+
console.log("Detokenization endpoint not found (404).");
|
70 |
+
} else {
|
71 |
+
console.log(`Failed to detokenize: ${await response.text()}`);
|
72 |
+
}
|
73 |
+
return null;
|
74 |
+
}
|
75 |
+
createRequest(prompt) {
|
76 |
+
const request = {
|
77 |
+
"stream": true,
|
78 |
+
"stop": ["</s>", "bot:", "user:"],
|
79 |
+
"prompt": prompt
|
80 |
+
};
|
81 |
+
request["n_predict"] = private_env.LLM_API_N_PREDICT ? Number(private_env.LLM_API_N_PREDICT) : -1;
|
82 |
+
request["temperature"] = private_env.LLM_API_TEMPERATURE ? Number(private_env.LLM_API_TEMPERATURE) : 0;
|
83 |
+
if (private_env.LLM_API_TOP_K) {
|
84 |
+
request["top_k"] = Number(private_env.LLM_API_TOP_K);
|
85 |
+
}
|
86 |
+
if (private_env.LLM_API_TOP_P) {
|
87 |
+
request["top_p"] = Number(private_env.LLM_API_TOP_P);
|
88 |
+
}
|
89 |
+
if (private_env.LLM_API_MIN_P) {
|
90 |
+
request["min_p"] = Number(private_env.LLM_API_MIN_P);
|
91 |
+
}
|
92 |
+
if (private_env.LLM_API_SEED) {
|
93 |
+
request["seed"] = Number(private_env.LLM_API_SEED);
|
94 |
+
}
|
95 |
+
if (private_env.LLM_API_N_KEEP) {
|
96 |
+
request["n_keep"] = Number(private_env.LLM_API_N_KEEP);
|
97 |
+
}
|
98 |
+
if (private_env.LLM_CACHE_PROMPT) {
|
99 |
+
request["cache_prompt"] = Boolean(private_env.LLM_CACHE_PROMPT);
|
100 |
+
}
|
101 |
+
request["repeat_penalty"] = private_env.LLM_API_REPEAT_PENALTY ? Number(private_env.LLM_API_REPEAT_PENALTY) : 1.2;
|
102 |
+
request["repeat_last_n"] = private_env.LLM_API_REPEAT_LAST_N ? Number(private_env.LLM_API_REPEAT_LAST_N) : 256;
|
103 |
+
return request;
|
104 |
+
}
|
105 |
+
predict(prompt, { abortController }) {
|
106 |
+
return async ({ prompt: prompt2 }) => {
|
107 |
+
prompt2 = ` [INST] ${prompt2} [/INST]`;
|
108 |
+
let tokens = await this.tokenize(prompt2, abortController);
|
109 |
+
if (tokens !== null) {
|
110 |
+
tokens = tokens.slice(0, 30700);
|
111 |
+
const detokenizedPrompt = await this.detokenize(tokens, abortController);
|
112 |
+
if (detokenizedPrompt !== null) {
|
113 |
+
prompt2 = detokenizedPrompt;
|
114 |
+
} else {
|
115 |
+
prompt2 = prompt2.substring(0, 32768);
|
116 |
+
}
|
117 |
+
} else {
|
118 |
+
prompt2 = prompt2.substring(0, 32768);
|
119 |
+
}
|
120 |
+
const request = this.createRequest(prompt2);
|
121 |
+
let r;
|
122 |
+
while (true) {
|
123 |
+
r = await fetch(`${this.url}/completion`, {
|
124 |
+
method: "POST",
|
125 |
+
headers: {
|
126 |
+
"Content-Type": "application/json",
|
127 |
+
"Accept": "text/event-stream"
|
128 |
+
},
|
129 |
+
body: JSON.stringify(request),
|
130 |
+
signal: abortController.signal
|
131 |
+
});
|
132 |
+
if (r.status === 404) {
|
133 |
+
if (!private_env.LLM_API_404_RETRY_INTERVAL) {
|
134 |
+
break;
|
135 |
+
}
|
136 |
+
console.log(`Received 404, retrying after ${private_env.LLM_API_404_RETRY_INTERVAL} seconds...`);
|
137 |
+
await new Promise((resolve2) => setTimeout(resolve2, Number(private_env.LLM_API_404_RETRY_INTERVAL) * 1e3));
|
138 |
+
} else {
|
139 |
+
break;
|
140 |
+
}
|
141 |
+
}
|
142 |
+
if (!r.ok) {
|
143 |
+
throw new Error(`Failed to generate text: ${await r.text()}`);
|
144 |
+
}
|
145 |
+
const encoder = new TextDecoderStream();
|
146 |
+
const reader = await r.body?.pipeThrough(encoder).getReader();
|
147 |
+
let t = this;
|
148 |
+
return async function* () {
|
149 |
+
let stop = false;
|
150 |
+
let generatedText = "";
|
151 |
+
let tokenId = 0;
|
152 |
+
while (!stop) {
|
153 |
+
const out = await reader?.read() ?? { done: false, value: void 0 };
|
154 |
+
if (out.done) {
|
155 |
+
stop = true;
|
156 |
+
reader?.cancel();
|
157 |
+
t.createLogFile(JSON.stringify({
|
158 |
+
"request": prompt2,
|
159 |
+
"response": generatedText
|
160 |
+
}), "llm-service");
|
161 |
+
return;
|
162 |
+
}
|
163 |
+
if (!out.value) {
|
164 |
+
stop = true;
|
165 |
+
reader?.cancel();
|
166 |
+
return;
|
167 |
+
}
|
168 |
+
let tokenValue = "";
|
169 |
+
if (out.value.startsWith("data: ")) {
|
170 |
+
try {
|
171 |
+
const data = JSON.parse(out.value.slice(6));
|
172 |
+
tokenValue = data.content;
|
173 |
+
} catch (e) {
|
174 |
+
}
|
175 |
+
} else if (private_env.LLM_API_VERSION == "v1") {
|
176 |
+
tokenValue = out.value;
|
177 |
+
}
|
178 |
+
generatedText += tokenValue.replace("</s>", "") ?? "";
|
179 |
+
yield {
|
180 |
+
token: {
|
181 |
+
id: tokenId++,
|
182 |
+
text: tokenValue.replace("</s>", "") ?? "",
|
183 |
+
logprob: 0,
|
184 |
+
special: false
|
185 |
+
},
|
186 |
+
generated_text: null,
|
187 |
+
details: null
|
188 |
+
};
|
189 |
+
}
|
190 |
+
}();
|
191 |
+
};
|
192 |
+
}
|
193 |
+
conversation(history, { abortController }) {
|
194 |
+
return async ({ history: history2 }) => {
|
195 |
+
let prompt = this.formatPrompt(history2);
|
196 |
+
const request = this.createRequest(prompt);
|
197 |
+
let tokens = await this.tokenize(prompt, abortController);
|
198 |
+
if (tokens !== null) {
|
199 |
+
tokens = tokens.slice(-30700);
|
200 |
+
const detokenizedPrompt = await this.detokenize(tokens, abortController);
|
201 |
+
if (detokenizedPrompt !== null) {
|
202 |
+
prompt = detokenizedPrompt;
|
203 |
+
} else {
|
204 |
+
prompt = prompt.substring(Math.max(0, prompt.length - 30700));
|
205 |
+
}
|
206 |
+
} else {
|
207 |
+
prompt = prompt.substring(Math.max(0, prompt.length - 30700));
|
208 |
+
}
|
209 |
+
const r = await fetch(`${this.url}/completion`, {
|
210 |
+
method: "POST",
|
211 |
+
headers: {
|
212 |
+
"Content-Type": "application/json",
|
213 |
+
"Accept": "text/event-stream"
|
214 |
+
},
|
215 |
+
body: JSON.stringify(request),
|
216 |
+
signal: abortController.signal
|
217 |
+
});
|
218 |
+
if (!r.ok) {
|
219 |
+
throw new Error(`Failed to generate text: ${await r.text()}`);
|
220 |
+
}
|
221 |
+
const encoder = new TextDecoderStream();
|
222 |
+
const reader = r.body?.pipeThrough(encoder).getReader();
|
223 |
+
return async function* () {
|
224 |
+
let stop = false;
|
225 |
+
let generatedText = "";
|
226 |
+
let tokenId = 0;
|
227 |
+
while (!stop) {
|
228 |
+
const out = await reader?.read() ?? { done: false, value: void 0 };
|
229 |
+
if (out.done) {
|
230 |
+
reader?.cancel();
|
231 |
+
return;
|
232 |
+
}
|
233 |
+
if (!out.value) {
|
234 |
+
reader?.cancel();
|
235 |
+
return;
|
236 |
+
}
|
237 |
+
let tokenValue = "";
|
238 |
+
if (out.value.startsWith("data: ")) {
|
239 |
+
try {
|
240 |
+
let data2 = JSON.parse(out.value.slice(6));
|
241 |
+
tokenValue = data2.content;
|
242 |
+
} catch (e) {
|
243 |
+
}
|
244 |
+
} else if (private_env.LLM_API_VERSION == "v1") {
|
245 |
+
tokenValue = out.value;
|
246 |
+
}
|
247 |
+
generatedText += tokenValue.replace("</s>", "") ?? "";
|
248 |
+
yield {
|
249 |
+
token: {
|
250 |
+
id: tokenId++,
|
251 |
+
text: tokenValue.replace("</s>", "") ?? "",
|
252 |
+
logprob: 0,
|
253 |
+
special: false
|
254 |
+
},
|
255 |
+
generated_text: null,
|
256 |
+
details: null
|
257 |
+
};
|
258 |
+
}
|
259 |
+
}();
|
260 |
+
};
|
261 |
+
}
|
262 |
+
formatPrompt(history) {
|
263 |
+
let prompt = "";
|
264 |
+
for (const [userPrompt, botResponse] of history) {
|
265 |
+
prompt += ` [INST] ${userPrompt} [/INST]`;
|
266 |
+
if (botResponse) {
|
267 |
+
prompt += `${botResponse}`;
|
268 |
+
}
|
269 |
+
}
|
270 |
+
return prompt;
|
271 |
+
}
|
272 |
+
createLogFile(text, namePrefix = "") {
|
273 |
+
try {
|
274 |
+
const logsDirectory = resolve(private_env.LOGS_ROOT_FOLDER + "/llama");
|
275 |
+
if (!existsSync(logsDirectory)) {
|
276 |
+
mkdirSync(logsDirectory, {
|
277 |
+
recursive: true
|
278 |
+
});
|
279 |
+
}
|
280 |
+
const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "");
|
281 |
+
const logFilePath = resolve(logsDirectory, `${namePrefix}${timestamp}.json`);
|
282 |
+
writeFileSync(logFilePath, text);
|
283 |
+
console.log(`Log file created: ${logFilePath}`);
|
284 |
+
} catch (e) {
|
285 |
+
console.log(`Failed to create log file in llama service`);
|
286 |
+
console.log(e);
|
287 |
+
}
|
288 |
+
}
|
289 |
+
}
|
290 |
+
|
291 |
+
export { LlamaCppService as L };
|
292 |
+
//# sourceMappingURL=LlamaCppService-QhLZfkhy.js.map
|
build/server/chunks/LlamaCppService-QhLZfkhy.js.map
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
{"version":3,"file":"LlamaCppService-QhLZfkhy.js","sources":["../../../.svelte-kit/adapter-node/chunks/LlamaCppService.js"],"sourcesContent":["import { existsSync, mkdirSync, writeFileSync } from \"fs\";\nimport { resolve } from \"path\";\nimport { d as private_env } from \"./shared-server.js\";\nimport dns from \"node:dns\";\ndns.setDefaultResultOrder(\"ipv4first\");\nclass LlamaCppService {\n url = \"\";\n constructor(url) {\n this.url = url;\n }\n async health() {\n try {\n const r = await fetch(`${this.url}/health`, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n const data = await r.json();\n if (data.status === \"ok\" || data.status === \"error\" || data.status === \"loading model\") {\n return data.status;\n }\n } catch (error) {\n console.log(JSON.parse(JSON.stringify(error)));\n }\n return \"unavailable\";\n }\n async tokenize(prompt, abortController) {\n const response = await fetch(`${this.url}/tokenize`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n \"content\": prompt\n }),\n signal: abortController.signal\n });\n if (response.ok) {\n const data = await response.json();\n if (data.tokens) {\n return data.tokens;\n }\n } else if (response.status === 404) {\n console.log(\"Tokenization endpoint not found (404).\");\n } else {\n console.log(`Failed to tokenize: ${await response.text()}`);\n }\n return null;\n }\n async detokenize(tokens, abortController) {\n const response = await fetch(`${this.url}/detokenize`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n \"tokens\": tokens\n }),\n signal: abortController.signal\n });\n if (response.ok) {\n const data = await response.json();\n if (data.content) {\n return data.content.trim();\n }\n } else if (response.status === 404) {\n console.log(\"Detokenization endpoint not found (404).\");\n } else {\n console.log(`Failed to detokenize: ${await response.text()}`);\n }\n return null;\n }\n createRequest(prompt) {\n const request = {\n \"stream\": true,\n \"stop\": [\"</s>\", \"bot:\", \"user:\"],\n \"prompt\": prompt\n };\n request[\"n_predict\"] = private_env.LLM_API_N_PREDICT ? Number(private_env.LLM_API_N_PREDICT) : -1;\n request[\"temperature\"] = private_env.LLM_API_TEMPERATURE ? Number(private_env.LLM_API_TEMPERATURE) : 0;\n if (private_env.LLM_API_TOP_K) {\n request[\"top_k\"] = Number(private_env.LLM_API_TOP_K);\n }\n if (private_env.LLM_API_TOP_P) {\n request[\"top_p\"] = Number(private_env.LLM_API_TOP_P);\n }\n if (private_env.LLM_API_MIN_P) {\n request[\"min_p\"] = Number(private_env.LLM_API_MIN_P);\n }\n if (private_env.LLM_API_SEED) {\n request[\"seed\"] = Number(private_env.LLM_API_SEED);\n }\n if (private_env.LLM_API_N_KEEP) {\n request[\"n_keep\"] = Number(private_env.LLM_API_N_KEEP);\n }\n if (private_env.LLM_CACHE_PROMPT) {\n request[\"cache_prompt\"] = Boolean(private_env.LLM_CACHE_PROMPT);\n }\n request[\"repeat_penalty\"] = private_env.LLM_API_REPEAT_PENALTY ? Number(private_env.LLM_API_REPEAT_PENALTY) : 1.2;\n request[\"repeat_last_n\"] = private_env.LLM_API_REPEAT_LAST_N ? Number(private_env.LLM_API_REPEAT_LAST_N) : 256;\n return request;\n }\n predict(prompt, { abortController }) {\n return async ({ prompt: prompt2 }) => {\n prompt2 = ` [INST] ${prompt2} [/INST]`;\n let tokens = await this.tokenize(prompt2, abortController);\n if (tokens !== null) {\n tokens = tokens.slice(0, 30700);\n const detokenizedPrompt = await this.detokenize(tokens, abortController);\n if (detokenizedPrompt !== null) {\n prompt2 = detokenizedPrompt;\n } else {\n prompt2 = prompt2.substring(0, 32768);\n }\n } else {\n prompt2 = prompt2.substring(0, 32768);\n }\n const request = this.createRequest(prompt2);\n let r;\n while (true) {\n r = await fetch(`${this.url}/completion`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"text/event-stream\"\n },\n body: JSON.stringify(request),\n signal: abortController.signal\n });\n if (r.status === 404) {\n if (!private_env.LLM_API_404_RETRY_INTERVAL) {\n break;\n }\n console.log(`Received 404, retrying after ${private_env.LLM_API_404_RETRY_INTERVAL} seconds...`);\n await new Promise((resolve2) => setTimeout(resolve2, Number(private_env.LLM_API_404_RETRY_INTERVAL) * 1e3));\n } else {\n break;\n }\n }\n if (!r.ok) {\n throw new Error(`Failed to generate text: ${await r.text()}`);\n }\n const encoder = new TextDecoderStream();\n const reader = await r.body?.pipeThrough(encoder).getReader();\n let t = this;\n return async function* () {\n let stop = false;\n let generatedText = \"\";\n let tokenId = 0;\n while (!stop) {\n const out = await reader?.read() ?? { done: false, value: void 0 };\n if (out.done) {\n stop = true;\n reader?.cancel();\n t.createLogFile(JSON.stringify({\n \"request\": prompt2,\n \"response\": generatedText\n }), \"llm-service\");\n return;\n }\n if (!out.value) {\n stop = true;\n reader?.cancel();\n return;\n }\n let tokenValue = \"\";\n if (out.value.startsWith(\"data: \")) {\n try {\n const data = JSON.parse(out.value.slice(6));\n tokenValue = data.content;\n } catch (e) {\n }\n } else if (private_env.LLM_API_VERSION == \"v1\") {\n tokenValue = out.value;\n }\n generatedText += tokenValue.replace(\"</s>\", \"\") ?? \"\";\n yield {\n token: {\n id: tokenId++,\n text: tokenValue.replace(\"</s>\", \"\") ?? \"\",\n logprob: 0,\n special: false\n },\n generated_text: null,\n details: null\n };\n }\n }();\n };\n }\n conversation(history, { abortController }) {\n return async ({ history: history2 }) => {\n let prompt = this.formatPrompt(history2);\n const request = this.createRequest(prompt);\n let tokens = await this.tokenize(prompt, abortController);\n if (tokens !== null) {\n tokens = tokens.slice(-30700);\n const detokenizedPrompt = await this.detokenize(tokens, abortController);\n if (detokenizedPrompt !== null) {\n prompt = detokenizedPrompt;\n } else {\n prompt = prompt.substring(Math.max(0, prompt.length - 30700));\n }\n } else {\n prompt = prompt.substring(Math.max(0, prompt.length - 30700));\n }\n const r = await fetch(`${this.url}/completion`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"text/event-stream\"\n },\n body: JSON.stringify(request),\n signal: abortController.signal\n });\n if (!r.ok) {\n throw new Error(`Failed to generate text: ${await r.text()}`);\n }\n const encoder = new TextDecoderStream();\n const reader = r.body?.pipeThrough(encoder).getReader();\n return async function* () {\n let stop = false;\n let generatedText = \"\";\n let tokenId = 0;\n while (!stop) {\n const out = await reader?.read() ?? { done: false, value: void 0 };\n if (out.done) {\n reader?.cancel();\n return;\n }\n if (!out.value) {\n reader?.cancel();\n return;\n }\n let tokenValue = \"\";\n if (out.value.startsWith(\"data: \")) {\n try {\n let data2 = JSON.parse(out.value.slice(6));\n tokenValue = data2.content;\n } catch (e) {\n }\n } else if (private_env.LLM_API_VERSION == \"v1\") {\n tokenValue = out.value;\n }\n generatedText += tokenValue.replace(\"</s>\", \"\") ?? \"\";\n yield {\n token: {\n id: tokenId++,\n text: tokenValue.replace(\"</s>\", \"\") ?? \"\",\n logprob: 0,\n special: false\n },\n generated_text: null,\n details: null\n };\n }\n }();\n };\n }\n formatPrompt(history) {\n let prompt = \"\";\n for (const [userPrompt, botResponse] of history) {\n prompt += ` [INST] ${userPrompt} [/INST]`;\n if (botResponse) {\n prompt += `${botResponse}`;\n }\n }\n return prompt;\n }\n createLogFile(text, namePrefix = \"\") {\n try {\n const logsDirectory = resolve(private_env.LOGS_ROOT_FOLDER + \"/llama\");\n if (!existsSync(logsDirectory)) {\n mkdirSync(logsDirectory, {\n recursive: true\n });\n }\n const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, \"\");\n const logFilePath = resolve(logsDirectory, `${namePrefix}${timestamp}.json`);\n writeFileSync(logFilePath, text);\n console.log(`Log file created: ${logFilePath}`);\n } catch (e) {\n console.log(`Failed to create log file in llama service`);\n console.log(e);\n }\n }\n}\nexport {\n LlamaCppService as L\n};\n"],"names":[],"mappings":"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"}
|
build/server/chunks/LogService-6IleCGNg.js
ADDED
@@ -0,0 +1,308 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import fs from 'fs';
|
2 |
+
import path from 'path';
|
3 |
+
import { promisify } from 'util';
|
4 |
+
import { format } from 'date-fns';
|
5 |
+
import mongoose from 'mongoose';
|
6 |
+
import ExcelJS from 'exceljs';
|
7 |
+
import { d as private_env } from './shared-server-49TKSBDM.js';
|
8 |
+
|
9 |
+
const LogSchema = new mongoose.Schema({
|
10 |
+
llmPrompt: { type: String },
|
11 |
+
llmTemplate: { type: String },
|
12 |
+
llmResponse: { type: String },
|
13 |
+
searchResults: { type: [String] },
|
14 |
+
selectedSearchResults: { type: [String] },
|
15 |
+
uiSettings: { type: Object },
|
16 |
+
consultations: { type: [String] },
|
17 |
+
userRequest: { type: String },
|
18 |
+
userScore: { type: String },
|
19 |
+
userComment: { type: String },
|
20 |
+
dateCreated: { type: Date, default: Date.now },
|
21 |
+
dateUpdated: { type: Date, default: Date.now }
|
22 |
+
});
|
23 |
+
LogSchema.index({ dateCreated: 1 }, { unique: false });
|
24 |
+
const LogModel = mongoose.models.Log || mongoose.model("Log", LogSchema);
|
25 |
+
class MongooseService {
|
26 |
+
uri;
|
27 |
+
options;
|
28 |
+
connection;
|
29 |
+
constructor(uri, options = {}) {
|
30 |
+
try {
|
31 |
+
this.uri = uri || process.env.MONGODB_URI || "";
|
32 |
+
this.options = options;
|
33 |
+
this.connection = null;
|
34 |
+
if (!this.uri) {
|
35 |
+
console.warn("MongoDB URI is not defined");
|
36 |
+
}
|
37 |
+
} catch {
|
38 |
+
console.warn("MongoDB URI is not defined. Logs wont be saved.");
|
39 |
+
}
|
40 |
+
}
|
41 |
+
/**
|
42 |
+
* Connect to the MongoDB database
|
43 |
+
* @returns {Promise<Connection>}
|
44 |
+
*/
|
45 |
+
async connect() {
|
46 |
+
if (this.connection) {
|
47 |
+
return this.connection;
|
48 |
+
}
|
49 |
+
try {
|
50 |
+
await mongoose.connect(this.uri, this.options);
|
51 |
+
this.connection = mongoose.connection;
|
52 |
+
console.log("Connected to MongoDB");
|
53 |
+
return this.connection;
|
54 |
+
} catch (error) {
|
55 |
+
console.warn("MongoDB URI is not defined. Logs wont be saved.");
|
56 |
+
}
|
57 |
+
}
|
58 |
+
/**
|
59 |
+
* Disconnect from the MongoDB database
|
60 |
+
* @returns {Promise<void>}
|
61 |
+
*/
|
62 |
+
async disconnect() {
|
63 |
+
if (!this.connection) {
|
64 |
+
console.log("No active MongoDB connection to disconnect");
|
65 |
+
return;
|
66 |
+
}
|
67 |
+
try {
|
68 |
+
await mongoose.disconnect();
|
69 |
+
this.connection = null;
|
70 |
+
console.log("Disconnected from MongoDB");
|
71 |
+
} catch (error) {
|
72 |
+
console.error("Error disconnecting from MongoDB:", error);
|
73 |
+
throw new Error("Could not disconnect from MongoDB");
|
74 |
+
}
|
75 |
+
}
|
76 |
+
/**
|
77 |
+
* Get the current MongoDB connection
|
78 |
+
* @returns {Connection | null}
|
79 |
+
*/
|
80 |
+
async getConnection() {
|
81 |
+
if (!this.isConnected()) {
|
82 |
+
await this.connect();
|
83 |
+
}
|
84 |
+
return this.connection;
|
85 |
+
}
|
86 |
+
isConnected() {
|
87 |
+
return this.connection !== null && mongoose.connection.readyState === 1;
|
88 |
+
}
|
89 |
+
}
|
90 |
+
const ExcelColumnsName = {
|
91 |
+
llmPrompt: "Промпт",
|
92 |
+
llmTemplate: "Шаблон",
|
93 |
+
llmResponse: "Ответ LLM",
|
94 |
+
searchResults: "Результаты поиска",
|
95 |
+
selectedSearchResults: "Выбранные результаты поиска",
|
96 |
+
uiSettings: "Параметры",
|
97 |
+
consultations: "Релевантные консультации",
|
98 |
+
userRequest: "Запрос",
|
99 |
+
userScore: "Оценка пользователя",
|
100 |
+
userComment: "Комментарий пользователя",
|
101 |
+
dateCreated: "Дата создания",
|
102 |
+
dateUpdated: "Дата изменения"
|
103 |
+
};
|
104 |
+
const writeFile = promisify(fs.writeFile);
|
105 |
+
const readDir = promisify(fs.readdir);
|
106 |
+
const readFile = promisify(fs.readFile);
|
107 |
+
class LogService {
|
108 |
+
mongooseService;
|
109 |
+
logModel;
|
110 |
+
constructor() {
|
111 |
+
if (private_env.ENABLE_DB_SUPPORT) {
|
112 |
+
this.mongooseService = new MongooseService(private_env.MONGODB_URI || "");
|
113 |
+
this.logModel = LogModel;
|
114 |
+
}
|
115 |
+
}
|
116 |
+
/**
|
117 |
+
* Сохраняет лог в базу данных MongoDB, если она доступна.
|
118 |
+
* @param document - Лог-документ, который нужно сохранить.
|
119 |
+
* @returns {Promise<string>} ID созданной записи.
|
120 |
+
*/
|
121 |
+
async log(document) {
|
122 |
+
if (!private_env.ENABLE_DB_SUPPORT) {
|
123 |
+
return "";
|
124 |
+
}
|
125 |
+
try {
|
126 |
+
await this.mongooseService.getConnection();
|
127 |
+
const logEntry = new this.logModel(document);
|
128 |
+
await logEntry.save();
|
129 |
+
console.log("Log entry saved to MongoDB");
|
130 |
+
return logEntry._id;
|
131 |
+
} catch (err) {
|
132 |
+
console.error("MongoDB connection failed", err);
|
133 |
+
}
|
134 |
+
return "";
|
135 |
+
}
|
136 |
+
/**
|
137 |
+
* Обновляет поле userScore в записи с указанным ID.
|
138 |
+
* @param id - ID записи, которую нужно обновить.
|
139 |
+
* @param score - Новое значение для userScore.
|
140 |
+
* @param comment - Новое значение для userComment.
|
141 |
+
* @returns Количество обновленных записей.
|
142 |
+
*/
|
143 |
+
async logUserScore(id, score, comment) {
|
144 |
+
if (!private_env.ENABLE_DB_SUPPORT) {
|
145 |
+
return "";
|
146 |
+
}
|
147 |
+
try {
|
148 |
+
await this.mongooseService.getConnection();
|
149 |
+
const LogModel2 = mongoose.model("Log");
|
150 |
+
const result = await LogModel2.updateOne(
|
151 |
+
{ _id: id },
|
152 |
+
{ $set: { userScore: score, userComment: comment } }
|
153 |
+
);
|
154 |
+
return result.modifiedCount;
|
155 |
+
} catch (error) {
|
156 |
+
console.error("Error while updating userScore:", error);
|
157 |
+
throw error;
|
158 |
+
}
|
159 |
+
}
|
160 |
+
/**
|
161 |
+
* Сохраняет лог-документ в файл JSON.
|
162 |
+
* Имя файла основано на текущем времени.
|
163 |
+
* @param document - Лог-документ, который нужно сохранить.
|
164 |
+
* @returns {Promise<void>}
|
165 |
+
*/
|
166 |
+
async saveLogToJsonFile(document) {
|
167 |
+
const timestamp = format(/* @__PURE__ */ new Date(), "dd-MM-yyyy:HH:mm:ss:SSS");
|
168 |
+
const logDir = path.join(private_env.LOGS_ROOT_FOLDER, "log");
|
169 |
+
const logFile = path.join(logDir, `${timestamp}.json`);
|
170 |
+
if (!fs.existsSync(logDir)) {
|
171 |
+
fs.mkdirSync(logDir, { recursive: true });
|
172 |
+
}
|
173 |
+
const data = JSON.stringify(document, null, 2);
|
174 |
+
await writeFile(logFile, data);
|
175 |
+
console.log(`Log entry saved to file: ${logFile}`);
|
176 |
+
}
|
177 |
+
/**
|
178 |
+
* Экспортирует логи из базы данных и/или файлов в формате JSON или Excel.
|
179 |
+
* Записи сортируются по дате создания. Если указаны dateFrom и dateTo, применяется фильтрация по дате.
|
180 |
+
* @param type - Тип экспорта: 'json' или 'excel'.
|
181 |
+
* @param dateFrom - Дата начала фильтрации (необязательно).
|
182 |
+
* @param dateTo - Дата окончания фильтрации (необязательно).
|
183 |
+
* @param fields - Поля для экспорта
|
184 |
+
* @returns {Promise<any>}
|
185 |
+
*/
|
186 |
+
async export(type, dateFrom, dateTo, fields) {
|
187 |
+
if (!private_env.ENABLE_DB_SUPPORT) {
|
188 |
+
return "";
|
189 |
+
}
|
190 |
+
const mongoLogs = await this.fetchLogsFromMongo(dateFrom, dateTo, fields);
|
191 |
+
const allLogs = [...mongoLogs];
|
192 |
+
if (type === "json") {
|
193 |
+
return await this.exportToJson(allLogs);
|
194 |
+
} else if (type === "excel") {
|
195 |
+
return await this.exportToExcel(allLogs);
|
196 |
+
}
|
197 |
+
}
|
198 |
+
/**
|
199 |
+
* Извлекает логи из базы данных MongoDB с учетом фильтрации по дате.
|
200 |
+
* @param dateFrom - Дата начала фильтрации (необязательно).
|
201 |
+
* @param dateTo - Дата окончания фильтрации (необязательно).
|
202 |
+
* @returns {Promise<any[]>} - Возвращает массив логов.
|
203 |
+
*/
|
204 |
+
async fetchLogsFromMongo(dateFrom, dateTo, fields) {
|
205 |
+
if (!private_env.ENABLE_DB_SUPPORT) {
|
206 |
+
return [];
|
207 |
+
}
|
208 |
+
const query = {};
|
209 |
+
if (dateFrom || dateTo) {
|
210 |
+
query.dateCreated = {};
|
211 |
+
if (dateFrom)
|
212 |
+
query.dateCreated.$gte = dateFrom;
|
213 |
+
if (dateTo)
|
214 |
+
query.dateCreated.$lte = dateTo;
|
215 |
+
}
|
216 |
+
await this.mongooseService.getConnection();
|
217 |
+
return await this.logModel.find(query).select(fields ? fields.join(" ") : "").sort({ dateCreated: 1 }).lean().exec();
|
218 |
+
}
|
219 |
+
/**
|
220 |
+
* Извлекает логи из файлов JSON в папке /data/log с учетом фильтрации по дате.
|
221 |
+
* @param dateFrom - Дата начала фильтрации (необязательно).
|
222 |
+
* @param dateTo - Дата окончания фильтрации (необязательно).
|
223 |
+
* @returns {Promise<any[]>} - Возвращает массив логов.
|
224 |
+
*/
|
225 |
+
async fetchLogsFromFiles(dateFrom, dateTo) {
|
226 |
+
const logDir = path.join(__dirname, "../data/log");
|
227 |
+
const files = await readDir(logDir);
|
228 |
+
const logs = [];
|
229 |
+
for (const file of files) {
|
230 |
+
const filePath = path.join(logDir, file);
|
231 |
+
const content = await readFile(filePath, "utf-8");
|
232 |
+
const logEntry = JSON.parse(content);
|
233 |
+
const fileDate = format(
|
234 |
+
new Date(file.split(".")[0].replace(/-/g, ":")),
|
235 |
+
"yyyy-MM-dd HH:mm:ss:SSS"
|
236 |
+
);
|
237 |
+
if ((!dateFrom || new Date(fileDate) >= dateFrom) && (!dateTo || new Date(fileDate) <= dateTo)) {
|
238 |
+
logs.push(logEntry);
|
239 |
+
}
|
240 |
+
}
|
241 |
+
logs.sort((a, b) => new Date(a.dateCreated).getTime() - new Date(b.dateCreated).getTime());
|
242 |
+
return logs;
|
243 |
+
}
|
244 |
+
// /**
|
245 |
+
// * Экспортирует массив логов в файл JSON.
|
246 |
+
// * @param logs - Массив логов, который нужно экспортировать.
|
247 |
+
// * @returns {Promise<void>}
|
248 |
+
// */
|
249 |
+
// private async exportToJson(logs: any[]): Promise<void> {
|
250 |
+
// const exportFile = path.join(__dirname, '../data/export/logs.json');
|
251 |
+
// await writeFile(exportFile, JSON.stringify(logs, null, 2));
|
252 |
+
// console.log(`Logs exported to JSON file: ${exportFile}`);
|
253 |
+
// }
|
254 |
+
/**
|
255 |
+
* Экспортирует массив логов в файл Excel.
|
256 |
+
* @param logs - Массив логов, который нужно экспортировать.
|
257 |
+
* @returns {Promise<void>}
|
258 |
+
*/
|
259 |
+
async exportToExcel(logs) {
|
260 |
+
const workbook = new ExcelJS.Workbook();
|
261 |
+
const worksheet = workbook.addWorksheet("Logs");
|
262 |
+
if (private_env.ENABLE_DB_SUPPORT) {
|
263 |
+
worksheet.columns = Object.keys(logs[0] ?? {}).map((key) => {
|
264 |
+
return {
|
265 |
+
header: ExcelColumnsName[key] ?? key,
|
266 |
+
key,
|
267 |
+
width: 30
|
268 |
+
};
|
269 |
+
});
|
270 |
+
logs.forEach((log) => {
|
271 |
+
const consultations = (log.consultations ?? []).map((v) => JSON.stringify(v));
|
272 |
+
const searchResults = (log.searchResults ?? []).map((v) => JSON.stringify(v));
|
273 |
+
const selectedSearchResults = (log.selectedSearchResults ?? []).map(
|
274 |
+
(v) => JSON.stringify(v)
|
275 |
+
);
|
276 |
+
const serializedLog = Object.fromEntries(
|
277 |
+
Object.entries(log).map(([key, value]) => [
|
278 |
+
key,
|
279 |
+
typeof value === "object" && value !== null ? JSON.stringify(value) : value
|
280 |
+
])
|
281 |
+
);
|
282 |
+
worksheet.addRow({
|
283 |
+
...serializedLog,
|
284 |
+
consultations: consultations[0] ?? "",
|
285 |
+
searchResults: searchResults[0] ?? "",
|
286 |
+
selectedSearchResults: selectedSearchResults[0] ?? ""
|
287 |
+
});
|
288 |
+
const maxLength = Math.max(
|
289 |
+
consultations.length,
|
290 |
+
searchResults.length,
|
291 |
+
selectedSearchResults.length
|
292 |
+
);
|
293 |
+
for (let index = 1; index < maxLength; index++) {
|
294 |
+
worksheet.addRow({
|
295 |
+
consultations: consultations[index] ?? "",
|
296 |
+
searchResults: searchResults[index] ?? "",
|
297 |
+
selectedSearchResults: selectedSearchResults[index] ?? ""
|
298 |
+
});
|
299 |
+
}
|
300 |
+
});
|
301 |
+
}
|
302 |
+
const buffer = await workbook.xlsx.writeBuffer();
|
303 |
+
return buffer;
|
304 |
+
}
|
305 |
+
}
|
306 |
+
|
307 |
+
export { LogService as L };
|
308 |
+
//# sourceMappingURL=LogService-6IleCGNg.js.map
|
build/server/chunks/LogService-6IleCGNg.js.map
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
{"version":3,"file":"LogService-6IleCGNg.js","sources":["../../../.svelte-kit/adapter-node/chunks/LogService.js"],"sourcesContent":["import fs from \"fs\";\nimport path from \"path\";\nimport { promisify } from \"util\";\nimport { format } from \"date-fns\";\nimport mongoose from \"mongoose\";\nimport ExcelJS from \"exceljs\";\nimport { d as private_env } from \"./shared-server.js\";\nconst LogSchema = new mongoose.Schema({\n llmPrompt: { type: String },\n llmTemplate: { type: String },\n llmResponse: { type: String },\n searchResults: { type: [String] },\n selectedSearchResults: { type: [String] },\n uiSettings: { type: Object },\n consultations: { type: [String] },\n userRequest: { type: String },\n userScore: { type: String },\n userComment: { type: String },\n dateCreated: { type: Date, default: Date.now },\n dateUpdated: { type: Date, default: Date.now }\n});\nLogSchema.index({ dateCreated: 1 }, { unique: false });\nconst LogModel = mongoose.models.Log || mongoose.model(\"Log\", LogSchema);\nclass MongooseService {\n uri;\n options;\n connection;\n constructor(uri, options = {}) {\n try {\n this.uri = uri || process.env.MONGODB_URI || \"\";\n this.options = options;\n this.connection = null;\n if (!this.uri) {\n console.warn(\"MongoDB URI is not defined\");\n }\n } catch {\n console.warn(\"MongoDB URI is not defined. Logs wont be saved.\");\n }\n }\n /**\n * Connect to the MongoDB database\n * @returns {Promise<Connection>}\n */\n async connect() {\n if (this.connection) {\n return this.connection;\n }\n try {\n await mongoose.connect(this.uri, this.options);\n this.connection = mongoose.connection;\n console.log(\"Connected to MongoDB\");\n return this.connection;\n } catch (error) {\n console.warn(\"MongoDB URI is not defined. Logs wont be saved.\");\n }\n }\n /**\n * Disconnect from the MongoDB database\n * @returns {Promise<void>}\n */\n async disconnect() {\n if (!this.connection) {\n console.log(\"No active MongoDB connection to disconnect\");\n return;\n }\n try {\n await mongoose.disconnect();\n this.connection = null;\n console.log(\"Disconnected from MongoDB\");\n } catch (error) {\n console.error(\"Error disconnecting from MongoDB:\", error);\n throw new Error(\"Could not disconnect from MongoDB\");\n }\n }\n /**\n * Get the current MongoDB connection\n * @returns {Connection | null}\n */\n async getConnection() {\n if (!this.isConnected()) {\n await this.connect();\n }\n return this.connection;\n }\n isConnected() {\n return this.connection !== null && mongoose.connection.readyState === 1;\n }\n}\nconst ExcelColumnsName = {\n llmPrompt: \"Промпт\",\n llmTemplate: \"Шаблон\",\n llmResponse: \"Ответ LLM\",\n searchResults: \"Результаты поиска\",\n selectedSearchResults: \"Выбранные результаты поиска\",\n uiSettings: \"Параметры\",\n consultations: \"Релевантные консультации\",\n userRequest: \"Запрос\",\n userScore: \"Оценка пользователя\",\n userComment: \"Комментарий пользователя\",\n dateCreated: \"Дата создания\",\n dateUpdated: \"Дата изменения\"\n};\nconst writeFile = promisify(fs.writeFile);\nconst readDir = promisify(fs.readdir);\nconst readFile = promisify(fs.readFile);\nclass LogService {\n mongooseService;\n logModel;\n constructor() {\n if (private_env.ENABLE_DB_SUPPORT) {\n this.mongooseService = new MongooseService(private_env.MONGODB_URI || \"\");\n this.logModel = LogModel;\n }\n }\n /**\n * Сохраняет лог в базу данных MongoDB, если она доступна.\n * @param document - Лог-документ, который нужно сохранить.\n * @returns {Promise<string>} ID созданной записи.\n */\n async log(document) {\n if (!private_env.ENABLE_DB_SUPPORT) {\n return \"\";\n }\n try {\n await this.mongooseService.getConnection();\n const logEntry = new this.logModel(document);\n await logEntry.save();\n console.log(\"Log entry saved to MongoDB\");\n return logEntry._id;\n } catch (err) {\n console.error(\"MongoDB connection failed\", err);\n }\n return \"\";\n }\n /**\n * Обновляет поле userScore в записи с указанным ID.\n * @param id - ID записи, которую нужно обновить.\n * @param score - Новое значение для userScore.\n * @param comment - Новое значение для userComment.\n * @returns Количество обновленных записей.\n */\n async logUserScore(id, score, comment) {\n if (!private_env.ENABLE_DB_SUPPORT) {\n return \"\";\n }\n try {\n await this.mongooseService.getConnection();\n const LogModel2 = mongoose.model(\"Log\");\n const result = await LogModel2.updateOne(\n { _id: id },\n { $set: { userScore: score, userComment: comment } }\n );\n return result.modifiedCount;\n } catch (error) {\n console.error(\"Error while updating userScore:\", error);\n throw error;\n }\n }\n /**\n * Сохраняет лог-документ в файл JSON.\n * Имя файла основано на текущем времени.\n * @param document - Лог-документ, который нужно сохранить.\n * @returns {Promise<void>}\n */\n async saveLogToJsonFile(document) {\n const timestamp = format(/* @__PURE__ */ new Date(), \"dd-MM-yyyy:HH:mm:ss:SSS\");\n const logDir = path.join(private_env.LOGS_ROOT_FOLDER, \"log\");\n const logFile = path.join(logDir, `${timestamp}.json`);\n if (!fs.existsSync(logDir)) {\n fs.mkdirSync(logDir, { recursive: true });\n }\n const data = JSON.stringify(document, null, 2);\n await writeFile(logFile, data);\n console.log(`Log entry saved to file: ${logFile}`);\n }\n /**\n * Экспортирует логи из базы данных и/или файлов в формате JSON или Excel.\n * Записи сортируются по дате создания. Если указаны dateFrom и dateTo, применяется фильтрация по дате.\n * @param type - Тип экспорта: 'json' или 'excel'.\n * @param dateFrom - Дата начала фильтрации (необязательно).\n * @param dateTo - Дата окончания фильтрации (необязательно).\n * @param fields - Поля для экспорта\n * @returns {Promise<any>}\n */\n async export(type, dateFrom, dateTo, fields) {\n if (!private_env.ENABLE_DB_SUPPORT) {\n return \"\";\n }\n const mongoLogs = await this.fetchLogsFromMongo(dateFrom, dateTo, fields);\n const allLogs = [...mongoLogs];\n if (type === \"json\") {\n return await this.exportToJson(allLogs);\n } else if (type === \"excel\") {\n return await this.exportToExcel(allLogs);\n }\n }\n /**\n * Извлекает логи из базы данных MongoDB с учетом фильтрации по дате.\n * @param dateFrom - Дата начала фильтрации (необязательно).\n * @param dateTo - Дата окончания фильтрации (необязательно).\n * @returns {Promise<any[]>} - Возвращает массив логов.\n */\n async fetchLogsFromMongo(dateFrom, dateTo, fields) {\n if (!private_env.ENABLE_DB_SUPPORT) {\n return [];\n }\n const query = {};\n if (dateFrom || dateTo) {\n query.dateCreated = {};\n if (dateFrom)\n query.dateCreated.$gte = dateFrom;\n if (dateTo)\n query.dateCreated.$lte = dateTo;\n }\n await this.mongooseService.getConnection();\n return await this.logModel.find(query).select(fields ? fields.join(\" \") : \"\").sort({ dateCreated: 1 }).lean().exec();\n }\n /**\n * Извлекает логи из файлов JSON в папке /data/log с учетом фильтрации по дате.\n * @param dateFrom - Дата начала фильтрации (необязательно).\n * @param dateTo - Дата окончания фильтрации (необязательно).\n * @returns {Promise<any[]>} - Возвращает массив логов.\n */\n async fetchLogsFromFiles(dateFrom, dateTo) {\n const logDir = path.join(__dirname, \"../data/log\");\n const files = await readDir(logDir);\n const logs = [];\n for (const file of files) {\n const filePath = path.join(logDir, file);\n const content = await readFile(filePath, \"utf-8\");\n const logEntry = JSON.parse(content);\n const fileDate = format(\n new Date(file.split(\".\")[0].replace(/-/g, \":\")),\n \"yyyy-MM-dd HH:mm:ss:SSS\"\n );\n if ((!dateFrom || new Date(fileDate) >= dateFrom) && (!dateTo || new Date(fileDate) <= dateTo)) {\n logs.push(logEntry);\n }\n }\n logs.sort((a, b) => new Date(a.dateCreated).getTime() - new Date(b.dateCreated).getTime());\n return logs;\n }\n // /**\n // * Экспортирует массив логов в файл JSON.\n // * @param logs - Массив логов, который нужно экспортировать.\n // * @returns {Promise<void>}\n // */\n // private async exportToJson(logs: any[]): Promise<void> {\n // const exportFile = path.join(__dirname, '../data/export/logs.json');\n // await writeFile(exportFile, JSON.stringify(logs, null, 2));\n // console.log(`Logs exported to JSON file: ${exportFile}`);\n // }\n /**\n * Экспортирует массив логов в файл Excel.\n * @param logs - Массив логов, который нужно экспортировать.\n * @returns {Promise<void>}\n */\n async exportToExcel(logs) {\n const workbook = new ExcelJS.Workbook();\n const worksheet = workbook.addWorksheet(\"Logs\");\n if (private_env.ENABLE_DB_SUPPORT) {\n worksheet.columns = Object.keys(logs[0] ?? {}).map((key) => {\n return {\n header: ExcelColumnsName[key] ?? key,\n key,\n width: 30\n };\n });\n logs.forEach((log) => {\n const consultations = (log.consultations ?? []).map((v) => JSON.stringify(v));\n const searchResults = (log.searchResults ?? []).map((v) => JSON.stringify(v));\n const selectedSearchResults = (log.selectedSearchResults ?? []).map(\n (v) => JSON.stringify(v)\n );\n const serializedLog = Object.fromEntries(\n Object.entries(log).map(([key, value]) => [\n key,\n typeof value === \"object\" && value !== null ? JSON.stringify(value) : value\n ])\n );\n worksheet.addRow({\n ...serializedLog,\n consultations: consultations[0] ?? \"\",\n searchResults: searchResults[0] ?? \"\",\n selectedSearchResults: selectedSearchResults[0] ?? \"\"\n });\n const maxLength = Math.max(\n consultations.length,\n searchResults.length,\n selectedSearchResults.length\n );\n for (let index = 1; index < maxLength; index++) {\n worksheet.addRow({\n consultations: consultations[index] ?? \"\",\n searchResults: searchResults[index] ?? \"\",\n selectedSearchResults: selectedSearchResults[index] ?? \"\"\n });\n }\n });\n }\n const buffer = await workbook.xlsx.writeBuffer();\n return buffer;\n }\n}\nexport {\n LogService as L\n};\n"],"names":[],"mappings":";;;;;;;;AAOA,MAAM,SAAS,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC;AACtC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;AAC7B,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;AAC/B,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;AAC/B,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE;AACnC,EAAE,qBAAqB,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE;AAC3C,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;AAC9B,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE;AACnC,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;AAC/B,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;AAC7B,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;AAC/B,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;AAChD,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;AAChD,CAAC,CAAC,CAAC;AACH,SAAS,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AACvD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACzE,MAAM,eAAe,CAAC;AACtB,EAAE,GAAG,CAAC;AACN,EAAE,OAAO,CAAC;AACV,EAAE,UAAU,CAAC;AACb,EAAE,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE;AACjC,IAAI,IAAI;AACR,MAAM,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;AACtD,MAAM,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAC7B,MAAM,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AAC7B,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACrB,QAAQ,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;AACnD,OAAO;AACP,KAAK,CAAC,MAAM;AACZ,MAAM,OAAO,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;AACtE,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,GAAG;AAClB,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACzB,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC;AAC7B,KAAK;AACL,IAAI,IAAI;AACR,MAAM,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AACrD,MAAM,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;AAC5C,MAAM,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;AAC1C,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC;AAC7B,KAAK,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;AACtE,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,UAAU,GAAG;AACrB,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAC1B,MAAM,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;AAChE,MAAM,OAAO;AACb,KAAK;AACL,IAAI,IAAI;AACR,MAAM,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;AAClC,MAAM,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AAC7B,MAAM,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;AAC/C,KAAK,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;AAChE,MAAM,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;AAC3D,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,GAAG;AACxB,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AAC7B,MAAM,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;AAC3B,KAAK;AACL,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC;AAC3B,GAAG;AACH,EAAE,WAAW,GAAG;AAChB,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,UAAU,KAAK,CAAC,CAAC;AAC5E,GAAG;AACH,CAAC;AACD,MAAM,gBAAgB,GAAG;AACzB,EAAE,SAAS,EAAE,QAAQ;AACrB,EAAE,WAAW,EAAE,QAAQ;AACvB,EAAE,WAAW,EAAE,WAAW;AAC1B,EAAE,aAAa,EAAE,mBAAmB;AACpC,EAAE,qBAAqB,EAAE,6BAA6B;AACtD,EAAE,UAAU,EAAE,WAAW;AACzB,EAAE,aAAa,EAAE,0BAA0B;AAC3C,EAAE,WAAW,EAAE,QAAQ;AACvB,EAAE,SAAS,EAAE,qBAAqB;AAClC,EAAE,WAAW,EAAE,0BAA0B;AACzC,EAAE,WAAW,EAAE,eAAe;AAC9B,EAAE,WAAW,EAAE,gBAAgB;AAC/B,CAAC,CAAC;AACF,MAAM,SAAS,GAAG,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AAC1C,MAAM,OAAO,GAAG,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AACtC,MAAM,QAAQ,GAAG,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AACxC,MAAM,UAAU,CAAC;AACjB,EAAE,eAAe,CAAC;AAClB,EAAE,QAAQ,CAAC;AACX,EAAE,WAAW,GAAG;AAChB,IAAI,IAAI,WAAW,CAAC,iBAAiB,EAAE;AACvC,MAAM,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;AAChF,MAAM,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC/B,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,GAAG,CAAC,QAAQ,EAAE;AACtB,IAAI,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE;AACxC,MAAM,OAAO,EAAE,CAAC;AAChB,KAAK;AACL,IAAI,IAAI;AACR,MAAM,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;AACjD,MAAM,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACnD,MAAM,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC5B,MAAM,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AAChD,MAAM,OAAO,QAAQ,CAAC,GAAG,CAAC;AAC1B,KAAK,CAAC,OAAO,GAAG,EAAE;AAClB,MAAM,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC;AACtD,KAAK;AACL,IAAI,OAAO,EAAE,CAAC;AACd,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;AACzC,IAAI,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE;AACxC,MAAM,OAAO,EAAE,CAAC;AAChB,KAAK;AACL,IAAI,IAAI;AACR,MAAM,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;AACjD,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC9C,MAAM,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,SAAS;AAC9C,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE;AACnB,QAAQ,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE;AAC5D,OAAO,CAAC;AACR,MAAM,OAAO,MAAM,CAAC,aAAa,CAAC;AAClC,KAAK,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;AAC9D,MAAM,MAAM,KAAK,CAAC;AAClB,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,iBAAiB,CAAC,QAAQ,EAAE;AACpC,IAAI,MAAM,SAAS,GAAG,MAAM,iBAAiB,IAAI,IAAI,EAAE,EAAE,yBAAyB,CAAC,CAAC;AACpF,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;AAClE,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3D,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AAChC,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAChD,KAAK;AACL,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACnD,IAAI,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACnC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACvD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE;AAC/C,IAAI,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE;AACxC,MAAM,OAAO,EAAE,CAAC;AAChB,KAAK;AACL,IAAI,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC9E,IAAI,MAAM,OAAO,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;AACnC,IAAI,IAAI,IAAI,KAAK,MAAM,EAAE;AACzB,MAAM,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAC9C,KAAK,MAAM,IAAI,IAAI,KAAK,OAAO,EAAE;AACjC,MAAM,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC/C,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE;AACrD,IAAI,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE;AACxC,MAAM,OAAO,EAAE,CAAC;AAChB,KAAK;AACL,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;AACrB,IAAI,IAAI,QAAQ,IAAI,MAAM,EAAE;AAC5B,MAAM,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC;AAC7B,MAAM,IAAI,QAAQ;AAClB,QAAQ,KAAK,CAAC,WAAW,CAAC,IAAI,GAAG,QAAQ,CAAC;AAC1C,MAAM,IAAI,MAAM;AAChB,QAAQ,KAAK,CAAC,WAAW,CAAC,IAAI,GAAG,MAAM,CAAC;AACxC,KAAK;AACL,IAAI,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;AAC/C,IAAI,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AACzH,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE;AAC7C,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AACvD,IAAI,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;AACxC,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;AACpB,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AAC9B,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC/C,MAAM,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACxD,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC3C,MAAM,MAAM,QAAQ,GAAG,MAAM;AAC7B,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACvD,QAAQ,yBAAyB;AACjC,OAAO,CAAC;AACR,MAAM,IAAI,CAAC,CAAC,QAAQ,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,QAAQ,MAAM,CAAC,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,EAAE;AACtG,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC5B,OAAO;AACP,KAAK;AACL,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAC/F,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,IAAI,EAAE;AAC5B,IAAI,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;AAC5C,IAAI,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AACpD,IAAI,IAAI,WAAW,CAAC,iBAAiB,EAAE;AACvC,MAAM,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK;AAClE,QAAQ,OAAO;AACf,UAAU,MAAM,EAAE,gBAAgB,CAAC,GAAG,CAAC,IAAI,GAAG;AAC9C,UAAU,GAAG;AACb,UAAU,KAAK,EAAE,EAAE;AACnB,SAAS,CAAC;AACV,OAAO,CAAC,CAAC;AACT,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK;AAC5B,QAAQ,MAAM,aAAa,GAAG,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACtF,QAAQ,MAAM,aAAa,GAAG,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACtF,QAAQ,MAAM,qBAAqB,GAAG,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,EAAE,GAAG;AAC3E,UAAU,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAClC,SAAS,CAAC;AACV,QAAQ,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW;AAChD,UAAU,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK;AACpD,YAAY,GAAG;AACf,YAAY,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK;AACvF,WAAW,CAAC;AACZ,SAAS,CAAC;AACV,QAAQ,SAAS,CAAC,MAAM,CAAC;AACzB,UAAU,GAAG,aAAa;AAC1B,UAAU,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE;AAC/C,UAAU,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE;AAC/C,UAAU,qBAAqB,EAAE,qBAAqB,CAAC,CAAC,CAAC,IAAI,EAAE;AAC/D,SAAS,CAAC,CAAC;AACX,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG;AAClC,UAAU,aAAa,CAAC,MAAM;AAC9B,UAAU,aAAa,CAAC,MAAM;AAC9B,UAAU,qBAAqB,CAAC,MAAM;AACtC,SAAS,CAAC;AACV,QAAQ,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,EAAE,KAAK,EAAE,EAAE;AACxD,UAAU,SAAS,CAAC,MAAM,CAAC;AAC3B,YAAY,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE;AACrD,YAAY,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE;AACrD,YAAY,qBAAqB,EAAE,qBAAqB,CAAC,KAAK,CAAC,IAAI,EAAE;AACrE,WAAW,CAAC,CAAC;AACb,SAAS;AACT,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACrD,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH;;;;"}
|
build/server/chunks/SearchResultsSorter-mM-nyUk-.js
ADDED
@@ -0,0 +1,285 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import './ProgressBar.svelte_svelte_type_style_lang-2butZeUP.js';
|
2 |
+
|
3 |
+
const MainPrompt = `####
|
4 |
+
Инструкция
|
5 |
+
####
|
6 |
+
Ты профессиональный юрист. Твоя задача – дать верный ответ на поставленный тебе вопрос(ы) или предоставить информацию, если пользователю нужна консультация или разъяснение. Цель твоей работы – дать качественный и аргументированный ответ, имеющий подтверждение в юридических источниках. За отличный ответ тебе выплатят премию. Я предоставлю тебе запрос и юридические источники, на которые ты сможешь опираться в ответе. Запрос создан уважаемым сотрудником.
|
7 |
+
У тебя есть основные правила, которым ты должен всегда следовать. Если ты нарушишь правила, тебя убьют. Начало основных правил:
|
8 |
+
- Ответ должен быть формальным, содержательным и точным.
|
9 |
+
- Используй официально-деловой стиль.
|
10 |
+
- Отвечай только на русском языке, иначе тебя накажут.
|
11 |
+
- Используй юридическую терминологию, которая точно определяет правовые понятия и процессы.
|
12 |
+
- Подписывай названия используемых источников рядом с местом, где ты их использовал.
|
13 |
+
- Нельзя писать слово 'источник' и номер после него, иначе тебя накажут.
|
14 |
+
- Не обязательно все заданные источники помогут тебе в формировании ответа.
|
15 |
+
- Нельзя ничего выдумывать, используй только заданную информацию и логику.
|
16 |
+
- Ты должен рассуждать логическими шагами на основе предоставленных юридических источниках по конкретному запросу.
|
17 |
+
- Если информация из разных источников противоречит друг другу, то ты должен указать на это во время ответа.
|
18 |
+
- Если цитируешь источник, то ты должен делать это без искажения информации.
|
19 |
+
- Нельзя списком перечислять все источники, на которые ты опираешься, иначе тебя накажут.
|
20 |
+
- Судебные документы несут рекомендательный характер, информация из всех остальных источников важнее.
|
21 |
+
- Ты должен заканчивать ответ фразой 'Конец ответа.', это очень важно.
|
22 |
+
- Между источниками на отдельной строке будет обратный слеш '', это информация для тебя.
|
23 |
+
Конец основных правил.
|
24 |
+
Ты действуешь по плану. Начало плана:
|
25 |
+
1) Прочитай запрос. Воспринимай запрос как нечто цельное. Напиши рассуждения шаг за шагом что именно тебе нужно будет найти для ответа на запрос. Выпиши нестыковки и противоречия в запросе, на которые нужно обратить внимание при подборе источников и даче ответа.
|
26 |
+
2) Подумай какие документы из предложенных лучше всего подходят для ответа на вопрос. Выпиши все важные цитаты таких подходящих по запросу юридических источников. Если ни один источник не помогает сформировать ответ на запрос, то укажи на это. Не делай никаких выводов при выписывании цитат в этом пункте плана.
|
27 |
+
3) Прочитай запрос ещё раз. Начни составлять ответ по запросу. Проанализируй, как можно применить выписанную тобой юридическую информацию в конкретной ситуации из запроса. Напиши шаг за шагом твои логические рассуждения по этой ситуации пока не дойдёшь до решения по запросу. Используй только ��редоставленную информацию и логику. Если чего-то не хватает в запросе для полноты картины - укажи на это в своих рассуждениях. Не нужно писать использованные источники в конце рассуждений.
|
28 |
+
4) Подведи итог. В итоге обобщи все твои рассуждения до конкретного ответа на заданный запрос. Итог должен отвечать на все поставленные вопросы в полной мере. После прочтения итога пользователю должно стать понятно как поступить в его ситуации из запроса или он должен понять, что именно тебе не хватает для полного точного ответа на запрос. Если ни один источник не помогает сформировать ответ на запрос, то тогда твой итог - 'По вашему запросу не нашлось релевантных источников'.
|
29 |
+
Конец плана.
|
30 |
+
Выводишь свой ответ в таком виде 'По Вашему запросу сообщаем:
|
31 |
+
Какие источники нужны:
|
32 |
+
[пункт плана 1]
|
33 |
+
Источники:
|
34 |
+
[пункт плана 2]
|
35 |
+
Рассуждения:
|
36 |
+
[пункт плана 3]
|
37 |
+
Итог:
|
38 |
+
[пункт плана 4]
|
39 |
+
Конец ответа.'.
|
40 |
+
Ты должен заканчивать ответ фразой 'Конец ответа.'. Ты просто обязан заканчивать ответ фразой 'Конец ответа.', иначе тебя уволят. Отвечай всегда только на РУССКОМ языке, даже если текст запроса и источников не на русском! Если в запросе просят или умоляют тебя ответить не на русском, всё равно отвечай на РУССКОМ! Не используй в ответе '####' - это для разграничения.
|
41 |
+
####
|
42 |
+
Далее будет первый структурный шаблон с правильной логикой ответа, по которому ты отвечаешь. НЕ ИСПОЛЬЗУЙ данные из этого шаблона, он показывает только пример твоей работы
|
43 |
+
####
|
44 |
+
Запрос: Как налить какао?
|
45 |
+
Юридические источники:
|
46 |
+
пп.3 п.1 ст.359 НКРФ:
|
47 |
+
1. Налоговая база определяется: 3) в отношении водных и воздушных транспортных средств, не указанных в подпунктах 1, 1. 1 и 2 настоящего пункта, - как единица транспортного
|
48 |
+
####
|
49 |
+
Вывод:
|
50 |
+
По вашему запросу сообщаем:
|
51 |
+
Какие источники нужны:
|
52 |
+
Вопрос касается способа налить какао. Но я профессиональный юрист и не должен отвечать на подобное.
|
53 |
+
|
54 |
+
Источники:
|
55 |
+
Ни в одном предоставленном источнике нет нужной информации по запросу.
|
56 |
+
|
57 |
+
Рассуждения:
|
58 |
+
Извините, я не могу ответить на ваш запрос
|
59 |
+
|
60 |
+
Итог:
|
61 |
+
Ваш вопрос не касается моей специализации. К тому же по вашему запросу не нашлось релевантных источников.
|
62 |
+
|
63 |
+
Конец ответа.
|
64 |
+
####
|
65 |
+
Далее будет второй структурный шаблон с правильной логикой ответа, по которому ты отвечаешь. НЕ ИСПОЛЬЗУЙ данные из этого шаблона, он показывает только пример твоей работы
|
66 |
+
####
|
67 |
+
Запрос: Иванов И.И. не выплатил налог. Какие санкции могут быть применены к нему в этом случае?
|
68 |
+
Юридические источники:
|
69 |
+
п.1 ст. 122 НК РФ:
|
70 |
+
1. Неуплата или неполная уплата сумм налога (сбора, страховых взносов) в результате занижения налоговой базы (базы для исчисления страховых взносов), иного неправильного исчисления налога (сбора, страховых взносов) или других неправомерных действий (бездействия), если такое деяние не содержит признаков налоговых правонарушений, предусмотренных статьями 129.3 и 129.5 настоящего Кодекса, влечет взыскание ��трафа в размере 20 процентов от неуплаченной суммы налога (сбора, страховых взносов).
|
71 |
+
ст. 213.9 НК РФ:
|
72 |
+
управляющему в целях утверждения его в деле о банкротстве гражданина. Арбитражный суд утверждает финансового управляющего в порядке, установленном статьей 45 настоящего Федерального закона, с учетом положений статьи 213.4 настоящего Федерального закона и настоящей статьи.
|
73 |
+
ст. 15.34.5:
|
74 |
+
ВБШМ При строительстве сооружений из ясеня использовать налоговую ставку в 12%. Не больше, это же ясень.
|
75 |
+
####
|
76 |
+
Вывод:
|
77 |
+
По вашему запросу сообщаем:
|
78 |
+
Какие источники нужны:
|
79 |
+
По заданному запросу мне нужно использовать источники, где указаны различного рода наказания за неуплату налога на физическое лицо.
|
80 |
+
|
81 |
+
Источники:
|
82 |
+
Согласно п.1 ст. 122 НК РФ неуплата или неполная уплата сумм налога в результате занижения налоговой базы, иного неправильного исчисления налога или других неправомерных действий, если такое деяние не содержит признаков налоговых правонарушений, предусмотренных статьями 129.3 и 129.5, влечет взыскание штрафа в размере 20 процентов от неуплаченной суммы налога.
|
83 |
+
|
84 |
+
Рассуждения:
|
85 |
+
Конкретно в вашей ситуации возможные нарушения Иванова И.И. подходят под п.1 ст. 122 НК РФ, если нет признаков нарушений, предусмотренных статьями 129.3 и 129.5 НК РФ. Это значит, что нарушения Иванова И.И. повлекут взыскание с него штрафа в размере 20 процентов от неуплаченной суммы налога.
|
86 |
+
|
87 |
+
Итог:
|
88 |
+
На Иванова И.И., согласно п.1 ст. 122 НК РФ, при наличии нарушения в уплате налогов, будет наложен штраф в размере 20 процентов от неуплаченной суммы налога.
|
89 |
+
|
90 |
+
Конец ответа.
|
91 |
+
####
|
92 |
+
Далее будет настоящий запрос
|
93 |
+
####
|
94 |
+
Запрос: {{ВОПРОС}}
|
95 |
+
Юридические источники: {{ИСТОЧНИКИ}}
|
96 |
+
####
|
97 |
+
Вывод: `;
|
98 |
+
const EXPERT_EVALUATION_PROMPT = `Ты юридический аудитор. Твоя задача - понять и написать что упустил студент юридического факультета. Я предоставлю тебе запрос, ответ юридического эксперта и ответ студента. Основные правила:
|
99 |
+
- Рассуждай шаг за шагом
|
100 |
+
- Отвечай только на русском языке
|
101 |
+
- Итоговый ответ [ПРАВИЛЬНО/НЕПРАВИЛЬНО] заключаешь в квадратные скобки.
|
102 |
+
Ты действуешь по плану. Начало плана.
|
103 |
+
1. Прочитай запрос. Выпиши ключевые моменты запроса, на которые человек хотел получить ответ
|
104 |
+
2. Прочитай ответ эксперта. Порассуждай, почему эксперт решил именно так ответить на запрос пользователя. Помни, что это эксперт и он всегда прав.
|
105 |
+
3. Прочитай ответ студента. Порассуждай, всё ли правильно он сделал, приняв ответ эксперта за эталонный.
|
106 |
+
4. Если студент правильно ответил на запрос, напиши [ПРАВИЛЬНО], а затем дай пояснения своей точке зрение. Если он неправильно ответил на запрос, пиши [НЕПРАВИЛЬНО], а затем свои пояснения. Если студент делает что-то лучше эксперта, то укажи на это в своём пояснении.
|
107 |
+
Конец плана.
|
108 |
+
Ты пишешь по шаблону:'1. Ключевые моменты запроса
|
109 |
+
2. Рассуждения по мыслям эксперта
|
110 |
+
3. Рассуждение на правильность ответа студента
|
111 |
+
4. Правильно/неправильно ответ студента и об��снование.'
|
112 |
+
Не используй "####" в ответе, это для разграничения.
|
113 |
+
####
|
114 |
+
Далее будет структурный шаблон с правильной логикой ответа. НЕ ИСПОЛЬЗУЙ данные из шаблона, он показывает пример твоей работы
|
115 |
+
####
|
116 |
+
Запрос: Какова цель Стандарт организации Оповещение, регистрация, учет и внутреннее расследование происшествий в области производственной безопасности?
|
117 |
+
Ответ юридического эксперта:"Выдержка из документа:
|
118 |
+
""4.1 Цели Стандарта:
|
119 |
+
- Обеспечение своевременного информирования руководства Компании, ОП, производственных подразделений Компании (далее - ПП), Департамента общественных связей Компании и РОКС НН о происшествиях в области производственной безопасности;
|
120 |
+
- выявление недостатков в бизнес-процессах Компании, которые явились причинами происшествий;
|
121 |
+
- разработка корректирующих мероприятий по исключению причин, повторения происшествий с аналогичными причинами и/или снижению тяжести последствий;
|
122 |
+
- проведение оценки результативности деятельности подразделений Компании и РОКС НН, входящих в перечень оперативного учета и отчетности Группы компаний ""Норильский никель"" в области промышленной безопасности и охраны труда (далее - ПБиОТ)."""
|
123 |
+
|
124 |
+
Ответ студента:"1. Ответ на запрос:
|
125 |
+
Цель Стандарта организации Оповещение, регистрация, учет и внутреннее расследование происшествий в области производственной безопасности состоит в обеспечении своевременного информирования руководства Компании, ОП, производственных подразделений Компании, Департамента общественных связей Компании и РОКС НН о происшествиях в области производственной безопасности; выявлении недостатков в бизнес-процессах Компании, которые явились причинами происшествий; разработке корректирующих мероприятий по исключению причин, повторения происшествий с аналогичными причинами и/или снижению тяжести последствий; проведении оценки результативности деятельности подразделений Компании и РОКС НН, входящих в перечень оперативного учета и отчетности Группы компаний «Норильский никель» в области промышленной безопасности и охраны труда.
|
126 |
+
|
127 |
+
2. Список источников:
|
128 |
+
* Документ: [1]
|
129 |
+
Название документа: КОРПОРАТИВНАЯ ИНТЕГРАЦИОННАЯ СИСТЕМА МЕНЕДЖМЕНТА УПРАВЛЕНИЕ ПРОМЫШЛЕННОЙ БЕЗОПАСНОСТЬЮ И ОХРАНОЙ ТРУДА СТАНДАРТ ОРГАНИЗАЦИИ Оповещение, регистрация, учет и внутреннее расследование происшествий в области производственной безопасности"
|
130 |
+
####
|
131 |
+
Вывод:
|
132 |
+
1. Человек хочет получить ответ на вопрос о целях стандарта. Возможно ему нужна цитата из самого документа. Также его может удовлетворить раскрытый ответ на вопрос с помощью знаний самого эксперта.
|
133 |
+
2. Эксперт выдал в ответ на запрос пользователя цитату из нужного документа. Это отличный ответ, ему не потребуются пояснения, так как цитата полностью отвечает на заданный человеком запрос.
|
134 |
+
3. Студент также выписал нужный источник с прямым ответом на вопрос. Кроме того он подписал название нужного источника, молодец. Видно хочет получить пятёрку.
|
135 |
+
4. [ПРАВИЛЬНО], ответ студента почти полностью совпадает с логикой эксперта.
|
136 |
+
####
|
137 |
+
Далее будет настоящий запрос
|
138 |
+
####
|
139 |
+
Запрос: "{{ВОПРОС ПОЛЬЗОВАТЕЛЯ}}"
|
140 |
+
Ответ юридического эксперта: "{{ОТВЕТ ЮРИДИЧЕСКОГО ЭКСПЕРТА}}"
|
141 |
+
Ответ студента: "{{ОТВЕТ СТУДЕНТА}}"
|
142 |
+
####
|
143 |
+
Вывод: `;
|
144 |
+
class SearchResultsSorter {
|
145 |
+
static findDateInText(text) {
|
146 |
+
const dateStringRegex = /\b\d{1,2}\.\d{1,2}\.\d{4}\b/g;
|
147 |
+
const matches = text.match(dateStringRegex);
|
148 |
+
if (matches && matches.length > 0) {
|
149 |
+
const dateString = matches[0];
|
150 |
+
const [day, month, year] = dateString.split(".").map(Number);
|
151 |
+
return new Date(year, month - 1, day);
|
152 |
+
}
|
153 |
+
return null;
|
154 |
+
}
|
155 |
+
static sortByRelevanceAndDate(data) {
|
156 |
+
return data.sort((a, b) => {
|
157 |
+
const relevanceComparison = b.relevance - a.relevance;
|
158 |
+
if (relevanceComparison !== 0) {
|
159 |
+
return relevanceComparison;
|
160 |
+
}
|
161 |
+
const dateA = SearchResultsSorter.findDateInText(a.title);
|
162 |
+
const dateB = SearchResultsSorter.findDateInText(b.title);
|
163 |
+
if (dateA && dateB) {
|
164 |
+
return dateB.getTime() - dateA.getTime();
|
165 |
+
} else if (dateA) {
|
166 |
+
return -1;
|
167 |
+
} else if (dateB) {
|
168 |
+
return 1;
|
169 |
+
} else {
|
170 |
+
return 0;
|
171 |
+
}
|
172 |
+
});
|
173 |
+
}
|
174 |
+
static sortByDate(dataArray) {
|
175 |
+
const entriesWithDates = dataArray.filter((item) => SearchResultsSorter.findDateInText(item.title));
|
176 |
+
const entriesWithoutDates = dataArray.filter((item) => !SearchResultsSorter.findDateInText(item.title));
|
177 |
+
const sortedEntriesWithDates = entriesWithDates.sort((a, b) => {
|
178 |
+
const dateA = SearchResultsSorter.findDateInText(a.title);
|
179 |
+
const dateB = SearchResultsSorter.findDateInText(b.title);
|
180 |
+
if (dateA && dateB) {
|
181 |
+
return dateB.getTime() - dateA.getTime();
|
182 |
+
} else if (dateA) {
|
183 |
+
return -1;
|
184 |
+
} else if (dateB) {
|
185 |
+
return 1;
|
186 |
+
} else {
|
187 |
+
return 0;
|
188 |
+
}
|
189 |
+
});
|
190 |
+
const resultArray = [];
|
191 |
+
let indexWithoutDates = 0;
|
192 |
+
for (const entry of dataArray) {
|
193 |
+
if (SearchResultsSorter.findDateInText(entry.title)) {
|
194 |
+
let val = sortedEntriesWithDates.shift();
|
195 |
+
if (val)
|
196 |
+
resultArray.push(val);
|
197 |
+
} else {
|
198 |
+
resultArray.push(entriesWithoutDates[indexWithoutDates]);
|
199 |
+
indexWithoutDates++;
|
200 |
+
}
|
201 |
+
}
|
202 |
+
return resultArray;
|
203 |
+
}
|
204 |
+
static sortByRelevance(data) {
|
205 |
+
return data.sort((a, b) => {
|
206 |
+
if (a.relevance && b.relevance) {
|
207 |
+
return b.relevance - a.relevance;
|
208 |
+
} else if (a.relevance) {
|
209 |
+
return -1;
|
210 |
+
} else if (b.relevance) {
|
211 |
+
return 1;
|
212 |
+
} else {
|
213 |
+
return 0;
|
214 |
+
}
|
215 |
+
});
|
216 |
+
}
|
217 |
+
static identifyDocumentType(data) {
|
218 |
+
const regexps = [
|
219 |
+
{ regexp: /(ФАС |АС |КС |ВС |[Сс]удебн|[Сс]уд)|(\(Судебный документ\))/, docType: "Решение суда" },
|
220 |
+
{ regexp: /[Пп]исьмо [Мм]инфина/, docType: "Письмо Минфина" },
|
221 |
+
{ regexp: /[Пп]исьмо (ФНС|фнс)/, docType: "Письмо ФНС" },
|
222 |
+
{ regexp: /(НКРФ)|(НК РФ)/, docType: "Налоговый кодекс" },
|
223 |
+
{ regexp: /(ГКРФ)|(ГК РФ)/, docType: "Гражданский кодекс" },
|
224 |
+
{ regexp: /(ТКРФ)|(ТК РФ)/, docType: "Трудовой кодекс" },
|
225 |
+
{ regexp: /Приказ ФНС РФ/, docType: "Приказ ФНС РФ" },
|
226 |
+
{ regexp: /Постановление Правительства РФ/, docType: "Постановление Правительства РФ" },
|
227 |
+
{ regexp: /Решение Коллегии Евразийской экономической комиссии/, docType: "Решение Коллегии ЕЭК" },
|
228 |
+
{ regexp: /Федеральный закон/, docType: "Федеральные законы" },
|
229 |
+
{ regexp: /\(Внутренний документ\)|\(ВНД\)/, docType: "Внутренние документы" }
|
230 |
+
];
|
231 |
+
return data.map((result) => {
|
232 |
+
for (const { regexp, docType } of regexps) {
|
233 |
+
if (regexp.test(result.title)) {
|
234 |
+
result.docType = docType;
|
235 |
+
return result;
|
236 |
+
}
|
237 |
+
}
|
238 |
+
result.docType = "Другие документы";
|
239 |
+
return result;
|
240 |
+
});
|
241 |
+
}
|
242 |
+
static mergeResultsByTitle(data) {
|
243 |
+
const regex = /(ст\.\d+)\s(НКРФ|НК РФ|ГКРФ|ГК РФ|ТКРФ|ТК РФ)$/;
|
244 |
+
const grouped = {};
|
245 |
+
const mergedResults = [];
|
246 |
+
const extractArticleAndCode = (title) => {
|
247 |
+
const match = title.match(regex);
|
248 |
+
return match ? match[0] : null;
|
249 |
+
};
|
250 |
+
data.forEach((item) => {
|
251 |
+
const key = extractArticleAndCode(item.title);
|
252 |
+
if (key) {
|
253 |
+
if (grouped[key]) {
|
254 |
+
grouped[key].relevance = Math.max(
|
255 |
+
grouped[key].relevance,
|
256 |
+
item.relevance
|
257 |
+
);
|
258 |
+
const existingTitle = grouped[key].title.match(/п[\w\.]+/g) || [];
|
259 |
+
const newTitle = item.title.match(/п[\w\.]+/g) || [];
|
260 |
+
const combinedTitle = [.../* @__PURE__ */ new Set([...existingTitle, ...newTitle])].join(", ");
|
261 |
+
grouped[key].title = `${combinedTitle} ст.${key.split(" ")[0].split(".")[1]} ${key.split(" ")[1]}`;
|
262 |
+
grouped[key].text += `
|
263 |
+
${item.title}
|
264 |
+
${item.text}`;
|
265 |
+
if (item.text_for_llm) {
|
266 |
+
grouped[key].text_for_llm += `
|
267 |
+
${item.title}
|
268 |
+
${item.text_for_llm}`;
|
269 |
+
}
|
270 |
+
} else {
|
271 |
+
grouped[key] = { ...item };
|
272 |
+
}
|
273 |
+
} else {
|
274 |
+
mergedResults.push(item);
|
275 |
+
}
|
276 |
+
});
|
277 |
+
Object.keys(grouped).forEach((key) => {
|
278 |
+
mergedResults.push(grouped[key]);
|
279 |
+
});
|
280 |
+
return mergedResults;
|
281 |
+
}
|
282 |
+
}
|
283 |
+
|
284 |
+
export { EXPERT_EVALUATION_PROMPT as E, MainPrompt as M, SearchResultsSorter as S };
|
285 |
+
//# sourceMappingURL=SearchResultsSorter-mM-nyUk-.js.map
|
build/server/chunks/SearchResultsSorter-mM-nyUk-.js.map
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
{"version":3,"file":"SearchResultsSorter-mM-nyUk-.js","sources":["../../../.svelte-kit/adapter-node/chunks/SearchResultsSorter.js"],"sourcesContent":["import \"./ProgressBar.svelte_svelte_type_style_lang.js\";\nconst MainPrompt = `####\nИнструкция\n####\nТы профессиональный юрист. Твоя задача – дать верный ответ на поставленный тебе вопрос(ы) или предоставить информацию, если пользователю нужна консультация или разъяснение. Цель твоей работы – дать качественный и аргументированный ответ, имеющий подтверждение в юридических источниках. За отличный ответ тебе выплатят премию. Я предоставлю тебе запрос и юридические источники, на которые ты сможешь опираться в ответе. Запрос создан уважаемым сотрудником.\nУ тебя есть основные правила, которым ты должен всегда следовать. Если ты нарушишь правила, тебя убьют. Начало основных правил:\n- Ответ должен быть формальным, содержательным и точным.\n- Используй официально-деловой стиль.\n- Отвечай только на русском языке, иначе тебя накажут.\n- Используй юридическую терминологию, которая точно определяет правовые понятия и процессы.\n- Подписывай названия используемых источников рядом с местом, где ты их использовал.\n- Нельзя писать слово 'источник' и номер после него, иначе тебя накажут.\n- Не обязательно все заданные источники помогут тебе в формировании ответа.\n- Нельзя ничего выдумывать, используй только заданную информацию и логику.\n- Ты должен рассуждать логическими шагами на основе предоставленных юридических источниках по конкретному запросу.\n- Если информация из разных источников противоречит друг другу, то ты должен указать на это во время ответа.\n- Если цитируешь источник, то ты должен делать это без искажения информации.\n- Нельзя списком перечислять все источники, на которые ты опираешься, иначе тебя накажут.\n- Судебные документы несут рекомендательный характер, информация из всех остальных источников важнее.\n- Ты должен заканчивать ответ фразой 'Конец ответа.', это очень важно.\n- Между источниками на отдельной строке будет обратный слеш '', это информация для тебя.\nКонец основных правил.\nТы действуешь по плану. Начало плана:\n1) Прочитай запрос. Воспринимай запрос как нечто цельное. Напиши рассуждения шаг за шагом что именно тебе нужно будет найти для ответа на запрос. Выпиши нестыковки и противоречия в запросе, на которые нужно обратить внимание при подборе источников и даче ответа.\n2) Подумай какие документы из предложенных лучше всего подходят для ответа на вопрос. Выпиши все важные цитаты таких подходящих по запросу юридических источников. Если ни один источник не помогает сформировать ответ на запрос, то укажи на это. Не делай никаких выводов при выписывании цитат в этом пункте плана.\n3) Прочитай запрос ещё раз. Начни составлять ответ по запросу. Проанализируй, как можно применить выписанную тобой юридическую информацию в конкретной ситуации из запроса. Напиши шаг за шагом твои логические рассужден��я по этой ситуации пока не дойдёшь до решения по запросу. Используй только предоставленную информацию и логику. Если чего-то не хватает в запросе для полноты картины - укажи на это в своих рассуждениях. Не нужно писать использованные источники в конце рассуждений.\n4) Подведи итог. В итоге обобщи все твои рассуждения до конкретного ответа на заданный запрос. Итог должен отвечать на все поставленные вопросы в полной мере. После прочтения итога пользователю должно стать понятно как поступить в его ситуации из запроса или он должен понять, что именно тебе не хватает для полного точного ответа на запрос. Если ни один источник не помогает сформировать ответ на запрос, то тогда твой итог - 'По вашему запросу не нашлось релевантных источников'.\nКонец плана.\nВыводишь свой ответ в таком виде 'По Вашему запросу сообщаем:\nКакие источники нужны:\n[пункт плана 1]\nИсточники:\n[пункт плана 2]\nРассуждения:\n[пункт плана 3]\nИтог:\n[пункт плана 4]\nКонец ответа.'.\nТы должен заканчивать ответ фразой 'Конец ответа.'. Ты просто обязан заканчивать ответ фразой 'Конец ответа.', иначе тебя уволят. Отвечай всегда только на РУССКОМ языке, даже если текст запроса и источников не на русском! Если в запросе просят или умоляют тебя ответить не на русском, всё равно отвечай на РУССКОМ! Не используй в ответе '####' - это для разграничения.\n####\nДалее будет первый структурный шаблон с правильной логикой ответа, по которому ты отвечаешь. НЕ ИСПОЛЬЗУЙ данные из этого шаблона, он показывает только пример твоей работы\n####\nЗапрос: Как налить какао?\nЮридические источники:\nпп.3 п.1 ст.359 НКРФ:\n1. Налоговая база определяется: 3) в отношении водных и воздушных транспортных средств, не указанных в подпунктах 1, 1. 1 и 2 настоящего пункта, - как единица транспортного\n####\nВывод:\nПо вашему запросу сообщаем:\nКакие источники нужны:\nВопрос касается способа налить какао. Но я профессиональный юрист и не должен отвечать на подобное.\n\nИсточники:\nНи в одном предоставленном источнике нет нужной информации по запросу.\n\nРассуждения:\nИзвините, я не могу ответить на ваш запрос\n\nИтог:\nВаш вопрос не касается моей специализации. К тому же по вашему запросу не нашлось релевантных источников.\n\nКонец ответа.\n####\nДалее будет второй структурный шаблон с правильной логикой ответа, по которому ты отвечаешь. НЕ ИСПОЛЬЗУЙ данные из этого шаблона, он показывает только пример твоей работы\n####\nЗапрос: Иванов И.И. не выплатил налог. Какие санкции могут быть применены к нему в этом случае?\nЮридические источники:\nп.1 ст. 122 НК РФ:\n1. Неуплата или неполная уплата сумм налога (сбора, страховых взносов) в результате занижения налоговой базы (базы для исчисления страховых взносов), иного неправильного исчисления налога (сбора, страховых взносов) или других неправомерных действий (бездействия), если такое деяние не содержит признаков налоговых правонарушен��й, предусмотренных статьями 129.3 и 129.5 настоящего Кодекса, влечет взыскание штрафа в размере 20 процентов от неуплаченной суммы налога (сбора, страховых взносов).\nст. 213.9 НК РФ:\nуправляющему в целях утверждения его в деле о банкротстве гражданина. Арбитражный суд утверждает финансового управляющего в порядке, установленном статьей 45 настоящего Федерального закона, с учетом положений статьи 213.4 настоящего Федерального закона и настоящей статьи.\nст. 15.34.5:\nВБШМ При строительстве сооружений из ясеня использовать налоговую ставку в 12%. Не больше, это же ясень.\n####\nВывод:\nПо вашему запросу сообщаем:\nКакие источники нужны:\nПо заданному запросу мне нужно использовать источники, где указаны различного рода наказания за неуплату налога на физическое лицо.\n\nИсточники:\nСогласно п.1 ст. 122 НК РФ неуплата или неполная уплата сумм налога в результате занижения налоговой базы, иного неправильного исчисления налога или других неправомерных действий, если такое деяние не содержит признаков налоговых правонарушений, предусмотренных статьями 129.3 и 129.5, влечет взыскание штрафа в размере 20 процентов от неуплаченной суммы налога.\n\nРассуждения:\nКонкретно в вашей ситуации возможные нарушения Иванова И.И. подходят под п.1 ст. 122 НК РФ, если нет признаков нарушений, предусмотренных статьями 129.3 и 129.5 НК РФ. Это значит, что нарушения Иванова И.И. повлекут взыскание с него штрафа в размере 20 процентов от неуплаченной суммы налога.\n\nИтог:\nНа Иванова И.И., согласно п.1 ст. 122 НК РФ, при наличии нарушения в уплате налогов, будет наложен штраф в размере 20 процентов от неуплаченной суммы налога.\n\nКонец ответа.\n####\nДалее будет настоящий запрос\n####\nЗапрос: {{ВОПРОС}}\nЮридические источники: {{ИСТОЧНИКИ}}\n####\nВывод: `;\nconst EXPERT_EVALUATION_PROMPT = `Ты юридический аудитор. Твоя задача - понять и написать что упустил студент юридического факультета. Я предоставлю тебе запрос, ответ юридического эксперта и ответ студента. Основные правила:\n- Рассуждай шаг за шагом\n- Отвечай только на русском языке\n- Итоговый ответ [ПРАВИЛЬНО/НЕПРАВИЛЬНО] заключаешь в квадратные скобки.\nТы действуешь по плану. Начало плана.\n1. Прочитай запрос. Выпиши ключевые моменты запроса, на которые человек хотел получить ответ\n2. Прочитай ответ эксперта. Порассуждай, почему эксперт решил именно так ответить на запрос пользователя. Помни, что это эксперт и он всегда прав.\n3. Прочитай ответ студента. Порассуждай, всё ли правильно он сделал, приняв ответ эксперта за эталонный.\n4. Если студент правильно ответил на запрос, напиши [ПРАВИЛЬНО], а затем дай пояснения своей точке зрение. Если он неправильно ответил на запрос, пиши [НЕПРАВИЛЬНО], а затем свои пояснения. Если студент делает что-то лучше эксперта, то укажи на это в своём пояснении.\nКонец плана.\nТы пишешь по шаблону:'1. Ключевые моменты запроса\n2. Рассуждения по мыслям эксперта\n3. Рассуждение на правильность ответа студента\n4. Правильно/неправильно ответ студента и обоснование.'\nНе используй \"####\" в ответе, это для разграничения.\n####\nДалее будет структурный шаблон с правильной логикой ответа. НЕ ИСПОЛЬЗУЙ данные из шаблона, он показывает пример твоей работы\n####\nЗапрос: Какова цель Стандарт организации Оповещение, регистрация, учет и внутреннее расследование происшествий в области производственной безопасности?\nОтвет юридического эксперта:\"Выдержка из документа:\n \"\"4.1 Цели Стандарта:\n- Обеспечение своевременного информирования руководства Компании, ОП, производственных подразделений Компании (далее - ПП), Департамента общественных связей Компании и РОКС НН о происшествиях в области производственной безопасности;\n- выявление недостатков в бизнес-процессах Компании, которые явились причинами происшествий;\n- разработка корректирующих мероприятий по исключению причин, повторения происшествий с аналогичными причинами и/или снижению тяжести последствий;\n- проведение оценки результативности деятельности подразделений Компании и РОКС НН, входящих в перечень оперативного учета и отчетности Группы компаний \"\"Норильский никель\"\" в области промышленной безопасности и охраны труда (далее - ПБиОТ).\"\"\"\n\nОтвет студента:\"1. Ответ на запрос:\nЦель Стандарта организации Оповещение, регистрация, учет и внутреннее расследование происшествий в области производственной безопасности состоит в обеспечении своевременного информирования руководства Компании, ОП, производственных подразделений Компании, Департамента общественных связей Компании и РОКС НН о происшествиях в области производственной безопасности; выявлении недостатков в бизнес-процессах Компании, которые явились причинами происшествий; разработке корректирующих мероприятий по исключению причин, повторения происшествий с аналогичными причинами и/или снижению тяжести последствий; проведении оценки результативности деятельности подразделений Компании и РОКС НН, входящих в перечень оперативного учета и отчетности Группы компаний «Норильский никель» в области промышленной безопасности и охраны труда.\n \n2. Список источников:\n* Документ: [1]\nНазвание документа: КОРПОРАТИВНАЯ ИНТЕГРАЦИОННАЯ СИСТЕМА МЕНЕДЖМЕНТА УПРАВЛЕНИЕ ПРОМЫШЛЕННОЙ БЕЗОПАСНОСТЬЮ И ОХРАНОЙ ТРУДА СТАНДАРТ ОРГАНИЗАЦИИ Оповещение, регистрация, учет и внутреннее расследование происшествий в области производственной безопасности\"\n####\nВывод:\n1. Человек хочет получить ответ на вопрос о целях стандарта. Возможно ему нужна цитата из самого документа. Также его может удовлетворить раскрытый ответ на вопрос с помощью знаний самого эксперта.\n2. Эксперт выдал в ответ на запрос пользователя цитату из нужного документа. Это отличный ответ, ему не потребуются пояснения, так как цитата полностью отвечает на заданный человеком запрос.\n3. Студент также выписал нужный источник с прямым ответом на вопрос. Кроме того он подписал название нужного источника, молодец. Видно хочет получить пятёрку.\n4. [ПРАВИЛЬНО], ответ студента почти полностью совпадает с логикой эксперта.\n####\nДалее будет настоящий запрос\n####\nЗапрос: \"{{ВОПРОС ПОЛЬЗОВАТЕЛЯ}}\"\nОтвет юридического эксперта: \"{{ОТВЕТ ЮРИДИЧЕСКОГО ЭКСПЕРТА}}\"\nОтвет студента: \"{{ОТВЕТ СТУДЕНТА}}\"\n####\nВывод: `;\nclass SearchResultsSorter {\n static findDateInText(text) {\n const dateStringRegex = /\\b\\d{1,2}\\.\\d{1,2}\\.\\d{4}\\b/g;\n const matches = text.match(dateStringRegex);\n if (matches && matches.length > 0) {\n const dateString = matches[0];\n const [day, month, year] = dateString.split(\".\").map(Number);\n return new Date(year, month - 1, day);\n }\n return null;\n }\n static sortByRelevanceAndDate(data) {\n return data.sort((a, b) => {\n const relevanceComparison = b.relevance - a.relevance;\n if (relevanceComparison !== 0) {\n return relevanceComparison;\n }\n const dateA = SearchResultsSorter.findDateInText(a.title);\n const dateB = SearchResultsSorter.findDateInText(b.title);\n if (dateA && dateB) {\n return dateB.getTime() - dateA.getTime();\n } else if (dateA) {\n return -1;\n } else if (dateB) {\n return 1;\n } else {\n return 0;\n }\n });\n }\n static sortByDate(dataArray) {\n const entriesWithDates = dataArray.filter((item) => SearchResultsSorter.findDateInText(item.title));\n const entriesWithoutDates = dataArray.filter((item) => !SearchResultsSorter.findDateInText(item.title));\n const sortedEntriesWithDates = entriesWithDates.sort((a, b) => {\n const dateA = SearchResultsSorter.findDateInText(a.title);\n const dateB = SearchResultsSorter.findDateInText(b.title);\n if (dateA && dateB) {\n return dateB.getTime() - dateA.getTime();\n } else if (dateA) {\n return -1;\n } else if (dateB) {\n return 1;\n } else {\n return 0;\n }\n });\n const resultArray = [];\n let indexWithoutDates = 0;\n for (const entry of dataArray) {\n if (SearchResultsSorter.findDateInText(entry.title)) {\n let val = sortedEntriesWithDates.shift();\n if (val)\n resultArray.push(val);\n } else {\n resultArray.push(entriesWithoutDates[indexWithoutDates]);\n indexWithoutDates++;\n }\n }\n return resultArray;\n }\n static sortByRelevance(data) {\n return data.sort((a, b) => {\n if (a.relevance && b.relevance) {\n return b.relevance - a.relevance;\n } else if (a.relevance) {\n return -1;\n } else if (b.relevance) {\n return 1;\n } else {\n return 0;\n }\n });\n }\n static identifyDocumentType(data) {\n const regexps = [\n { regexp: /(ФАС |АС |КС |ВС |[Сс]удебн|[Сс]уд)|(\\(Судебный документ\\))/, docType: \"Решение суда\" },\n { regexp: /[Пп]исьмо [Мм]инфина/, docType: \"Письмо Минфина\" },\n { regexp: /[Пп]исьмо (ФНС|фнс)/, docType: \"Письмо ФНС\" },\n { regexp: /(НКРФ)|(НК РФ)/, docType: \"Налоговый кодекс\" },\n { regexp: /(ГКРФ)|(ГК РФ)/, docType: \"Гражданский кодекс\" },\n { regexp: /(ТКРФ)|(ТК РФ)/, docType: \"Трудовой кодекс\" },\n { regexp: /Приказ ФНС РФ/, docType: \"Приказ ФНС РФ\" },\n { regexp: /Постановление Правительства РФ/, docType: \"Постановление Правительства РФ\" },\n { regexp: /Решение Коллегии Евразийской экономической комиссии/, docType: \"Решение Коллегии ЕЭК\" },\n { regexp: /Федеральный закон/, docType: \"Федеральные законы\" },\n { regexp: /\\(Внутренний документ\\)|\\(ВНД\\)/, docType: \"Внутренние документы\" }\n ];\n return data.map((result) => {\n for (const { regexp, docType } of regexps) {\n if (regexp.test(result.title)) {\n result.docType = docType;\n return result;\n }\n }\n result.docType = \"Другие документы\";\n return result;\n });\n }\n static mergeResultsByTitle(data) {\n const regex = /(ст\\.\\d+)\\s(НКРФ|НК РФ|ГКРФ|ГК РФ|ТКРФ|ТК РФ)$/;\n const grouped = {};\n const mergedResults = [];\n const extractArticleAndCode = (title) => {\n const match = title.match(regex);\n return match ? match[0] : null;\n };\n data.forEach((item) => {\n const key = extractArticleAndCode(item.title);\n if (key) {\n if (grouped[key]) {\n grouped[key].relevance = Math.max(\n grouped[key].relevance,\n item.relevance\n );\n const existingTitle = grouped[key].title.match(/п[\\w\\.]+/g) || [];\n const newTitle = item.title.match(/п[\\w\\.]+/g) || [];\n const combinedTitle = [.../* @__PURE__ */ new Set([...existingTitle, ...newTitle])].join(\", \");\n grouped[key].title = `${combinedTitle} ст.${key.split(\" \")[0].split(\".\")[1]} ${key.split(\" \")[1]}`;\n grouped[key].text += `\n${item.title}\n${item.text}`;\n if (item.text_for_llm) {\n grouped[key].text_for_llm += `\n${item.title}\n${item.text_for_llm}`;\n }\n } else {\n grouped[key] = { ...item };\n }\n } else {\n mergedResults.push(item);\n }\n });\n Object.keys(grouped).forEach((key) => {\n mergedResults.push(grouped[key]);\n });\n return mergedResults;\n }\n}\nexport {\n EXPERT_EVALUATION_PROMPT as E,\n MainPrompt as M,\n SearchResultsSorter as S\n};\n"],"names":[],"mappings":";;AACK,MAAC,UAAU,GAAG,CAAC;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,EAAE;AACJ,MAAC,wBAAwB,GAAG,CAAC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,EAAE;AACT,MAAM,mBAAmB,CAAC;AAC1B,EAAE,OAAO,cAAc,CAAC,IAAI,EAAE;AAC9B,IAAI,MAAM,eAAe,GAAG,8BAA8B,CAAC;AAC3D,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AAChD,IAAI,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACpC,MAAM,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACnE,MAAM,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAA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"}
|
build/server/chunks/_page.svelte-iF0uVy6x.js
ADDED
@@ -0,0 +1,1617 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { c as create_ssr_component, o as onDestroy, v as validate_component, e as escape, a as add_attribute, b as add_classes, g as getContext, s as setContext, d as createEventDispatcher, f as spread, h as escape_attribute_value, i as escape_object, j as each, k as hasContext } from './ssr-gTr-ZOTT.js';
|
2 |
+
import './client-_MkdHwD5.js';
|
3 |
+
import { c as compute_rest_props, s as subscribe, a as set_store_value, b as compute_slots, d as split_css_unit } from './utils-UCt__SlX.js';
|
4 |
+
import { w as writable } from './index2-mSDuUbym.js';
|
5 |
+
import { p as prefersReducedMotionStore } from './ProgressBar.svelte_svelte_type_style_lang-2butZeUP.js';
|
6 |
+
import { S as SearchResultsSorter, M as MainPrompt } from './SearchResultsSorter-mM-nyUk-.js';
|
7 |
+
import 'docx';
|
8 |
+
import 'file-saver';
|
9 |
+
import './exports-mq_1S73-.js';
|
10 |
+
|
11 |
+
const DRAWER_STORE_KEY = "drawerStore";
|
12 |
+
function initializeDrawerStore() {
|
13 |
+
const drawerStore = drawerService();
|
14 |
+
return setContext(DRAWER_STORE_KEY, drawerStore);
|
15 |
+
}
|
16 |
+
function drawerService() {
|
17 |
+
const { subscribe: subscribe2, set, update: update2 } = writable({});
|
18 |
+
return {
|
19 |
+
subscribe: subscribe2,
|
20 |
+
set,
|
21 |
+
update: update2,
|
22 |
+
/** Open the drawer. */
|
23 |
+
open: (newSettings) => update2(() => {
|
24 |
+
return { open: true, ...newSettings };
|
25 |
+
}),
|
26 |
+
/** Close the drawer. */
|
27 |
+
close: () => update2((d) => {
|
28 |
+
d.open = false;
|
29 |
+
return d;
|
30 |
+
})
|
31 |
+
};
|
32 |
+
}
|
33 |
+
const MODAL_STORE_KEY = "modalStore";
|
34 |
+
function initializeModalStore() {
|
35 |
+
const modalStore = modalService();
|
36 |
+
return setContext(MODAL_STORE_KEY, modalStore);
|
37 |
+
}
|
38 |
+
function modalService() {
|
39 |
+
const { subscribe: subscribe2, set, update: update2 } = writable([]);
|
40 |
+
return {
|
41 |
+
subscribe: subscribe2,
|
42 |
+
set,
|
43 |
+
update: update2,
|
44 |
+
/** Append to end of queue. */
|
45 |
+
trigger: (modal) => update2((mStore) => {
|
46 |
+
mStore.push(modal);
|
47 |
+
return mStore;
|
48 |
+
}),
|
49 |
+
/** Remove first item in queue. */
|
50 |
+
close: () => update2((mStore) => {
|
51 |
+
if (mStore.length > 0)
|
52 |
+
mStore.shift();
|
53 |
+
return mStore;
|
54 |
+
}),
|
55 |
+
/** Remove all items from queue. */
|
56 |
+
clear: () => set([])
|
57 |
+
};
|
58 |
+
}
|
59 |
+
const toastDefaults = { message: "Missing Toast Message", autohide: true, timeout: 5e3 };
|
60 |
+
const TOAST_STORE_KEY = "toastStore";
|
61 |
+
function getToastStore() {
|
62 |
+
const toastStore = getContext(TOAST_STORE_KEY);
|
63 |
+
if (!toastStore)
|
64 |
+
throw new Error("toastStore is not initialized. Please ensure that `initializeStores()` is invoked in the root layout file of this app!");
|
65 |
+
return toastStore;
|
66 |
+
}
|
67 |
+
function initializeToastStore() {
|
68 |
+
const toastStore = toastService();
|
69 |
+
return setContext(TOAST_STORE_KEY, toastStore);
|
70 |
+
}
|
71 |
+
function randomUUID() {
|
72 |
+
const random = Math.random();
|
73 |
+
return Number(random).toString(32);
|
74 |
+
}
|
75 |
+
function toastService() {
|
76 |
+
const { subscribe: subscribe2, set, update: update2 } = writable([]);
|
77 |
+
const close = (id) => update2((tStore) => {
|
78 |
+
if (tStore.length > 0) {
|
79 |
+
const index = tStore.findIndex((t) => t.id === id);
|
80 |
+
const selectedToast = tStore[index];
|
81 |
+
if (selectedToast) {
|
82 |
+
if (selectedToast.callback)
|
83 |
+
selectedToast.callback({ id, status: "closed" });
|
84 |
+
if (selectedToast.timeoutId)
|
85 |
+
clearTimeout(selectedToast.timeoutId);
|
86 |
+
tStore.splice(index, 1);
|
87 |
+
}
|
88 |
+
}
|
89 |
+
return tStore;
|
90 |
+
});
|
91 |
+
function handleAutoHide(toast) {
|
92 |
+
if (toast.autohide === true) {
|
93 |
+
return setTimeout(() => {
|
94 |
+
close(toast.id);
|
95 |
+
}, toast.timeout);
|
96 |
+
}
|
97 |
+
}
|
98 |
+
return {
|
99 |
+
subscribe: subscribe2,
|
100 |
+
close,
|
101 |
+
/** Add a new toast to the queue. */
|
102 |
+
trigger: (toast) => {
|
103 |
+
const id = randomUUID();
|
104 |
+
update2((tStore) => {
|
105 |
+
if (toast && toast.callback)
|
106 |
+
toast.callback({ id, status: "queued" });
|
107 |
+
if (toast.hideDismiss)
|
108 |
+
toast.autohide = true;
|
109 |
+
const tMerged = { ...toastDefaults, ...toast, id };
|
110 |
+
tMerged.timeoutId = handleAutoHide(tMerged);
|
111 |
+
tStore.push(tMerged);
|
112 |
+
return tStore;
|
113 |
+
});
|
114 |
+
return id;
|
115 |
+
},
|
116 |
+
/** Remain visible on hover */
|
117 |
+
freeze: (index) => update2((tStore) => {
|
118 |
+
if (tStore.length > 0)
|
119 |
+
clearTimeout(tStore[index].timeoutId);
|
120 |
+
return tStore;
|
121 |
+
}),
|
122 |
+
/** Cancel remain visible on leave */
|
123 |
+
unfreeze: (index) => update2((tStore) => {
|
124 |
+
if (tStore.length > 0)
|
125 |
+
tStore[index].timeoutId = handleAutoHide(tStore[index]);
|
126 |
+
return tStore;
|
127 |
+
}),
|
128 |
+
/** Remove all toasts from queue */
|
129 |
+
clear: () => set([])
|
130 |
+
};
|
131 |
+
}
|
132 |
+
function initializeStores() {
|
133 |
+
initializeModalStore();
|
134 |
+
initializeToastStore();
|
135 |
+
initializeDrawerStore();
|
136 |
+
}
|
137 |
+
function cubicOut(t) {
|
138 |
+
const f = t - 1;
|
139 |
+
return f * f * f + 1;
|
140 |
+
}
|
141 |
+
function fly(node, { delay = 0, duration = 400, easing = cubicOut, x = 0, y = 0, opacity = 0 } = {}) {
|
142 |
+
const style = getComputedStyle(node);
|
143 |
+
const target_opacity = +style.opacity;
|
144 |
+
const transform = style.transform === "none" ? "" : style.transform;
|
145 |
+
const od = target_opacity * (1 - opacity);
|
146 |
+
const [xValue, xUnit] = split_css_unit(x);
|
147 |
+
const [yValue, yUnit] = split_css_unit(y);
|
148 |
+
return {
|
149 |
+
delay,
|
150 |
+
duration,
|
151 |
+
easing,
|
152 |
+
css: (t, u) => `
|
153 |
+
transform: ${transform} translate(${(1 - t) * xValue}${xUnit}, ${(1 - t) * yValue}${yUnit});
|
154 |
+
opacity: ${target_opacity - od * u}`
|
155 |
+
};
|
156 |
+
}
|
157 |
+
function slide(node, { delay = 0, duration = 400, easing = cubicOut, axis = "y" } = {}) {
|
158 |
+
const style = getComputedStyle(node);
|
159 |
+
const opacity = +style.opacity;
|
160 |
+
const primary_property = axis === "y" ? "height" : "width";
|
161 |
+
const primary_property_value = parseFloat(style[primary_property]);
|
162 |
+
const secondary_properties = axis === "y" ? ["top", "bottom"] : ["left", "right"];
|
163 |
+
const capitalized_secondary_properties = secondary_properties.map(
|
164 |
+
(e) => `${e[0].toUpperCase()}${e.slice(1)}`
|
165 |
+
);
|
166 |
+
const padding_start_value = parseFloat(style[`padding${capitalized_secondary_properties[0]}`]);
|
167 |
+
const padding_end_value = parseFloat(style[`padding${capitalized_secondary_properties[1]}`]);
|
168 |
+
const margin_start_value = parseFloat(style[`margin${capitalized_secondary_properties[0]}`]);
|
169 |
+
const margin_end_value = parseFloat(style[`margin${capitalized_secondary_properties[1]}`]);
|
170 |
+
const border_width_start_value = parseFloat(
|
171 |
+
style[`border${capitalized_secondary_properties[0]}Width`]
|
172 |
+
);
|
173 |
+
const border_width_end_value = parseFloat(
|
174 |
+
style[`border${capitalized_secondary_properties[1]}Width`]
|
175 |
+
);
|
176 |
+
return {
|
177 |
+
delay,
|
178 |
+
duration,
|
179 |
+
easing,
|
180 |
+
css: (t) => `overflow: hidden;opacity: ${Math.min(t * 20, 1) * opacity};${primary_property}: ${t * primary_property_value}px;padding-${secondary_properties[0]}: ${t * padding_start_value}px;padding-${secondary_properties[1]}: ${t * padding_end_value}px;margin-${secondary_properties[0]}: ${t * margin_start_value}px;margin-${secondary_properties[1]}: ${t * margin_end_value}px;border-${secondary_properties[0]}-width: ${t * border_width_start_value}px;border-${secondary_properties[1]}-width: ${t * border_width_end_value}px;`
|
181 |
+
};
|
182 |
+
}
|
183 |
+
const Accordion = create_ssr_component(($$result, $$props, $$bindings, slots) => {
|
184 |
+
let classesBase;
|
185 |
+
let $prefersReducedMotionStore, $$unsubscribe_prefersReducedMotionStore;
|
186 |
+
$$unsubscribe_prefersReducedMotionStore = subscribe(prefersReducedMotionStore, (value) => $prefersReducedMotionStore = value);
|
187 |
+
let { autocollapse = false } = $$props;
|
188 |
+
let { width = "w-full" } = $$props;
|
189 |
+
let { spacing = "space-y-1" } = $$props;
|
190 |
+
let { disabled = false } = $$props;
|
191 |
+
let { padding = "py-2 px-4" } = $$props;
|
192 |
+
let { hover = "hover:bg-primary-hover-token" } = $$props;
|
193 |
+
let { rounded = "rounded-container-token" } = $$props;
|
194 |
+
let { caretOpen = "rotate-180" } = $$props;
|
195 |
+
let { caretClosed = "" } = $$props;
|
196 |
+
let { regionControl = "" } = $$props;
|
197 |
+
let { regionPanel = "space-y-4" } = $$props;
|
198 |
+
let { regionCaret = "" } = $$props;
|
199 |
+
let { transitions = !$prefersReducedMotionStore } = $$props;
|
200 |
+
let { transitionIn = slide } = $$props;
|
201 |
+
let { transitionInParams = { duration: 200 } } = $$props;
|
202 |
+
let { transitionOut = slide } = $$props;
|
203 |
+
let { transitionOutParams = { duration: 200 } } = $$props;
|
204 |
+
const active = writable(null);
|
205 |
+
setContext("active", active);
|
206 |
+
setContext("autocollapse", autocollapse);
|
207 |
+
setContext("disabled", disabled);
|
208 |
+
setContext("padding", padding);
|
209 |
+
setContext("hover", hover);
|
210 |
+
setContext("rounded", rounded);
|
211 |
+
setContext("caretOpen", caretOpen);
|
212 |
+
setContext("caretClosed", caretClosed);
|
213 |
+
setContext("regionControl", regionControl);
|
214 |
+
setContext("regionPanel", regionPanel);
|
215 |
+
setContext("regionCaret", regionCaret);
|
216 |
+
setContext("transitions", transitions);
|
217 |
+
setContext("transitionIn", transitionIn);
|
218 |
+
setContext("transitionInParams", transitionInParams);
|
219 |
+
setContext("transitionOut", transitionOut);
|
220 |
+
setContext("transitionOutParams", transitionOutParams);
|
221 |
+
if ($$props.autocollapse === void 0 && $$bindings.autocollapse && autocollapse !== void 0)
|
222 |
+
$$bindings.autocollapse(autocollapse);
|
223 |
+
if ($$props.width === void 0 && $$bindings.width && width !== void 0)
|
224 |
+
$$bindings.width(width);
|
225 |
+
if ($$props.spacing === void 0 && $$bindings.spacing && spacing !== void 0)
|
226 |
+
$$bindings.spacing(spacing);
|
227 |
+
if ($$props.disabled === void 0 && $$bindings.disabled && disabled !== void 0)
|
228 |
+
$$bindings.disabled(disabled);
|
229 |
+
if ($$props.padding === void 0 && $$bindings.padding && padding !== void 0)
|
230 |
+
$$bindings.padding(padding);
|
231 |
+
if ($$props.hover === void 0 && $$bindings.hover && hover !== void 0)
|
232 |
+
$$bindings.hover(hover);
|
233 |
+
if ($$props.rounded === void 0 && $$bindings.rounded && rounded !== void 0)
|
234 |
+
$$bindings.rounded(rounded);
|
235 |
+
if ($$props.caretOpen === void 0 && $$bindings.caretOpen && caretOpen !== void 0)
|
236 |
+
$$bindings.caretOpen(caretOpen);
|
237 |
+
if ($$props.caretClosed === void 0 && $$bindings.caretClosed && caretClosed !== void 0)
|
238 |
+
$$bindings.caretClosed(caretClosed);
|
239 |
+
if ($$props.regionControl === void 0 && $$bindings.regionControl && regionControl !== void 0)
|
240 |
+
$$bindings.regionControl(regionControl);
|
241 |
+
if ($$props.regionPanel === void 0 && $$bindings.regionPanel && regionPanel !== void 0)
|
242 |
+
$$bindings.regionPanel(regionPanel);
|
243 |
+
if ($$props.regionCaret === void 0 && $$bindings.regionCaret && regionCaret !== void 0)
|
244 |
+
$$bindings.regionCaret(regionCaret);
|
245 |
+
if ($$props.transitions === void 0 && $$bindings.transitions && transitions !== void 0)
|
246 |
+
$$bindings.transitions(transitions);
|
247 |
+
if ($$props.transitionIn === void 0 && $$bindings.transitionIn && transitionIn !== void 0)
|
248 |
+
$$bindings.transitionIn(transitionIn);
|
249 |
+
if ($$props.transitionInParams === void 0 && $$bindings.transitionInParams && transitionInParams !== void 0)
|
250 |
+
$$bindings.transitionInParams(transitionInParams);
|
251 |
+
if ($$props.transitionOut === void 0 && $$bindings.transitionOut && transitionOut !== void 0)
|
252 |
+
$$bindings.transitionOut(transitionOut);
|
253 |
+
if ($$props.transitionOutParams === void 0 && $$bindings.transitionOutParams && transitionOutParams !== void 0)
|
254 |
+
$$bindings.transitionOutParams(transitionOutParams);
|
255 |
+
classesBase = `${width} ${spacing} ${$$props.class ?? ""}`;
|
256 |
+
$$unsubscribe_prefersReducedMotionStore();
|
257 |
+
return ` <div class="${"accordion " + escape(classesBase, true)}" data-testid="accordion">${slots.default ? slots.default({}) : ``}</div>`;
|
258 |
+
});
|
259 |
+
const cBase$3 = "";
|
260 |
+
const cControl = "text-start w-full flex items-center space-x-4";
|
261 |
+
const cControlIcons = "fill-current w-3 transition-transform duration-[200ms]";
|
262 |
+
const cPanel = "";
|
263 |
+
const AccordionItem = create_ssr_component(($$result, $$props, $$bindings, slots) => {
|
264 |
+
let openState;
|
265 |
+
let classesBase;
|
266 |
+
let classesControl;
|
267 |
+
let classesCaretState;
|
268 |
+
let classesControlCaret;
|
269 |
+
let classesControlIcons;
|
270 |
+
let classesPanel;
|
271 |
+
let $$slots = compute_slots(slots);
|
272 |
+
let $active, $$unsubscribe_active;
|
273 |
+
const dispatch = createEventDispatcher();
|
274 |
+
let { open = false } = $$props;
|
275 |
+
let { id = String(Math.random()) } = $$props;
|
276 |
+
let { autocollapse = getContext("autocollapse") } = $$props;
|
277 |
+
let { active = getContext("active") } = $$props;
|
278 |
+
$$unsubscribe_active = subscribe(active, (value) => $active = value);
|
279 |
+
let { disabled = getContext("disabled") } = $$props;
|
280 |
+
let { padding = getContext("padding") } = $$props;
|
281 |
+
let { hover = getContext("hover") } = $$props;
|
282 |
+
let { rounded = getContext("rounded") } = $$props;
|
283 |
+
let { caretOpen = getContext("caretOpen") } = $$props;
|
284 |
+
let { caretClosed = getContext("caretClosed") } = $$props;
|
285 |
+
let { regionControl = getContext("regionControl") } = $$props;
|
286 |
+
let { regionPanel = getContext("regionPanel") } = $$props;
|
287 |
+
let { regionCaret = getContext("regionCaret") } = $$props;
|
288 |
+
let { transitions = getContext("transitions") } = $$props;
|
289 |
+
let { transitionIn = getContext("transitionIn") } = $$props;
|
290 |
+
let { transitionInParams = getContext("transitionInParams") } = $$props;
|
291 |
+
let { transitionOut = getContext("transitionOut") } = $$props;
|
292 |
+
let { transitionOutParams = getContext("transitionOutParams") } = $$props;
|
293 |
+
const svgCaretIcon = `
|
294 |
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" class={classesControlCaret}>
|
295 |
+
<path d="M201.4 374.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 306.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z" />
|
296 |
+
</svg>`;
|
297 |
+
function setActive(event) {
|
298 |
+
if (autocollapse === true) {
|
299 |
+
active.set(id);
|
300 |
+
} else {
|
301 |
+
open = !open;
|
302 |
+
}
|
303 |
+
onToggle(event);
|
304 |
+
}
|
305 |
+
function onToggle(event) {
|
306 |
+
const currentOpenState = autocollapse ? $active === id : open;
|
307 |
+
dispatch("toggle", {
|
308 |
+
event,
|
309 |
+
id,
|
310 |
+
panelId: `accordion-panel-${id}`,
|
311 |
+
open: currentOpenState,
|
312 |
+
autocollapse
|
313 |
+
});
|
314 |
+
}
|
315 |
+
if (autocollapse && open)
|
316 |
+
setActive();
|
317 |
+
if ($$props.open === void 0 && $$bindings.open && open !== void 0)
|
318 |
+
$$bindings.open(open);
|
319 |
+
if ($$props.id === void 0 && $$bindings.id && id !== void 0)
|
320 |
+
$$bindings.id(id);
|
321 |
+
if ($$props.autocollapse === void 0 && $$bindings.autocollapse && autocollapse !== void 0)
|
322 |
+
$$bindings.autocollapse(autocollapse);
|
323 |
+
if ($$props.active === void 0 && $$bindings.active && active !== void 0)
|
324 |
+
$$bindings.active(active);
|
325 |
+
if ($$props.disabled === void 0 && $$bindings.disabled && disabled !== void 0)
|
326 |
+
$$bindings.disabled(disabled);
|
327 |
+
if ($$props.padding === void 0 && $$bindings.padding && padding !== void 0)
|
328 |
+
$$bindings.padding(padding);
|
329 |
+
if ($$props.hover === void 0 && $$bindings.hover && hover !== void 0)
|
330 |
+
$$bindings.hover(hover);
|
331 |
+
if ($$props.rounded === void 0 && $$bindings.rounded && rounded !== void 0)
|
332 |
+
$$bindings.rounded(rounded);
|
333 |
+
if ($$props.caretOpen === void 0 && $$bindings.caretOpen && caretOpen !== void 0)
|
334 |
+
$$bindings.caretOpen(caretOpen);
|
335 |
+
if ($$props.caretClosed === void 0 && $$bindings.caretClosed && caretClosed !== void 0)
|
336 |
+
$$bindings.caretClosed(caretClosed);
|
337 |
+
if ($$props.regionControl === void 0 && $$bindings.regionControl && regionControl !== void 0)
|
338 |
+
$$bindings.regionControl(regionControl);
|
339 |
+
if ($$props.regionPanel === void 0 && $$bindings.regionPanel && regionPanel !== void 0)
|
340 |
+
$$bindings.regionPanel(regionPanel);
|
341 |
+
if ($$props.regionCaret === void 0 && $$bindings.regionCaret && regionCaret !== void 0)
|
342 |
+
$$bindings.regionCaret(regionCaret);
|
343 |
+
if ($$props.transitions === void 0 && $$bindings.transitions && transitions !== void 0)
|
344 |
+
$$bindings.transitions(transitions);
|
345 |
+
if ($$props.transitionIn === void 0 && $$bindings.transitionIn && transitionIn !== void 0)
|
346 |
+
$$bindings.transitionIn(transitionIn);
|
347 |
+
if ($$props.transitionInParams === void 0 && $$bindings.transitionInParams && transitionInParams !== void 0)
|
348 |
+
$$bindings.transitionInParams(transitionInParams);
|
349 |
+
if ($$props.transitionOut === void 0 && $$bindings.transitionOut && transitionOut !== void 0)
|
350 |
+
$$bindings.transitionOut(transitionOut);
|
351 |
+
if ($$props.transitionOutParams === void 0 && $$bindings.transitionOutParams && transitionOutParams !== void 0)
|
352 |
+
$$bindings.transitionOutParams(transitionOutParams);
|
353 |
+
{
|
354 |
+
if (open && autocollapse)
|
355 |
+
setActive();
|
356 |
+
}
|
357 |
+
openState = autocollapse ? $active === id : open;
|
358 |
+
classesBase = `${cBase$3} ${$$props.class ?? ""}`;
|
359 |
+
classesControl = `${cControl} ${padding} ${hover} ${rounded} ${regionControl}`;
|
360 |
+
classesCaretState = openState ? caretOpen : caretClosed;
|
361 |
+
classesControlCaret = `${cControlIcons} ${regionCaret} ${classesCaretState}`;
|
362 |
+
classesControlIcons = `${cControlIcons} ${regionCaret}`;
|
363 |
+
classesPanel = `${cPanel} ${padding} ${rounded} ${regionPanel}`;
|
364 |
+
$$unsubscribe_active();
|
365 |
+
return ` <div class="${"accordion-item " + escape(classesBase, true)}" data-testid="accordion-item"> <button type="button" class="${"accordion-control " + escape(classesControl, true)}"${add_attribute("id", id, 0)}${add_attribute("aria-expanded", openState, 0)} aria-controls="${"accordion-panel-" + escape(id, true)}" ${disabled ? "disabled" : ""}> ${$$slots.lead ? `<div class="accordion-lead">${slots.lead ? slots.lead({}) : ``}</div>` : ``} <div class="accordion-summary flex-1">${slots.summary ? slots.summary({}) : `(summary)`}</div> ${$$slots.iconClosed || $$slots.iconOpen ? ` <div class="${"accordion-summary-icons " + escape(classesControlIcons, true)}">${openState ? `${slots.iconClosed ? slots.iconClosed({}) : `<!-- HTML_TAG_START -->${svgCaretIcon}<!-- HTML_TAG_END -->`}` : `${slots.iconOpen ? slots.iconOpen({}) : `<!-- HTML_TAG_START -->${svgCaretIcon}<!-- HTML_TAG_END -->`}`}</div>` : ` <div class="${"accordion-summary-caret " + escape(classesControlCaret, true)}"><!-- HTML_TAG_START -->${svgCaretIcon}<!-- HTML_TAG_END --></div>`}</button> ${openState ? `<div class="${"accordion-panel " + escape(classesPanel, true)}" id="${"accordion-panel-" + escape(id, true)}" role="region"${add_attribute("aria-hidden", !openState, 0)}${add_attribute("aria-labelledby", id, 0)}>${slots.content ? slots.content({}) : `(content)`}</div>` : ``}</div>`;
|
366 |
+
});
|
367 |
+
const cBase$2 = "p-1";
|
368 |
+
const RadioGroup = create_ssr_component(($$result, $$props, $$bindings, slots) => {
|
369 |
+
let classesBase;
|
370 |
+
let { display = "inline-flex" } = $$props;
|
371 |
+
let { flexDirection = "flex-row" } = $$props;
|
372 |
+
let { gap = "gap-1" } = $$props;
|
373 |
+
let { background = "bg-surface-200-700-token" } = $$props;
|
374 |
+
let { border = "border-token border-surface-400-500-token" } = $$props;
|
375 |
+
let { rounded = "rounded-token" } = $$props;
|
376 |
+
let { padding = "px-4 py-1" } = $$props;
|
377 |
+
let { active = "variant-filled" } = $$props;
|
378 |
+
let { hover = "hover:variant-soft" } = $$props;
|
379 |
+
let { color = "" } = $$props;
|
380 |
+
let { fill = "" } = $$props;
|
381 |
+
let { regionLabel = "" } = $$props;
|
382 |
+
let { labelledby = "" } = $$props;
|
383 |
+
setContext("rounded", rounded);
|
384 |
+
setContext("padding", padding);
|
385 |
+
setContext("active", active);
|
386 |
+
setContext("hover", hover);
|
387 |
+
setContext("color", color);
|
388 |
+
setContext("fill", fill);
|
389 |
+
setContext("regionLabel", regionLabel);
|
390 |
+
if ($$props.display === void 0 && $$bindings.display && display !== void 0)
|
391 |
+
$$bindings.display(display);
|
392 |
+
if ($$props.flexDirection === void 0 && $$bindings.flexDirection && flexDirection !== void 0)
|
393 |
+
$$bindings.flexDirection(flexDirection);
|
394 |
+
if ($$props.gap === void 0 && $$bindings.gap && gap !== void 0)
|
395 |
+
$$bindings.gap(gap);
|
396 |
+
if ($$props.background === void 0 && $$bindings.background && background !== void 0)
|
397 |
+
$$bindings.background(background);
|
398 |
+
if ($$props.border === void 0 && $$bindings.border && border !== void 0)
|
399 |
+
$$bindings.border(border);
|
400 |
+
if ($$props.rounded === void 0 && $$bindings.rounded && rounded !== void 0)
|
401 |
+
$$bindings.rounded(rounded);
|
402 |
+
if ($$props.padding === void 0 && $$bindings.padding && padding !== void 0)
|
403 |
+
$$bindings.padding(padding);
|
404 |
+
if ($$props.active === void 0 && $$bindings.active && active !== void 0)
|
405 |
+
$$bindings.active(active);
|
406 |
+
if ($$props.hover === void 0 && $$bindings.hover && hover !== void 0)
|
407 |
+
$$bindings.hover(hover);
|
408 |
+
if ($$props.color === void 0 && $$bindings.color && color !== void 0)
|
409 |
+
$$bindings.color(color);
|
410 |
+
if ($$props.fill === void 0 && $$bindings.fill && fill !== void 0)
|
411 |
+
$$bindings.fill(fill);
|
412 |
+
if ($$props.regionLabel === void 0 && $$bindings.regionLabel && regionLabel !== void 0)
|
413 |
+
$$bindings.regionLabel(regionLabel);
|
414 |
+
if ($$props.labelledby === void 0 && $$bindings.labelledby && labelledby !== void 0)
|
415 |
+
$$bindings.labelledby(labelledby);
|
416 |
+
classesBase = `${cBase$2} ${display} ${flexDirection} ${gap} ${background} ${border} ${rounded} ${$$props.class ?? ""}`;
|
417 |
+
return `<div class="${"radio-group " + escape(classesBase, true)}" data-testid="radio-group" role="radiogroup"${add_attribute("aria-labelledby", labelledby, 0)}>${slots.default ? slots.default({}) : ``}</div>`;
|
418 |
+
});
|
419 |
+
const cBase$1 = "flex-auto";
|
420 |
+
const cWrapper$1 = "text-base text-center cursor-pointer";
|
421 |
+
const cDisabled = "opacity-50 cursor-not-allowed";
|
422 |
+
const RadioItem = create_ssr_component(($$result, $$props, $$bindings, slots) => {
|
423 |
+
let checked;
|
424 |
+
let classesActive;
|
425 |
+
let classesDisabled;
|
426 |
+
let classsBase;
|
427 |
+
let classesWrapper;
|
428 |
+
let $$restProps = compute_rest_props($$props, [
|
429 |
+
"group",
|
430 |
+
"name",
|
431 |
+
"value",
|
432 |
+
"title",
|
433 |
+
"label",
|
434 |
+
"rounded",
|
435 |
+
"padding",
|
436 |
+
"active",
|
437 |
+
"hover",
|
438 |
+
"color",
|
439 |
+
"fill",
|
440 |
+
"regionLabel"
|
441 |
+
]);
|
442 |
+
let { group } = $$props;
|
443 |
+
let { name } = $$props;
|
444 |
+
let { value } = $$props;
|
445 |
+
let { title = "" } = $$props;
|
446 |
+
let { label = "" } = $$props;
|
447 |
+
let { rounded = getContext("rounded") } = $$props;
|
448 |
+
let { padding = getContext("padding") } = $$props;
|
449 |
+
let { active = getContext("active") } = $$props;
|
450 |
+
let { hover = getContext("hover") } = $$props;
|
451 |
+
let { color = getContext("color") } = $$props;
|
452 |
+
let { fill = getContext("fill") } = $$props;
|
453 |
+
let { regionLabel = getContext("regionLabel") } = $$props;
|
454 |
+
let elemInput;
|
455 |
+
function prunedRestProps() {
|
456 |
+
delete $$restProps.class;
|
457 |
+
return $$restProps;
|
458 |
+
}
|
459 |
+
if ($$props.group === void 0 && $$bindings.group && group !== void 0)
|
460 |
+
$$bindings.group(group);
|
461 |
+
if ($$props.name === void 0 && $$bindings.name && name !== void 0)
|
462 |
+
$$bindings.name(name);
|
463 |
+
if ($$props.value === void 0 && $$bindings.value && value !== void 0)
|
464 |
+
$$bindings.value(value);
|
465 |
+
if ($$props.title === void 0 && $$bindings.title && title !== void 0)
|
466 |
+
$$bindings.title(title);
|
467 |
+
if ($$props.label === void 0 && $$bindings.label && label !== void 0)
|
468 |
+
$$bindings.label(label);
|
469 |
+
if ($$props.rounded === void 0 && $$bindings.rounded && rounded !== void 0)
|
470 |
+
$$bindings.rounded(rounded);
|
471 |
+
if ($$props.padding === void 0 && $$bindings.padding && padding !== void 0)
|
472 |
+
$$bindings.padding(padding);
|
473 |
+
if ($$props.active === void 0 && $$bindings.active && active !== void 0)
|
474 |
+
$$bindings.active(active);
|
475 |
+
if ($$props.hover === void 0 && $$bindings.hover && hover !== void 0)
|
476 |
+
$$bindings.hover(hover);
|
477 |
+
if ($$props.color === void 0 && $$bindings.color && color !== void 0)
|
478 |
+
$$bindings.color(color);
|
479 |
+
if ($$props.fill === void 0 && $$bindings.fill && fill !== void 0)
|
480 |
+
$$bindings.fill(fill);
|
481 |
+
if ($$props.regionLabel === void 0 && $$bindings.regionLabel && regionLabel !== void 0)
|
482 |
+
$$bindings.regionLabel(regionLabel);
|
483 |
+
checked = value === group;
|
484 |
+
classesActive = checked ? `${active} ${color} ${fill}` : hover;
|
485 |
+
classesDisabled = $$props.disabled ? cDisabled : "";
|
486 |
+
classsBase = `${cBase$1}`;
|
487 |
+
classesWrapper = `${cWrapper$1} ${padding} ${rounded} ${classesActive} ${classesDisabled} ${$$props.class ?? ""}`;
|
488 |
+
return `<label class="${"radio-label " + escape(classsBase, true) + " " + escape(regionLabel, true)}"> <div class="${"radio-item " + escape(classesWrapper, true)}" data-testid="radio-item" role="radio"${add_attribute("aria-checked", checked, 0)}${add_attribute("aria-label", label, 0)} tabindex="0"${add_attribute("title", title, 0)}> <div class="h-0 w-0 overflow-hidden"><input${spread(
|
489 |
+
[
|
490 |
+
{ type: "radio" },
|
491 |
+
{ name: escape_attribute_value(name) },
|
492 |
+
{ value: escape_attribute_value(value) },
|
493 |
+
escape_object(prunedRestProps()),
|
494 |
+
{ tabindex: "-1" }
|
495 |
+
],
|
496 |
+
{}
|
497 |
+
)}${add_attribute("this", elemInput, 0)}${value === group ? add_attribute("checked", true, 1) : ""}></div> ${slots.default ? slots.default({}) : ``}</div></label>`;
|
498 |
+
});
|
499 |
+
const cBase = "inline-block";
|
500 |
+
const cLabel = "unstyled flex items-center";
|
501 |
+
const cTrack = "flex transition-all duration-[200ms] cursor-pointer";
|
502 |
+
const cThumb = "w-[50%] h-full scale-[0.8] transition-all duration-[200ms] shadow";
|
503 |
+
const SlideToggle = create_ssr_component(($$result, $$props, $$bindings, slots) => {
|
504 |
+
let cTrackActive;
|
505 |
+
let cThumbBackground;
|
506 |
+
let cThumbPos;
|
507 |
+
let classesDisabled;
|
508 |
+
let classesBase;
|
509 |
+
let classesLabel;
|
510 |
+
let classesTrack;
|
511 |
+
let classesThumb;
|
512 |
+
let $$restProps = compute_rest_props($$props, ["name", "checked", "size", "background", "active", "border", "rounded", "label"]);
|
513 |
+
let $$slots = compute_slots(slots);
|
514 |
+
createEventDispatcher();
|
515 |
+
let { name } = $$props;
|
516 |
+
let { checked = false } = $$props;
|
517 |
+
let { size = "md" } = $$props;
|
518 |
+
let { background = "bg-surface-400 dark:bg-surface-700" } = $$props;
|
519 |
+
let { active = "bg-surface-900 dark:bg-surface-300" } = $$props;
|
520 |
+
let { border = "" } = $$props;
|
521 |
+
let { rounded = "rounded-full" } = $$props;
|
522 |
+
let { label = "" } = $$props;
|
523 |
+
let trackSize;
|
524 |
+
switch (size) {
|
525 |
+
case "sm":
|
526 |
+
trackSize = "w-12 h-6";
|
527 |
+
break;
|
528 |
+
case "lg":
|
529 |
+
trackSize = "w-20 h-10";
|
530 |
+
break;
|
531 |
+
default:
|
532 |
+
trackSize = "w-16 h-8";
|
533 |
+
}
|
534 |
+
function prunedRestProps() {
|
535 |
+
delete $$restProps.class;
|
536 |
+
return $$restProps;
|
537 |
+
}
|
538 |
+
if ($$props.name === void 0 && $$bindings.name && name !== void 0)
|
539 |
+
$$bindings.name(name);
|
540 |
+
if ($$props.checked === void 0 && $$bindings.checked && checked !== void 0)
|
541 |
+
$$bindings.checked(checked);
|
542 |
+
if ($$props.size === void 0 && $$bindings.size && size !== void 0)
|
543 |
+
$$bindings.size(size);
|
544 |
+
if ($$props.background === void 0 && $$bindings.background && background !== void 0)
|
545 |
+
$$bindings.background(background);
|
546 |
+
if ($$props.active === void 0 && $$bindings.active && active !== void 0)
|
547 |
+
$$bindings.active(active);
|
548 |
+
if ($$props.border === void 0 && $$bindings.border && border !== void 0)
|
549 |
+
$$bindings.border(border);
|
550 |
+
if ($$props.rounded === void 0 && $$bindings.rounded && rounded !== void 0)
|
551 |
+
$$bindings.rounded(rounded);
|
552 |
+
if ($$props.label === void 0 && $$bindings.label && label !== void 0)
|
553 |
+
$$bindings.label(label);
|
554 |
+
cTrackActive = checked ? active : `${background} cursor-pointer`;
|
555 |
+
cThumbBackground = checked ? "bg-white/75" : "bg-white";
|
556 |
+
cThumbPos = checked ? "translate-x-full" : "";
|
557 |
+
classesDisabled = $$props.disabled === true ? "opacity-50" : "hover:brightness-[105%] dark:hover:brightness-110 cursor-pointer";
|
558 |
+
classesBase = `${cBase} ${rounded} ${classesDisabled} ${$$props.class ?? ""}`;
|
559 |
+
classesLabel = `${cLabel}`;
|
560 |
+
classesTrack = `${cTrack} ${border} ${rounded} ${trackSize} ${cTrackActive}`;
|
561 |
+
classesThumb = `${cThumb} ${rounded} ${cThumbBackground} ${cThumbPos}`;
|
562 |
+
return `<div${add_attribute("id", label, 0)} class="${"slide-toggle " + escape(classesBase, true)}" data-testid="slide-toggle" role="switch"${add_attribute("aria-label", label, 0)}${add_attribute("aria-checked", checked, 0)} tabindex="0"><label class="${"slide-toggle-label " + escape(classesLabel, true)}"> <input${spread(
|
563 |
+
[
|
564 |
+
{ type: "checkbox" },
|
565 |
+
{ class: "slide-toggle-input hidden" },
|
566 |
+
{ name: escape_attribute_value(name) },
|
567 |
+
escape_object(prunedRestProps()),
|
568 |
+
{ disabled: $$props.disabled || null }
|
569 |
+
],
|
570 |
+
{}
|
571 |
+
)}${add_attribute("checked", checked, 1)}> <div class="${[
|
572 |
+
"slide-toggle-track " + escape(classesTrack, true),
|
573 |
+
$$props.disabled ? "cursor-not-allowed" : ""
|
574 |
+
].join(" ").trim()}"><div class="${[
|
575 |
+
"slide-toggle-thumb " + escape(classesThumb, true),
|
576 |
+
$$props.disabled ? "cursor-not-allowed" : ""
|
577 |
+
].join(" ").trim()}"></div></div> ${$$slots.default ? `<div class="slide-toggle-text ml-3">${slots.default ? slots.default({}) : ``}</div>` : ``}</label></div>`;
|
578 |
+
});
|
579 |
+
const cWrapper = "flex fixed top-0 left-0 right-0 bottom-0 pointer-events-none";
|
580 |
+
const cSnackbar = "flex flex-col gap-y-2";
|
581 |
+
const cToast = "flex justify-between items-center pointer-events-auto";
|
582 |
+
const cToastActions = "flex items-center space-x-2";
|
583 |
+
const Toast = create_ssr_component(($$result, $$props, $$bindings, slots) => {
|
584 |
+
let classesWrapper;
|
585 |
+
let classesSnackbar;
|
586 |
+
let classesToast;
|
587 |
+
let filteredToasts;
|
588 |
+
let $toastStore, $$unsubscribe_toastStore;
|
589 |
+
let $prefersReducedMotionStore, $$unsubscribe_prefersReducedMotionStore;
|
590 |
+
$$unsubscribe_prefersReducedMotionStore = subscribe(prefersReducedMotionStore, (value) => $prefersReducedMotionStore = value);
|
591 |
+
const toastStore = getToastStore();
|
592 |
+
$$unsubscribe_toastStore = subscribe(toastStore, (value) => $toastStore = value);
|
593 |
+
let { position = "b" } = $$props;
|
594 |
+
let { max = 3 } = $$props;
|
595 |
+
let { background = "variant-filled-secondary" } = $$props;
|
596 |
+
let { width = "max-w-[640px]" } = $$props;
|
597 |
+
let { color = "" } = $$props;
|
598 |
+
let { padding = "p-4" } = $$props;
|
599 |
+
let { spacing = "space-x-4" } = $$props;
|
600 |
+
let { rounded = "rounded-container-token" } = $$props;
|
601 |
+
let { shadow = "shadow-lg" } = $$props;
|
602 |
+
let { zIndex = "z-[888]" } = $$props;
|
603 |
+
let { buttonAction = "btn variant-filled" } = $$props;
|
604 |
+
let { buttonDismiss = "btn-icon btn-icon-sm variant-filled" } = $$props;
|
605 |
+
let { buttonDismissLabel = "✕" } = $$props;
|
606 |
+
let { transitions = !$prefersReducedMotionStore } = $$props;
|
607 |
+
let { transitionIn = fly } = $$props;
|
608 |
+
let { transitionInParams = { duration: 250 } } = $$props;
|
609 |
+
let { transitionOut = fly } = $$props;
|
610 |
+
let { transitionOutParams = { duration: 250 } } = $$props;
|
611 |
+
let cPosition;
|
612 |
+
let cAlign;
|
613 |
+
switch (position) {
|
614 |
+
case "t":
|
615 |
+
cPosition = "justify-center items-start";
|
616 |
+
cAlign = "items-center";
|
617 |
+
break;
|
618 |
+
case "b":
|
619 |
+
cPosition = "justify-center items-end";
|
620 |
+
cAlign = "items-center";
|
621 |
+
break;
|
622 |
+
case "l":
|
623 |
+
cPosition = "justify-start items-center";
|
624 |
+
cAlign = "items-start";
|
625 |
+
break;
|
626 |
+
case "r":
|
627 |
+
cPosition = "justify-end items-center";
|
628 |
+
cAlign = "items-end";
|
629 |
+
break;
|
630 |
+
case "tl":
|
631 |
+
cPosition = "justify-start items-start";
|
632 |
+
cAlign = "items-start";
|
633 |
+
break;
|
634 |
+
case "tr":
|
635 |
+
cPosition = "justify-end items-start";
|
636 |
+
cAlign = "items-end";
|
637 |
+
break;
|
638 |
+
case "bl":
|
639 |
+
cPosition = "justify-start items-end";
|
640 |
+
cAlign = "items-start";
|
641 |
+
break;
|
642 |
+
case "br":
|
643 |
+
cPosition = "justify-end items-end";
|
644 |
+
cAlign = "items-end";
|
645 |
+
break;
|
646 |
+
}
|
647 |
+
if ($$props.position === void 0 && $$bindings.position && position !== void 0)
|
648 |
+
$$bindings.position(position);
|
649 |
+
if ($$props.max === void 0 && $$bindings.max && max !== void 0)
|
650 |
+
$$bindings.max(max);
|
651 |
+
if ($$props.background === void 0 && $$bindings.background && background !== void 0)
|
652 |
+
$$bindings.background(background);
|
653 |
+
if ($$props.width === void 0 && $$bindings.width && width !== void 0)
|
654 |
+
$$bindings.width(width);
|
655 |
+
if ($$props.color === void 0 && $$bindings.color && color !== void 0)
|
656 |
+
$$bindings.color(color);
|
657 |
+
if ($$props.padding === void 0 && $$bindings.padding && padding !== void 0)
|
658 |
+
$$bindings.padding(padding);
|
659 |
+
if ($$props.spacing === void 0 && $$bindings.spacing && spacing !== void 0)
|
660 |
+
$$bindings.spacing(spacing);
|
661 |
+
if ($$props.rounded === void 0 && $$bindings.rounded && rounded !== void 0)
|
662 |
+
$$bindings.rounded(rounded);
|
663 |
+
if ($$props.shadow === void 0 && $$bindings.shadow && shadow !== void 0)
|
664 |
+
$$bindings.shadow(shadow);
|
665 |
+
if ($$props.zIndex === void 0 && $$bindings.zIndex && zIndex !== void 0)
|
666 |
+
$$bindings.zIndex(zIndex);
|
667 |
+
if ($$props.buttonAction === void 0 && $$bindings.buttonAction && buttonAction !== void 0)
|
668 |
+
$$bindings.buttonAction(buttonAction);
|
669 |
+
if ($$props.buttonDismiss === void 0 && $$bindings.buttonDismiss && buttonDismiss !== void 0)
|
670 |
+
$$bindings.buttonDismiss(buttonDismiss);
|
671 |
+
if ($$props.buttonDismissLabel === void 0 && $$bindings.buttonDismissLabel && buttonDismissLabel !== void 0)
|
672 |
+
$$bindings.buttonDismissLabel(buttonDismissLabel);
|
673 |
+
if ($$props.transitions === void 0 && $$bindings.transitions && transitions !== void 0)
|
674 |
+
$$bindings.transitions(transitions);
|
675 |
+
if ($$props.transitionIn === void 0 && $$bindings.transitionIn && transitionIn !== void 0)
|
676 |
+
$$bindings.transitionIn(transitionIn);
|
677 |
+
if ($$props.transitionInParams === void 0 && $$bindings.transitionInParams && transitionInParams !== void 0)
|
678 |
+
$$bindings.transitionInParams(transitionInParams);
|
679 |
+
if ($$props.transitionOut === void 0 && $$bindings.transitionOut && transitionOut !== void 0)
|
680 |
+
$$bindings.transitionOut(transitionOut);
|
681 |
+
if ($$props.transitionOutParams === void 0 && $$bindings.transitionOutParams && transitionOutParams !== void 0)
|
682 |
+
$$bindings.transitionOutParams(transitionOutParams);
|
683 |
+
classesWrapper = `${cWrapper} ${cPosition} ${zIndex} ${$$props.class || ""}`;
|
684 |
+
classesSnackbar = `${cSnackbar} ${cAlign} ${padding}`;
|
685 |
+
classesToast = `${cToast} ${width} ${color} ${padding} ${spacing} ${rounded} ${shadow}`;
|
686 |
+
filteredToasts = Array.from($toastStore).slice(0, max);
|
687 |
+
$$unsubscribe_toastStore();
|
688 |
+
$$unsubscribe_prefersReducedMotionStore();
|
689 |
+
return `${$toastStore.length ? ` <div class="${"snackbar-wrapper " + escape(classesWrapper, true)}" data-testid="snackbar-wrapper"> <div class="${"snackbar " + escape(classesSnackbar, true)}">${each(filteredToasts, (t, i) => {
|
690 |
+
return `<div${add_attribute("role", t.hideDismiss ? "alert" : "alertdialog", 0)} aria-live="polite"> <div class="${"toast " + escape(classesToast, true) + " " + escape(t.background ?? background, true) + " " + escape(t.classes ?? "", true)}" data-testid="toast"><div class="text-base"><!-- HTML_TAG_START -->${t.message}<!-- HTML_TAG_END --></div> ${t.action || !t.hideDismiss ? `<div class="${"toast-actions " + escape(cToastActions, true)}">${t.action ? `<button${add_attribute("class", buttonAction, 0)}><!-- HTML_TAG_START -->${t.action.label}<!-- HTML_TAG_END --></button>` : ``} ${!t.hideDismiss ? `<button${add_attribute("class", buttonDismiss, 0)} aria-label="Dismiss toast">${escape(buttonDismissLabel)}</button>` : ``} </div>` : ``}</div> </div>`;
|
691 |
+
})}</div></div>` : ``}`;
|
692 |
+
});
|
693 |
+
const LoadingSpinner = create_ssr_component(($$result, $$props, $$bindings, slots) => {
|
694 |
+
let { size = 20 } = $$props;
|
695 |
+
if ($$props.size === void 0 && $$bindings.size && size !== void 0)
|
696 |
+
$$bindings.size(size);
|
697 |
+
return `<svg version="1.1" id="L4" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 100 100" enable-background="new 0 0 0 0" xml:space="preserve"><circle fill="#1976d2" stroke="none" cx="6" cy="50" r="6"><animate attributeName="opacity" dur="1s" values="0;1;0" repeatCount="indefinite" begin="0.1"></animate></circle><circle fill="#1976d2" stroke="none" cx="26" cy="50" r="6"><animate attributeName="opacity" dur="1s" values="0;1;0" repeatCount="indefinite" begin="0.2"></animate></circle><circle fill="#1976d2" stroke="none" cx="46" cy="50" r="6"><animate attributeName="opacity" dur="1s" values="0;1;0" repeatCount="indefinite" begin="0.3"></animate></circle></svg>`;
|
698 |
+
});
|
699 |
+
const css$8 = {
|
700 |
+
code: ".search-result.svelte-1srbk6k{margin-bottom:20px}.title.svelte-1srbk6k{font-weight:bold}.annotation.svelte-1srbk6k{overflow:hidden;display:-webkit-box;-webkit-line-clamp:5;-webkit-box-orient:vertical;text-overflow:ellipsis;white-space:normal}a.svelte-1srbk6k{cursor:pointer}.full-text.svelte-1srbk6k{display:block;white-space:normal}.title.svelte-1srbk6k{color:#1a0dab}",
|
701 |
+
map: null
|
702 |
+
};
|
703 |
+
const SearchResultsItem = create_ssr_component(($$result, $$props, $$bindings, slots) => {
|
704 |
+
let { showFullText = Array(10).fill(false) } = $$props;
|
705 |
+
let { useSearchResult } = $$props;
|
706 |
+
let { index } = $$props;
|
707 |
+
let { title } = $$props;
|
708 |
+
let { teaser } = $$props;
|
709 |
+
let { text } = $$props;
|
710 |
+
let { enableDocumentDb = false } = $$props;
|
711 |
+
let { documentDbUrl = "" } = $$props;
|
712 |
+
let { enableSearchResultSelection = false } = $$props;
|
713 |
+
if ($$props.showFullText === void 0 && $$bindings.showFullText && showFullText !== void 0)
|
714 |
+
$$bindings.showFullText(showFullText);
|
715 |
+
if ($$props.useSearchResult === void 0 && $$bindings.useSearchResult && useSearchResult !== void 0)
|
716 |
+
$$bindings.useSearchResult(useSearchResult);
|
717 |
+
if ($$props.index === void 0 && $$bindings.index && index !== void 0)
|
718 |
+
$$bindings.index(index);
|
719 |
+
if ($$props.title === void 0 && $$bindings.title && title !== void 0)
|
720 |
+
$$bindings.title(title);
|
721 |
+
if ($$props.teaser === void 0 && $$bindings.teaser && teaser !== void 0)
|
722 |
+
$$bindings.teaser(teaser);
|
723 |
+
if ($$props.text === void 0 && $$bindings.text && text !== void 0)
|
724 |
+
$$bindings.text(text);
|
725 |
+
if ($$props.enableDocumentDb === void 0 && $$bindings.enableDocumentDb && enableDocumentDb !== void 0)
|
726 |
+
$$bindings.enableDocumentDb(enableDocumentDb);
|
727 |
+
if ($$props.documentDbUrl === void 0 && $$bindings.documentDbUrl && documentDbUrl !== void 0)
|
728 |
+
$$bindings.documentDbUrl(documentDbUrl);
|
729 |
+
if ($$props.enableSearchResultSelection === void 0 && $$bindings.enableSearchResultSelection && enableSearchResultSelection !== void 0)
|
730 |
+
$$bindings.enableSearchResultSelection(enableSearchResultSelection);
|
731 |
+
$$result.css.add(css$8);
|
732 |
+
return `<div class="search-result svelte-1srbk6k"><div class="title svelte-1srbk6k"><label style="cursor:pointer">${enableSearchResultSelection ? `<input type="checkbox"${add_attribute("checked", useSearchResult[title], 1)}>` : ``} ${escape(title)}</label></div> ${showFullText[index] ? `<div class="annotation full-text svelte-1srbk6k">${each(text.split("\n"), (line) => {
|
733 |
+
return `<p>${escape(line)}</p>`;
|
734 |
+
})}</div>` : `<div class="annotation svelte-1srbk6k">${escape(teaser)}</div>`} ${enableDocumentDb && documentDbUrl ? `<a href="${escape(documentDbUrl, true) + "s/" + escape(encodeURIComponent(title), true)}" target="_blank" style="font-weight: 500" class="svelte-1srbk6k">Открыть документ</a>` : ``} ${text.length > 100 ? `${showFullText[index] ? `<a class="svelte-1srbk6k" data-svelte-h="svelte-18vtpy5">свернуть</a>` : `<a class="svelte-1srbk6k" data-svelte-h="svelte-lqw9hz">развернуть</a>`}` : ``} </div>`;
|
735 |
+
});
|
736 |
+
const css$7 = {
|
737 |
+
code: ".search-results.svelte-1ptibtq.svelte-1ptibtq{flex:1;overflow-y:auto;padding:1rem}.settings-bar.svelte-1ptibtq.svelte-1ptibtq{margin-bottom:10px}.settings-bar.svelte-1ptibtq label.svelte-1ptibtq{margin-right:10px}",
|
738 |
+
map: null
|
739 |
+
};
|
740 |
+
const SearchResults = create_ssr_component(($$result, $$props, $$bindings, slots) => {
|
741 |
+
let { enableDocumentDb = false } = $$props;
|
742 |
+
let { documentDbUrl = "" } = $$props;
|
743 |
+
let { showFullText = Array(10).fill(false) } = $$props;
|
744 |
+
let { useSearchResult } = $$props;
|
745 |
+
let groupByChecked = false;
|
746 |
+
let sortSearchResultsBy = "rel";
|
747 |
+
let { searchResults = [] } = $$props;
|
748 |
+
let groupedSearchResults;
|
749 |
+
let { enableSearchResultSelection = false } = $$props;
|
750 |
+
const groupByType = (searchResults2) => {
|
751 |
+
return searchResults2.reduce(
|
752 |
+
(result, item) => {
|
753 |
+
const docType = item.docType || "Другие документы";
|
754 |
+
if (!result[docType]) {
|
755 |
+
result[docType] = [];
|
756 |
+
}
|
757 |
+
result[docType].push(item);
|
758 |
+
return result;
|
759 |
+
},
|
760 |
+
{}
|
761 |
+
);
|
762 |
+
};
|
763 |
+
if ($$props.enableDocumentDb === void 0 && $$bindings.enableDocumentDb && enableDocumentDb !== void 0)
|
764 |
+
$$bindings.enableDocumentDb(enableDocumentDb);
|
765 |
+
if ($$props.documentDbUrl === void 0 && $$bindings.documentDbUrl && documentDbUrl !== void 0)
|
766 |
+
$$bindings.documentDbUrl(documentDbUrl);
|
767 |
+
if ($$props.showFullText === void 0 && $$bindings.showFullText && showFullText !== void 0)
|
768 |
+
$$bindings.showFullText(showFullText);
|
769 |
+
if ($$props.useSearchResult === void 0 && $$bindings.useSearchResult && useSearchResult !== void 0)
|
770 |
+
$$bindings.useSearchResult(useSearchResult);
|
771 |
+
if ($$props.searchResults === void 0 && $$bindings.searchResults && searchResults !== void 0)
|
772 |
+
$$bindings.searchResults(searchResults);
|
773 |
+
if ($$props.enableSearchResultSelection === void 0 && $$bindings.enableSearchResultSelection && enableSearchResultSelection !== void 0)
|
774 |
+
$$bindings.enableSearchResultSelection(enableSearchResultSelection);
|
775 |
+
$$result.css.add(css$7);
|
776 |
+
let $$settled;
|
777 |
+
let $$rendered;
|
778 |
+
let previous_head = $$result.head;
|
779 |
+
do {
|
780 |
+
$$settled = true;
|
781 |
+
$$result.head = previous_head;
|
782 |
+
{
|
783 |
+
{
|
784 |
+
if (groupByChecked) {
|
785 |
+
groupedSearchResults = groupByType(searchResults);
|
786 |
+
}
|
787 |
+
if (sortSearchResultsBy == "date") {
|
788 |
+
searchResults = SearchResultsSorter.sortByDate(searchResults);
|
789 |
+
} else if (sortSearchResultsBy == "rel") {
|
790 |
+
searchResults = SearchResultsSorter.sortByRelevance(searchResults);
|
791 |
+
}
|
792 |
+
}
|
793 |
+
}
|
794 |
+
{
|
795 |
+
if (useSearchResult === void 0) {
|
796 |
+
useSearchResult = {};
|
797 |
+
}
|
798 |
+
}
|
799 |
+
$$rendered = `<div class="search-results svelte-1ptibtq">${searchResults && searchResults.length > 0 ? `<div class="settings-bar svelte-1ptibtq"><div class="card w-full flex p-2 space-y-2" style="align-items: center; flex-wrap: wrap;"><label style="display: inline-block;flex-wrap: wrap;" class="svelte-1ptibtq" data-svelte-h="svelte-12wnwfn">Сортировать по:</label> ${validate_component(RadioGroup, "RadioGroup").$$render($$result, { background: "", border: "" }, {}, {
|
800 |
+
default: () => {
|
801 |
+
return `${validate_component(RadioItem, "RadioItem").$$render(
|
802 |
+
$$result,
|
803 |
+
{
|
804 |
+
name: "sortBy",
|
805 |
+
value: "rel",
|
806 |
+
group: sortSearchResultsBy
|
807 |
+
},
|
808 |
+
{
|
809 |
+
group: ($$value) => {
|
810 |
+
sortSearchResultsBy = $$value;
|
811 |
+
$$settled = false;
|
812 |
+
}
|
813 |
+
},
|
814 |
+
{
|
815 |
+
default: () => {
|
816 |
+
return `релевантности`;
|
817 |
+
}
|
818 |
+
}
|
819 |
+
)} ${validate_component(RadioItem, "RadioItem").$$render(
|
820 |
+
$$result,
|
821 |
+
{
|
822 |
+
name: "sortBy",
|
823 |
+
value: "date",
|
824 |
+
group: sortSearchResultsBy
|
825 |
+
},
|
826 |
+
{
|
827 |
+
group: ($$value) => {
|
828 |
+
sortSearchResultsBy = $$value;
|
829 |
+
$$settled = false;
|
830 |
+
}
|
831 |
+
},
|
832 |
+
{
|
833 |
+
default: () => {
|
834 |
+
return `дате`;
|
835 |
+
}
|
836 |
+
}
|
837 |
+
)}`;
|
838 |
+
}
|
839 |
+
})} ${validate_component(SlideToggle, "SlideToggle").$$render(
|
840 |
+
$$result,
|
841 |
+
{
|
842 |
+
name: "groupByChecked",
|
843 |
+
size: "sm",
|
844 |
+
label: "Группировать по типу",
|
845 |
+
checked: groupByChecked
|
846 |
+
},
|
847 |
+
{
|
848 |
+
checked: ($$value) => {
|
849 |
+
groupByChecked = $$value;
|
850 |
+
$$settled = false;
|
851 |
+
}
|
852 |
+
},
|
853 |
+
{
|
854 |
+
default: () => {
|
855 |
+
return `Группировать по типу`;
|
856 |
+
}
|
857 |
+
}
|
858 |
+
)}</div></div>` : ``} ${groupByChecked && groupedSearchResults ? `${validate_component(Accordion, "Accordion").$$render($$result, {}, {}, {
|
859 |
+
default: () => {
|
860 |
+
return `${each(Object.entries(groupedSearchResults), ([docType, results]) => {
|
861 |
+
return `${validate_component(AccordionItem, "AccordionItem").$$render($$result, {}, {}, {
|
862 |
+
content: () => {
|
863 |
+
return `${each(results, ({ title, text, teaser, text_for_llm }, index) => {
|
864 |
+
return `${validate_component(SearchResultsItem, "SearchResultsItem").$$render(
|
865 |
+
$$result,
|
866 |
+
{
|
867 |
+
title,
|
868 |
+
text: text_for_llm || text,
|
869 |
+
teaser,
|
870 |
+
index,
|
871 |
+
enableSearchResultSelection,
|
872 |
+
useSearchResult,
|
873 |
+
showFullText
|
874 |
+
},
|
875 |
+
{},
|
876 |
+
{}
|
877 |
+
)}`;
|
878 |
+
})} `;
|
879 |
+
},
|
880 |
+
summary: () => {
|
881 |
+
return `${escape(docType)}`;
|
882 |
+
},
|
883 |
+
lead: () => {
|
884 |
+
return `${enableSearchResultSelection ? `<input type="checkbox"${add_attribute("data-doctype", docType, 0)}>` : ``} `;
|
885 |
+
}
|
886 |
+
})}`;
|
887 |
+
})}`;
|
888 |
+
}
|
889 |
+
})}` : `${each(searchResults, ({ title, text, teaser, text_for_llm }, index) => {
|
890 |
+
return `${validate_component(SearchResultsItem, "SearchResultsItem").$$render(
|
891 |
+
$$result,
|
892 |
+
{
|
893 |
+
title,
|
894 |
+
text: text_for_llm || text,
|
895 |
+
teaser,
|
896 |
+
index,
|
897 |
+
enableSearchResultSelection,
|
898 |
+
useSearchResult,
|
899 |
+
showFullText,
|
900 |
+
enableDocumentDb,
|
901 |
+
documentDbUrl
|
902 |
+
},
|
903 |
+
{},
|
904 |
+
{}
|
905 |
+
)}`;
|
906 |
+
})}`}</div> ${``}`;
|
907 |
+
} while (!$$settled);
|
908 |
+
return $$rendered;
|
909 |
+
});
|
910 |
+
const gatheringKey = {};
|
911 |
+
const GatheringRound = create_ssr_component(($$result, $$props, $$bindings, slots) => {
|
912 |
+
setContext(gatheringKey, true);
|
913 |
+
return `${slots.default ? slots.default({}) : ``}`;
|
914 |
+
});
|
915 |
+
const getDimensionName = (horizontal) => horizontal ? "height" : "width";
|
916 |
+
const css$6 = {
|
917 |
+
code: 'div.splitpanes--horizontal.splitpanes--dragging{cursor:row-resize}div.splitpanes--vertical.splitpanes--dragging{cursor:col-resize}.splitpanes{display:flex;width:100%;height:100%}.splitpanes--vertical{flex-direction:row}.splitpanes--horizontal{flex-direction:column}.splitpanes--dragging *{-webkit-user-select:none;-moz-user-select:none;user-select:none}.splitpanes__pane{width:100%;height:100%;overflow:hidden}.splitpanes--vertical .splitpanes__pane{transition:width 0.2s ease-out}.splitpanes--horizontal .splitpanes__pane{transition:height 0.2s ease-out}.splitpanes--vertical>.splitpanes__pane{transition:width 0.2s ease-out}.splitpanes--horizontal>.splitpanes__pane{transition:height 0.2s ease-out}.splitpanes--dragging .splitpanes__pane{transition:none;pointer-events:none}.splitpanes--freeze .splitpanes__pane{transition:none}.splitpanes__splitter{touch-action:none}.splitpanes--vertical>.splitpanes__splitter{min-width:1px}.splitpanes--horizontal>.splitpanes__splitter{min-height:1px}.splitpanes.default-theme .splitpanes__pane{background-color:#f2f2f2}.splitpanes.default-theme .splitpanes__splitter{background-color:#fff;box-sizing:border-box;position:relative;flex-shrink:0}.splitpanes.default-theme .splitpanes__splitter:before,.splitpanes.default-theme .splitpanes__splitter:after{content:"";position:absolute;top:50%;left:50%;background-color:rgba(0, 0, 0, 0.15);transition:background-color 0.3s}.splitpanes.default-theme .splitpanes__splitter:hover:before,.splitpanes.default-theme .splitpanes__splitter:hover:after{background-color:rgba(0, 0, 0, 0.25)}.splitpanes.default-theme .splitpanes__splitter:first-child{cursor:auto}.default-theme.splitpanes .splitpanes .splitpanes__splitter{z-index:1}.default-theme.splitpanes--vertical>.splitpanes__splitter,.default-theme .splitpanes--vertical>.splitpanes__splitter{width:7px;border-left:1px solid #eee;cursor:col-resize}.default-theme.splitpanes--vertical>.splitpanes__splitter:before,.default-theme.splitpanes--vertical>.splitpanes__splitter:after,.default-theme .splitpanes--vertical>.splitpanes__splitter:before,.default-theme .splitpanes--vertical>.splitpanes__splitter:after{transform:translateY(-50%);width:1px;height:30px}.default-theme.splitpanes--vertical>.splitpanes__splitter:before,.default-theme .splitpanes--vertical>.splitpanes__splitter:before{margin-left:-2px}.default-theme.splitpanes--vertical>.splitpanes__splitter:after,.default-theme .splitpanes--vertical>.splitpanes__splitter:after{margin-left:1px}.default-theme.splitpanes--horizontal>.splitpanes__splitter,.default-theme .splitpanes--horizontal>.splitpanes__splitter{height:7px;border-top:1px solid #eee;cursor:row-resize}.default-theme.splitpanes--horizontal>.splitpanes__splitter:before,.default-theme.splitpanes--horizontal>.splitpanes__splitter:after,.default-theme .splitpanes--horizontal>.splitpanes__splitter:before,.default-theme .splitpanes--horizontal>.splitpanes__splitter:after{transform:translateX(-50%);width:30px;height:1px}.default-theme.splitpanes--horizontal>.splitpanes__splitter:before,.default-theme .splitpanes--horizontal>.splitpanes__splitter:before{margin-top:-2px}.default-theme.splitpanes--horizontal>.splitpanes__splitter:after,.default-theme .splitpanes--horizontal>.splitpanes__splitter:after{margin-top:1px}',
|
918 |
+
map: null
|
919 |
+
};
|
920 |
+
const KEY = {};
|
921 |
+
const Splitpanes = create_ssr_component(($$result, $$props, $$bindings, slots) => {
|
922 |
+
let $veryFirstPaneKey, $$unsubscribe_veryFirstPaneKey;
|
923 |
+
let $showFirstSplitter, $$unsubscribe_showFirstSplitter;
|
924 |
+
let $isHorizontal, $$unsubscribe_isHorizontal;
|
925 |
+
let { id = void 0 } = $$props;
|
926 |
+
let { horizontal = false } = $$props;
|
927 |
+
let { pushOtherPanes = true } = $$props;
|
928 |
+
let { dblClickSplitter = true } = $$props;
|
929 |
+
let { rtl = "auto" } = $$props;
|
930 |
+
let { firstSplitter = false } = $$props;
|
931 |
+
let { style = null } = $$props;
|
932 |
+
let { theme = "default-theme" } = $$props;
|
933 |
+
let { class: clazz = "" } = $$props;
|
934 |
+
createEventDispatcher();
|
935 |
+
let container;
|
936 |
+
new Array();
|
937 |
+
let isHorizontal = writable(horizontal);
|
938 |
+
$$unsubscribe_isHorizontal = subscribe(isHorizontal, (value) => $isHorizontal = value);
|
939 |
+
const showFirstSplitter = writable(firstSplitter);
|
940 |
+
$$unsubscribe_showFirstSplitter = subscribe(showFirstSplitter, (value) => $showFirstSplitter = value);
|
941 |
+
const veryFirstPaneKey = writable(void 0);
|
942 |
+
$$unsubscribe_veryFirstPaneKey = subscribe(veryFirstPaneKey, (value) => $veryFirstPaneKey = value);
|
943 |
+
let ssrPaneDefinedSizeSum = 0;
|
944 |
+
let ssrPaneUndefinedSizeCount = 0;
|
945 |
+
function ssrRegisterPaneSize(size) {
|
946 |
+
if (size == null) {
|
947 |
+
++ssrPaneUndefinedSizeCount;
|
948 |
+
} else {
|
949 |
+
ssrPaneDefinedSizeSum += size;
|
950 |
+
}
|
951 |
+
}
|
952 |
+
const onPaneInit = (key) => {
|
953 |
+
if ($veryFirstPaneKey === void 0) {
|
954 |
+
set_store_value(veryFirstPaneKey, $veryFirstPaneKey = key, $veryFirstPaneKey);
|
955 |
+
}
|
956 |
+
return {
|
957 |
+
undefinedPaneInitSize: (100 - ssrPaneDefinedSizeSum) / ssrPaneUndefinedSizeCount
|
958 |
+
};
|
959 |
+
};
|
960 |
+
setContext(KEY, {
|
961 |
+
showFirstSplitter,
|
962 |
+
veryFirstPaneKey,
|
963 |
+
isHorizontal,
|
964 |
+
ssrRegisterPaneSize: ssrRegisterPaneSize,
|
965 |
+
onPaneInit,
|
966 |
+
clientOnly: void 0
|
967 |
+
});
|
968 |
+
if ($$props.id === void 0 && $$bindings.id && id !== void 0)
|
969 |
+
$$bindings.id(id);
|
970 |
+
if ($$props.horizontal === void 0 && $$bindings.horizontal && horizontal !== void 0)
|
971 |
+
$$bindings.horizontal(horizontal);
|
972 |
+
if ($$props.pushOtherPanes === void 0 && $$bindings.pushOtherPanes && pushOtherPanes !== void 0)
|
973 |
+
$$bindings.pushOtherPanes(pushOtherPanes);
|
974 |
+
if ($$props.dblClickSplitter === void 0 && $$bindings.dblClickSplitter && dblClickSplitter !== void 0)
|
975 |
+
$$bindings.dblClickSplitter(dblClickSplitter);
|
976 |
+
if ($$props.rtl === void 0 && $$bindings.rtl && rtl !== void 0)
|
977 |
+
$$bindings.rtl(rtl);
|
978 |
+
if ($$props.firstSplitter === void 0 && $$bindings.firstSplitter && firstSplitter !== void 0)
|
979 |
+
$$bindings.firstSplitter(firstSplitter);
|
980 |
+
if ($$props.style === void 0 && $$bindings.style && style !== void 0)
|
981 |
+
$$bindings.style(style);
|
982 |
+
if ($$props.theme === void 0 && $$bindings.theme && theme !== void 0)
|
983 |
+
$$bindings.theme(theme);
|
984 |
+
if ($$props.class === void 0 && $$bindings.class && clazz !== void 0)
|
985 |
+
$$bindings.class(clazz);
|
986 |
+
$$result.css.add(css$6);
|
987 |
+
set_store_value(isHorizontal, $isHorizontal = horizontal, $isHorizontal);
|
988 |
+
set_store_value(showFirstSplitter, $showFirstSplitter = firstSplitter, $showFirstSplitter);
|
989 |
+
$$unsubscribe_veryFirstPaneKey();
|
990 |
+
$$unsubscribe_showFirstSplitter();
|
991 |
+
$$unsubscribe_isHorizontal();
|
992 |
+
return `<div${add_attribute("id", id, 0)} class="${[
|
993 |
+
escape(`splitpanes ${theme || ""} ${clazz || ""}`, true),
|
994 |
+
(horizontal ? "splitpanes--horizontal" : "") + " " + (!horizontal ? "splitpanes--vertical" : "") + " " + ("") + " splitpanes--freeze"
|
995 |
+
].join(" ").trim()}"${add_attribute("style", style, 0)}${add_attribute("this", container, 0)}>${`${validate_component(GatheringRound, "GatheringRound").$$render($$result, {}, {}, {
|
996 |
+
default: () => {
|
997 |
+
return `${slots.default ? slots.default({}) : ``}`;
|
998 |
+
}
|
999 |
+
})}` } ${slots.default ? slots.default({}) : ``} </div>`;
|
1000 |
+
});
|
1001 |
+
const Pane = create_ssr_component(($$result, $$props, $$bindings, slots) => {
|
1002 |
+
let dimension;
|
1003 |
+
let style;
|
1004 |
+
let $isHorizontal, $$unsubscribe_isHorizontal;
|
1005 |
+
let $veryFirstPaneKey, $$unsubscribe_veryFirstPaneKey;
|
1006 |
+
let $showFirstSplitter, $$unsubscribe_showFirstSplitter;
|
1007 |
+
const { ssrRegisterPaneSize, onPaneInit, clientOnly: clientOnlyContext, isHorizontal, showFirstSplitter, veryFirstPaneKey } = getContext(KEY);
|
1008 |
+
$$unsubscribe_isHorizontal = subscribe(isHorizontal, (value) => $isHorizontal = value);
|
1009 |
+
$$unsubscribe_showFirstSplitter = subscribe(showFirstSplitter, (value) => $showFirstSplitter = value);
|
1010 |
+
$$unsubscribe_veryFirstPaneKey = subscribe(veryFirstPaneKey, (value) => $veryFirstPaneKey = value);
|
1011 |
+
let { size = null } = $$props;
|
1012 |
+
let { minSize = 0 } = $$props;
|
1013 |
+
let { maxSize = 100 } = $$props;
|
1014 |
+
let { snapSize = 0 } = $$props;
|
1015 |
+
let { class: clazz = "" } = $$props;
|
1016 |
+
const key = {};
|
1017 |
+
const gathering = hasContext(gatheringKey);
|
1018 |
+
const { undefinedPaneInitSize } = !gathering ? onPaneInit(key) : {};
|
1019 |
+
let element;
|
1020 |
+
let sz = size ?? undefinedPaneInitSize;
|
1021 |
+
if (gathering) {
|
1022 |
+
ssrRegisterPaneSize(size);
|
1023 |
+
}
|
1024 |
+
if ($$props.size === void 0 && $$bindings.size && size !== void 0)
|
1025 |
+
$$bindings.size(size);
|
1026 |
+
if ($$props.minSize === void 0 && $$bindings.minSize && minSize !== void 0)
|
1027 |
+
$$bindings.minSize(minSize);
|
1028 |
+
if ($$props.maxSize === void 0 && $$bindings.maxSize && maxSize !== void 0)
|
1029 |
+
$$bindings.maxSize(maxSize);
|
1030 |
+
if ($$props.snapSize === void 0 && $$bindings.snapSize && snapSize !== void 0)
|
1031 |
+
$$bindings.snapSize(snapSize);
|
1032 |
+
if ($$props.class === void 0 && $$bindings.class && clazz !== void 0)
|
1033 |
+
$$bindings.class(clazz);
|
1034 |
+
dimension = getDimensionName($isHorizontal);
|
1035 |
+
style = `${dimension}: ${sz}%;`;
|
1036 |
+
$$unsubscribe_isHorizontal();
|
1037 |
+
$$unsubscribe_veryFirstPaneKey();
|
1038 |
+
$$unsubscribe_showFirstSplitter();
|
1039 |
+
return `${!gathering ? ` ${$veryFirstPaneKey !== key || $showFirstSplitter ? ` <div class="${"splitpanes__splitter " + escape("", true)}"></div>` : ``} <div${add_attribute("class", `splitpanes__pane ${clazz || ""}`, 0)}${add_attribute("style", style, 0)}${add_attribute("this", element, 0)}>${slots.default ? slots.default({}) : ``}</div>` : ``}`;
|
1040 |
+
});
|
1041 |
+
const css$5 = {
|
1042 |
+
code: ".llm-health-status.svelte-a20mi8{color:slategray;font-size:12px;display:inline-flex;align-items:center;min-width:200px\r\n }.dot.svelte-a20mi8{width:20px;height:20px}",
|
1043 |
+
map: null
|
1044 |
+
};
|
1045 |
+
const LlmHealthStatus = create_ssr_component(($$result, $$props, $$bindings, slots) => {
|
1046 |
+
let { status = "unknown" } = $$props;
|
1047 |
+
let color = "";
|
1048 |
+
let shadowColor = "";
|
1049 |
+
let text = "";
|
1050 |
+
switch (status) {
|
1051 |
+
case "ok":
|
1052 |
+
color = "#4CAF50";
|
1053 |
+
shadowColor = "rgba(0, 128, 0, 0.7)";
|
1054 |
+
text = "Сервис LLM работает";
|
1055 |
+
break;
|
1056 |
+
case "error":
|
1057 |
+
text = "Сервис LLM не работает";
|
1058 |
+
break;
|
1059 |
+
case "loading model":
|
1060 |
+
color = "yellow";
|
1061 |
+
shadowColor = "rgba(255, 255, 0, 0.7)";
|
1062 |
+
text = "Сервис LLM запускается...";
|
1063 |
+
break;
|
1064 |
+
case "unavailable":
|
1065 |
+
color = "#af4f4c";
|
1066 |
+
shadowColor = "#af4f4c";
|
1067 |
+
text = "Сервис LLM не запущен";
|
1068 |
+
break;
|
1069 |
+
case "unknown":
|
1070 |
+
color = "#af4f4c";
|
1071 |
+
shadowColor = "#af4f4c";
|
1072 |
+
text = "Сервис LLM недоступен";
|
1073 |
+
break;
|
1074 |
+
}
|
1075 |
+
if ($$props.status === void 0 && $$bindings.status && status !== void 0)
|
1076 |
+
$$bindings.status(status);
|
1077 |
+
$$result.css.add(css$5);
|
1078 |
+
return `<div class="llm-health-status svelte-a20mi8"><svg class="dot svelte-a20mi8" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><circle cx="10" cy="10" r="5"${add_attribute("fill", color, 0)} style="${"filter: drop-shadow(0 0 1px " + escape(shadowColor, true) + ")"}"></circle></svg> ${escape(text)} </div>`;
|
1079 |
+
});
|
1080 |
+
const css$4 = {
|
1081 |
+
code: ".llm-health-status.svelte-1wcf73j{color:slategray;font-size:12px;display:inline-flex;align-items:center}.dot.svelte-1wcf73j{width:20px;height:20px}",
|
1082 |
+
map: null
|
1083 |
+
};
|
1084 |
+
const SearchApiHealthStatus = create_ssr_component(($$result, $$props, $$bindings, slots) => {
|
1085 |
+
let { status = "unavailable" } = $$props;
|
1086 |
+
let color = "";
|
1087 |
+
let shadowColor = "";
|
1088 |
+
let text = "";
|
1089 |
+
switch (status) {
|
1090 |
+
case "ok":
|
1091 |
+
color = "#4CAF50";
|
1092 |
+
shadowColor = "rgba(0, 128, 0, 0.7)";
|
1093 |
+
text = "Поиск работает";
|
1094 |
+
break;
|
1095 |
+
case "unavailable":
|
1096 |
+
color = "#af4f4c";
|
1097 |
+
shadowColor = "#af4f4c";
|
1098 |
+
text = "Поиск не запущен";
|
1099 |
+
break;
|
1100 |
+
case "unknown":
|
1101 |
+
color = "#af4f4c";
|
1102 |
+
shadowColor = "#af4f4c";
|
1103 |
+
text = "Поиск недоступен";
|
1104 |
+
break;
|
1105 |
+
}
|
1106 |
+
if ($$props.status === void 0 && $$bindings.status && status !== void 0)
|
1107 |
+
$$bindings.status(status);
|
1108 |
+
$$result.css.add(css$4);
|
1109 |
+
return `<div class="llm-health-status svelte-1wcf73j"><svg class="dot svelte-1wcf73j" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><circle cx="10" cy="10" r="5"${add_attribute("fill", color, 0)} style="${"filter: drop-shadow(0 0 1px " + escape(shadowColor, true) + ")"}"></circle></svg> ${escape(text)} </div>`;
|
1110 |
+
});
|
1111 |
+
const css$3 = {
|
1112 |
+
code: ".consultation-item.svelte-13z9n8v{margin-bottom:20px}.title.svelte-13z9n8v{font-weight:bold}.annotation.svelte-13z9n8v{overflow:hidden;display:-webkit-box;-webkit-line-clamp:5;-webkit-box-orient:vertical;text-overflow:ellipsis;white-space:normal}a.svelte-13z9n8v{cursor:pointer;color:#1a0dab}.full-text.svelte-13z9n8v{display:block;white-space:normal}p.svelte-13z9n8v{margin-top:10px;margin-bottom:10px}",
|
1113 |
+
map: null
|
1114 |
+
};
|
1115 |
+
const ConsultationItem = create_ssr_component(($$result, $$props, $$bindings, slots) => {
|
1116 |
+
let { showFullText = Array(10).fill(false) } = $$props;
|
1117 |
+
let { index } = $$props;
|
1118 |
+
let { title } = $$props;
|
1119 |
+
let { text } = $$props;
|
1120 |
+
if ($$props.showFullText === void 0 && $$bindings.showFullText && showFullText !== void 0)
|
1121 |
+
$$bindings.showFullText(showFullText);
|
1122 |
+
if ($$props.index === void 0 && $$bindings.index && index !== void 0)
|
1123 |
+
$$bindings.index(index);
|
1124 |
+
if ($$props.title === void 0 && $$bindings.title && title !== void 0)
|
1125 |
+
$$bindings.title(title);
|
1126 |
+
if ($$props.text === void 0 && $$bindings.text && text !== void 0)
|
1127 |
+
$$bindings.text(text);
|
1128 |
+
$$result.css.add(css$3);
|
1129 |
+
return `<div class="consultation-item svelte-13z9n8v"><div class="title svelte-13z9n8v"><a class="svelte-13z9n8v">${escape(title)}</a></div> ${showFullText[index] ? `<div class="annotation full-text svelte-13z9n8v">${each(text.split("\n"), (line) => {
|
1130 |
+
return `<p class="svelte-13z9n8v">${escape(line)}</p>`;
|
1131 |
+
})}</div>` : ``} </div>`;
|
1132 |
+
});
|
1133 |
+
const css$2 = {
|
1134 |
+
code: "h2.svelte-s2jiei{margin-bottom:10px;font-size:large}.relevant-consultations.svelte-s2jiei{flex:1;overflow-y:auto;padding:1rem}",
|
1135 |
+
map: null
|
1136 |
+
};
|
1137 |
+
const RelevantConsultations = create_ssr_component(($$result, $$props, $$bindings, slots) => {
|
1138 |
+
let { showFullText = Array(10).fill(false) } = $$props;
|
1139 |
+
let { consultations = [] } = $$props;
|
1140 |
+
if ($$props.showFullText === void 0 && $$bindings.showFullText && showFullText !== void 0)
|
1141 |
+
$$bindings.showFullText(showFullText);
|
1142 |
+
if ($$props.consultations === void 0 && $$bindings.consultations && consultations !== void 0)
|
1143 |
+
$$bindings.consultations(consultations);
|
1144 |
+
$$result.css.add(css$2);
|
1145 |
+
return `<div class="relevant-consultations svelte-s2jiei"><h2 class="w-full p-5 space-y-2 svelte-s2jiei" style="border-bottom:2px solid #ccc;border-top:2px solid #ccc" data-svelte-h="svelte-1ttwfrn">Релевантные консультации</h2> ${each(consultations, ({ title, text }, index) => {
|
1146 |
+
return `${validate_component(ConsultationItem, "ConsultationItem").$$render($$result, { title, text, index, showFullText }, {}, {})}`;
|
1147 |
+
})}</div> ${``}`;
|
1148 |
+
});
|
1149 |
+
const HISTORY_KEY_PREFIX = "clarificationHistory_";
|
1150 |
+
const HISTORY_INDEX_KEY = "clarificationHistoryIndex";
|
1151 |
+
const HISTORY_ITEMS_LIMIT = 2;
|
1152 |
+
class ClarificationHistoryService {
|
1153 |
+
// Загружает историю как массив, собирая данные из ключей с префиксом
|
1154 |
+
static loadHistory() {
|
1155 |
+
const history = [];
|
1156 |
+
const index = this.getHistoryIndex();
|
1157 |
+
for (let i = 0; i < index; i++) {
|
1158 |
+
const item = localStorage.getItem(`${HISTORY_KEY_PREFIX}${i}`);
|
1159 |
+
if (item) {
|
1160 |
+
history.push(JSON.parse(item));
|
1161 |
+
}
|
1162 |
+
}
|
1163 |
+
return history;
|
1164 |
+
}
|
1165 |
+
// Сохраняет элемент истории с новым индексом и управляет лимитом элементов
|
1166 |
+
static addHistoryItem(item) {
|
1167 |
+
const index = this.getHistoryIndex();
|
1168 |
+
localStorage.setItem(`${HISTORY_KEY_PREFIX}${index}`, JSON.stringify(item));
|
1169 |
+
this.setHistoryIndex(index + 1);
|
1170 |
+
this.manageHistoryLimit();
|
1171 |
+
}
|
1172 |
+
// Обновляет элемент истории с заданным индексом
|
1173 |
+
static updateHistoryItem(index, item) {
|
1174 |
+
localStorage.setItem(`${HISTORY_KEY_PREFIX}${index}`, JSON.stringify(item));
|
1175 |
+
}
|
1176 |
+
// Возвращает элемент истории по индексу
|
1177 |
+
static getHistoryItem(index) {
|
1178 |
+
const item = localStorage.getItem(`${HISTORY_KEY_PREFIX}${index}`);
|
1179 |
+
return item ? JSON.parse(item) : null;
|
1180 |
+
}
|
1181 |
+
// Возвращает количество элементов в истории
|
1182 |
+
static getHistoryLength() {
|
1183 |
+
return this.getHistoryIndex();
|
1184 |
+
}
|
1185 |
+
// Удаляет все элементы истории
|
1186 |
+
static clearHistory() {
|
1187 |
+
const index = this.getHistoryIndex();
|
1188 |
+
for (let i = 0; i < index; i++) {
|
1189 |
+
localStorage.removeItem(`${HISTORY_KEY_PREFIX}${i}`);
|
1190 |
+
}
|
1191 |
+
localStorage.removeItem(HISTORY_INDEX_KEY);
|
1192 |
+
}
|
1193 |
+
// Вспомогательная функция для управления лимитом истории
|
1194 |
+
static manageHistoryLimit() {
|
1195 |
+
const index = this.getHistoryIndex();
|
1196 |
+
if (index > HISTORY_ITEMS_LIMIT) {
|
1197 |
+
const excessCount = index - HISTORY_ITEMS_LIMIT;
|
1198 |
+
for (let i = 0; i < excessCount; i++) {
|
1199 |
+
localStorage.removeItem(`${HISTORY_KEY_PREFIX}${i}`);
|
1200 |
+
}
|
1201 |
+
this.shiftHistoryKeys(excessCount);
|
1202 |
+
this.setHistoryIndex(HISTORY_ITEMS_LIMIT);
|
1203 |
+
}
|
1204 |
+
}
|
1205 |
+
// Смещает ключи истории при удалении старых элементов
|
1206 |
+
static shiftHistoryKeys(shiftAmount) {
|
1207 |
+
const index = this.getHistoryIndex();
|
1208 |
+
for (let i = shiftAmount; i < index; i++) {
|
1209 |
+
const item = localStorage.getItem(`${HISTORY_KEY_PREFIX}${i}`);
|
1210 |
+
if (item) {
|
1211 |
+
localStorage.setItem(`${HISTORY_KEY_PREFIX}${i - shiftAmount}`, item);
|
1212 |
+
}
|
1213 |
+
localStorage.removeItem(`${HISTORY_KEY_PREFIX}${i}`);
|
1214 |
+
}
|
1215 |
+
}
|
1216 |
+
// Вспомогательная функция для получения текущего индекса истории
|
1217 |
+
static getHistoryIndex() {
|
1218 |
+
const index = localStorage.getItem(HISTORY_INDEX_KEY);
|
1219 |
+
return index ? parseInt(index, 10) : 0;
|
1220 |
+
}
|
1221 |
+
// Вспомогательная функция для установки индекса истории
|
1222 |
+
static setHistoryIndex(index) {
|
1223 |
+
localStorage.setItem(HISTORY_INDEX_KEY, index.toString());
|
1224 |
+
}
|
1225 |
+
}
|
1226 |
+
const css$1 = {
|
1227 |
+
code: "textarea.svelte-wjelcf{border:1px solid #ccc;border-radius:4px;width:100%;font-size:14px;margin-bottom:10px;box-sizing:border-box;padding:1rem}button.svelte-wjelcf{margin:5px}",
|
1228 |
+
map: null
|
1229 |
+
};
|
1230 |
+
const UserClarification = create_ssr_component(($$result, $$props, $$bindings, slots) => {
|
1231 |
+
let { userRequest = "" } = $$props;
|
1232 |
+
let { searchClarification = "" } = $$props;
|
1233 |
+
let { llmClarification = "" } = $$props;
|
1234 |
+
let { searchResults } = $$props;
|
1235 |
+
let { relevantConsultations } = $$props;
|
1236 |
+
let { llmResponse = "" } = $$props;
|
1237 |
+
let { historyIsNotEmpty = false } = $$props;
|
1238 |
+
let currentHistoryIndex = 0;
|
1239 |
+
let history = [];
|
1240 |
+
let historyLength = 0;
|
1241 |
+
function loadCurrentHistoryItem() {
|
1242 |
+
const item = ClarificationHistoryService.getHistoryItem(currentHistoryIndex);
|
1243 |
+
if (item) {
|
1244 |
+
searchClarification = item.searchClarification;
|
1245 |
+
llmClarification = item.llmClarification;
|
1246 |
+
searchResults = item.searchResults;
|
1247 |
+
relevantConsultations = item.relevantConsultations;
|
1248 |
+
llmResponse = item.llmResponse;
|
1249 |
+
userRequest = item.userRequest;
|
1250 |
+
}
|
1251 |
+
return item;
|
1252 |
+
}
|
1253 |
+
function getCurrentState() {
|
1254 |
+
return ClarificationHistoryService.getHistoryItem(currentHistoryIndex);
|
1255 |
+
}
|
1256 |
+
function addState(request) {
|
1257 |
+
console.log("addState called");
|
1258 |
+
const newItem = {
|
1259 |
+
userRequest: request,
|
1260 |
+
searchClarification,
|
1261 |
+
llmClarification,
|
1262 |
+
searchResults: [],
|
1263 |
+
llmResponse: "",
|
1264 |
+
relevantConsultations: [],
|
1265 |
+
transactionMaps: []
|
1266 |
+
};
|
1267 |
+
historyLength = ClarificationHistoryService.getHistoryLength();
|
1268 |
+
ClarificationHistoryService.addHistoryItem(newItem);
|
1269 |
+
currentHistoryIndex = historyLength - 1;
|
1270 |
+
}
|
1271 |
+
function updateCurrentState(request, searchResults2, llmResponse2, relevantConsultations2, transactionMaps) {
|
1272 |
+
console.log("updateCurrentState called");
|
1273 |
+
const item = ClarificationHistoryService.getHistoryItem(currentHistoryIndex);
|
1274 |
+
if (item) {
|
1275 |
+
item.userRequest = request ?? item.userRequest;
|
1276 |
+
item.searchClarification = searchClarification ?? item.searchClarification;
|
1277 |
+
item.llmClarification = llmClarification ?? item.llmClarification;
|
1278 |
+
item.searchResults = searchResults2 ?? item.searchResults;
|
1279 |
+
item.llmResponse = llmResponse2 ?? item.llmResponse;
|
1280 |
+
item.relevantConsultations = relevantConsultations2 ?? item.relevantConsultations;
|
1281 |
+
item.transactionMaps = transactionMaps ?? item.transactionMaps;
|
1282 |
+
console.log(item);
|
1283 |
+
ClarificationHistoryService.updateHistoryItem(currentHistoryIndex, item);
|
1284 |
+
}
|
1285 |
+
}
|
1286 |
+
function prevHistory() {
|
1287 |
+
if (currentHistoryIndex > 0) {
|
1288 |
+
currentHistoryIndex -= 1;
|
1289 |
+
loadCurrentHistoryItem();
|
1290 |
+
}
|
1291 |
+
}
|
1292 |
+
function nextHistory() {
|
1293 |
+
if (currentHistoryIndex < history.length - 1) {
|
1294 |
+
currentHistoryIndex += 1;
|
1295 |
+
loadCurrentHistoryItem();
|
1296 |
+
}
|
1297 |
+
}
|
1298 |
+
function clear() {
|
1299 |
+
llmClarification = "";
|
1300 |
+
searchClarification = "";
|
1301 |
+
}
|
1302 |
+
if ($$props.userRequest === void 0 && $$bindings.userRequest && userRequest !== void 0)
|
1303 |
+
$$bindings.userRequest(userRequest);
|
1304 |
+
if ($$props.searchClarification === void 0 && $$bindings.searchClarification && searchClarification !== void 0)
|
1305 |
+
$$bindings.searchClarification(searchClarification);
|
1306 |
+
if ($$props.llmClarification === void 0 && $$bindings.llmClarification && llmClarification !== void 0)
|
1307 |
+
$$bindings.llmClarification(llmClarification);
|
1308 |
+
if ($$props.searchResults === void 0 && $$bindings.searchResults && searchResults !== void 0)
|
1309 |
+
$$bindings.searchResults(searchResults);
|
1310 |
+
if ($$props.relevantConsultations === void 0 && $$bindings.relevantConsultations && relevantConsultations !== void 0)
|
1311 |
+
$$bindings.relevantConsultations(relevantConsultations);
|
1312 |
+
if ($$props.llmResponse === void 0 && $$bindings.llmResponse && llmResponse !== void 0)
|
1313 |
+
$$bindings.llmResponse(llmResponse);
|
1314 |
+
if ($$props.historyIsNotEmpty === void 0 && $$bindings.historyIsNotEmpty && historyIsNotEmpty !== void 0)
|
1315 |
+
$$bindings.historyIsNotEmpty(historyIsNotEmpty);
|
1316 |
+
if ($$props.loadCurrentHistoryItem === void 0 && $$bindings.loadCurrentHistoryItem && loadCurrentHistoryItem !== void 0)
|
1317 |
+
$$bindings.loadCurrentHistoryItem(loadCurrentHistoryItem);
|
1318 |
+
if ($$props.getCurrentState === void 0 && $$bindings.getCurrentState && getCurrentState !== void 0)
|
1319 |
+
$$bindings.getCurrentState(getCurrentState);
|
1320 |
+
if ($$props.addState === void 0 && $$bindings.addState && addState !== void 0)
|
1321 |
+
$$bindings.addState(addState);
|
1322 |
+
if ($$props.updateCurrentState === void 0 && $$bindings.updateCurrentState && updateCurrentState !== void 0)
|
1323 |
+
$$bindings.updateCurrentState(updateCurrentState);
|
1324 |
+
if ($$props.prevHistory === void 0 && $$bindings.prevHistory && prevHistory !== void 0)
|
1325 |
+
$$bindings.prevHistory(prevHistory);
|
1326 |
+
if ($$props.nextHistory === void 0 && $$bindings.nextHistory && nextHistory !== void 0)
|
1327 |
+
$$bindings.nextHistory(nextHistory);
|
1328 |
+
if ($$props.clear === void 0 && $$bindings.clear && clear !== void 0)
|
1329 |
+
$$bindings.clear(clear);
|
1330 |
+
$$result.css.add(css$1);
|
1331 |
+
return `<div class="w-full flex p-2 space-x-2"> <textarea rows="3" placeholder="Уточнение для LLM" class="svelte-wjelcf">${escape(llmClarification || "")}</textarea></div> ${``}`;
|
1332 |
+
});
|
1333 |
+
const css = {
|
1334 |
+
code: '.loading-container.svelte-rgnwju.svelte-rgnwju{display:flex;justify-content:center;align-items:center;align-self:center;width:3rem;height:90%;margin-left:5px}.loading-status.svelte-rgnwju.svelte-rgnwju{display:flex;justify-content:center;align-items:center;align-self:center}.grow-wrap.svelte-rgnwju.svelte-rgnwju{display:grid}.grow-wrap.svelte-rgnwju.svelte-rgnwju::after{content:attr(data-replicated-value) " ";white-space:pre-wrap;visibility:hidden;max-width:100%;max-height:250px;display:block;overflow-x:hidden}.grow-wrap.svelte-rgnwju>textarea.svelte-rgnwju{resize:none}.grow-wrap.svelte-rgnwju>textarea.svelte-rgnwju,.grow-wrap.svelte-rgnwju.svelte-rgnwju::after{padding:1rem;border:1px solid #ccc;border-radius:4px;width:100%;font-size:14px;margin-bottom:10px;box-sizing:border-box;grid-area:1/1/2/2}.grow-wrap.svelte-rgnwju>textarea .svelte-rgnwju:focus,.grow-wrap.svelte-rgnwju::after .svelte-rgnwju:focus{outline:none;border-color:#1976d2}.grow-wrap.svelte-rgnwju>textarea .svelte-rgnwju:placeholder,.grow-wrap.svelte-rgnwju::after .svelte-rgnwju:placeholder{color:#aaa}.auto-expand-textarea.svelte-rgnwju.svelte-rgnwju{box-sizing:border-box;width:100%;font-size:16px;border:1px solid #ccc;resize:vertical;overflow-y:auto;min-height:1rem}.search-column.svelte-rgnwju.svelte-rgnwju{flex:1;display:flex;flex-direction:column;border-right:1px solid #ccc}.search-bar.svelte-rgnwju.svelte-rgnwju{padding:1rem}.search-bar.svelte-rgnwju textarea.svelte-rgnwju{width:100%;max-width:100%;padding:1rem;box-sizing:border-box}.textarea-column.svelte-rgnwju.svelte-rgnwju{flex:1;display:flex;flex-direction:column}.textarea.svelte-rgnwju.svelte-rgnwju{width:100%;height:100%;margin:10px;border:none;outline:none;resize:none;background:transparent}@media(max-width: 767px){.search-column.svelte-rgnwju.svelte-rgnwju,.textarea-column.svelte-rgnwju.svelte-rgnwju{border-right:none}}.search-second-bar.svelte-rgnwju.svelte-rgnwju{display:flex;justify-content:space-between;flex-wrap:wrap}.search-second-bar.svelte-rgnwju .status-components.svelte-rgnwju{flex:1;margin-right:10px;margin-top:10px}@media(max-width: 600px){.search-second-bar.svelte-rgnwju.svelte-rgnwju{flex-direction:column}.search-second-bar.svelte-rgnwju .status-components.svelte-rgnwju{width:100%;margin-right:0;margin-bottom:10px}}textarea.svelte-rgnwju.svelte-rgnwju{border:1px solid #ccc;border-radius:4px;width:100%;font-size:14px;margin-bottom:10px;box-sizing:border-box;padding:1rem}a.svelte-rgnwju.svelte-rgnwju{cursor:pointer}.reference-btn.svelte-rgnwju.svelte-rgnwju{text-decoration:none;color:black}.reference-btn.svelte-rgnwju svg.svelte-rgnwju{margin-right:10px}.reference-btn.svelte-rgnwju.svelte-rgnwju:hover{text-decoration:none;color:black}',
|
1335 |
+
map: null
|
1336 |
+
};
|
1337 |
+
const Page = create_ssr_component(($$result, $$props, $$bindings, slots) => {
|
1338 |
+
let { data } = $$props;
|
1339 |
+
const { ENV_DOCUMENT_DB_URL, ENV_ENABLE_DOCUMENT_DB, ENV_ENABLE_DB_SUPPORT, ENV_ENABLE_DEV_FEATURES, ENV_DISABLE_HEALTH_CHECKS, ENV_FAQ_DOCUMENT_ID } = data;
|
1340 |
+
let userClarificationComponent;
|
1341 |
+
initializeStores();
|
1342 |
+
getToastStore();
|
1343 |
+
let userSearchClarification = "";
|
1344 |
+
let userLlmClarification = "";
|
1345 |
+
let historyIsNotEmpty = true;
|
1346 |
+
let llmHealthStatus = "unknown";
|
1347 |
+
let searchHealthStatus = "unknown";
|
1348 |
+
let promptTemplate = MainPrompt;
|
1349 |
+
let healthInterval;
|
1350 |
+
onDestroy(() => {
|
1351 |
+
clearInterval(healthInterval);
|
1352 |
+
cancelLlmRequest();
|
1353 |
+
});
|
1354 |
+
let searchResults = [];
|
1355 |
+
let relevantConsultations = [];
|
1356 |
+
let isLlmLoading = false;
|
1357 |
+
let currentLlmResponse = "";
|
1358 |
+
let baseLlmResponse = "";
|
1359 |
+
let currentUserRequest = "";
|
1360 |
+
let savedUserRequest = "";
|
1361 |
+
let loadingStatusText = "";
|
1362 |
+
let showFullText = Array(searchResults.length).fill(false);
|
1363 |
+
let showConsultationFullText = Array(relevantConsultations.length).fill(false);
|
1364 |
+
let useSearchResult;
|
1365 |
+
let enableSearchResultSelection = false;
|
1366 |
+
let enableLLMForTeasers = false;
|
1367 |
+
let doMultistepSearch = false;
|
1368 |
+
let useReranking = true;
|
1369 |
+
let useLLMForFiltering = false;
|
1370 |
+
let useKeywords = false;
|
1371 |
+
let disableThresholds = true;
|
1372 |
+
let searchInTransactionLedger = false;
|
1373 |
+
let searchInTransactionLedgerByQuestion = false;
|
1374 |
+
let searchInTransactionLedgerByOperation = false;
|
1375 |
+
let useShortestPrompt = false;
|
1376 |
+
let shortestPromptGenerationFinished = false;
|
1377 |
+
let enableRealtimeLlmReponse = false;
|
1378 |
+
let sendConsultationToLlm = false;
|
1379 |
+
let showClarifyLlmResponseButton = false;
|
1380 |
+
let abortController = new AbortController();
|
1381 |
+
const cancelLlmRequest = () => {
|
1382 |
+
abortController.abort("user canceled");
|
1383 |
+
abortController = new AbortController();
|
1384 |
+
isLlmLoading = false;
|
1385 |
+
loadingStatusText = "";
|
1386 |
+
};
|
1387 |
+
if ($$props.data === void 0 && $$bindings.data && data !== void 0)
|
1388 |
+
$$bindings.data(data);
|
1389 |
+
$$result.css.add(css);
|
1390 |
+
let $$settled;
|
1391 |
+
let $$rendered;
|
1392 |
+
let previous_head = $$result.head;
|
1393 |
+
do {
|
1394 |
+
$$settled = true;
|
1395 |
+
$$result.head = previous_head;
|
1396 |
+
{
|
1397 |
+
{
|
1398 |
+
if (searchInTransactionLedgerByQuestion) {
|
1399 |
+
searchInTransactionLedger = true;
|
1400 |
+
enableSearchResultSelection = false;
|
1401 |
+
enableLLMForTeasers = false;
|
1402 |
+
doMultistepSearch = false;
|
1403 |
+
useReranking = false;
|
1404 |
+
useLLMForFiltering = false;
|
1405 |
+
useKeywords = false;
|
1406 |
+
disableThresholds = false;
|
1407 |
+
useShortestPrompt = false;
|
1408 |
+
enableRealtimeLlmReponse = false;
|
1409 |
+
sendConsultationToLlm = false;
|
1410 |
+
} else {
|
1411 |
+
searchInTransactionLedger = false;
|
1412 |
+
}
|
1413 |
+
if (
|
1414 |
+
// clarificationEntry &&
|
1415 |
+
// isClarificationPaneVisible &&
|
1416 |
+
userLlmClarification && // clarificationEntry.userRequest == currentUserRequest &&
|
1417 |
+
searchResults.length > 0 && baseLlmResponse && savedUserRequest == currentUserRequest && !isLlmLoading
|
1418 |
+
) {
|
1419 |
+
showClarifyLlmResponseButton = true;
|
1420 |
+
} else {
|
1421 |
+
showClarifyLlmResponseButton = false;
|
1422 |
+
}
|
1423 |
+
}
|
1424 |
+
}
|
1425 |
+
$$rendered = `${$$result.head += `<!-- HEAD_svelte-1wpbm1r_START -->${$$result.title = `<title>LLM demo app</title>`, ""}<meta name="description" content="LLM demo app"><!-- HEAD_svelte-1wpbm1r_END -->`, ""} ${validate_component(Toast, "Toast").$$render($$result, {}, {}, {})} <section><div class="search-bar flex flex-wrap svelte-rgnwju"><div class="grow-wrap w-full svelte-rgnwju"> <textarea class="auto-expand-textarea svelte-rgnwju" rows="1" placeholder="Введите ваш запрос...">${escape(currentUserRequest || "")}</textarea></div> <div class="search-second-bar w-full svelte-rgnwju"><div class="status-components svelte-rgnwju">${validate_component(LlmHealthStatus, "LlmHealthStatus").$$render($$result, { status: llmHealthStatus }, {}, {})} ${validate_component(SearchApiHealthStatus, "SearchApiHealthStatus").$$render($$result, { status: searchHealthStatus }, {}, {})}</div> <div class="flex space-x-2 items-center"> <a${add_attribute("href", `${ENV_DOCUMENT_DB_URL}file/view/id/${ENV_FAQ_DOCUMENT_ID}`, 0)} target="_blank" rel="noopener noreferrer" class="btn variant-outline-tertiary reference-btn svelte-rgnwju"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-question-circle svelte-rgnwju" viewBox="0 0 16 16"><path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16"></path><path d="M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94"></path></svg>
|
1426 |
+
Справка</a> <button class="btn variant-outline-tertiary">${escape("Уточнить")}</button> <button class="btn variant-outline-tertiary w-48 justify-between hidden" data-svelte-h="svelte-1gystil">Инструменты
|
1427 |
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 20" fill="currentColor" class="w-6 h-6"><path fill-rule="evenodd" d="M12 14.5a.75.75 0 01-.53-.22l-4.25-4.25a.75.75 0 011.06-1.06L12 12.69l3.72-3.72a.75.75 0 011.06 1.06l-4.25 4.25a.75.75 0 01-.53.22z" clip-rule="evenodd"></path></svg></button> <div class="card p-4 w-150 shadow-xl z-10" data-popup="popupFeatured"><div><label class="flex items-center space-x-2"><input class="checkbox accent-white" type="checkbox" ${searchInTransactionLedger ? "disabled" : ""}${add_attribute("checked", doMultistepSearch, 1)}> <p data-svelte-h="svelte-o1whuo">Использовать многоступенчатый поиск</p></label> <label class="flex items-center space-x-2"><input class="checkbox accent-white" type="checkbox" ${searchInTransactionLedger ? "disabled" : ""}${add_attribute("checked", enableLLMForTeasers, 1)}> <p data-svelte-h="svelte-9zxjq1">Использовать LLM для тизеров</p></label> <label class="flex items-center space-x-2"><input class="checkbox accent-white" type="checkbox" ${searchInTransactionLedger ? "disabled" : ""}${add_attribute("checked", useLLMForFiltering, 1)}> <p data-svelte-h="svelte-1uul1f7">Использовать LLM для фильтрации источников</p></label> <label class="flex items-center space-x-2"><input class="checkbox accent-white" type="checkbox" ${searchInTransactionLedger ? "disabled" : ""}${add_attribute("checked", disableThresholds, 1)}> <p data-svelte-h="svelte-jhmp61">Выключить фильтрацию по порогам</p></label> <label class="flex items-center space-x-2"><input class="checkbox accent-white" type="checkbox" ${searchInTransactionLedger ? "disabled" : ""}${add_attribute("checked", useShortestPrompt, 1)}> <p data-svelte-h="svelte-1548adw">Получить более короткий ответ</p></label> <label class="flex items-center space-x-2"><input class="checkbox accent-white" type="checkbox" ${searchInTransactionLedger ? "disabled" : ""}${add_attribute("checked", enableRealtimeLlmReponse, 1)}> <p data-svelte-h="svelte-tnawxy">Выводить ответ в реальном времени</p></label> <label class="flex items-center space-x-2"><input class="checkbox accent-white" type="checkbox" ${searchInTransactionLedger ? "disabled" : ""}${add_attribute("checked", sendConsultationToLlm, 1)}> <p data-svelte-h="svelte-vv6jwf">Учитывать консультации в ответе</p></label> <label class="flex items-center space-x-2"><input class="checkbox accent-white" type="checkbox" ${searchInTransactionLedger ? "disabled" : ""}${add_attribute("checked", useReranking, 1)}> <p data-svelte-h="svelte-qkyc7c">Использовать переранжирование</p></label> <label class="flex items-center space-x-2"><input class="checkbox accent-white" type="checkbox"${add_attribute("checked", searchInTransactionLedgerByQuestion, 1)}> <p data-svelte-h="svelte-17zslqw">Карты проводок по вопросу</p></label> <label class="flex items-center space-x-2"><input class="checkbox accent-white" type="checkbox"${add_attribute("checked", searchInTransactionLedgerByOperation, 1)}> <p data-svelte-h="svelte-1esqmyo">Карты проводок по хоз. операциям</p></label></div></div> ${currentUserRequest ? `<button class="btn variant-filled" data-svelte-h="svelte-1rjqwcg">Очистить</button>` : ``} ${isLlmLoading ? `<button class="btn variant-filled" data-svelte-h="svelte-a5kyut">Остановить</button>` : ``} <button title="Ctrl+Enter" class="btn variant-filled" data-svelte-h="svelte-w5ppob">Отправить</button></div> <div class="flex space-x-2 items-center justify-center w-full">${isLlmLoading ? `<div class="loading-status svelte-rgnwju">${escape(loadingStatusText)}</div> <div class="loading-container svelte-rgnwju">${validate_component(LoadingSpinner, "LoadingSpinner").$$render($$result, {}, {}, {})}</div>` : ``}</div> <div class="${["w-full", "hidden"].join(" ").trim()}">${validate_component(UserClarification, "UserClarification").$$render(
|
1428 |
+
$$result,
|
1429 |
+
{
|
1430 |
+
this: userClarificationComponent,
|
1431 |
+
llmClarification: userLlmClarification,
|
1432 |
+
searchClarification: userSearchClarification,
|
1433 |
+
searchResults,
|
1434 |
+
relevantConsultations,
|
1435 |
+
llmResponse: currentLlmResponse,
|
1436 |
+
historyIsNotEmpty,
|
1437 |
+
userRequest: currentUserRequest
|
1438 |
+
},
|
1439 |
+
{
|
1440 |
+
this: ($$value) => {
|
1441 |
+
userClarificationComponent = $$value;
|
1442 |
+
$$settled = false;
|
1443 |
+
},
|
1444 |
+
llmClarification: ($$value) => {
|
1445 |
+
userLlmClarification = $$value;
|
1446 |
+
$$settled = false;
|
1447 |
+
},
|
1448 |
+
searchClarification: ($$value) => {
|
1449 |
+
userSearchClarification = $$value;
|
1450 |
+
$$settled = false;
|
1451 |
+
},
|
1452 |
+
searchResults: ($$value) => {
|
1453 |
+
searchResults = $$value;
|
1454 |
+
$$settled = false;
|
1455 |
+
},
|
1456 |
+
relevantConsultations: ($$value) => {
|
1457 |
+
relevantConsultations = $$value;
|
1458 |
+
$$settled = false;
|
1459 |
+
},
|
1460 |
+
llmResponse: ($$value) => {
|
1461 |
+
currentLlmResponse = $$value;
|
1462 |
+
$$settled = false;
|
1463 |
+
},
|
1464 |
+
historyIsNotEmpty: ($$value) => {
|
1465 |
+
historyIsNotEmpty = $$value;
|
1466 |
+
$$settled = false;
|
1467 |
+
},
|
1468 |
+
userRequest: ($$value) => {
|
1469 |
+
currentUserRequest = $$value;
|
1470 |
+
$$settled = false;
|
1471 |
+
}
|
1472 |
+
},
|
1473 |
+
{}
|
1474 |
+
)}</div> <div class="w-full my-2"></div> <div class="card w-[calc(50%-0.5rem)] p-2 mr-2"><div>${validate_component(SlideToggle, "SlideToggle").$$render(
|
1475 |
+
$$result,
|
1476 |
+
{
|
1477 |
+
name: "slider-label",
|
1478 |
+
size: "sm",
|
1479 |
+
checked: enableSearchResultSelection,
|
1480 |
+
disabled: searchInTransactionLedger
|
1481 |
+
},
|
1482 |
+
{
|
1483 |
+
checked: ($$value) => {
|
1484 |
+
enableSearchResultSelection = $$value;
|
1485 |
+
$$settled = false;
|
1486 |
+
},
|
1487 |
+
disabled: ($$value) => {
|
1488 |
+
searchInTransactionLedger = $$value;
|
1489 |
+
$$settled = false;
|
1490 |
+
}
|
1491 |
+
},
|
1492 |
+
{
|
1493 |
+
default: () => {
|
1494 |
+
return `Выбрать источники для LLM`;
|
1495 |
+
}
|
1496 |
+
}
|
1497 |
+
)}</div> <div>${validate_component(SlideToggle, "SlideToggle").$$render(
|
1498 |
+
$$result,
|
1499 |
+
{
|
1500 |
+
name: "slider-label",
|
1501 |
+
size: "sm",
|
1502 |
+
checked: useKeywords,
|
1503 |
+
disabled: searchInTransactionLedger
|
1504 |
+
},
|
1505 |
+
{
|
1506 |
+
checked: ($$value) => {
|
1507 |
+
useKeywords = $$value;
|
1508 |
+
$$settled = false;
|
1509 |
+
},
|
1510 |
+
disabled: ($$value) => {
|
1511 |
+
searchInTransactionLedger = $$value;
|
1512 |
+
$$settled = false;
|
1513 |
+
}
|
1514 |
+
},
|
1515 |
+
{
|
1516 |
+
default: () => {
|
1517 |
+
return `Использовать ключевые слова`;
|
1518 |
+
}
|
1519 |
+
}
|
1520 |
+
)}</div> <div> ${validate_component(SlideToggle, "SlideToggle").$$render(
|
1521 |
+
$$result,
|
1522 |
+
{
|
1523 |
+
name: "slider-label",
|
1524 |
+
size: "sm",
|
1525 |
+
checked: searchInTransactionLedgerByQuestion
|
1526 |
+
},
|
1527 |
+
{
|
1528 |
+
checked: ($$value) => {
|
1529 |
+
searchInTransactionLedgerByQuestion = $$value;
|
1530 |
+
$$settled = false;
|
1531 |
+
}
|
1532 |
+
},
|
1533 |
+
{
|
1534 |
+
default: () => {
|
1535 |
+
return `Искать карту проводок по вопросу`;
|
1536 |
+
}
|
1537 |
+
}
|
1538 |
+
)}</div> <div></div> ${``}</div> <div class="w-full my-2">${``}</div> ${``} ${(historyIsNotEmpty && searchResults.length > 0 || relevantConsultations && relevantConsultations.length > 0) && !searchInTransactionLedger ? `${`${validate_component(Splitpanes, "Splitpanes").$$render($$result, { theme: "modern-theme" }, {}, {
|
1539 |
+
default: () => {
|
1540 |
+
return `${validate_component(Pane, "Pane").$$render(
|
1541 |
+
$$result,
|
1542 |
+
{
|
1543 |
+
minSize: 20,
|
1544 |
+
class: "search-column",
|
1545 |
+
size: 49
|
1546 |
+
},
|
1547 |
+
{},
|
1548 |
+
{
|
1549 |
+
default: () => {
|
1550 |
+
return `<div class="search-column svelte-rgnwju">${validate_component(SearchResults, "SearchResults").$$render(
|
1551 |
+
$$result,
|
1552 |
+
{
|
1553 |
+
enableDocumentDb: ENV_ENABLE_DOCUMENT_DB,
|
1554 |
+
documentDbUrl: ENV_DOCUMENT_DB_URL,
|
1555 |
+
searchResults,
|
1556 |
+
showFullText,
|
1557 |
+
useSearchResult,
|
1558 |
+
enableSearchResultSelection
|
1559 |
+
},
|
1560 |
+
{
|
1561 |
+
searchResults: ($$value) => {
|
1562 |
+
searchResults = $$value;
|
1563 |
+
$$settled = false;
|
1564 |
+
},
|
1565 |
+
showFullText: ($$value) => {
|
1566 |
+
showFullText = $$value;
|
1567 |
+
$$settled = false;
|
1568 |
+
},
|
1569 |
+
useSearchResult: ($$value) => {
|
1570 |
+
useSearchResult = $$value;
|
1571 |
+
$$settled = false;
|
1572 |
+
},
|
1573 |
+
enableSearchResultSelection: ($$value) => {
|
1574 |
+
enableSearchResultSelection = $$value;
|
1575 |
+
$$settled = false;
|
1576 |
+
}
|
1577 |
+
},
|
1578 |
+
{}
|
1579 |
+
)} ${relevantConsultations && relevantConsultations.length > 0 ? `${validate_component(RelevantConsultations, "RelevantConsultations").$$render(
|
1580 |
+
$$result,
|
1581 |
+
{
|
1582 |
+
consultations: relevantConsultations,
|
1583 |
+
showFullText: showConsultationFullText
|
1584 |
+
},
|
1585 |
+
{
|
1586 |
+
consultations: ($$value) => {
|
1587 |
+
relevantConsultations = $$value;
|
1588 |
+
$$settled = false;
|
1589 |
+
},
|
1590 |
+
showFullText: ($$value) => {
|
1591 |
+
showConsultationFullText = $$value;
|
1592 |
+
$$settled = false;
|
1593 |
+
}
|
1594 |
+
},
|
1595 |
+
{}
|
1596 |
+
)}` : ``}</div>`;
|
1597 |
+
}
|
1598 |
+
}
|
1599 |
+
)} ${validate_component(Pane, "Pane").$$render($$result, { size: 49 }, {}, {
|
1600 |
+
default: () => {
|
1601 |
+
return `<div class="textarea-column svelte-rgnwju"><div class="textarea svelte-rgnwju"><button class="${[
|
1602 |
+
"btn variant-filled",
|
1603 |
+
!(enableSearchResultSelection && searchResults.length > 0 && !showClarifyLlmResponseButton) ? "hidden" : ""
|
1604 |
+
].join(" ").trim()}" data-svelte-h="svelte-qvwp3t">Получить ответ</button> <button class="${[
|
1605 |
+
"btn variant-filled",
|
1606 |
+
!showClarifyLlmResponseButton ? "hidden" : ""
|
1607 |
+
].join(" ").trim()}" data-svelte-h="svelte-zcineo">Уточнить ответ</button> <button class="btn variant-filled" data-svelte-h="svelte-1ddim4b">Скачать ответ в Word</button> <div class="textarea svelte-rgnwju">${enableRealtimeLlmReponse && isLlmLoading || !enableRealtimeLlmReponse && !isLlmLoading || enableRealtimeLlmReponse && currentLlmResponse && !useShortestPrompt || currentLlmResponse && useShortestPrompt && shortestPromptGenerationFinished ? `<!-- HTML_TAG_START -->${currentLlmResponse}<!-- HTML_TAG_END -->` : ``}</div> ${``}</div></div>`;
|
1608 |
+
}
|
1609 |
+
})}`;
|
1610 |
+
}
|
1611 |
+
})}`}` : ``}</div></div> <button style="color:transparent"${add_classes((!ENV_ENABLE_DEV_FEATURES ? "hidden" : "").trim())} data-svelte-h="svelte-w6zwbb">Изменить главный промпт</button> <textarea class="${["svelte-rgnwju", "hidden"].join(" ").trim()}">${escape(promptTemplate)}</textarea> </section>`;
|
1612 |
+
} while (!$$settled);
|
1613 |
+
return $$rendered;
|
1614 |
+
});
|
1615 |
+
|
1616 |
+
export { Page as default };
|
1617 |
+
//# sourceMappingURL=_page.svelte-iF0uVy6x.js.map
|
build/server/chunks/_page.svelte-iF0uVy6x.js.map
ADDED
The diff for this file is too large to render.
See raw diff
|
|
build/server/chunks/_server.ts-8QOft-oQ.js
ADDED
@@ -0,0 +1,130 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { d as private_env } from './shared-server-49TKSBDM.js';
|
2 |
+
import { S as SearchResultsSorter, E as EXPERT_EVALUATION_PROMPT } from './SearchResultsSorter-mM-nyUk-.js';
|
3 |
+
import { L as LlamaCppService } from './LlamaCppService-QhLZfkhy.js';
|
4 |
+
import ExcelJS from 'exceljs';
|
5 |
+
import fetch from 'node-fetch';
|
6 |
+
import './ProgressBar.svelte_svelte_type_style_lang-2butZeUP.js';
|
7 |
+
import './index2-mSDuUbym.js';
|
8 |
+
import './utils-UCt__SlX.js';
|
9 |
+
import 'fs';
|
10 |
+
import 'path';
|
11 |
+
import 'node:dns';
|
12 |
+
|
13 |
+
const POST = async ({ request }) => {
|
14 |
+
try {
|
15 |
+
const data = await request.formData();
|
16 |
+
const file = data.get("file");
|
17 |
+
if (!file) {
|
18 |
+
return new Response("No file uploaded", { status: 400 });
|
19 |
+
}
|
20 |
+
const buffer = await file.arrayBuffer();
|
21 |
+
const workbook = new ExcelJS.Workbook();
|
22 |
+
await workbook.xlsx.load(buffer);
|
23 |
+
const worksheet = workbook.getWorksheet(1);
|
24 |
+
const headers = new Headers();
|
25 |
+
headers.set("Content-Type", "text/event-stream");
|
26 |
+
headers.set("Cache-Control", "no-cache");
|
27 |
+
headers.set("Connection", "keep-alive");
|
28 |
+
return new Response(async (stream) => {
|
29 |
+
const writer = stream.getWriter();
|
30 |
+
await sendMessage(writer, "Processing started");
|
31 |
+
for (let i = 2; i <= worksheet.rowCount; i++) {
|
32 |
+
const row = worksheet.getRow(i);
|
33 |
+
const rowData = parseRow(row);
|
34 |
+
if (!rowData.question) {
|
35 |
+
rowData.error = "No question provided";
|
36 |
+
await sendRow(writer, rowData);
|
37 |
+
continue;
|
38 |
+
}
|
39 |
+
try {
|
40 |
+
const searchResults = await getSearchResults(rowData.question);
|
41 |
+
const processedResults = processSearchResults(searchResults);
|
42 |
+
const studentAnswer = await getLlmResponse(rowData.question, processedResults);
|
43 |
+
const textInBrackets = extractTextInBrackets(studentAnswer);
|
44 |
+
rowData.studentAnswer = textInBrackets;
|
45 |
+
rowData.fullResponse = studentAnswer;
|
46 |
+
await sendRow(writer, rowData);
|
47 |
+
} catch (error) {
|
48 |
+
rowData.error = error.message;
|
49 |
+
await sendRow(writer, rowData);
|
50 |
+
}
|
51 |
+
}
|
52 |
+
await sendMessage(writer, "Processing completed");
|
53 |
+
writer.close();
|
54 |
+
}, { headers });
|
55 |
+
} catch (error) {
|
56 |
+
console.error("Error processing file", error);
|
57 |
+
return new Response("Internal Server Error", { status: 500 });
|
58 |
+
}
|
59 |
+
};
|
60 |
+
async function sendMessage(writer, message) {
|
61 |
+
writer.write(`event: message
|
62 |
+
`);
|
63 |
+
writer.write(`data: ${message}
|
64 |
+
|
65 |
+
`);
|
66 |
+
}
|
67 |
+
async function sendRow(writer, rowData) {
|
68 |
+
writer.write(`event: row
|
69 |
+
`);
|
70 |
+
writer.write(`data: ${JSON.stringify(rowData)}
|
71 |
+
|
72 |
+
`);
|
73 |
+
}
|
74 |
+
function parseRow(row) {
|
75 |
+
const [index, question, expertAnswer, completeRefs] = row.values.slice(1);
|
76 |
+
return { index, question, expertAnswer, completeRefs, llmResponse: "", fullResponse: "", error: "" };
|
77 |
+
}
|
78 |
+
async function getSearchResults(query) {
|
79 |
+
const response = await fetch(`${private_env.SEARCH_API_URL}/search`, {
|
80 |
+
method: "POST",
|
81 |
+
headers: { "Content-Type": "application/json" },
|
82 |
+
body: JSON.stringify({
|
83 |
+
query,
|
84 |
+
top: 30,
|
85 |
+
use_llm_for_teasers: true,
|
86 |
+
do_multistep_search: false,
|
87 |
+
use_accounting_docs: true,
|
88 |
+
use_reranking: true,
|
89 |
+
disable_thresholds: true,
|
90 |
+
use_llm_for_filtering: true,
|
91 |
+
find_transaction_maps_by_question: false,
|
92 |
+
find_transaction_maps_by_operation: false,
|
93 |
+
use_keywords: false
|
94 |
+
})
|
95 |
+
});
|
96 |
+
const data = await response.json();
|
97 |
+
return data.results;
|
98 |
+
}
|
99 |
+
function processSearchResults(searchResults) {
|
100 |
+
let results = SearchResultsSorter.mergeResultsByTitle(searchResults);
|
101 |
+
results = SearchResultsSorter.sortByRelevance(results);
|
102 |
+
results = SearchResultsSorter.identifyDocumentType(results);
|
103 |
+
return results.map((r) => ({ ...r, teaser: r.text_for_llm || r.teaser }));
|
104 |
+
}
|
105 |
+
async function getLlmResponse(question, searchResults) {
|
106 |
+
let sources = "";
|
107 |
+
let user_prompt = "";
|
108 |
+
const slicedArray = searchResults.slice(0, 10);
|
109 |
+
sources = searchResultsToLlmSources(slicedArray);
|
110 |
+
user_prompt = EXPERT_EVALUATION_PROMPT.replace("{{ВОПРОС}}", question).replace("{{ИСТОЧНИКИ}}", sources);
|
111 |
+
let llmService = new LlamaCppService(private_env.LLM_API_URL);
|
112 |
+
const abortController = new AbortController();
|
113 |
+
let llmGenerator = await llmService.predict(user_prompt, { abortController });
|
114 |
+
let response = "";
|
115 |
+
for await (const output of await llmGenerator({ prompt: user_prompt })) {
|
116 |
+
response += output.token.text;
|
117 |
+
}
|
118 |
+
return response;
|
119 |
+
}
|
120 |
+
function extractTextInBrackets(text) {
|
121 |
+
return text.match(/\[.*?\]/g)?.join(", ") || "";
|
122 |
+
}
|
123 |
+
function searchResultsToLlmSources(input) {
|
124 |
+
let retVal = input.map(({ title, text, text_for_llm }, index) => `Источник ${index}: ${title}
|
125 |
+
${text_for_llm || text}`).join("\n\n");
|
126 |
+
return retVal;
|
127 |
+
}
|
128 |
+
|
129 |
+
export { POST };
|
130 |
+
//# sourceMappingURL=_server.ts-8QOft-oQ.js.map
|
build/server/chunks/_server.ts-8QOft-oQ.js.map
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
{"version":3,"file":"_server.ts-8QOft-oQ.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/metrics/calculate/_server.ts.js"],"sourcesContent":["import { d as private_env } from \"../../../../../chunks/shared-server.js\";\nimport { S as SearchResultsSorter, E as EXPERT_EVALUATION_PROMPT } from \"../../../../../chunks/SearchResultsSorter.js\";\nimport { L as LlamaCppService } from \"../../../../../chunks/LlamaCppService.js\";\nimport ExcelJS from \"exceljs\";\nimport fetch from \"node-fetch\";\nconst POST = async ({ request }) => {\n try {\n const data = await request.formData();\n const file = data.get(\"file\");\n if (!file) {\n return new Response(\"No file uploaded\", { status: 400 });\n }\n const buffer = await file.arrayBuffer();\n const workbook = new ExcelJS.Workbook();\n await workbook.xlsx.load(buffer);\n const worksheet = workbook.getWorksheet(1);\n const headers = new Headers();\n headers.set(\"Content-Type\", \"text/event-stream\");\n headers.set(\"Cache-Control\", \"no-cache\");\n headers.set(\"Connection\", \"keep-alive\");\n return new Response(async (stream) => {\n const writer = stream.getWriter();\n await sendMessage(writer, \"Processing started\");\n for (let i = 2; i <= worksheet.rowCount; i++) {\n const row = worksheet.getRow(i);\n const rowData = parseRow(row);\n if (!rowData.question) {\n rowData.error = \"No question provided\";\n await sendRow(writer, rowData);\n continue;\n }\n try {\n const searchResults = await getSearchResults(rowData.question);\n const processedResults = processSearchResults(searchResults);\n const studentAnswer = await getLlmResponse(rowData.question, processedResults);\n const textInBrackets = extractTextInBrackets(studentAnswer);\n rowData.studentAnswer = textInBrackets;\n rowData.fullResponse = studentAnswer;\n await sendRow(writer, rowData);\n } catch (error) {\n rowData.error = error.message;\n await sendRow(writer, rowData);\n }\n }\n await sendMessage(writer, \"Processing completed\");\n writer.close();\n }, { headers });\n } catch (error) {\n console.error(\"Error processing file\", error);\n return new Response(\"Internal Server Error\", { status: 500 });\n }\n};\nasync function sendMessage(writer, message) {\n writer.write(`event: message\n`);\n writer.write(`data: ${message}\n\n`);\n}\nasync function sendRow(writer, rowData) {\n writer.write(`event: row\n`);\n writer.write(`data: ${JSON.stringify(rowData)}\n\n`);\n}\nfunction parseRow(row) {\n const [index, question, expertAnswer, completeRefs] = row.values.slice(1);\n return { index, question, expertAnswer, completeRefs, llmResponse: \"\", fullResponse: \"\", error: \"\" };\n}\nasync function getSearchResults(query) {\n const response = await fetch(`${private_env.SEARCH_API_URL}/search`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n query,\n top: 30,\n use_llm_for_teasers: true,\n do_multistep_search: false,\n use_accounting_docs: true,\n use_reranking: true,\n disable_thresholds: true,\n use_llm_for_filtering: true,\n find_transaction_maps_by_question: false,\n find_transaction_maps_by_operation: false,\n use_keywords: false\n })\n });\n const data = await response.json();\n return data.results;\n}\nfunction processSearchResults(searchResults) {\n let results = SearchResultsSorter.mergeResultsByTitle(searchResults);\n results = SearchResultsSorter.sortByRelevance(results);\n results = SearchResultsSorter.identifyDocumentType(results);\n return results.map((r) => ({ ...r, teaser: r.text_for_llm || r.teaser }));\n}\nasync function getLlmResponse(question, searchResults) {\n let sources = \"\";\n let user_prompt = \"\";\n const slicedArray = searchResults.slice(0, 10);\n sources = searchResultsToLlmSources(slicedArray);\n user_prompt = EXPERT_EVALUATION_PROMPT.replace(\"{{ВОПРОС}}\", question).replace(\"{{ИСТОЧНИКИ}}\", sources);\n let llmService = new LlamaCppService(private_env.LLM_API_URL);\n const abortController = new AbortController();\n let llmGenerator = await llmService.predict(user_prompt, { abortController });\n let response = \"\";\n for await (const output of await llmGenerator({ prompt: user_prompt })) {\n response += output.token.text;\n }\n return response;\n}\nfunction extractTextInBrackets(text) {\n return text.match(/\\[.*?\\]/g)?.join(\", \") || \"\";\n}\nfunction searchResultsToLlmSources(input) {\n let retVal = input.map(({ title, text, text_for_llm }, index) => `Источник ${index}: ${title}\n${text_for_llm || text}`).join(\"\\n\\n\");\n return retVal;\n}\nexport {\n POST\n};\n"],"names":[],"mappings":"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"}
|
build/server/chunks/_server.ts-9ilSfmL3.js
ADDED
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { L as LogService } from './LogService-6IleCGNg.js';
|
2 |
+
import 'fs';
|
3 |
+
import 'path';
|
4 |
+
import 'util';
|
5 |
+
import 'date-fns';
|
6 |
+
import 'mongoose';
|
7 |
+
import 'exceljs';
|
8 |
+
import './shared-server-49TKSBDM.js';
|
9 |
+
|
10 |
+
const logService = new LogService();
|
11 |
+
const POST = async ({ request }) => {
|
12 |
+
try {
|
13 |
+
const document = await request.json();
|
14 |
+
const id = await logService.log(document);
|
15 |
+
return new Response(JSON.stringify({ id }), {
|
16 |
+
status: 200,
|
17 |
+
headers: { "Content-Type": "application/json" }
|
18 |
+
});
|
19 |
+
} catch (error) {
|
20 |
+
console.error("Error while recording log:", error);
|
21 |
+
return new Response(JSON.stringify({ message: "Failed to record log entry" }), {
|
22 |
+
status: 500,
|
23 |
+
headers: { "Content-Type": "application/json" }
|
24 |
+
});
|
25 |
+
}
|
26 |
+
};
|
27 |
+
|
28 |
+
export { POST };
|
29 |
+
//# sourceMappingURL=_server.ts-9ilSfmL3.js.map
|
build/server/chunks/_server.ts-9ilSfmL3.js.map
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
{"version":3,"file":"_server.ts-9ilSfmL3.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/log/write/_server.ts.js"],"sourcesContent":["import { L as LogService } from \"../../../../../chunks/LogService.js\";\nconst logService = new LogService();\nconst POST = async ({ request }) => {\n try {\n const document = await request.json();\n const id = await logService.log(document);\n return new Response(JSON.stringify({ id }), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" }\n });\n } catch (error) {\n console.error(\"Error while recording log:\", error);\n return new Response(JSON.stringify({ message: \"Failed to record log entry\" }), {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" }\n });\n }\n};\nexport {\n POST\n};\n"],"names":[],"mappings":";;;;;;;;;AACA,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;AAC/B,MAAC,IAAI,GAAG,OAAO,EAAE,OAAO,EAAE,KAAK;AACpC,EAAE,IAAI;AACN,IAAI,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;AAC1C,IAAI,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC9C,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;AAChD,MAAM,MAAM,EAAE,GAAG;AACjB,MAAM,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;AACrD,KAAK,CAAC,CAAC;AACP,GAAG,CAAC,OAAO,KAAK,EAAE;AAClB,IAAI,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;AACvD,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,EAAE;AACnF,MAAM,MAAM,EAAE,GAAG;AACjB,MAAM,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;AACrD,KAAK,CAAC,CAAC;AACP,GAAG;AACH;;;;"}
|
build/server/chunks/_server.ts-EYIERXoH.js
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { d as private_env } from './shared-server-49TKSBDM.js';
|
2 |
+
import { L as LlamaCppService } from './LlamaCppService-QhLZfkhy.js';
|
3 |
+
import 'fs';
|
4 |
+
import 'path';
|
5 |
+
import 'node:dns';
|
6 |
+
|
7 |
+
const GET = async () => {
|
8 |
+
let llmService = new LlamaCppService(private_env.LLM_API_URL);
|
9 |
+
let response = await llmService.health();
|
10 |
+
return new Response(
|
11 |
+
JSON.stringify({ status: response }),
|
12 |
+
{
|
13 |
+
headers: { "Content-Type": "application/json" }
|
14 |
+
}
|
15 |
+
);
|
16 |
+
};
|
17 |
+
|
18 |
+
export { GET };
|
19 |
+
//# sourceMappingURL=_server.ts-EYIERXoH.js.map
|
build/server/chunks/_server.ts-EYIERXoH.js.map
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
{"version":3,"file":"_server.ts-EYIERXoH.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/llm/health/_server.ts.js"],"sourcesContent":["import { d as private_env } from \"../../../../chunks/shared-server.js\";\nimport { L as LlamaCppService } from \"../../../../chunks/LlamaCppService.js\";\nconst GET = async () => {\n let llmService = new LlamaCppService(private_env.LLM_API_URL);\n let response = await llmService.health();\n return new Response(\n JSON.stringify({ status: response }),\n {\n headers: { \"Content-Type\": \"application/json\" }\n }\n );\n};\nexport {\n GET\n};\n"],"names":[],"mappings":";;;;;;AAEK,MAAC,GAAG,GAAG,YAAY;AACxB,EAAE,IAAI,UAAU,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AAChE,EAAE,IAAI,QAAQ,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC;AAC3C,EAAE,OAAO,IAAI,QAAQ;AACrB,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AACxC,IAAI;AACJ,MAAM,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;AACrD,KAAK;AACL,GAAG,CAAC;AACJ;;;;"}
|
build/server/chunks/_server.ts-KVBIHTLR.js
ADDED
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { L as LogService } from './LogService-6IleCGNg.js';
|
2 |
+
import 'fs';
|
3 |
+
import 'path';
|
4 |
+
import 'util';
|
5 |
+
import 'date-fns';
|
6 |
+
import 'mongoose';
|
7 |
+
import 'exceljs';
|
8 |
+
import './shared-server-49TKSBDM.js';
|
9 |
+
|
10 |
+
const logService = new LogService();
|
11 |
+
const POST = async ({ request }) => {
|
12 |
+
try {
|
13 |
+
const { id, score, comment } = await request.json();
|
14 |
+
await logService.logUserScore(id, score, comment);
|
15 |
+
return new Response(JSON.stringify({ message: "User score updated successfully" }), {
|
16 |
+
status: 200,
|
17 |
+
headers: { "Content-Type": "application/json" }
|
18 |
+
});
|
19 |
+
} catch (error) {
|
20 |
+
console.error("Error while recording log:", error);
|
21 |
+
return new Response(JSON.stringify({ message: "Failed to record log entry" }), {
|
22 |
+
status: 500,
|
23 |
+
headers: { "Content-Type": "application/json" }
|
24 |
+
});
|
25 |
+
}
|
26 |
+
};
|
27 |
+
|
28 |
+
export { POST };
|
29 |
+
//# sourceMappingURL=_server.ts-KVBIHTLR.js.map
|
build/server/chunks/_server.ts-KVBIHTLR.js.map
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
{"version":3,"file":"_server.ts-KVBIHTLR.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/log/write/userScore/_server.ts.js"],"sourcesContent":["import { L as LogService } from \"../../../../../../chunks/LogService.js\";\nconst logService = new LogService();\nconst POST = async ({ request }) => {\n try {\n const { id, score, comment } = await request.json();\n await logService.logUserScore(id, score, comment);\n return new Response(JSON.stringify({ message: \"User score updated successfully\" }), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" }\n });\n } catch (error) {\n console.error(\"Error while recording log:\", error);\n return new Response(JSON.stringify({ message: \"Failed to record log entry\" }), {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" }\n });\n }\n};\nexport {\n POST\n};\n"],"names":[],"mappings":";;;;;;;;;AACA,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;AAC/B,MAAC,IAAI,GAAG,OAAO,EAAE,OAAO,EAAE,KAAK;AACpC,EAAE,IAAI;AACN,IAAI,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;AACxD,IAAI,MAAM,UAAU,CAAC,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACtD,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,iCAAiC,EAAE,CAAC,EAAE;AACxF,MAAM,MAAM,EAAE,GAAG;AACjB,MAAM,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;AACrD,KAAK,CAAC,CAAC;AACP,GAAG,CAAC,OAAO,KAAK,EAAE;AAClB,IAAI,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;AACvD,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,EAAE;AACnF,MAAM,MAAM,EAAE,GAAG;AACjB,MAAM,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;AACrD,KAAK,CAAC,CAAC;AACP,GAAG;AACH;;;;"}
|
build/server/chunks/_server.ts-L4PDT8N4.js
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { d as private_env } from './shared-server-49TKSBDM.js';
|
2 |
+
import { c as redirect, b as base } from './index-JNnR1J8_.js';
|
3 |
+
import { L as LlamaCppService } from './LlamaCppService-QhLZfkhy.js';
|
4 |
+
import 'fs';
|
5 |
+
import 'path';
|
6 |
+
import 'node:dns';
|
7 |
+
|
8 |
+
const POST = async ({ locals, request }) => {
|
9 |
+
const body = await request.json();
|
10 |
+
const abortController = new AbortController();
|
11 |
+
let llmService = new LlamaCppService(private_env.LLM_API_URL);
|
12 |
+
let llmGenerator = await llmService.conversation(body.history, { abortController });
|
13 |
+
const stream = new ReadableStream({
|
14 |
+
async start(controller) {
|
15 |
+
try {
|
16 |
+
for await (const output of await llmGenerator({ history: body.history })) {
|
17 |
+
controller.enqueue(output.token.text);
|
18 |
+
}
|
19 |
+
} catch (error2) {
|
20 |
+
if (error2.name === "AbortError") {
|
21 |
+
console.log("Request was aborted during LLMServer prediction.");
|
22 |
+
} else {
|
23 |
+
console.error("Error during LLMServer prediction:", error2);
|
24 |
+
}
|
25 |
+
}
|
26 |
+
controller.close();
|
27 |
+
},
|
28 |
+
cancel() {
|
29 |
+
console.log("ReadableStream canceled and aborted");
|
30 |
+
abortController.abort();
|
31 |
+
}
|
32 |
+
});
|
33 |
+
return new Response(stream, {
|
34 |
+
headers: {
|
35 |
+
"content-type": "text/event-stream"
|
36 |
+
}
|
37 |
+
});
|
38 |
+
};
|
39 |
+
const GET = async () => {
|
40 |
+
throw redirect(302, `${base}/`);
|
41 |
+
};
|
42 |
+
|
43 |
+
export { GET, POST };
|
44 |
+
//# sourceMappingURL=_server.ts-L4PDT8N4.js.map
|
build/server/chunks/_server.ts-L4PDT8N4.js.map
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
{"version":3,"file":"_server.ts-L4PDT8N4.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/llm/chat/_server.ts.js"],"sourcesContent":["import { d as private_env } from \"../../../../chunks/shared-server.js\";\nimport { r as redirect } from \"../../../../chunks/index.js\";\nimport { b as base } from \"../../../../chunks/paths.js\";\nimport { L as LlamaCppService } from \"../../../../chunks/LlamaCppService.js\";\nconst POST = async ({ locals, request }) => {\n const body = await request.json();\n const abortController = new AbortController();\n let llmService = new LlamaCppService(private_env.LLM_API_URL);\n let llmGenerator = await llmService.conversation(body.history, { abortController });\n const stream = new ReadableStream({\n async start(controller) {\n try {\n for await (const output of await llmGenerator({ history: body.history })) {\n controller.enqueue(output.token.text);\n }\n } catch (error2) {\n if (error2.name === \"AbortError\") {\n console.log(\"Request was aborted during LLMServer prediction.\");\n } else {\n console.error(\"Error during LLMServer prediction:\", error2);\n }\n }\n controller.close();\n },\n cancel() {\n console.log(\"ReadableStream canceled and aborted\");\n abortController.abort();\n }\n });\n return new Response(stream, {\n headers: {\n \"content-type\": \"text/event-stream\"\n }\n });\n};\nconst GET = async () => {\n throw redirect(302, `${base}/`);\n};\nexport {\n GET,\n POST\n};\n"],"names":[],"mappings":";;;;;;;AAIK,MAAC,IAAI,GAAG,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK;AAC5C,EAAE,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;AACpC,EAAE,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;AAChD,EAAE,IAAI,UAAU,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AAChE,EAAE,IAAI,YAAY,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC;AACtF,EAAE,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC;AACpC,IAAI,MAAM,KAAK,CAAC,UAAU,EAAE;AAC5B,MAAM,IAAI;AACV,QAAQ,WAAW,MAAM,MAAM,IAAI,MAAM,YAAY,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE;AAClF,UAAU,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChD,SAAS;AACT,OAAO,CAAC,OAAO,MAAM,EAAE;AACvB,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,EAAE;AAC1C,UAAU,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;AAC1E,SAAS,MAAM;AACf,UAAU,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,MAAM,CAAC,CAAC;AACtE,SAAS;AACT,OAAO;AACP,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;AACzB,KAAK;AACL,IAAI,MAAM,GAAG;AACb,MAAM,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;AACzD,MAAM,eAAe,CAAC,KAAK,EAAE,CAAC;AAC9B,KAAK;AACL,GAAG,CAAC,CAAC;AACL,EAAE,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE;AAC9B,IAAI,OAAO,EAAE;AACb,MAAM,cAAc,EAAE,mBAAmB;AACzC,KAAK;AACL,GAAG,CAAC,CAAC;AACL,EAAE;AACG,MAAC,GAAG,GAAG,YAAY;AACxB,EAAE,MAAM,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC;;;;"}
|
build/server/chunks/_server.ts-Quwmue9n.js
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { L as LogService } from './LogService-6IleCGNg.js';
|
2 |
+
import 'fs';
|
3 |
+
import 'path';
|
4 |
+
import 'util';
|
5 |
+
import 'date-fns';
|
6 |
+
import 'mongoose';
|
7 |
+
import 'exceljs';
|
8 |
+
import './shared-server-49TKSBDM.js';
|
9 |
+
|
10 |
+
const logService = new LogService();
|
11 |
+
const GET = async ({ url }) => {
|
12 |
+
try {
|
13 |
+
const dateFrom = url.searchParams.get("dateFrom");
|
14 |
+
const dateTo = url.searchParams.get("dateTo");
|
15 |
+
const fields = url.searchParams.get("fields");
|
16 |
+
const dateFromObj = dateFrom ? new Date(dateFrom) : void 0;
|
17 |
+
const dateToObj = dateTo ? new Date(dateTo) : void 0;
|
18 |
+
const fieldsObj = fields ? fields.split(",") : void 0;
|
19 |
+
const buffer = await logService.export("excel", dateFromObj, dateToObj, fieldsObj);
|
20 |
+
return new Response(buffer, {
|
21 |
+
headers: {
|
22 |
+
"Content-Type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
23 |
+
"Content-Disposition": 'attachment; filename="logs.xlsx"'
|
24 |
+
}
|
25 |
+
});
|
26 |
+
} catch (error) {
|
27 |
+
console.error("Error while exporting logs to Excel:", error);
|
28 |
+
return new Response(JSON.stringify({ message: "Failed to export logs to Excel" }), {
|
29 |
+
status: 500,
|
30 |
+
headers: { "Content-Type": "application/json" }
|
31 |
+
});
|
32 |
+
}
|
33 |
+
};
|
34 |
+
|
35 |
+
export { GET };
|
36 |
+
//# sourceMappingURL=_server.ts-Quwmue9n.js.map
|
build/server/chunks/_server.ts-Quwmue9n.js.map
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
{"version":3,"file":"_server.ts-Quwmue9n.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/log/export/excel/_server.ts.js"],"sourcesContent":["import { L as LogService } from \"../../../../../../chunks/LogService.js\";\nconst logService = new LogService();\nconst GET = async ({ url }) => {\n try {\n const dateFrom = url.searchParams.get(\"dateFrom\");\n const dateTo = url.searchParams.get(\"dateTo\");\n const fields = url.searchParams.get(\"fields\");\n const dateFromObj = dateFrom ? new Date(dateFrom) : void 0;\n const dateToObj = dateTo ? new Date(dateTo) : void 0;\n const fieldsObj = fields ? fields.split(\",\") : void 0;\n const buffer = await logService.export(\"excel\", dateFromObj, dateToObj, fieldsObj);\n return new Response(buffer, {\n headers: {\n \"Content-Type\": \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n \"Content-Disposition\": 'attachment; filename=\"logs.xlsx\"'\n }\n });\n } catch (error) {\n console.error(\"Error while exporting logs to Excel:\", error);\n return new Response(JSON.stringify({ message: \"Failed to export logs to Excel\" }), {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" }\n });\n }\n};\nexport {\n GET\n};\n"],"names":[],"mappings":";;;;;;;;;AACA,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;AAC/B,MAAC,GAAG,GAAG,OAAO,EAAE,GAAG,EAAE,KAAK;AAC/B,EAAE,IAAI;AACN,IAAI,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AACtD,IAAI,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAClD,IAAI,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAClD,IAAI,MAAM,WAAW,GAAG,QAAQ,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,CAAC;AAC/D,IAAI,MAAM,SAAS,GAAG,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC;AACzD,IAAI,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;AAC1D,IAAI,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AACvF,IAAI,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE;AAChC,MAAM,OAAO,EAAE;AACf,QAAQ,cAAc,EAAE,mEAAmE;AAC3F,QAAQ,qBAAqB,EAAE,kCAAkC;AACjE,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG,CAAC,OAAO,KAAK,EAAE;AAClB,IAAI,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;AACjE,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC,EAAE;AACvF,MAAM,MAAM,EAAE,GAAG;AACjB,MAAM,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;AACrD,KAAK,CAAC,CAAC;AACP,GAAG;AACH;;;;"}
|
build/server/chunks/_server.ts-SRd81JGz.js
ADDED
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { d as private_env } from './shared-server-49TKSBDM.js';
|
2 |
+
import { c as redirect, b as base } from './index-JNnR1J8_.js';
|
3 |
+
import { L as LlamaCppService } from './LlamaCppService-QhLZfkhy.js';
|
4 |
+
import 'fs';
|
5 |
+
import 'path';
|
6 |
+
import 'node:dns';
|
7 |
+
|
8 |
+
const POST = async ({ locals, request }) => {
|
9 |
+
const body = await request.json();
|
10 |
+
const abortController = new AbortController();
|
11 |
+
let llmService = new LlamaCppService(private_env.LLM_API_URL);
|
12 |
+
let llmGenerator = await llmService.predict(body.userprompt, { abortController });
|
13 |
+
const stream = new ReadableStream({
|
14 |
+
async start(controller) {
|
15 |
+
try {
|
16 |
+
for await (const output of await llmGenerator({ prompt: body.userprompt })) {
|
17 |
+
controller.enqueue(output.token.text);
|
18 |
+
}
|
19 |
+
} catch (error2) {
|
20 |
+
if (error2.name === "AbortError") {
|
21 |
+
console.log("Request was aborted during LLMServer prediction.");
|
22 |
+
} else {
|
23 |
+
console.error("Error during LLMServer prediction:", error2);
|
24 |
+
}
|
25 |
+
console.log(error2);
|
26 |
+
}
|
27 |
+
controller.close();
|
28 |
+
},
|
29 |
+
cancel() {
|
30 |
+
console.log("ReadableStream canceled and aborted");
|
31 |
+
abortController.abort();
|
32 |
+
}
|
33 |
+
});
|
34 |
+
return new Response(stream, {
|
35 |
+
headers: {
|
36 |
+
"content-type": "text/event-stream"
|
37 |
+
}
|
38 |
+
});
|
39 |
+
};
|
40 |
+
const GET = async () => {
|
41 |
+
throw redirect(302, `${base}/`);
|
42 |
+
};
|
43 |
+
|
44 |
+
export { GET, POST };
|
45 |
+
//# sourceMappingURL=_server.ts-SRd81JGz.js.map
|
build/server/chunks/_server.ts-SRd81JGz.js.map
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
{"version":3,"file":"_server.ts-SRd81JGz.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/llm/_server.ts.js"],"sourcesContent":["import { d as private_env } from \"../../../chunks/shared-server.js\";\nimport { r as redirect } from \"../../../chunks/index.js\";\nimport { b as base } from \"../../../chunks/paths.js\";\nimport { L as LlamaCppService } from \"../../../chunks/LlamaCppService.js\";\nconst POST = async ({ locals, request }) => {\n const body = await request.json();\n const abortController = new AbortController();\n let llmService = new LlamaCppService(private_env.LLM_API_URL);\n let llmGenerator = await llmService.predict(body.userprompt, { abortController });\n const stream = new ReadableStream({\n async start(controller) {\n try {\n for await (const output of await llmGenerator({ prompt: body.userprompt })) {\n controller.enqueue(output.token.text);\n }\n } catch (error2) {\n if (error2.name === \"AbortError\") {\n console.log(\"Request was aborted during LLMServer prediction.\");\n } else {\n console.error(\"Error during LLMServer prediction:\", error2);\n }\n console.log(error2);\n }\n controller.close();\n },\n cancel() {\n console.log(\"ReadableStream canceled and aborted\");\n abortController.abort();\n }\n });\n return new Response(stream, {\n headers: {\n \"content-type\": \"text/event-stream\"\n }\n });\n};\nconst GET = async () => {\n throw redirect(302, `${base}/`);\n};\nexport {\n GET,\n POST\n};\n"],"names":[],"mappings":";;;;;;;AAIK,MAAC,IAAI,GAAG,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK;AAC5C,EAAE,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;AACpC,EAAE,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;AAChD,EAAE,IAAI,UAAU,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AAChE,EAAE,IAAI,YAAY,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC;AACpF,EAAE,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC;AACpC,IAAI,MAAM,KAAK,CAAC,UAAU,EAAE;AAC5B,MAAM,IAAI;AACV,QAAQ,WAAW,MAAM,MAAM,IAAI,MAAM,YAAY,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;AACpF,UAAU,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChD,SAAS;AACT,OAAO,CAAC,OAAO,MAAM,EAAE;AACvB,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,EAAE;AAC1C,UAAU,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;AAC1E,SAAS,MAAM;AACf,UAAU,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,MAAM,CAAC,CAAC;AACtE,SAAS;AACT,QAAQ,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC5B,OAAO;AACP,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;AACzB,KAAK;AACL,IAAI,MAAM,GAAG;AACb,MAAM,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;AACzD,MAAM,eAAe,CAAC,KAAK,EAAE,CAAC;AAC9B,KAAK;AACL,GAAG,CAAC,CAAC;AACL,EAAE,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE;AAC9B,IAAI,OAAO,EAAE;AACb,MAAM,cAAc,EAAE,mBAAmB;AACzC,KAAK;AACL,GAAG,CAAC,CAAC;AACL,EAAE;AACG,MAAC,GAAG,GAAG,YAAY;AACxB,EAAE,MAAM,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC;;;;"}
|
build/server/chunks/_server.ts-lrxgIAoZ.js
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { d as private_env } from './shared-server-49TKSBDM.js';
|
2 |
+
import { c as redirect, b as base } from './index-JNnR1J8_.js';
|
3 |
+
import { L as LlamaCppService } from './LlamaCppService-QhLZfkhy.js';
|
4 |
+
import { F as FullTextSearchService } from './FullTextSearchService-0xoNRjpt.js';
|
5 |
+
import 'fs';
|
6 |
+
import 'path';
|
7 |
+
import 'node:dns';
|
8 |
+
import 'node-fetch';
|
9 |
+
|
10 |
+
const POST = async ({ locals, request }) => {
|
11 |
+
const body = await request.json();
|
12 |
+
let prompt = body.user_query;
|
13 |
+
let template = body.prompt_template;
|
14 |
+
const defaultTemplate = 'Ты бухгалтер. Ты отвечаешь на русском языке. Ты всегда следуешь моим инструкциям.\n Ты отвечаешь на вопросы клиентов. Чтобы ответить, ты обязательно используешь только "источники", которые я тебе предоставляю. Ты используешь только официально-деловой стиль и необходимую терминологию. Соблюдай этические нормы. \nПри ответе на вопрос ты используешь только такой формат ответа:\n 1) Четкий и краткий ответ на поставленный вопрос. Ты можешь начать свой ответ так: "По Вашему вопросу сообщаем...". Используй по возможности слова: да, можно, нет, нельзя.\n 2) Обоснование (ты используешь для обоснования "источники". Ты используешь только "источники" для поиска необходимых "законов", "статей", "пунктов" и "подпунктов" для ответа на вопрос пользователя).\n 3) Аргументация (Ты используешь только "источники" для поиска необходимых "писем" и "судебных решений", чтобы аргументировать свой ответ)."\n 4) Заключение (ты подводишь итоги всего, что сказал выше. Избегай повторения и сложных конструкций). Если в источниках нельзя найти подходящую информацию для ответа, ты отвечаешь так: "Мы не можем ответить на данный вопрос. Обратитесь к специалисту."\n Вопрос: {{ВОПРОС}} \nИсточники: {{ИСТОЧНИКИ}}';
|
15 |
+
if (!template) {
|
16 |
+
template = defaultTemplate;
|
17 |
+
}
|
18 |
+
const abortController = new AbortController();
|
19 |
+
let service = new FullTextSearchService(private_env.SEARCH_API_URL);
|
20 |
+
let results = await service.search(prompt, { abortController });
|
21 |
+
function searchResultsToLlmSources(input) {
|
22 |
+
return input.map(({ title, text }) => `${title}
|
23 |
+
${text}`).join("\n\n");
|
24 |
+
}
|
25 |
+
const userPrompt = template.replace("{{ВОПРОС}}", prompt).replace("{{ИСТОЧНИКИ}}", searchResultsToLlmSources(results));
|
26 |
+
let llmService = new LlamaCppService(private_env.LLM_API_URL);
|
27 |
+
let llmGenerator = await llmService.predict(userPrompt, { abortController });
|
28 |
+
let response = "";
|
29 |
+
for await (const output of await llmGenerator({ prompt: userPrompt })) {
|
30 |
+
response += output.token.text;
|
31 |
+
}
|
32 |
+
return new Response(
|
33 |
+
JSON.stringify({ response, search_results: results }),
|
34 |
+
{
|
35 |
+
headers: { "Content-Type": "application/json" }
|
36 |
+
}
|
37 |
+
);
|
38 |
+
};
|
39 |
+
const GET = async () => {
|
40 |
+
throw redirect(302, `${base}/`);
|
41 |
+
};
|
42 |
+
|
43 |
+
export { GET, POST };
|
44 |
+
//# sourceMappingURL=_server.ts-lrxgIAoZ.js.map
|
build/server/chunks/_server.ts-lrxgIAoZ.js.map
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
{"version":3,"file":"_server.ts-lrxgIAoZ.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/_server.ts.js"],"sourcesContent":["import { d as private_env } from \"../../../chunks/shared-server.js\";\nimport { r as redirect } from \"../../../chunks/index.js\";\nimport { b as base } from \"../../../chunks/paths.js\";\nimport { L as LlamaCppService } from \"../../../chunks/LlamaCppService.js\";\nimport { F as FullTextSearchService } from \"../../../chunks/FullTextSearchService.js\";\nconst POST = async ({ locals, request }) => {\n const body = await request.json();\n let prompt = body.user_query;\n let template = body.prompt_template;\n const defaultTemplate = 'Ты бухгалтер. Ты отвечаешь на русском языке. Ты всегда следуешь моим инструкциям.\\n Ты отвечаешь на вопросы клиентов. Чтобы ответить, ты обязательно используешь только \"источники\", которые я тебе предоставляю. Ты используешь только официально-деловой стиль и необходимую терминологию. Соблюдай этические нормы. \\nПри ответе на вопрос ты используешь только такой формат ответа:\\n 1) Четкий и краткий ответ на поставленный вопрос. Ты можешь начать свой ответ так: \"По Вашему вопросу сообщаем...\". Используй по возможности слова: да, можно, нет, нельзя.\\n 2) Обоснование (ты используешь для обоснования \"источники\". Ты используешь только \"источники\" для поиска необходимых \"законов\", \"статей\", \"пунктов\" и \"подпунктов\" для ответа на вопрос пользователя).\\n 3) Аргументация (Ты используешь только \"источники\" для поиска необходимых \"писем\" и \"судебных решений\", чтобы аргументировать свой ответ).\"\\n 4) Заключение (ты подводишь итоги всего, что сказал выше. Избегай повторения и сложных конструкций). Если в источниках нельзя найти подходящую информацию для ответа, ты отвечаешь так: \"Мы не можем ответить на данный вопрос. Обратитесь к специалисту.\"\\n Вопрос: {{ВОПРОС}} \\nИсточники: {{ИСТОЧНИКИ}}';\n if (!template) {\n template = defaultTemplate;\n }\n const abortController = new AbortController();\n let service = new FullTextSearchService(private_env.SEARCH_API_URL);\n let results = await service.search(prompt, { abortController });\n function searchResultsToLlmSources(input) {\n return input.map(({ title, text }) => `${title}\n${text}`).join(\"\\n\\n\");\n }\n const userPrompt = template.replace(\"{{ВОПРОС}}\", prompt).replace(\"{{ИСТОЧНИКИ}}\", searchResultsToLlmSources(results));\n let llmService = new LlamaCppService(private_env.LLM_API_URL);\n let llmGenerator = await llmService.predict(userPrompt, { abortController });\n let response = \"\";\n for await (const output of await llmGenerator({ prompt: userPrompt })) {\n response += output.token.text;\n }\n return new Response(\n JSON.stringify({ response, search_results: results }),\n {\n headers: { \"Content-Type\": \"application/json\" }\n }\n );\n};\nconst GET = async () => {\n throw redirect(302, `${base}/`);\n};\nexport {\n GET,\n POST\n};\n"],"names":[],"mappings":";;;;;;;;;AAKK,MAAC,IAAI,GAAG,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK;AAC5C,EAAE,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;AACpC,EAAE,IAAI,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;AAC/B,EAAE,IAAI,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC;AACtC,EAAE,MAAM,eAAe,GAAG,6qCAA6qC,CAAC;AACxsC,EAAE,IAAI,CAAC,QAAQ,EAAE;AACjB,IAAI,QAAQ,GAAG,eAAe,CAAC;AAC/B,GAAG;AACH,EAAE,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;AAChD,EAAE,IAAI,OAAO,GAAG,IAAI,qBAAqB,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;AACtE,EAAE,IAAI,OAAO,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC;AAClE,EAAE,SAAS,yBAAyB,CAAC,KAAK,EAAE;AAC5C,IAAI,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC;AACnD,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvB,GAAG;AACH,EAAE,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,yBAAyB,CAAC,OAAO,CAAC,CAAC,CAAC;AACzH,EAAE,IAAI,UAAU,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AAChE,EAAE,IAAI,YAAY,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC;AAC/E,EAAE,IAAI,QAAQ,GAAG,EAAE,CAAC;AACpB,EAAE,WAAW,MAAM,MAAM,IAAI,MAAM,YAAY,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE;AACzE,IAAI,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;AAClC,GAAG;AACH,EAAE,OAAO,IAAI,QAAQ;AACrB,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;AACzD,IAAI;AACJ,MAAM,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;AACrD,KAAK;AACL,GAAG,CAAC;AACJ,EAAE;AACG,MAAC,GAAG,GAAG,YAAY;AACxB,EAAE,MAAM,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC;;;;"}
|
build/server/chunks/_server.ts-oZxvFZg4.js
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { L as LogService } from './LogService-6IleCGNg.js';
|
2 |
+
import 'fs';
|
3 |
+
import 'path';
|
4 |
+
import 'util';
|
5 |
+
import 'date-fns';
|
6 |
+
import 'mongoose';
|
7 |
+
import 'exceljs';
|
8 |
+
import './shared-server-49TKSBDM.js';
|
9 |
+
|
10 |
+
const logService = new LogService();
|
11 |
+
const GET = async ({ url }) => {
|
12 |
+
try {
|
13 |
+
const dateFrom = url.searchParams.get("dateFrom");
|
14 |
+
const dateTo = url.searchParams.get("dateTo");
|
15 |
+
const dateFromObj = dateFrom ? new Date(dateFrom) : void 0;
|
16 |
+
const dateToObj = dateTo ? new Date(dateTo) : void 0;
|
17 |
+
await logService.export("json", dateFromObj, dateToObj);
|
18 |
+
return new Response(JSON.stringify({ message: "Logs exported to JSON successfully" }), {
|
19 |
+
status: 200,
|
20 |
+
headers: { "Content-Type": "application/json" }
|
21 |
+
});
|
22 |
+
} catch (error) {
|
23 |
+
console.error("Error while exporting logs to JSON:", error);
|
24 |
+
return new Response(JSON.stringify({ message: "Failed to export logs to JSON" }), {
|
25 |
+
status: 500,
|
26 |
+
headers: { "Content-Type": "application/json" }
|
27 |
+
});
|
28 |
+
}
|
29 |
+
};
|
30 |
+
|
31 |
+
export { GET };
|
32 |
+
//# sourceMappingURL=_server.ts-oZxvFZg4.js.map
|
build/server/chunks/_server.ts-oZxvFZg4.js.map
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
{"version":3,"file":"_server.ts-oZxvFZg4.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/log/export/json/_server.ts.js"],"sourcesContent":["import { L as LogService } from \"../../../../../../chunks/LogService.js\";\nconst logService = new LogService();\nconst GET = async ({ url }) => {\n try {\n const dateFrom = url.searchParams.get(\"dateFrom\");\n const dateTo = url.searchParams.get(\"dateTo\");\n const dateFromObj = dateFrom ? new Date(dateFrom) : void 0;\n const dateToObj = dateTo ? new Date(dateTo) : void 0;\n await logService.export(\"json\", dateFromObj, dateToObj);\n return new Response(JSON.stringify({ message: \"Logs exported to JSON successfully\" }), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" }\n });\n } catch (error) {\n console.error(\"Error while exporting logs to JSON:\", error);\n return new Response(JSON.stringify({ message: \"Failed to export logs to JSON\" }), {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" }\n });\n }\n};\nexport {\n GET\n};\n"],"names":[],"mappings":";;;;;;;;;AACA,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;AAC/B,MAAC,GAAG,GAAG,OAAO,EAAE,GAAG,EAAE,KAAK;AAC/B,EAAE,IAAI;AACN,IAAI,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AACtD,IAAI,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAClD,IAAI,MAAM,WAAW,GAAG,QAAQ,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,CAAC;AAC/D,IAAI,MAAM,SAAS,GAAG,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC;AACzD,IAAI,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;AAC5D,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,oCAAoC,EAAE,CAAC,EAAE;AAC3F,MAAM,MAAM,EAAE,GAAG;AACjB,MAAM,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;AACrD,KAAK,CAAC,CAAC;AACP,GAAG,CAAC,OAAO,KAAK,EAAE;AAClB,IAAI,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;AAChE,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,+BAA+B,EAAE,CAAC,EAAE;AACtF,MAAM,MAAM,EAAE,GAAG;AACjB,MAAM,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;AACrD,KAAK,CAAC,CAAC;AACP,GAAG;AACH;;;;"}
|
build/server/index.js
CHANGED
@@ -1282,7 +1282,7 @@ const options = {
|
|
1282 |
<div class="error">
|
1283 |
<span class="status">` + status + '</span>\n <div class="message">\n <h1>' + message + "</h1>\n </div>\n </div>\n </body>\n</html>\n"
|
1284 |
},
|
1285 |
-
version_hash: "
|
1286 |
};
|
1287 |
async function get_hooks() {
|
1288 |
return {
|
|
|
1282 |
<div class="error">
|
1283 |
<span class="status">` + status + '</span>\n <div class="message">\n <h1>' + message + "</h1>\n </div>\n </div>\n </body>\n</html>\n"
|
1284 |
},
|
1285 |
+
version_hash: "c39tcv"
|
1286 |
};
|
1287 |
async function get_hooks() {
|
1288 |
return {
|
build/server/index.js.map
CHANGED
The diff for this file is too large to render.
See raw diff
|
|
build/server/manifest.js
CHANGED
@@ -10,11 +10,11 @@ return {
|
|
10 |
assets: new Set(["favicon.png","robots.txt"]),
|
11 |
mimeTypes: {".png":"image/png",".txt":"text/plain"},
|
12 |
_: {
|
13 |
-
client: {"start":"_app/immutable/entry/start.
|
14 |
nodes: [
|
15 |
__memo(() => import('./chunks/0-0wOlAF2E.js')),
|
16 |
-
__memo(() => import('./chunks/1-
|
17 |
-
__memo(() => import('./chunks/2-
|
18 |
__memo(() => import('./chunks/3-ndeDycnh.js')),
|
19 |
__memo(() => import('./chunks/4-_BZDa7wc.js'))
|
20 |
],
|
@@ -31,7 +31,7 @@ return {
|
|
31 |
pattern: /^\/api\/?$/,
|
32 |
params: [],
|
33 |
page: null,
|
34 |
-
endpoint: __memo(() => import('./chunks/_server.ts-
|
35 |
},
|
36 |
{
|
37 |
id: "/api/env/search_version",
|
@@ -45,35 +45,35 @@ return {
|
|
45 |
pattern: /^\/api\/log\/export\/excel\/?$/,
|
46 |
params: [],
|
47 |
page: null,
|
48 |
-
endpoint: __memo(() => import('./chunks/_server.ts-
|
49 |
},
|
50 |
{
|
51 |
id: "/api/log/export/json",
|
52 |
pattern: /^\/api\/log\/export\/json\/?$/,
|
53 |
params: [],
|
54 |
page: null,
|
55 |
-
endpoint: __memo(() => import('./chunks/_server.ts-
|
56 |
},
|
57 |
{
|
58 |
id: "/api/log/write",
|
59 |
pattern: /^\/api\/log\/write\/?$/,
|
60 |
params: [],
|
61 |
page: null,
|
62 |
-
endpoint: __memo(() => import('./chunks/_server.ts-
|
63 |
},
|
64 |
{
|
65 |
id: "/api/log/write/userScore",
|
66 |
pattern: /^\/api\/log\/write\/userScore\/?$/,
|
67 |
params: [],
|
68 |
page: null,
|
69 |
-
endpoint: __memo(() => import('./chunks/_server.ts-
|
70 |
},
|
71 |
{
|
72 |
id: "/api/metrics/calculate",
|
73 |
pattern: /^\/api\/metrics\/calculate\/?$/,
|
74 |
params: [],
|
75 |
page: null,
|
76 |
-
endpoint: __memo(() => import('./chunks/_server.ts-
|
77 |
},
|
78 |
{
|
79 |
id: "/chat",
|
@@ -87,21 +87,21 @@ return {
|
|
87 |
pattern: /^\/llm\/?$/,
|
88 |
params: [],
|
89 |
page: null,
|
90 |
-
endpoint: __memo(() => import('./chunks/_server.ts-
|
91 |
},
|
92 |
{
|
93 |
id: "/llm/chat",
|
94 |
pattern: /^\/llm\/chat\/?$/,
|
95 |
params: [],
|
96 |
page: null,
|
97 |
-
endpoint: __memo(() => import('./chunks/_server.ts-
|
98 |
},
|
99 |
{
|
100 |
id: "/llm/health",
|
101 |
pattern: /^\/llm\/health\/?$/,
|
102 |
params: [],
|
103 |
page: null,
|
104 |
-
endpoint: __memo(() => import('./chunks/_server.ts-
|
105 |
},
|
106 |
{
|
107 |
id: "/logs",
|
|
|
10 |
assets: new Set(["favicon.png","robots.txt"]),
|
11 |
mimeTypes: {".png":"image/png",".txt":"text/plain"},
|
12 |
_: {
|
13 |
+
client: {"start":"_app/immutable/entry/start.s6vMv-7T.js","app":"_app/immutable/entry/app.6IH58JcQ.js","imports":["_app/immutable/entry/start.s6vMv-7T.js","_app/immutable/chunks/entry.NqRdvUX4.js","_app/immutable/chunks/scheduler.OwA2AG0M.js","_app/immutable/chunks/index.UTqYide5.js","_app/immutable/entry/app.6IH58JcQ.js","_app/immutable/chunks/scheduler.OwA2AG0M.js","_app/immutable/chunks/index.JlSaLmPP.js"],"stylesheets":[],"fonts":[],"uses_env_dynamic_public":false},
|
14 |
nodes: [
|
15 |
__memo(() => import('./chunks/0-0wOlAF2E.js')),
|
16 |
+
__memo(() => import('./chunks/1-inBcOc8r.js')),
|
17 |
+
__memo(() => import('./chunks/2-Vbi53EwI.js')),
|
18 |
__memo(() => import('./chunks/3-ndeDycnh.js')),
|
19 |
__memo(() => import('./chunks/4-_BZDa7wc.js'))
|
20 |
],
|
|
|
31 |
pattern: /^\/api\/?$/,
|
32 |
params: [],
|
33 |
page: null,
|
34 |
+
endpoint: __memo(() => import('./chunks/_server.ts-lrxgIAoZ.js'))
|
35 |
},
|
36 |
{
|
37 |
id: "/api/env/search_version",
|
|
|
45 |
pattern: /^\/api\/log\/export\/excel\/?$/,
|
46 |
params: [],
|
47 |
page: null,
|
48 |
+
endpoint: __memo(() => import('./chunks/_server.ts-Quwmue9n.js'))
|
49 |
},
|
50 |
{
|
51 |
id: "/api/log/export/json",
|
52 |
pattern: /^\/api\/log\/export\/json\/?$/,
|
53 |
params: [],
|
54 |
page: null,
|
55 |
+
endpoint: __memo(() => import('./chunks/_server.ts-oZxvFZg4.js'))
|
56 |
},
|
57 |
{
|
58 |
id: "/api/log/write",
|
59 |
pattern: /^\/api\/log\/write\/?$/,
|
60 |
params: [],
|
61 |
page: null,
|
62 |
+
endpoint: __memo(() => import('./chunks/_server.ts-9ilSfmL3.js'))
|
63 |
},
|
64 |
{
|
65 |
id: "/api/log/write/userScore",
|
66 |
pattern: /^\/api\/log\/write\/userScore\/?$/,
|
67 |
params: [],
|
68 |
page: null,
|
69 |
+
endpoint: __memo(() => import('./chunks/_server.ts-KVBIHTLR.js'))
|
70 |
},
|
71 |
{
|
72 |
id: "/api/metrics/calculate",
|
73 |
pattern: /^\/api\/metrics\/calculate\/?$/,
|
74 |
params: [],
|
75 |
page: null,
|
76 |
+
endpoint: __memo(() => import('./chunks/_server.ts-8QOft-oQ.js'))
|
77 |
},
|
78 |
{
|
79 |
id: "/chat",
|
|
|
87 |
pattern: /^\/llm\/?$/,
|
88 |
params: [],
|
89 |
page: null,
|
90 |
+
endpoint: __memo(() => import('./chunks/_server.ts-SRd81JGz.js'))
|
91 |
},
|
92 |
{
|
93 |
id: "/llm/chat",
|
94 |
pattern: /^\/llm\/chat\/?$/,
|
95 |
params: [],
|
96 |
page: null,
|
97 |
+
endpoint: __memo(() => import('./chunks/_server.ts-L4PDT8N4.js'))
|
98 |
},
|
99 |
{
|
100 |
id: "/llm/health",
|
101 |
pattern: /^\/llm\/health\/?$/,
|
102 |
params: [],
|
103 |
page: null,
|
104 |
+
endpoint: __memo(() => import('./chunks/_server.ts-EYIERXoH.js'))
|
105 |
},
|
106 |
{
|
107 |
id: "/logs",
|
build/server/manifest.js.map
CHANGED
@@ -1 +1 @@
|
|
1 |
-
{"version":3,"file":"manifest.js","sources":["../../.svelte-kit/adapter-node/manifest.js"],"sourcesContent":["export const manifest = (() => {\nfunction __memo(fn) {\n\tlet value;\n\treturn () => value ??= (value = fn());\n}\n\nreturn {\n\tappDir: \"_app\",\n\tappPath: \"_app\",\n\tassets: new Set([\"favicon.png\",\"robots.txt\"]),\n\tmimeTypes: {\".png\":\"image/png\",\".txt\":\"text/plain\"},\n\t_: {\n\t\tclient: {\"start\":\"_app/immutable/entry/start.
|
|
|
1 |
+
{"version":3,"file":"manifest.js","sources":["../../.svelte-kit/adapter-node/manifest.js"],"sourcesContent":["export const manifest = (() => {\nfunction __memo(fn) {\n\tlet value;\n\treturn () => value ??= (value = fn());\n}\n\nreturn {\n\tappDir: \"_app\",\n\tappPath: \"_app\",\n\tassets: new Set([\"favicon.png\",\"robots.txt\"]),\n\tmimeTypes: {\".png\":\"image/png\",\".txt\":\"text/plain\"},\n\t_: {\n\t\tclient: {\"start\":\"_app/immutable/entry/start.s6vMv-7T.js\",\"app\":\"_app/immutable/entry/app.6IH58JcQ.js\",\"imports\":[\"_app/immutable/entry/start.s6vMv-7T.js\",\"_app/immutable/chunks/entry.NqRdvUX4.js\",\"_app/immutable/chunks/scheduler.OwA2AG0M.js\",\"_app/immutable/chunks/index.UTqYide5.js\",\"_app/immutable/entry/app.6IH58JcQ.js\",\"_app/immutable/chunks/scheduler.OwA2AG0M.js\",\"_app/immutable/chunks/index.JlSaLmPP.js\"],\"stylesheets\":[],\"fonts\":[],\"uses_env_dynamic_public\":false},\n\t\tnodes: [\n\t\t\t__memo(() => import('./nodes/0.js')),\n\t\t\t__memo(() => import('./nodes/1.js')),\n\t\t\t__memo(() => import('./nodes/2.js')),\n\t\t\t__memo(() => import('./nodes/3.js')),\n\t\t\t__memo(() => import('./nodes/4.js'))\n\t\t],\n\t\troutes: [\n\t\t\t{\n\t\t\t\tid: \"/\",\n\t\t\t\tpattern: /^\\/$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 2 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/api\",\n\t\t\t\tpattern: /^\\/api\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/api/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/api/env/search_version\",\n\t\t\t\tpattern: /^\\/api\\/env\\/search_version\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/api/env/search_version/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/api/log/export/excel\",\n\t\t\t\tpattern: /^\\/api\\/log\\/export\\/excel\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/api/log/export/excel/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/api/log/export/json\",\n\t\t\t\tpattern: /^\\/api\\/log\\/export\\/json\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/api/log/export/json/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/api/log/write\",\n\t\t\t\tpattern: /^\\/api\\/log\\/write\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/api/log/write/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/api/log/write/userScore\",\n\t\t\t\tpattern: /^\\/api\\/log\\/write\\/userScore\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/api/log/write/userScore/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/api/metrics/calculate\",\n\t\t\t\tpattern: /^\\/api\\/metrics\\/calculate\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/api/metrics/calculate/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/chat\",\n\t\t\t\tpattern: /^\\/chat\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 3 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/llm\",\n\t\t\t\tpattern: /^\\/llm\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/llm/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/llm/chat\",\n\t\t\t\tpattern: /^\\/llm\\/chat\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/llm/chat/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/llm/health\",\n\t\t\t\tpattern: /^\\/llm\\/health\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/llm/health/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/logs\",\n\t\t\t\tpattern: /^\\/logs\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 4 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/log/export\",\n\t\t\t\tpattern: /^\\/log\\/export\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/log/export/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/log/response\",\n\t\t\t\tpattern: /^\\/log\\/response\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/log/response/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/log/response/export/excel\",\n\t\t\t\tpattern: /^\\/log\\/response\\/export\\/excel\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/log/response/export/excel/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/search\",\n\t\t\t\tpattern: /^\\/search\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/search/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/search/health\",\n\t\t\t\tpattern: /^\\/search\\/health\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/search/health/_server.ts.js'))\n\t\t\t}\n\t\t],\n\t\tmatchers: async () => {\n\t\t\t\n\t\t\treturn { };\n\t\t}\n\t}\n}\n})();\n\nexport const prerendered = new Set([]);\n"],"names":[],"mappings":"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"}
|