llmxray 0.3.4 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{AITrainingPage-CyTi1NB2.js → AITrainingPage-Ck1bDWWB.js} +1 -1
- package/dist/assets/BenchmarkPage-VzMNGUEy.js +31 -0
- package/dist/assets/{ComparisonPage-CiIKqA9v.js → ComparisonPage-BBliPm7K.js} +4 -4
- package/dist/assets/{DashboardPage-DU_EOLw8.js → DashboardPage-CH15t_MS.js} +1 -1
- package/dist/assets/{EmbeddingsPage-BczPU9IA.js → EmbeddingsPage-BIHHeJq6.js} +1 -1
- package/dist/assets/GoogleCallbackPage-2gGq0Swg.js +1 -0
- package/dist/assets/{JsonTreeNode-vpbOunXf.js → JsonTreeNode-CDR0az7J.js} +1 -1
- package/dist/assets/{ModelCapabilityIcons.vue_vue_type_script_setup_true_lang-BQp6k-8Y.js → ModelCapabilityIcons.vue_vue_type_script_setup_true_lang-DkuvrY_5.js} +1 -1
- package/dist/assets/{RAGPage-DU70ttWt.js → RAGPage-BdXerRDW.js} +1 -1
- package/dist/assets/{SessionPage-BE5NuuJh.js → SessionPage-B39x2A8D.js} +1 -1
- package/dist/assets/SettingsPage-B1wm-L6T.js +1 -0
- package/dist/assets/{StatusBadge.vue_vue_type_script_setup_true_lang-CgEd6dPQ.js → StatusBadge.vue_vue_type_script_setup_true_lang-J8rYaobd.js} +1 -1
- package/dist/assets/{StorageGauge.vue_vue_type_style_index_0_lang-CX8sufFI.js → StorageGauge.vue_vue_type_style_index_0_lang-Begwajgo.js} +1 -1
- package/dist/assets/{SystemPage-BiD-Nvc1.js → SystemPage-DDZrsYds.js} +3 -3
- package/dist/assets/{TabBar.vue_vue_type_script_setup_true_lang-Dsu2LWVY.js → TabBar.vue_vue_type_script_setup_true_lang-DVCeD1qL.js} +1 -1
- package/dist/assets/{TokenStreamDisplay.vue_vue_type_script_setup_true_lang-BDwyOr-9.js → TokenStreamDisplay.vue_vue_type_script_setup_true_lang-rJpx5sU7.js} +1 -1
- package/dist/assets/{ToolWorkshopPage-Dhz1Sqv0.js → ToolWorkshopPage-DnHp32vX.js} +5 -5
- package/dist/assets/agent-store-BWO6HamI.js +1 -0
- package/dist/assets/canvas-ai-db-anWOo2F0.js +2 -0
- package/dist/assets/{download-DuwLDzsW.js → download-BqPPd3_X.js} +1 -1
- package/dist/assets/{generate-service-C4gzEmXZ.js → generate-service-C3Z8NZaT.js} +1 -1
- package/dist/assets/{google-auth-store-BE1EiKPv.js → google-auth-store-CgUWvtRU.js} +1 -1
- package/dist/assets/{index-DoAHVxX6.js → index-B7GdQF1S.js} +1 -1
- package/dist/assets/index-ClE7gpZb.js +8 -0
- package/dist/assets/{index-ny-QVb28.css → index-Dr1ztyT3.css} +1 -1
- package/dist/assets/index-KhnkHbiC.js +3 -0
- package/dist/assets/{metrics-store-CrcTLok0.js → metrics-store-BMhkZ9B4.js} +1 -1
- package/dist/assets/papaparse.min-z5sNvmdo.js +10 -0
- package/dist/assets/{pencil-B_bOf0D7.js → pencil-Csf0-tn3.js} +1 -1
- package/dist/assets/{rag-store-DbfHnbDe.js → rag-store-Ch0N5LTe.js} +3 -3
- package/dist/assets/{share-2-CUvRPpM2.js → share-2-DIi3V2dc.js} +1 -1
- package/dist/assets/storage-store-uPTARmbg.js +1 -0
- package/dist/assets/{stream-handler-DIbclxpH.js → stream-handler-BuwD741F.js} +1 -1
- package/dist/assets/{tool-workshop-store-DoTb4QN9.js → tool-workshop-store-koPpdoxb.js} +1 -1
- package/dist/assets/{toolcall-store-CcnV5sSF.js → toolcall-store-JKmpIFj3.js} +1 -1
- package/dist/assets/{trash-2-Bm4yN75F.js → trash-2-aeVGvgIz.js} +1 -1
- package/dist/index.html +2 -2
- package/package.json +2 -1
- package/dist/assets/BenchmarkPage-BIja0Qas.js +0 -31
- package/dist/assets/GoogleCallbackPage-DfIvX7pT.js +0 -1
- package/dist/assets/SettingsPage-Bi1yGVMe.js +0 -1
- package/dist/assets/_commonjsHelpers-DsqdWQfm.js +0 -1
- package/dist/assets/agent-store-P3WGf428.js +0 -1
- package/dist/assets/canvas-ai-db-BolM-_G7.js +0 -2
- package/dist/assets/index-CG_7ZNQn.js +0 -6
- package/dist/assets/index-Zf_dr6sG.js +0 -3
- package/dist/assets/papaparse.min-3s4OkBbM.js +0 -10
- package/dist/assets/storage-store-BpKORJyE.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{b as f,B as g,e as n,f as t,F as i,h as b,t as x,u as c,ap as v,H as y,r as p,j as a}from"./index-CG_7ZNQn.js";import{u as k}from"./google-auth-store-BE1EiKPv.js";import"./google-auth-CfEcVMA7.js";const w={class:"flex items-center justify-center h-full"},C={class:"rounded-xl border border-border-default bg-surface-raised p-8 shadow-lg w-[400px] text-center"},G={class:"text-xs text-text-muted mt-2"},h={class:"text-text-primary font-medium"},B={class:"text-xs text-error mt-2"},z=f({__name:"GoogleCallbackPage",setup(S){const u=v(),d=y(),m=k(),s=p("loading"),r=p("");return g(async()=>{const l=u.query.code,e=u.query.error;if(e){s.value="error",r.value=`Google authorization was denied: ${e}`;return}if(!l){s.value="error",r.value="No authorization code received from Google.";return}try{await m.handleOAuthCallback(l),s.value="success",setTimeout(()=>d.replace("/settings"),1500)}catch(o){s.value="error",r.value=o instanceof Error?o.message:String(o)}}),(l,e)=>(a(),n("div",w,[t("div",C,[s.value==="loading"?(a(),n(i,{key:0},[e[1]||(e[1]=t("div",{class:"inline-block h-8 w-8 rounded-full border-2 border-accent border-t-transparent animate-spin mb-4"},null,-1)),e[2]||(e[2]=t("h3",{class:"text-sm font-medium text-text-primary"},"Connecting Google Account",-1)),e[3]||(e[3]=t("p",{class:"text-xs text-text-muted mt-2"},"Exchanging authorization code for tokens...",-1))],64)):s.value==="success"?(a(),n(i,{key:1},[e[5]||(e[5]=t("div",{class:"inline-flex items-center justify-center h-10 w-10 rounded-full bg-success/10 mb-4"},[t("span",{class:"text-success text-lg"},"✓")],-1)),e[6]||(e[6]=t("h3",{class:"text-sm font-medium text-text-primary"},"Google Account Connected",-1)),t("p",G,[e[4]||(e[4]=b(" Connected as ",-1)),t("span",h,x(c(m).userEmail??"unknown"),1)]),e[7]||(e[7]=t("p",{class:"text-[10px] text-text-muted mt-3"},"Redirecting to Settings...",-1))],64)):(a(),n(i,{key:2},[e[8]||(e[8]=t("div",{class:"inline-flex items-center justify-center h-10 w-10 rounded-full bg-error/10 mb-4"},[t("span",{class:"text-error text-lg"},"✗")],-1)),e[9]||(e[9]=t("h3",{class:"text-sm font-medium text-text-primary"},"Connection Failed",-1)),t("p",B,x(r.value),1),t("button",{class:"mt-4 rounded-lg bg-surface-overlay px-4 py-2 text-xs text-text-primary hover:bg-border-default transition-colors",onClick:e[0]||(e[0]=o=>c(d).push("/settings"))}," Back to Settings ")],64))])]))}});export{z as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as Z,b as I,z as J,ao as X,B as W,e as r,f as e,t as s,C as G,D as L,g as N,h as B,Q as P,l as E,G as Y,u as p,F as $,k as z,O as ee,r as b,o as q,a as S,j as l,A as te,p as T,i as h,U as se,q as A,ap as ae}from"./index-CG_7ZNQn.js";import{_ as oe}from"./TabBar.vue_vue_type_script_setup_true_lang-Dsu2LWVY.js";import{b as ne}from"./format-BqVZ9rwM.js";import{_ as le}from"./ModelCapabilityIcons.vue_vue_type_script_setup_true_lang-BQp6k-8Y.js";import{T as re}from"./trash-2-Bm4yN75F.js";import{u as ie}from"./google-auth-store-BE1EiKPv.js";import{_ as de}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./google-auth-CfEcVMA7.js";const ce=Z("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]),ue={class:"space-y-6"},pe={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-4"},me={class:"text-sm font-medium text-text-primary"},ge={class:"flex gap-3"},xe={class:"flex items-center gap-2 text-sm"},ve={class:"text-text-secondary"},be={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-4"},fe={class:"text-sm font-medium text-text-primary"},he={class:"space-y-6"},ye={class:"flex items-center gap-1.5 mb-3"},_e={class:"text-xs text-text-muted"},$e={class:"group relative"},ke={class:"pointer-events-none absolute left-full top-1/2 z-10 ms-2 w-72 -translate-y-1/2 rounded-lg border border-border-default bg-surface-raised p-3 text-xs text-text-secondary opacity-0 shadow-lg transition-opacity group-hover:pointer-events-auto group-hover:opacity-100"},Be={class:"font-medium text-text-primary mb-1"},we={class:"mb-2"},Ce={class:"space-y-1 text-[11px]"},Me={class:"ms-auto text-xs text-text-primary font-medium"},ze={class:"rounded-full bg-surface-overlay px-2 py-0.5 text-[10px] text-text-secondary"},Ge={class:"relative mt-0.5 h-3"},Le={class:"absolute inset-0 flex"},Se={class:"flex-[15] text-center text-[9px] text-text-muted border-e border-border-default/30"},Ae={class:"flex-[20] text-center text-[9px] text-text-muted border-e border-border-default/30"},Te={class:"flex-[25] text-center text-[9px] text-text-muted border-e border-border-default/30"},Ie={class:"flex-[40] text-center text-[9px] text-text-muted"},Ve={class:"relative h-1.5 mt-1"},De={class:"flex items-center gap-1.5 mb-2"},Ue={class:"text-xs text-text-muted"},Ee={class:"group relative"},qe={class:"pointer-events-none absolute left-full top-1/2 z-10 ms-2 w-72 -translate-y-1/2 rounded-lg border border-border-default bg-surface-raised p-3 text-xs text-text-secondary opacity-0 shadow-lg transition-opacity group-hover:pointer-events-auto group-hover:opacity-100"},Ne={class:"font-medium text-text-primary mb-1"},Pe={class:"mb-2"},je={class:"mt-2 text-[10px] text-text-muted"},Oe={class:"flex items-center gap-3"},Re={class:"text-[10px] text-text-muted"},Qe={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-4"},Fe={class:"text-sm font-medium text-text-primary"},Je={class:"space-y-2"},We=["value"],He=["value"],Ke=I({__name:"SettingsGeneralTab",setup(k){const{t:a}=J(),v=X(),m=b("http://localhost:11434"),f=b(.7),g=b(4096),d=b("disconnected");function y(){const n=localStorage.getItem("llmxray-settings");if(n)try{const i=JSON.parse(n);typeof i.ollamaUrl=="string"&&(m.value=i.ollamaUrl,q.setBaseUrl(i.ollamaUrl+"/api")),typeof i.defaultTemperature=="number"&&(f.value=i.defaultTemperature),typeof i.defaultContextLength=="number"&&(g.value=i.defaultContextLength)}catch{}}function w(){localStorage.setItem("llmxray-settings",JSON.stringify({ollamaUrl:m.value,defaultTemperature:f.value,defaultContextLength:g.value}))}async function C(){d.value="testing";try{const n=await fetch(`${m.value}/api/tags`);d.value=n.ok?"connected":"disconnected"}catch{d.value="disconnected"}}function _(){w(),q.setBaseUrl(m.value+"/api")}const V=S(()=>{const n=f.value;return n===0?a("settings.general.temperatureDeterministic"):n<=.3?a("settings.general.temperatureFocused"):n<=.7?a("settings.general.temperatureBalanced"):n<=1.2?a("settings.general.temperatureCreative"):a("settings.general.temperatureVeryRandom")}),D=S(()=>f.value/2*100);return W(()=>{y(),C()}),(n,i)=>(l(),r("div",ue,[e("div",pe,[e("h3",me,s(n.$t("settings.general.ollamaConnection")),1),e("div",ge,[G(e("input",{"onUpdate:modelValue":i[0]||(i[0]=x=>m.value=x),class:"flex-1 rounded-lg border border-border-default bg-surface px-3 py-2 text-sm text-text-primary focus:border-accent focus:outline-none",placeholder:"http://localhost:11434"},null,512),[[L,m.value]]),e("button",{class:"rounded-lg bg-surface-overlay px-4 py-2 text-sm text-text-primary hover:bg-border-default transition-colors",onClick:C},s(n.$t("settings.general.testConnection")),1),e("button",{class:"rounded-lg bg-accent px-4 py-2 text-sm text-surface hover:bg-accent-hover transition-colors",onClick:_},s(n.$t("settings.general.save")),1)]),e("div",xe,[e("span",{class:N(["inline-block h-2 w-2 rounded-full",{"bg-success":d.value==="connected","bg-error":d.value==="disconnected","bg-warning animate-pulse":d.value==="testing"}])},null,2),e("span",ve,s(d.value==="connected"?n.$t("settings.general.connectionConnected"):d.value==="testing"?n.$t("settings.general.connectionTesting"):n.$t("settings.general.connectionDisconnected")),1)])]),e("div",be,[e("h3",fe,s(n.$t("settings.general.defaultParameters")),1),e("div",he,[e("div",null,[e("div",ye,[e("label",_e,s(n.$t("settings.general.temperature")),1),e("div",$e,[i[7]||(i[7]=e("span",{class:"inline-flex h-4 w-4 items-center justify-center rounded-full border border-border-default text-[10px] text-text-muted cursor-help"},"?",-1)),e("div",ke,[e("p",Be,s(n.$t("settings.general.temperatureTooltipTitle")),1),e("p",we,s(n.$t("settings.general.temperatureTooltipDesc")),1),e("ul",Ce,[e("li",null,[i[4]||(i[4]=e("strong",null,"0",-1)),B(" — "+s(n.$t("settings.general.temperatureTooltipZero")),1)]),e("li",null,[i[5]||(i[5]=e("strong",null,"0.7",-1)),B(" — "+s(n.$t("settings.general.temperatureTooltipDefault")),1)]),e("li",null,[i[6]||(i[6]=e("strong",null,"1.0+",-1)),B(" — "+s(n.$t("settings.general.temperatureTooltipHigh")),1)])])])]),e("span",Me,s(f.value),1),e("span",ze,s(V.value),1)]),G(e("input",{"onUpdate:modelValue":i[1]||(i[1]=x=>f.value=x),type:"range",min:"0",max:"2",step:"0.1",class:"w-full",onChange:w},null,544),[[L,f.value,void 0,{number:!0}]]),i[9]||(i[9]=P('<div class="relative mt-1 h-4"><span class="absolute start-0 text-[10px] text-text-muted">0</span><span class="absolute text-[10px] text-text-muted" style="inset-inline-start:15%;">0.3</span><span class="absolute text-[10px] text-accent font-medium" style="inset-inline-start:35%;">0.7</span><span class="absolute text-[10px] text-text-muted" style="inset-inline-start:50%;">1.0</span><span class="absolute text-[10px] text-text-muted" style="inset-inline-start:75%;">1.5</span><span class="absolute end-0 text-[10px] text-text-muted">2.0</span></div>',1)),e("div",Ge,[e("div",Le,[e("div",Se,s(n.$t("settings.general.temperatureFocused")),1),e("div",Ae,s(n.$t("settings.general.temperatureBalanced")),1),e("div",Te,s(n.$t("settings.general.temperatureCreative")),1),e("div",Ie,s(n.$t("settings.general.temperatureWild")),1)])]),e("div",Ve,[i[8]||(i[8]=e("div",{class:"absolute h-1.5 rounded-full bg-border-default/30 w-full"},null,-1)),e("div",{class:"absolute h-1.5 rounded-full bg-accent/60 transition-all duration-150",style:E({width:`${D.value}%`})},null,4)])]),e("div",null,[e("div",De,[e("label",Ue,s(n.$t("settings.general.contextLength")),1),e("div",Ee,[i[10]||(i[10]=e("span",{class:"inline-flex h-4 w-4 items-center justify-center rounded-full border border-border-default text-[10px] text-text-muted cursor-help"},"?",-1)),e("div",qe,[e("p",Ne,s(n.$t("settings.general.contextLengthTooltipTitle")),1),e("p",Pe,s(n.$t("settings.general.contextLengthTooltipDesc")),1),e("div",je,s(n.$t("settings.general.contextLengthTooltipNote")),1)])])]),e("div",Oe,[G(e("select",{"onUpdate:modelValue":i[2]||(i[2]=x=>g.value=x),class:"rounded-lg border border-border-default bg-surface px-3 py-2 text-sm text-text-primary focus:border-accent focus:outline-none",onChange:w},[...i[11]||(i[11]=[e("option",{value:2048},"2,048",-1),e("option",{value:4096},"4,096",-1),e("option",{value:8192},"8,192",-1),e("option",{value:16384},"16,384",-1),e("option",{value:32768},"32,768",-1),e("option",{value:65536},"65,536",-1),e("option",{value:131072},"131,072",-1)])],544),[[Y,g.value,void 0,{number:!0}]]),e("span",Re,s(n.$t("settings.general.approximateWords",{count:Math.round(g.value*.75).toLocaleString()})),1)])])])]),e("div",Qe,[e("h3",Fe,s(n.$t("settings.general.language")),1),e("div",Je,[e("select",{value:p(v).locale,class:"w-full rounded-lg border border-border-default bg-surface px-3 py-2 text-sm text-text-primary",onChange:i[3]||(i[3]=x=>p(v).setLocale(x.target.value))},[(l(!0),r($,null,z(p(ee),x=>(l(),r("option",{key:x.code,value:x.code},s(x.flag)+" "+s(x.label),9,He))),128))],40,We)])])]))}}),F=[{key:"chat",label:"Chat",entries:[{name:"llama3.2",description:"Meta Llama 3.2 -- fast general-purpose chat",variants:[{tag:"1b",params:"1B",size:"1.3 GB"},{tag:"3b",params:"3B",size:"2.0 GB"}]},{name:"llama3.1",description:"Meta Llama 3.1 -- strong reasoning and instruction following",variants:[{tag:"8b",params:"8B",size:"4.7 GB"}]},{name:"gemma3",description:"Google Gemma 3 -- efficient and multilingual",variants:[{tag:"1b",params:"1B",size:"815 MB"},{tag:"4b",params:"4B",size:"3.0 GB"},{tag:"12b",params:"12B",size:"8.1 GB"}]},{name:"gemma2",description:"Google Gemma 2 -- balanced performance",variants:[{tag:"2b",params:"2B",size:"1.6 GB"},{tag:"9b",params:"9B",size:"5.5 GB"}]},{name:"mistral",description:"Mistral 7B -- strong European model",variants:[{tag:"7b",params:"7B",size:"4.1 GB"}]},{name:"phi4",description:"Microsoft Phi-4 -- small but capable",variants:[{tag:"14b",params:"14B",size:"9.1 GB"}]},{name:"qwen2.5",description:"Alibaba Qwen 2.5 -- multilingual powerhouse",variants:[{tag:"0.5b",params:"0.5B",size:"397 MB"},{tag:"1.5b",params:"1.5B",size:"986 MB"},{tag:"3b",params:"3B",size:"1.9 GB"},{tag:"7b",params:"7B",size:"4.7 GB"}]},{name:"tinyllama",description:"TinyLlama -- ultra-lightweight for constrained systems",variants:[{tag:"1.1b",params:"1.1B",size:"637 MB"}]}]},{key:"code",label:"Code",entries:[{name:"qwen2.5-coder",description:"Qwen 2.5 Coder -- strong code generation and completion",variants:[{tag:"1.5b",params:"1.5B",size:"986 MB"},{tag:"3b",params:"3B",size:"1.9 GB"},{tag:"7b",params:"7B",size:"4.7 GB"}]},{name:"codellama",description:"Meta Code Llama -- code-specialized Llama",variants:[{tag:"7b",params:"7B",size:"3.8 GB"},{tag:"13b",params:"13B",size:"7.4 GB"}]},{name:"deepseek-coder-v2",description:"DeepSeek Coder V2 -- strong coding with MoE architecture",variants:[{tag:"16b",params:"16B",size:"8.9 GB"}]},{name:"starcoder2",description:"BigCode StarCoder 2 -- trained on The Stack v2",variants:[{tag:"3b",params:"3B",size:"1.7 GB"},{tag:"7b",params:"7B",size:"4.0 GB"}]},{name:"codegemma",description:"Google CodeGemma -- code completion and generation",variants:[{tag:"2b",params:"2B",size:"1.6 GB"},{tag:"7b",params:"7B",size:"5.0 GB"}]}]},{key:"embedding",label:"Embedding",entries:[{name:"nomic-embed-text",description:"Nomic -- 137M params, fast and good quality",variants:[{tag:"latest",params:"137M",size:"274 MB"}]},{name:"mxbai-embed-large",description:"mixedbread.ai -- 335M params, high quality",variants:[{tag:"latest",params:"335M",size:"670 MB"}]},{name:"all-minilm",description:"MiniLM -- 23M params, very lightweight",variants:[{tag:"latest",params:"23M",size:"46 MB"}]},{name:"snowflake-arctic-embed",description:"Snowflake -- 110M params, balanced",variants:[{tag:"latest",params:"110M",size:"229 MB"}]},{name:"bge-m3",description:"BAAI BGE-M3 -- multilingual, multi-granularity",variants:[{tag:"latest",params:"567M",size:"1.2 GB"}]}]},{key:"vision",label:"Vision",entries:[{name:"llava",description:"LLaVA -- multimodal vision-language model",variants:[{tag:"7b",params:"7B",size:"4.7 GB"},{tag:"13b",params:"13B",size:"8.0 GB"}]},{name:"llama3.2-vision",description:"Meta Llama 3.2 Vision -- image understanding",variants:[{tag:"11b",params:"11B",size:"7.9 GB"}]},{name:"minicpm-v",description:"MiniCPM-V -- lightweight vision model",variants:[{tag:"latest",params:"8B",size:"5.5 GB"}]},{name:"moondream",description:"Moondream -- tiny vision model, runs anywhere",variants:[{tag:"latest",params:"1.9B",size:"1.7 GB"}]}]},{key:"thinking",label:"Thinking",entries:[{name:"deepseek-r1",description:"DeepSeek R1 -- chain-of-thought reasoning",variants:[{tag:"1.5b",params:"1.5B",size:"1.1 GB"},{tag:"7b",params:"7B",size:"4.7 GB"},{tag:"8b",params:"8B",size:"4.9 GB"},{tag:"14b",params:"14B",size:"9.0 GB"}]},{name:"qwq",description:"Alibaba QwQ -- strong reasoning with thinking traces",variants:[{tag:"32b",params:"32B",size:"20 GB"}]},{name:"phi4-reasoning",description:"Microsoft Phi-4 Reasoning -- compact thinking model",variants:[{tag:"14b",params:"14B",size:"9.1 GB"}]},{name:"command-r",description:"Cohere Command R -- reasoning with RAG strengths",variants:[{tag:"35b",params:"35B",size:"20 GB"}]}]}],Ze={class:"space-y-6"},Xe={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-4"},Ye={class:"flex items-center justify-between"},et={class:"text-sm font-medium text-text-primary"},tt={class:"ms-1 text-text-muted"},st={key:0,class:"text-xs text-error"},at={key:1,class:"py-4 text-center text-sm text-text-muted"},ot={key:2,class:"space-y-1"},nt={class:"flex-1 min-w-0"},lt={class:"flex items-center gap-2"},rt={class:"font-medium text-text-primary truncate"},it={class:"flex gap-3 text-[10px] text-text-muted mt-0.5"},dt={key:0},ct={key:1},ut={key:2},pt={class:"shrink-0 text-[10px] text-text-muted"},mt=["onClick"],gt=["title","onClick"],xt={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-4"},vt={class:"text-sm font-medium text-text-primary"},bt={class:"flex flex-wrap gap-1.5"},ft=["onClick"],ht=["placeholder"],yt={key:0,class:"text-xs text-error"},_t={key:1,class:"py-4 text-center text-sm text-text-muted"},$t={key:2,class:"space-y-2"},kt={class:"flex items-start gap-3"},Bt={class:"flex-1 min-w-0"},wt={class:"flex items-center gap-2"},Ct={class:"text-xs font-medium text-text-primary"},Mt={key:0,class:"rounded-full bg-success/10 px-1.5 py-0.5 text-[9px] text-success"},zt={class:"text-[10px] text-text-muted mt-0.5"},Gt={class:"flex items-center gap-2 shrink-0"},Lt=["value","onChange"],St=["value"],At={key:1,class:"text-[10px] text-text-muted"},Tt=["disabled","onClick"],It={key:0,class:"mt-2 space-y-1"},Vt={class:"h-1.5 rounded-full bg-surface-overlay overflow-hidden"},Dt={class:"text-[9px] text-text-muted"},Ut={class:"border-t border-border-default pt-4"},Et={class:"mb-2 text-xs text-text-muted"},qt={class:"flex gap-2"},Nt=["disabled"],Pt={key:0,class:"mt-2 space-y-1"},jt={class:"flex items-center justify-between text-[10px] text-text-muted"},Ot={class:"font-mono"},Rt={class:"h-1.5 rounded-full bg-surface-overlay overflow-hidden"},Qt={class:"text-[9px] text-text-muted"},Ft=I({__name:"SettingsModelsTab",setup(k){const a=te(),v=b(null),m=b(null);async function f(o){if(v.value===o){try{m.value=null,await a.deleteModel(o)}catch(c){m.value=c instanceof Error?c.message:"Delete failed"}v.value=null}else v.value=o,setTimeout(()=>{v.value===o&&(v.value=null)},3e3)}const g=b("all"),d=b(""),y=S(()=>[{key:"all",label:"All"},...F.map(o=>({key:o.key,label:o.label}))]),w=S(()=>{let o=[];for(const t of F)if(!(g.value!=="all"&&t.key!==g.value))for(const u of t.entries)o.push({...u,category:t.key});const c=d.value.toLowerCase().trim();return c&&(o=o.filter(t=>t.name.toLowerCase().includes(c)||t.description.toLowerCase().includes(c))),o}),C=b(new Map);function _(o){const c=C.value.get(o.name);return o.variants.find(t=>t.tag===c)??o.variants[0]}function V(o,c){const t=new Map(C.value);t.set(o,c),C.value=t}function D(o,c){const t=c==="latest"?o:`${o}:${c}`;return a.modelNames.some(u=>u===t||u===`${t}:latest`||u===o)}const n=b(new Map),i=b(null),x=b("");async function j(o){const c=new Map(n.value);c.set(o,{status:"Starting...",percent:0}),n.value=c,i.value=null;try{await q.pullModel(o,(u,M,R)=>{const Q=new Map(n.value),K=M&&R?Math.round(M/R*100):0;Q.set(o,{status:u,percent:K}),n.value=Q}),await a.fetchModels();const t=new Map(n.value);t.delete(o),n.value=t}catch(t){i.value=`Failed to pull ${o}: ${t instanceof Error?t.message:"Unknown error"}`;const u=new Map(n.value);u.delete(o),n.value=u}}function H(o){const c=_(o),t=c.tag==="latest"?o.name:`${o.name}:${c.tag}`;j(t)}function O(){const o=x.value.trim();o&&(j(o),x.value="")}function U(o){return n.value.has(o)}return W(()=>{a.models.length===0&&a.fetchModels()}),(o,c)=>(l(),r("div",Ze,[e("div",Xe,[e("div",Ye,[e("h3",et,[B(s(o.$t("settings.models.installedModels"))+" ",1),e("span",tt,"("+s(p(a).models.length)+")",1)]),e("button",{class:"rounded-lg px-3 py-1.5 text-xs text-text-secondary hover:bg-surface-overlay hover:text-text-primary transition-colors",onClick:c[0]||(c[0]=t=>p(a).fetchModels())},[T(p(ce),{class:"h-3.5 w-3.5"}),B(" "+s(o.$t("settings.models.refresh")),1)])]),m.value?(l(),r("p",st,s(m.value),1)):h("",!0),p(a).models.length===0?(l(),r("div",at,s(o.$t("settings.models.noModelsInstalled")),1)):(l(),r("div",ot,[(l(!0),r($,null,z(p(a).models,t=>(l(),r("div",{key:t.name,class:"flex items-center gap-3 rounded-lg bg-surface px-3 py-2.5 text-xs"},[e("div",nt,[e("div",lt,[e("span",rt,s(t.name),1),T(le,{"model-name":t.name},null,8,["model-name"])]),e("div",it,[t.details?.family?(l(),r("span",dt,s(t.details.family),1)):h("",!0),t.details?.parameter_size?(l(),r("span",ct,s(t.details.parameter_size),1)):h("",!0),t.details?.quantization_level?(l(),r("span",ut,s(t.details.quantization_level),1)):h("",!0)])]),e("span",pt,s(p(ne)(t.size)),1),v.value===t.name?(l(),r("button",{key:0,class:"shrink-0 rounded-lg border border-error/30 px-2.5 py-1 text-[10px] text-error hover:bg-error/10 transition-colors",onClick:u=>f(t.name)},s(o.$t("settings.models.confirmDeletePrompt")),9,mt)):(l(),r("button",{key:1,class:"shrink-0 rounded p-1 text-text-muted hover:text-error transition-colors",title:o.$t("settings.models.delete"),onClick:u=>f(t.name)},[T(p(re),{class:"h-3.5 w-3.5"})],8,gt))]))),128))]))]),e("div",xt,[e("h3",vt,s(o.$t("settings.models.downloadModels")),1),e("div",bt,[(l(!0),r($,null,z(y.value,t=>(l(),r("button",{key:t.key,class:N(["rounded-lg px-3 py-1.5 text-xs transition-colors",g.value===t.key?"bg-accent/10 text-accent":"bg-surface text-text-secondary hover:bg-surface-overlay hover:text-text-primary"]),onClick:u=>g.value=t.key},s(t.label),11,ft))),128))]),G(e("input",{"onUpdate:modelValue":c[1]||(c[1]=t=>d.value=t),type:"text",placeholder:o.$t("settings.models.searchModels"),class:"w-full rounded-lg border border-border-default bg-surface px-3 py-2 text-sm text-text-primary placeholder-text-muted outline-none focus:border-accent"},null,8,ht),[[L,d.value]]),i.value?(l(),r("p",yt,s(i.value),1)):h("",!0),w.value.length===0?(l(),r("div",_t,s(o.$t("settings.models.noModelsMatch")),1)):(l(),r("div",$t,[(l(!0),r($,null,z(w.value,t=>(l(),r("div",{key:t.name,class:"rounded-lg border border-border-default bg-surface p-3"},[e("div",kt,[e("div",Bt,[e("div",wt,[e("span",Ct,s(t.name),1),D(t.name,_(t).tag)?(l(),r("span",Mt,s(o.$t("settings.models.installed")),1)):h("",!0)]),e("p",zt,s(t.description),1)]),e("div",Gt,[t.variants.length>1?(l(),r("select",{key:0,value:_(t).tag,class:"rounded border border-border-default bg-surface px-2 py-1 text-[10px] text-text-primary outline-none focus:border-accent",onChange:u=>V(t.name,u.target.value)},[(l(!0),r($,null,z(t.variants,u=>(l(),r("option",{key:u.tag,value:u.tag},s(u.params)+" ("+s(u.size)+") ",9,St))),128))],40,Lt)):(l(),r("span",At,s(t.variants[0].params)+" ("+s(t.variants[0].size)+") ",1)),e("button",{disabled:U(`${t.name}:${_(t).tag}`)||U(t.name),class:"rounded-lg bg-accent px-3 py-1 text-[10px] text-white hover:bg-accent-hover disabled:opacity-40 transition-colors",onClick:u=>H(t)},s(o.$t("settings.models.pull")),9,Tt)])]),n.value.has(`${t.name}:${_(t).tag}`)||n.value.has(t.name)?(l(),r("div",It,[e("div",Vt,[e("div",{class:"h-full rounded-full bg-accent transition-all duration-300",style:E({width:`${(n.value.get(`${t.name}:${_(t).tag}`)??n.value.get(t.name))?.percent??0}%`})},null,4)]),e("p",Dt,s((n.value.get(`${t.name}:${_(t).tag}`)??n.value.get(t.name))?.status),1)])):h("",!0)]))),128))])),e("div",Ut,[e("p",Et,s(o.$t("settings.models.pullByName")),1),e("div",qt,[G(e("input",{"onUpdate:modelValue":c[2]||(c[2]=t=>x.value=t),type:"text",placeholder:"e.g. llama3.2:3b",class:"flex-1 rounded-lg border border-border-default bg-surface px-3 py-2 text-sm text-text-primary placeholder-text-muted outline-none focus:border-accent font-mono",onKeydown:se(O,["enter"])},null,544),[[L,x.value]]),e("button",{disabled:!x.value.trim()||U(x.value.trim()),class:"rounded-lg bg-accent px-4 py-2 text-sm text-white hover:bg-accent-hover disabled:opacity-40 transition-colors",onClick:O},s(o.$t("settings.models.pull")),9,Nt)]),(l(!0),r($,null,z(n.value,([t,u])=>(l(),r($,{key:t},[w.value.some(M=>`${M.name}:${_(M).tag}`===t||M.name===t)?h("",!0):(l(),r("div",Pt,[e("div",jt,[e("span",Ot,s(t),1),e("span",null,s(u.percent)+"%",1)]),e("div",Rt,[e("div",{class:"h-full rounded-full bg-accent transition-all duration-300",style:E({width:`${u.percent}%`})},null,4)]),e("p",Qt,s(u.status),1)]))],64))),128))])])]))}}),Jt={class:"space-y-6"},Wt={class:"rounded-lg border border-border-default bg-surface-raised p-4 space-y-4"},Ht={class:"text-sm font-medium text-text-primary"},Kt={class:"text-[10px] text-text-muted"},Zt={class:"block text-xs text-text-secondary mb-1"},Xt={class:"flex gap-3"},Yt={class:"flex items-center gap-2 text-sm"},es={class:"text-text-secondary"},ts={class:"text-text-primary font-medium"},ss={key:0,class:"text-xs text-error"},as={class:"flex gap-3"},os=["disabled"],ns={class:"border-t border-border-default pt-3"},ls={key:0,class:"mt-3 space-y-2 text-xs text-text-secondary"},rs=I({__name:"SettingsIntegrationsTab",setup(k){const a=ie(),v=b(a.clientId),m=b(!1);function f(){a.updateClientId(v.value)}return(g,d)=>(l(),r("div",Jt,[e("div",Wt,[e("h3",Ht,s(g.$t("settings.integrations.googleIntegration")),1),e("p",Kt,s(g.$t("settings.integrations.googleIntegrationDesc")),1),e("div",null,[e("label",Zt,s(g.$t("settings.integrations.oauthClientId")),1),e("div",Xt,[G(e("input",{"onUpdate:modelValue":d[0]||(d[0]=y=>v.value=y),class:"flex-1 rounded-lg border border-border-default bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-muted focus:border-accent focus:outline-none font-mono",placeholder:"123456789-abcdef.apps.googleusercontent.com"},null,512),[[L,v.value]]),e("button",{class:"rounded-lg bg-surface-overlay px-4 py-2 text-sm text-text-primary hover:bg-border-default transition-colors",onClick:f},s(g.$t("common.actions.save")),1)])]),e("div",Yt,[e("span",{class:N(["inline-block h-2 w-2 rounded-full",{"bg-success":p(a).connected,"bg-error":!p(a).connected&&!p(a).isAuthenticating,"bg-warning animate-pulse":p(a).isAuthenticating}])},null,2),e("span",es,[p(a).isAuthenticating?(l(),r($,{key:0},[B(s(g.$t("settings.integrations.authenticating")),1)],64)):p(a).connected?(l(),r($,{key:1},[B(s(g.$t("settings.integrations.connectedAs"))+" ",1),e("span",ts,s(p(a).userEmail??"unknown"),1)],64)):(l(),r($,{key:2},[B(s(g.$t("settings.integrations.notConnected")),1)],64))])]),p(a).error?(l(),r("p",ss,s(p(a).error),1)):h("",!0),e("div",as,[p(a).connected?h("",!0):(l(),r("button",{key:0,class:"rounded-lg bg-accent px-4 py-2 text-sm text-surface hover:bg-accent-hover transition-colors disabled:opacity-50 disabled:cursor-not-allowed",disabled:!p(a).clientId||p(a).isAuthenticating,onClick:d[1]||(d[1]=y=>p(a).connect())},s(g.$t("settings.integrations.connectGoogleAccount")),9,os)),p(a).connected?(l(),r("button",{key:1,class:"rounded-lg border border-error/30 px-4 py-2 text-sm text-error hover:bg-error/10 transition-colors",onClick:d[2]||(d[2]=y=>p(a).disconnect())},s(g.$t("settings.integrations.disconnect")),1)):h("",!0)]),e("div",ns,[e("button",{class:"text-xs text-accent hover:text-accent-hover transition-colors",onClick:d[3]||(d[3]=y=>m.value=!m.value)},s(m.value?g.$t("settings.integrations.hideSetup"):g.$t("settings.integrations.showSetup")),1),m.value?(l(),r("div",ls,[...d[4]||(d[4]=[P('<p class="font-medium text-text-primary">One-time setup (5 minutes):</p><ol class="list-decimal list-inside space-y-2 ms-1"><li>Go to <a href="https://console.cloud.google.com/" target="_blank" rel="noopener" class="text-accent hover:underline">Google Cloud Console</a> and create a new project</li><li>Enable the <a href="https://console.cloud.google.com/apis/library/calendar-json.googleapis.com" target="_blank" rel="noopener" class="text-accent hover:underline">Google Calendar API</a></li><li>Enable the <a href="https://console.cloud.google.com/apis/library/gmail.googleapis.com" target="_blank" rel="noopener" class="text-accent hover:underline">Gmail API</a></li><li>Go to <a href="https://console.cloud.google.com/apis/credentials/consent" target="_blank" rel="noopener" class="text-accent hover:underline">OAuth consent screen</a>, set up as <strong>External</strong>, add your email as a <strong>test user</strong></li><li>Go to <a href="https://console.cloud.google.com/apis/credentials" target="_blank" rel="noopener" class="text-accent hover:underline">Credentials</a>, click <strong>+ Create Credentials</strong> → <strong>OAuth 2.0 Client ID</strong></li><li>Set application type to <strong>Web application</strong></li><li>Add <strong>Authorized JavaScript origins</strong>: <code class="bg-surface rounded px-1.5 py-0.5 text-[11px] font-mono text-text-primary">http://localhost:5173</code></li><li>Add <strong>Authorized redirect URIs</strong>: <code class="bg-surface rounded px-1.5 py-0.5 text-[11px] font-mono text-text-primary">http://localhost:5173/auth/google/callback</code></li><li>Copy the <strong>Client ID</strong> and paste it above, then click Save</li><li>Click <strong>Connect Google Account</strong> above</li></ol><div class="mt-3 rounded-lg bg-surface-overlay p-3 text-[11px]"><p class="font-medium text-text-primary mb-1">Note: "App not verified" warning</p><p>Google will show a warning because your app is in testing mode. Click <strong>Advanced</strong> → <strong>Go to [your project name] (unsafe)</strong> to proceed.</p></div>',3)])])):h("",!0)])])]))}}),is={},ds={class:"space-y-6"},cs={class:"rounded-lg border border-border-default bg-surface-raised p-5 space-y-4"},us={class:"flex items-center gap-3"},ps={class:"text-xs text-text-muted"},ms={class:"grid grid-cols-[auto_1fr] gap-y-2 gap-x-4 text-xs"},gs={class:"text-text-muted"},xs={class:"text-text-muted"},vs={class:"text-text-muted"},bs={class:"rounded-lg border border-border-default bg-surface-raised p-5 space-y-3"},fs={class:"text-sm font-medium text-text-primary"};function hs(k,a){return l(),r("div",ds,[e("div",cs,[e("div",us,[a[1]||(a[1]=e("span",{class:"text-2xl font-bold text-accent"},"xR",-1)),e("div",null,[a[0]||(a[0]=e("h3",{class:"text-sm font-semibold text-text-primary"},"LLMxRay",-1)),e("p",ps,s(k.$t("settings.about.localLlmObservatory")),1)])]),e("div",ms,[e("span",gs,s(k.$t("settings.about.version")),1),a[2]||(a[2]=e("span",{class:"text-text-primary"},"1.0.0",-1)),e("span",xs,s(k.$t("settings.about.license")),1),a[3]||(a[3]=e("span",{class:"text-text-primary"},"Apache 2.0",-1)),e("span",vs,s(k.$t("settings.about.repository")),1),a[4]||(a[4]=e("a",{href:"https://github.com/LogneBudo/llmxray",target:"_blank",rel:"noopener",class:"text-accent hover:underline"}," github.com/LogneBudo/llmxray ",-1))])]),e("div",bs,[e("h3",fs,s(k.$t("settings.about.techStack")),1),a[5]||(a[5]=P('<div class="grid grid-cols-2 gap-2 text-xs"><div class="rounded-lg bg-surface p-2.5"><p class="font-medium text-text-primary">Vue 3.5</p><p class="text-[10px] text-text-muted">Composition API + TypeScript</p></div><div class="rounded-lg bg-surface p-2.5"><p class="font-medium text-text-primary">Vite 7</p><p class="text-[10px] text-text-muted">Build tooling + dev server</p></div><div class="rounded-lg bg-surface p-2.5"><p class="font-medium text-text-primary">Tailwind CSS 4</p><p class="text-[10px] text-text-muted">Utility-first styling</p></div><div class="rounded-lg bg-surface p-2.5"><p class="font-medium text-text-primary">Pinia 3</p><p class="text-[10px] text-text-muted">State management</p></div><div class="rounded-lg bg-surface p-2.5"><p class="font-medium text-text-primary">Ollama</p><p class="text-[10px] text-text-muted">Local LLM runtime</p></div><div class="rounded-lg bg-surface p-2.5"><p class="font-medium text-text-primary">IndexedDB</p><p class="text-[10px] text-text-muted">Browser-native persistence</p></div><div class="rounded-lg bg-surface p-2.5"><p class="font-medium text-text-primary">D3.js + Chart.js</p><p class="text-[10px] text-text-muted">Data visualization</p></div><div class="rounded-lg bg-surface p-2.5"><p class="font-medium text-text-primary">pdfjs + mammoth</p><p class="text-[10px] text-text-muted">Document parsing</p></div></div>',1))])])}const ys=de(is,[["render",hs]]),_s={class:"max-w-4xl space-y-6"},Ls=I({__name:"SettingsPage",setup(k){const{t:a}=J(),v=ae(),m=b(v.query.tab??"general"),f=S(()=>[{key:"general",label:a("settings.tabs.general")},{key:"models",label:a("settings.tabs.models")},{key:"integrations",label:a("settings.tabs.integrations")},{key:"about",label:a("settings.tabs.about")}]);return(g,d)=>(l(),r("div",_s,[T(oe,{tabs:f.value,"active-tab":m.value,"onUpdate:activeTab":d[0]||(d[0]=y=>m.value=y)},null,8,["tabs","active-tab"]),m.value==="general"?(l(),A(Ke,{key:0})):m.value==="models"?(l(),A(Ft,{key:1})):m.value==="integrations"?(l(),A(rs,{key:2})):m.value==="about"?(l(),A(ys,{key:3})):h("",!0)]))}});export{Ls as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var u=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function a(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function f(e){if(Object.prototype.hasOwnProperty.call(e,"__esModule"))return e;var n=e.default;if(typeof n=="function"){var t=function r(){var o=!1;try{o=this instanceof r}catch{}return o?Reflect.construct(n,arguments,this.constructor):n.apply(this,arguments)};t.prototype=n.prototype}else t={};return Object.defineProperty(t,"__esModule",{value:!0}),Object.keys(e).forEach(function(r){var o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:function(){return e[r]}})}),t}export{a,u as c,f as g};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{d as p,Y as f,J as h,r as g,n as v}from"./index-CG_7ZNQn.js";const k=p("tokens",()=>{const t=f(new Map);function r(e,n){const o=new Map(t.value),s=o.get(e)??[];o.set(e,[...s,n]),t.value=o}function i(e){return t.value.get(e)??[]}function l(e){return(t.value.get(e)??[]).length}function c(e){const n=new Map(t.value);n.delete(e),t.value=n}function a(e){const n=t.value.get(e);n&&n.length>0&&h.saveTokens(e,n).catch(console.error)}async function u(e){if(t.value.has(e))return;const n=await h.getTokens(e);if(n.length>0){const o=new Map(t.value);o.set(e,n),t.value=o}}return{tokensBySession:t,pushToken:r,getTokens:i,getTokenCount:l,clearTokens:c,persistTokens:a,loadTokens:u}}),S=p("reasoning",()=>{const t=g(new Map),r=g(new Map);function i(n){return t.value.get(n)??null}function l(n){return t.value.get(n)?.steps??[]}function c(n,o){let s=t.value.get(n);s||(s={sessionId:n,steps:[],totalSteps:0,currentDepth:0},t.value.set(n,s)),s.steps.push(o),s.totalSteps=s.steps.length}function a(n){t.value.delete(n)}function u(n,o,s){r.value.set(n,{isThinking:o,content:s})}function e(n){return r.value.get(n)??{isThinking:!1,content:""}}return{chainsBySession:t,thinkingBySession:r,getChain:i,getSteps:l,addStep:c,clearChain:a,setThinking:u,getThinking:e}}),T=p("agent",()=>{const t=g(new Map);function r(a){return t.value.get(a)??null}function i(a){t.value.has(a)||t.value.set(a,{sessionId:a,nodes:[],edges:[]})}function l(a,u){const e=t.value.get(a);if(e&&(e.nodes.push(u),e.nodes.length>1)){const n=e.nodes[e.nodes.length-2];e.edges.push({id:v(),source:n.id,target:u.id,label:`Step ${e.nodes.length-1}`})}}function c(a,u){const e=t.value.get(a);e&&e.edges.push(u)}return{graphsBySession:t,getGraph:r,initGraph:i,addNode:l,addEdge:c}});export{k as a,S as b,T as u};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const u="llmxray-canvas-ai";const r="training-pairs";function i(){return new Promise((t,o)=>{const e=indexedDB.open(u,2);e.onupgradeneeded=a=>{const s=e.result,n=a.oldVersion;if(n<1){const c=s.createObjectStore(r,{keyPath:"id"});c.createIndex("byPhase","phase",{unique:!1}),c.createIndex("byToolName","toolName",{unique:!1}),c.createIndex("byTimestamp","timestamp",{unique:!1})}if(n>=1&&n<2){const c=e.transaction.objectStore(r);c.indexNames.contains("byTimestamp")||c.createIndex("byTimestamp","timestamp",{unique:!1})}},e.onsuccess=()=>t(e.result),e.onerror=()=>o(e.error)})}function l(t,o){return new Promise((e,a)=>{t.oncomplete=()=>e(o?.result),t.onerror=()=>a(t.error)})}function d(t,o,e){return new Promise((a,s)=>{const n=t.get(o);n.onsuccess=()=>{const c=n.result;c&&(e(c),t.put(c)),a()},n.onerror=()=>s(n.error)})}const w={async savePair(t){const o=await i(),e=o.transaction(r,"readwrite");e.objectStore(r).put(t),await l(e),o.close()},async updateAccepted(t,o=!0){const e=await i(),a=e.transaction(r,"readwrite");await d(a.objectStore(r),t,s=>{s.accepted=o}),await l(a),e.close()},async updatePairResponse(t,o){const e=await i(),a=e.transaction(r,"readwrite");await d(a.objectStore(r),t,s=>{s.response=o}),await l(a),e.close()},async updatePairTags(t,o){const e=await i(),a=e.transaction(r,"readwrite");await d(a.objectStore(r),t,s=>{s.tags=o}),await l(a),e.close()},async deletePair(t){const o=await i(),e=o.transaction(r,"readwrite");e.objectStore(r).delete(t),await l(e),o.close()},async deletePairs(t){if(t.length===0)return;const o=await i(),e=o.transaction(r,"readwrite"),a=e.objectStore(r);for(const s of t)a.delete(s);await l(e),o.close()},async getAllPairs(){const t=await i();return new Promise((o,e)=>{const s=t.transaction(r,"readonly").objectStore(r).getAll();s.onsuccess=()=>{o(s.result),t.close()},s.onerror=()=>{e(s.error),t.close()}})},async exportAsJsonl(t=!0){const o=await this.getAllPairs(),e=t?o.filter(a=>a.accepted):o;this.downloadJsonl(e)},async exportSelectedAsJsonl(t){const o=await this.getAllPairs(),e=new Set(t),a=o.filter(s=>e.has(s.id));this.downloadJsonl(a)},downloadJsonl(t){const o=t.map(n=>JSON.stringify({system:n.systemPrompt,user:n.userPrompt,assistant:n.response,accepted:n.accepted,phase:n.phase,model:n.model,tool:n.toolName,tags:n.tags??[],reasoning:n.reasoning??""})),e=new Blob([o.join(`
|
|
2
|
-
`)],{type:"application/jsonl"}),a=URL.createObjectURL(e),s=document.createElement("a");s.href=a,s.download=`llmxray-training-${Date.now()}.jsonl`,s.click(),URL.revokeObjectURL(a)},async clear(){const t=await i(),o=t.transaction(r,"readwrite");o.objectStore(r).clear(),await l(o),t.close()}};export{w as canvasAiDB};
|