- compaction automatique du contexte LLM quand la taille atteint le seuil (contexte max - taille de réponse max), par résumé de l'historique ancien - filtre textuel (?q=) et pagination (20/page) de l'historique des conversations - correctif ORM : offset de pagination en base 0 - suppression d'une conversation : messages associés supprimés, session en cours annulée, popup de confirmation (ConfirmDialog) - titres de conversation nettoyés du markdown - styles des listes markdown, variante danger du bouton - go.mod/go.sum : dépendances go-rod et stealth manquantes du commit précédent
4 lines
4.8 KiB
JavaScript
4 lines
4.8 KiB
JavaScript
import{$ as e,A as t,B as n,C as r,E as i,I as a,K as o,L as s,M as c,N as l,Q as u,R as d,X as f,Z as p,a as m,at as h,bt as g,dt as _,et as v,ft as y,it as b,j as x,k as S,m as C,nt as w,p as T,u as E,vt as D}from"../chunks/DGrvnoUE.js";import{n as O}from"../chunks/Soo4K-rz.js";import"../chunks/xihTtKlq.js";import"../chunks/QHwlfjO8.js";import{t as k}from"../chunks/guSkOB4x.js";var A=g({load:()=>j}),j=async({params:e})=>({title:`Historique`,conversations:await k.allChats(e.space,0),space:e.space}),M=0,N=v([]),P=(e,t)=>{N.push({id:M++,type:e,text:t,status:`appearing`})},F=e=>e;function I(e){let t=e-1;return t*t*t+1}function L(e,{delay:t=0,duration:n=400,easing:r=F}={}){let i=+getComputedStyle(e).opacity;return{delay:t,duration:n,easing:r,css:e=>`opacity: ${e*i}`}}function R(e,{delay:t=0,duration:n=400,easing:r=I,start:i=0,opacity:a=0}={}){let o=getComputedStyle(e),s=+o.opacity,c=o.transform===`none`?``:o.transform,l=1-i,u=s*(1-a);return{delay:t,duration:n,easing:r,css:(e,t)=>`
|
|
transform: ${c} scale(${1-l*t});
|
|
opacity: ${s-u*t}
|
|
`}}var z=l(`<div class="fixed inset-0 z-50 flex items-center justify-center p-4"><button type="button" class="absolute inset-0 cursor-default bg-black/50" aria-label="Fermer"></button> <div class="relative w-full max-w-sm rounded-lg bg-stone-50 p-4 shadow-xl dark:bg-stone-900" role="dialog" aria-modal="true" aria-labelledby="confirm-dialog-title"><div class="flex items-center gap-3"><div class="flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-red-100 text-red-600 dark:bg-red-950 dark:text-red-400"><i class="icon-trash-empty"></i></div> <h2 id="confirm-dialog-title" class="text-base font-bold"> </h2></div> <p class="mt-3 text-sm text-stone-600 dark:text-stone-400"> </p> <div class="mt-4 flex justify-end gap-2"><button type="button" class="bt small"> </button> <button type="button" class="bt small danger"> </button></div></div></div>`);function B(n,i){y(i,!0);let a=m(i,`open`,3,!1),l=m(i,`title`,3,``),h=m(i,`message`,3,``),g=m(i,`confirmLabel`,3,`Confirmer`),v=m(i,`cancelLabel`,3,`Annuler`),b=()=>i.onCancel?.(),C=e=>{a()&&e.key===`Escape`&&b()};var w=c();d(`keydown`,f,C);var T=u(w),E=n=>{var a=z(),c=p(a),u=e(c,2),d=p(u),f=e(p(d),2),m=p(f,!0);D(f),D(d);var _=e(d,2),y=p(_,!0);D(_);var S=e(_,2),C=p(S),w=p(C,!0);D(C);var T=e(C,2),E=p(T,!0);D(T),D(S),D(u),D(a),o(()=>{t(m,l()),t(y,h()),t(w,v()),t(E,g())}),s(`click`,c,b),r(3,c,()=>L,()=>({duration:150})),s(`click`,C,b),s(`click`,T,function(...e){i.onConfirm?.apply(this,e)}),r(3,u,()=>R,()=>({duration:150,start:.95})),x(n,a)};S(T,e=>{a()&&e(E)}),x(n,w),_()}a([`click`]);var V=l(`<div class="dark:bg-stone-800 rounded p-2 my-2"><div class="flex flex-row items-center"><div class="flex-1 font-bold text-base"><a> </a></div> <button class="bt small" title="Supprimer la conversation"><i class="icon-trash-empty"></i></button></div> <span class="text-xs"> </span></div>`),H=l(`<p class="my-4 text-center text-sm text-stone-500">Aucune conversation trouvée.</p>`),U=l(`<div class="my-4 text-center"><button class="bt small"> </button></div>`),W=l(`<div class="container"><div class="formelement my-2"><input class="textinput" type="search" placeholder="Rechercher une conversation..."/></div> <!> <!> <!></div> <!>`,1);function G(r,a){y(a,!0);let c=b(``),l=b(v(a.data.conversations)),d=b(0),f=b(!1),m=b(null),g=h(()=>n(l).length===(n(d)+1)*20),A,j=()=>{A!==void 0&&clearTimeout(A),A=setTimeout(async()=>{w(d,0);let e=await k.allChats(a.data.space,0,n(c));w(l,e??[],!0)},300)},M=async()=>{if(!n(f)){w(f,!0);try{let e=await k.allChats(a.data.space,n(d)+1,n(c))??[];w(l,[...n(l),...e],!0),w(d,n(d)+1)}catch{P(`failure`,`Erreur lors du chargement des conversations`)}finally{w(f,!1)}}},N=async()=>{if(n(m))try{await k.deleteChat(a.data.space,n(m).id),P(`success`,`Conversation supprimée`),await O();let e=await k.allChats(a.data.space,0,n(c));w(l,e??[],!0),w(d,0)}catch{P(`failure`,`Erreur lors de la suppression de la conversation`)}finally{w(m,null)}};var F=W(),I=u(F),L=p(I),R=p(L);T(R),D(L);var z=e(L,2);i(z,17,()=>n(l),e=>e.id,(r,i)=>{var c=V(),l=p(c),u=p(l),d=p(u),f=p(d,!0);D(d),D(u);var h=e(u,2);D(l);var g=e(l,2),_=p(g,!0);D(g),D(c),o(()=>{C(d,`href`,`/${a.data.space}/${n(i).id}`),t(f,n(i).title),t(_,n(i)._date_created)}),s(`click`,h,()=>w(m,n(i),!0)),x(r,c)});var G=e(z,2),K=e=>{var t=H();x(e,t)};S(G,e=>{n(l).length===0&&e(K)});var q=e(G,2),J=e=>{var r=U(),i=p(r),a=p(i,!0);D(i),D(r),o(()=>{i.disabled=n(f),t(a,n(f)?`Chargement...`:`Charger plus`)}),s(`click`,i,M),x(e,r)};S(q,e=>{n(g)&&e(J)}),D(I);var Y=e(I,2);{let e=h(()=>n(m)!==null),t=h(()=>`Voulez-vous vraiment supprimer « ${n(m)?.title} » ? Cette action est irréversible.`);B(Y,{get open(){return n(e)},title:`Supprimer la conversation`,get message(){return n(t)},confirmLabel:`Supprimer`,onConfirm:N,onCancel:()=>w(m,null)})}s(`input`,R,j),E(R,()=>n(c),e=>w(c,e)),x(r,F),_()}a([`input`,`click`]);export{G as component,A as universal}; |