sillytavern-utils-lib 1.0.66 → 1.0.67

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.
@@ -1,6 +1,6 @@
1
- "use strict";var Re=Object.defineProperty;var Se=(u,r,o)=>r in u?Re(u,r,{enumerable:!0,configurable:!0,writable:!0,value:o}):u[r]=o;var U=(u,r,o)=>Se(u,typeof r!="symbol"?r+"":r,o);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("./config.cjs"),Oe=require("./tokenizer.cjs"),I=require("./prompt-message-utils.cjs"),de=require("../../../regex/engine.js"),_e=require("../../../../world-info.js"),a=require("../../../../../script.js"),he=require("../../../../power-user.js"),Pe=require("../../../../group-chats.js");class Ae{constructor(r){U(this,"messages",[]);U(this,"tokenizer");U(this,"maxContext");U(this,"currentTokenCount",0);this.tokenizer=new Oe.Tokenizer,this.maxContext=r}getTokenCount(r){var m,g;const o=I.getMessageText(r);return o?((g=(m=r.source)==null?void 0:m.extra)==null?void 0:g.token_count)??this.tokenizer.encode(o).length:0}canFit(r){return this.currentTokenCount+this.getTokenCount(r)<=this.maxContext}add(r){const o=I.sanitizePromptMessage(r);if(!o)return!0;r=o;const m=this.getTokenCount(r);return this.currentTokenCount+m>this.maxContext?!1:(this.messages.push(r),this.currentTokenCount+=m,!0)}addFront(r){const o=I.sanitizePromptMessage(r);if(!o)return!0;r=o;const m=this.getTokenCount(r);return this.currentTokenCount+m>this.maxContext?!1:(this.messages.unshift(r),this.currentTokenCount+=m,!0)}addMany(r){const o=I.sanitizePromptMessages(r),m=o.map(d=>this.getTokenCount(d)),g=m.reduce((d,y)=>d+y,0);if(this.currentTokenCount+g<=this.maxContext)return this.messages.push(...o),this.currentTokenCount+=g,!0;let v=0;const f=[];for(let d=o.length-1;d>=0;d--){const y=o[d],E=m[d];if(this.currentTokenCount+v+E<=this.maxContext)f.unshift(y),v+=E;else break}return f.length>0&&(this.messages.push(...f),this.currentTokenCount+=v),f.length===o.length}insert(r,o){const m=I.sanitizePromptMessage(o);if(!m)return!0;o=m;const g=this.getTokenCount(o);return this.currentTokenCount+g>this.maxContext?!1:(this.messages.splice(r,0,o),this.currentTokenCount+=g,!0)}getMessages(){return this.messages}}async function Ue(u,{targetCharacterId:r,presetName:o,instructName:m,contextName:g,syspromptName:v,maxContext:f,includeNames:d,ignoreCharacterFields:y,ignoreAuthorNote:E,ignoreWorldInfo:J,messageIndexesBetween:w}={}){var ee,te,oe,se,ne,re,ie,ae,pe,ce,le,me,ue,fe;if(!["textgenerationwebui","openai"].includes(u))throw new Error("Unsupported API");const s=SillyTavern.getContext();let{description:F,personality:$,persona:K,scenario:H,mesExamples:ye,system:x,jailbreak:xe}=y?{description:"",personality:"",persona:"",scenario:"",mesExamples:"",system:"",jailbreak:""}:s.getCharacterCardFields({chid:r});const R=u==="textgenerationwebui"?(ee=s.getPresetManager("instruct"))==null?void 0:ee.getCompletionPresetByName(m):void 0,W=!!(R!=null&&R.enabled);let M=n.st_parseMesExamples(ye,W);function Me(){var t,l;if(typeof f=="number")return f;if(!f||f==="active"||!o)return n.st_getMaxContextSize();if(typeof f=="number")return f;let e;if(u==="textgenerationwebui"){const i=(t=s.getPresetManager("textgenerationwebui"))==null?void 0:t.getCompletionPresetByName(o);e=i==null?void 0:i.max_length}else{const i=(l=s.getPresetManager("openai"))==null?void 0:l.getCompletionPresetByName(o);e=i==null?void 0:i.openai_max_context}return typeof e=="number"?e:n.st_getMaxContextSize()}let C=[];const G=Me();if(G<=0)return{result:[],warnings:C};const c=new Ae(G),Ce=s.ToolManager.isToolCallingSupported(),L=(w==null?void 0:w.start)??0,V=w!=null&&w.end?w.end+1:void 0;let b=L===-1&&V===0?[]:s.chat.slice(L,V).filter(e=>{var t;return!e.is_system||Ce&&Array.isArray((t=e.extra)==null?void 0:t.tool_invocations)});b=await Promise.all(b.map(async(e,t)=>{var z,D;let l=e.mes,i=e.is_user?de.regex_placement.USER_INPUT:de.regex_placement.AI_OUTPUT,p={isPrompt:!0,depth:b.length-t-1},_=n.st_getRegexedString(l,i,p);return _=await n.st_appendFileContent(e,_),(z=e==null?void 0:e.extra)!=null&&z.append_title&&((D=e==null?void 0:e.extra)!=null&&D.title)&&(_=`${_}
1
+ "use strict";var Re=Object.defineProperty;var Se=(u,r,s)=>r in u?Re(u,r,{enumerable:!0,configurable:!0,writable:!0,value:s}):u[r]=s;var O=(u,r,s)=>Se(u,typeof r!="symbol"?r+"":r,s);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("./config.cjs"),Ie=require("./tokenizer.cjs"),A=require("./prompt-message-utils.cjs"),Oe=require("./prompt-slice-utils.cjs"),ge=require("../../../regex/engine.js"),de=require("../../../../world-info.js"),a=require("../../../../../script.js"),_e=require("../../../../power-user.js"),he=require("../../../../group-chats.js");class Ae{constructor(r){O(this,"messages",[]);O(this,"tokenizer");O(this,"maxContext");O(this,"currentTokenCount",0);this.tokenizer=new Ie.Tokenizer,this.maxContext=r}getTokenCount(r){var l,g;const s=A.getMessageText(r);return s?((g=(l=r.source)==null?void 0:l.extra)==null?void 0:g.token_count)??this.tokenizer.encode(s).length:0}canFit(r){return this.currentTokenCount+this.getTokenCount(r)<=this.maxContext}add(r){const s=A.sanitizePromptMessage(r);if(!s)return!0;r=s;const l=this.getTokenCount(r);return this.currentTokenCount+l>this.maxContext?!1:(this.messages.push(r),this.currentTokenCount+=l,!0)}addFront(r){const s=A.sanitizePromptMessage(r);if(!s)return!0;r=s;const l=this.getTokenCount(r);return this.currentTokenCount+l>this.maxContext?!1:(this.messages.unshift(r),this.currentTokenCount+=l,!0)}addMany(r){const s=A.sanitizePromptMessages(r),l=s.map(d=>this.getTokenCount(d)),g=l.reduce((d,x)=>d+x,0);if(this.currentTokenCount+g<=this.maxContext)return this.messages.push(...s),this.currentTokenCount+=g,!0;let b=0;const f=[];for(let d=s.length-1;d>=0;d--){const x=s[d],v=l[d];if(this.currentTokenCount+b+v<=this.maxContext)f.unshift(x),b+=v;else break}return f.length>0&&(this.messages.push(...f),this.currentTokenCount+=b),f.length===s.length}insert(r,s){const l=A.sanitizePromptMessage(s);if(!l)return!0;s=l;const g=this.getTokenCount(s);return this.currentTokenCount+g>this.maxContext?!1:(this.messages.splice(r,0,s),this.currentTokenCount+=g,!0)}getMessages(){return this.messages}}async function Be(u,{targetCharacterId:r,presetName:s,instructName:l,contextName:g,syspromptName:b,maxContext:f,includeNames:d,ignoreCharacterFields:x,ignoreAuthorNote:v,ignoreWorldInfo:Q,messageIndexesBetween:Pe}={}){var Z,ee,te,se,oe,ne,re,ie,ae,pe,ce,me,le,ue;if(!["textgenerationwebui","openai"].includes(u))throw new Error("Unsupported API");const o=SillyTavern.getContext();let{description:q,personality:F,persona:J,scenario:$,mesExamples:xe,system:y,jailbreak:ye}=x?{description:"",personality:"",persona:"",scenario:"",mesExamples:"",system:"",jailbreak:""}:o.getCharacterCardFields({chid:r});const E=u==="textgenerationwebui"?(Z=o.getPresetManager("instruct"))==null?void 0:Z.getCompletionPresetByName(l):void 0,H=!!(E!=null&&E.enabled);let M=n.st_parseMesExamples(xe,H);function Me(){var t,m;if(typeof f=="number")return f;if(!f||f==="active"||!s)return n.st_getMaxContextSize();if(typeof f=="number")return f;let e;if(u==="textgenerationwebui"){const i=(t=o.getPresetManager("textgenerationwebui"))==null?void 0:t.getCompletionPresetByName(s);e=i==null?void 0:i.max_length}else{const i=(m=o.getPresetManager("openai"))==null?void 0:m.getCompletionPresetByName(s);e=i==null?void 0:i.openai_max_context}return typeof e=="number"?e:n.st_getMaxContextSize()}let w=[];const W=Me();if(W<=0)return{result:[],warnings:w};const c=new Ae(W),we=o.ToolManager.isToolCallingSupported(),{startIndex:K,endIndex:L}=Oe.getMessageSliceBounds(Pe);let k=K===-1&&L===0?[]:o.chat.slice(K,L).filter(e=>{var t;return!e.is_system||we&&Array.isArray((t=e.extra)==null?void 0:t.tool_invocations)});k=await Promise.all(k.map(async(e,t)=>{var N,j;let m=e.mes,i=e.is_user?ge.regex_placement.USER_INPUT:ge.regex_placement.AI_OUTPUT,p={isPrompt:!0,depth:k.length-t-1},_=n.st_getRegexedString(m,i,p);return _=await n.st_appendFileContent(e,_),(N=e==null?void 0:e.extra)!=null&&N.append_title&&((j=e==null?void 0:e.extra)!=null&&j.title)&&(_=`${_}
2
2
 
3
- ${e.extra.title}`),{...e,mes:_,index:t}}));const Te=b.map(e=>_e.world_info_include_names?`${e.name}: ${e.mes}`:e.mes).reverse(),{worldInfoString:Ie,worldInfoBefore:N,worldInfoAfter:j,worldInfoExamples:ke,worldInfoDepth:we,anBefore:X,anAfter:Y}=J?{worldInfoString:"",worldInfoBefore:"",worldInfoAfter:"",worldInfoExamples:[],worldInfoDepth:[],anBefore:[],anAfter:[]}:await s.getWorldInfoPrompt(Te,G,!1);for(const e of ke){const t=e.content;if(t.length===0)continue;const l=n.st_baseChatReplace(t,a.name1,a.name2),i=n.st_parseMesExamples(l,W);e.position===_e.wi_anchor_position.before?M.unshift(...i):M.push(...i)}function Z(){const e=[];for(let t=b.length-1;t>=0;t--){const l=b[t],i=l.name==="System"&&!l.is_user?"system":l.is_user?"user":"assistant";e.unshift({role:i,content:d&&i!="system"?`${l.name}: ${l.mes}`:l.mes,source:l})}c.addMany(e)}if(u==="textgenerationwebui"){const e=[...M];M&&(M=n.st_formatInstructModeExamples(M,a.name1,a.name2));const t=(te=s.getPresetManager("sysprompt"))==null?void 0:te.getCompletionPresetByName(v);t&&(x=s.powerUserSettings.prefer_character_prompt&&x?x:n.st_baseChatReplace(t.content,a.name1,a.name2),x=W?n.st_formatInstructModeSystemPrompt(s.substituteParams(x,a.name1,a.name2,t.content),R):x);const l={description:F,personality:$,persona:s.powerUserSettings.persona_description_position==he.persona_description_positions.IN_PROMPT?K:"",scenario:H,system:x,char:a.name2,user:a.name1,wiBefore:N,wiAfter:j,loreBefore:N,loreAfter:j,mesExamples:M.join(""),mesExamplesRaw:e.join("")},i=(oe=s.getPresetManager("context"))==null?void 0:oe.getCompletionPresetByName(g);let p=n.st_renderStoryString(l,{customInstructSettings:R,customStoryString:i==null?void 0:i.story_string});p&&c.add({role:"system",content:p,ignoreInstruct:!0}),Z()}else{let e=function(P){const k=h.find(Q=>Q.identifier===P);if(k)return k;const ge=p.prompts.find(Q=>Q.identifier===P);if(ge)return ge},t=n.st_setOpenAIMessages(b),l=n.st_setOpenAIMessageExamples(M);async function i(){let[P,k]=await n.st_prepareOpenAIMessages({name2:a.name2,charDescription:F,charPersonality:$,Scenario:H,worldInfoBefore:N,worldInfoAfter:j,extensionPrompts:s.extensionPrompts,bias:"",type:"normal",quietPrompt:void 0,quietImage:void 0,cyclePrompt:"",systemPromptOverride:x,jailbreakPromptOverride:xe,personaDescription:K,messages:t,messageExamples:l},!1);c.addMany(P)}if(!o)return C.push("No preset name provided. Using default preset."),await i(),{result:c.getMessages(),warnings:C};const p=(se=s.getPresetManager("openai"))==null?void 0:se.getCompletionPresetByName(o);if(!p)return console.warn(`Preset not found: ${o}. Using current preset.`),C.push(`Preset not found: ${o}. Using current preset.`),i(),{result:c.getMessages(),warnings:C};let _=(ne=p.prompt_order)==null?void 0:ne.find(P=>P.character_id===a.this_chid);if(!_&&p.prompt_order&&p.prompt_order.length>0&&(_=p.prompt_order[p.prompt_order.length-1]),!_)return console.warn(`No prompt order found for preset: ${o}. Using current preset.`),C.push(`No prompt order found for preset: ${o}. Using current preset.`),i(),{result:c.getMessages(),warnings:C};const z=H&&p.scenario_format?s.substituteParams(p.scenario_format):"",D=$&&p.personality_format?s.substituteParams(p.personality_format):"",ve=s.substituteParams(p.group_nudge_prompt),Ee=p.impersonation_prompt?s.substituteParams(p.impersonation_prompt):"",h=[];J||h.push({role:"system",content:n.st_formatWorldInfo(N,{wiFormat:p.wi_format}),identifier:"worldInfoBefore"},{role:"system",content:n.st_formatWorldInfo(j,{wiFormat:p.wi_format}),identifier:"worldInfoAfter"}),y||h.push({role:"system",content:F,identifier:"charDescription"},{role:"system",content:D,identifier:"charPersonality"},{role:"system",content:z,identifier:"scenario"}),h.push({role:"system",content:Ee,identifier:"impersonate"},{role:"system",content:ve,identifier:"groupNudge"});const S=s.extensionPrompts["1_memory"];S&&S.value&&h.push({role:n.st_getPromptRole(S.role),content:S.value,identifier:"summary",position:n.st_getPromptPosition(S.position)});const O=s.extensionPrompts["2_floating_prompt"];!E&&O&&O.value&&h.push({role:n.st_getPromptRole(O.role),content:O.value,identifier:"authorsNote",position:n.st_getPromptPosition(O.position)});const q=s.extensionPrompts["3_vectors"];q&&q.value&&h.push({role:"system",content:q.value,identifier:"vectorsMemory",position:n.st_getPromptPosition(q.position)});const A=s.extensionPrompts["4_vectors_data_bank"];A&&A.value&&h.push({role:n.st_getPromptRole(A.role),content:A.value,identifier:"vectorsDataBank",position:n.st_getPromptPosition(A.position)});const B=s.extensionPrompts.chromadb;B&&B.value&&h.push({role:"system",content:B.value,identifier:"smartContext",position:n.st_getPromptPosition(B.position)}),!y&&s.powerUserSettings.persona_description&&s.powerUserSettings.persona_description_position===he.persona_description_positions.IN_PROMPT&&h.push({role:"system",content:s.powerUserSettings.persona_description,identifier:"personaDescription"}),_.order.forEach(P=>{if(!P.enabled)return;const k=e(P.identifier);if(k&&k.content){c.add({role:k.role??"system",content:s.substituteParams(k.content)});return}P.identifier==="chatHistory"&&Z()})}const be=["1_memory","2_floating_prompt","3_vectors","4_vectors_data_bank","chromadb","PERSONA_DESCRIPTION","QUIET_PROMPT","DEPTH_PROMPT"];for(const e in s.extensionPrompts)if(Object.hasOwn(s.extensionPrompts,e)){const t=s.extensionPrompts[e];if(be.includes(e)||!s.extensionPrompts[e].value||![a.extension_prompt_types.BEFORE_PROMPT,a.extension_prompt_types.IN_PROMPT].includes(t.position)||typeof t.filter=="function"&&!await t.filter())continue;const i={role:n.st_getPromptRole(t.role)??"system",content:t.value};if(t.position===a.extension_prompt_types.BEFORE_PROMPT)c.insert(t.depth,i);else if(t.position===a.extension_prompt_types.IN_PROMPT){const p=c.getMessages();c.insert(p.length-t.depth,i)}}for(const e of we){const t=c.getMessages();c.insert(t.length-e.depth,{role:n.st_getPromptRole(e.role),content:e.entries.join(`
4
- `)})}if(!y){const e=n.st_getGroupDepthPrompts(Pe.selected_group,Number(a.this_chid));if(Pe.selected_group&&Array.isArray(e)&&e.length>0)e.filter(t=>t.text).forEach((t,l)=>{const i=c.getMessages();c.insert(i.length-t.depth,{role:t.role,content:t.text})});else{const t=n.st_baseChatReplace((ce=(pe=(ae=(ie=(re=s.characters[a.this_chid])==null?void 0:re.data)==null?void 0:ie.extensions)==null?void 0:ae.depth_prompt)==null?void 0:pe.prompt)==null?void 0:ce.trim(),a.name1,a.name2)||"";if(t){const l=a.depth_prompt_depth_default,i=((fe=(ue=(me=(le=s.characters[a.this_chid])==null?void 0:le.data)==null?void 0:me.extensions)==null?void 0:ue.depth_prompt)==null?void 0:fe.role)??a.depth_prompt_role_default,p=c.getMessages();c.insert(p.length-l,{role:n.st_getPromptRole(i),content:t})}}}let T=-1;if(!E){const e=n.st_getAuthorNote();if(e.prompt){e.prompt=n.st_baseChatReplace(e.prompt,a.name1,a.name2);const t={role:n.st_getPromptRole(e.role),content:e.prompt};switch(e.position){case a.extension_prompt_types.IN_PROMPT:c.insert(1,t),T=1;break;case a.extension_prompt_types.IN_CHAT:T=c.getMessages().length-e.depth,c.insert(T,t);break;case a.extension_prompt_types.BEFORE_PROMPT:c.addFront(t),T=0;break}}}return T>=0&&(X.length>0&&(c.insert(T,{role:"system",content:X.join(`
5
- `)}),T++),Y.length>0&&c.insert(T+1,{role:"system",content:Y.join(`
6
- `)})),{result:c.getMessages(),warnings:C}}exports.buildPrompt=Ue;
3
+ ${e.extra.title}`),{...e,mes:_,index:t}}));const Ce=k.map(e=>de.world_info_include_names?`${e.name}: ${e.mes}`:e.mes).reverse(),{worldInfoString:Ue,worldInfoBefore:B,worldInfoAfter:U,worldInfoExamples:Te,worldInfoDepth:ke,anBefore:V,anAfter:X}=Q?{worldInfoString:"",worldInfoBefore:"",worldInfoAfter:"",worldInfoExamples:[],worldInfoDepth:[],anBefore:[],anAfter:[]}:await o.getWorldInfoPrompt(Ce,W,!1);for(const e of Te){const t=e.content;if(t.length===0)continue;const m=n.st_baseChatReplace(t,a.name1,a.name2),i=n.st_parseMesExamples(m,H);e.position===de.wi_anchor_position.before?M.unshift(...i):M.push(...i)}function Y(){const e=[];for(let t=k.length-1;t>=0;t--){const m=k[t],i=m.name==="System"&&!m.is_user?"system":m.is_user?"user":"assistant";e.unshift({role:i,content:d&&i!="system"?`${m.name}: ${m.mes}`:m.mes,source:m})}c.addMany(e)}if(u==="textgenerationwebui"){const e=[...M];M&&(M=n.st_formatInstructModeExamples(M,a.name1,a.name2));const t=(ee=o.getPresetManager("sysprompt"))==null?void 0:ee.getCompletionPresetByName(b);t&&(y=o.powerUserSettings.prefer_character_prompt&&y?y:n.st_baseChatReplace(t.content,a.name1,a.name2),y=H?n.st_formatInstructModeSystemPrompt(o.substituteParams(y,a.name1,a.name2,t.content),E):y);const m={description:q,personality:F,persona:o.powerUserSettings.persona_description_position==_e.persona_description_positions.IN_PROMPT?J:"",scenario:$,system:y,char:a.name2,user:a.name1,wiBefore:B,wiAfter:U,loreBefore:B,loreAfter:U,mesExamples:M.join(""),mesExamplesRaw:e.join("")},i=(te=o.getPresetManager("context"))==null?void 0:te.getCompletionPresetByName(g);let p=n.st_renderStoryString(m,{customInstructSettings:E,customStoryString:i==null?void 0:i.story_string});p&&c.add({role:"system",content:p,ignoreInstruct:!0}),Y()}else{let e=function(P){const T=h.find(G=>G.identifier===P);if(T)return T;const fe=p.prompts.find(G=>G.identifier===P);if(fe)return fe},t=n.st_setOpenAIMessages(k),m=n.st_setOpenAIMessageExamples(M);async function i(){let[P,T]=await n.st_prepareOpenAIMessages({name2:a.name2,charDescription:q,charPersonality:F,Scenario:$,worldInfoBefore:B,worldInfoAfter:U,extensionPrompts:o.extensionPrompts,bias:"",type:"normal",quietPrompt:void 0,quietImage:void 0,cyclePrompt:"",systemPromptOverride:y,jailbreakPromptOverride:ye,personaDescription:J,messages:t,messageExamples:m},!1);c.addMany(P)}if(!s)return w.push("No preset name provided. Using default preset."),await i(),{result:c.getMessages(),warnings:w};const p=(se=o.getPresetManager("openai"))==null?void 0:se.getCompletionPresetByName(s);if(!p)return console.warn(`Preset not found: ${s}. Using current preset.`),w.push(`Preset not found: ${s}. Using current preset.`),i(),{result:c.getMessages(),warnings:w};let _=(oe=p.prompt_order)==null?void 0:oe.find(P=>P.character_id===a.this_chid);if(!_&&p.prompt_order&&p.prompt_order.length>0&&(_=p.prompt_order[p.prompt_order.length-1]),!_)return console.warn(`No prompt order found for preset: ${s}. Using current preset.`),w.push(`No prompt order found for preset: ${s}. Using current preset.`),i(),{result:c.getMessages(),warnings:w};const N=$&&p.scenario_format?o.substituteParams(p.scenario_format):"",j=F&&p.personality_format?o.substituteParams(p.personality_format):"",ve=o.substituteParams(p.group_nudge_prompt),Ee=p.impersonation_prompt?o.substituteParams(p.impersonation_prompt):"",h=[];Q||h.push({role:"system",content:n.st_formatWorldInfo(B,{wiFormat:p.wi_format}),identifier:"worldInfoBefore"},{role:"system",content:n.st_formatWorldInfo(U,{wiFormat:p.wi_format}),identifier:"worldInfoAfter"}),x||h.push({role:"system",content:q,identifier:"charDescription"},{role:"system",content:j,identifier:"charPersonality"},{role:"system",content:N,identifier:"scenario"}),h.push({role:"system",content:Ee,identifier:"impersonate"},{role:"system",content:ve,identifier:"groupNudge"});const R=o.extensionPrompts["1_memory"];R&&R.value&&h.push({role:n.st_getPromptRole(R.role),content:R.value,identifier:"summary",position:n.st_getPromptPosition(R.position)});const S=o.extensionPrompts["2_floating_prompt"];!v&&S&&S.value&&h.push({role:n.st_getPromptRole(S.role),content:S.value,identifier:"authorsNote",position:n.st_getPromptPosition(S.position)});const z=o.extensionPrompts["3_vectors"];z&&z.value&&h.push({role:"system",content:z.value,identifier:"vectorsMemory",position:n.st_getPromptPosition(z.position)});const I=o.extensionPrompts["4_vectors_data_bank"];I&&I.value&&h.push({role:n.st_getPromptRole(I.role),content:I.value,identifier:"vectorsDataBank",position:n.st_getPromptPosition(I.position)});const D=o.extensionPrompts.chromadb;D&&D.value&&h.push({role:"system",content:D.value,identifier:"smartContext",position:n.st_getPromptPosition(D.position)}),!x&&o.powerUserSettings.persona_description&&o.powerUserSettings.persona_description_position===_e.persona_description_positions.IN_PROMPT&&h.push({role:"system",content:o.powerUserSettings.persona_description,identifier:"personaDescription"}),_.order.forEach(P=>{if(!P.enabled)return;const T=e(P.identifier);if(T&&T.content){c.add({role:T.role??"system",content:o.substituteParams(T.content)});return}P.identifier==="chatHistory"&&Y()})}const be=["1_memory","2_floating_prompt","3_vectors","4_vectors_data_bank","chromadb","PERSONA_DESCRIPTION","QUIET_PROMPT","DEPTH_PROMPT"];for(const e in o.extensionPrompts)if(Object.hasOwn(o.extensionPrompts,e)){const t=o.extensionPrompts[e];if(be.includes(e)||!o.extensionPrompts[e].value||![a.extension_prompt_types.BEFORE_PROMPT,a.extension_prompt_types.IN_PROMPT].includes(t.position)||typeof t.filter=="function"&&!await t.filter())continue;const i={role:n.st_getPromptRole(t.role)??"system",content:t.value};if(t.position===a.extension_prompt_types.BEFORE_PROMPT)c.insert(t.depth,i);else if(t.position===a.extension_prompt_types.IN_PROMPT){const p=c.getMessages();c.insert(p.length-t.depth,i)}}for(const e of ke){const t=c.getMessages();c.insert(t.length-e.depth,{role:n.st_getPromptRole(e.role),content:e.entries.join(`
4
+ `)})}if(!x){const e=n.st_getGroupDepthPrompts(he.selected_group,Number(a.this_chid));if(he.selected_group&&Array.isArray(e)&&e.length>0)e.filter(t=>t.text).forEach((t,m)=>{const i=c.getMessages();c.insert(i.length-t.depth,{role:t.role,content:t.text})});else{const t=n.st_baseChatReplace((pe=(ae=(ie=(re=(ne=o.characters[a.this_chid])==null?void 0:ne.data)==null?void 0:re.extensions)==null?void 0:ie.depth_prompt)==null?void 0:ae.prompt)==null?void 0:pe.trim(),a.name1,a.name2)||"";if(t){const m=a.depth_prompt_depth_default,i=((ue=(le=(me=(ce=o.characters[a.this_chid])==null?void 0:ce.data)==null?void 0:me.extensions)==null?void 0:le.depth_prompt)==null?void 0:ue.role)??a.depth_prompt_role_default,p=c.getMessages();c.insert(p.length-m,{role:n.st_getPromptRole(i),content:t})}}}let C=-1;if(!v){const e=n.st_getAuthorNote();if(e.prompt){e.prompt=n.st_baseChatReplace(e.prompt,a.name1,a.name2);const t={role:n.st_getPromptRole(e.role),content:e.prompt};switch(e.position){case a.extension_prompt_types.IN_PROMPT:c.insert(1,t),C=1;break;case a.extension_prompt_types.IN_CHAT:C=c.getMessages().length-e.depth,c.insert(C,t);break;case a.extension_prompt_types.BEFORE_PROMPT:c.addFront(t),C=0;break}}}return C>=0&&(V.length>0&&(c.insert(C,{role:"system",content:V.join(`
5
+ `)}),C++),X.length>0&&c.insert(C+1,{role:"system",content:X.join(`
6
+ `)})),{result:c.getMessages(),warnings:w}}exports.buildPrompt=Be;
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../src/prompt-builder.ts"],"names":[],"mappings":"AA+BA,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAOtE,MAAM,WAAW,OAAQ,SAAQ,qBAAqB;IACpD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC1C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,qBAAqB,CAAC,EAAE;QACtB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AA0GD;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,EACE,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,WAAW,EACX,aAAa,EACb,UAAU,EACV,YAAY,EACZ,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,qBAAqB,GACtB,GAAE,kBAAuB,GACzB,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAsgBrD"}
1
+ {"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../src/prompt-builder.ts"],"names":[],"mappings":"AA+BA,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAQtE,MAAM,WAAW,OAAQ,SAAQ,qBAAqB;IACpD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC1C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,qBAAqB,CAAC,EAAE;QACtB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AA0GD;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,EACE,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,WAAW,EACX,aAAa,EACb,UAAU,EACV,YAAY,EACZ,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,qBAAqB,GACtB,GAAE,kBAAuB,GACzB,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAqgBrD"}
@@ -1,88 +1,89 @@
1
- var Dt = Object.defineProperty;
2
- var zt = (l, n, o) => n in l ? Dt(l, n, { enumerable: !0, configurable: !0, writable: !0, value: o }) : l[n] = o;
3
- var I = (l, n, o) => zt(l, typeof n != "symbol" ? n + "" : n, o);
4
- import { st_parseMesExamples as Mt, st_getRegexedString as Bt, st_appendFileContent as Ft, st_baseChatReplace as q, st_formatInstructModeExamples as $t, st_formatInstructModeSystemPrompt as jt, st_renderStoryString as Ht, st_setOpenAIMessages as qt, st_setOpenAIMessageExamples as Wt, st_formatWorldInfo as Tt, st_getPromptPosition as D, st_getPromptRole as b, st_getGroupDepthPrompts as Gt, st_getAuthorNote as Qt, st_getMaxContextSize as X, st_prepareOpenAIMessages as Jt } from "./config.js";
5
- import { Tokenizer as Kt } from "./tokenizer.js";
6
- import { getMessageText as Lt, sanitizePromptMessage as Y, sanitizePromptMessages as Vt } from "./prompt-message-utils.js";
7
- import { regex_placement as Ct } from "../../../regex/engine.js";
8
- import { world_info_include_names as Xt, wi_anchor_position as Yt } from "../../../../world-info.js";
9
- import { name1 as v, name2 as C, this_chid as W, extension_prompt_types as E, depth_prompt_role_default as Zt, depth_prompt_depth_default as te } from "../../../../../script.js";
10
- import { persona_description_positions as kt } from "../../../../power-user.js";
11
- import { selected_group as wt } from "../../../../group-chats.js";
12
- class ee {
1
+ var Ue = Object.defineProperty;
2
+ var De = (m, n, o) => n in m ? Ue(m, n, { enumerable: !0, configurable: !0, writable: !0, value: o }) : m[n] = o;
3
+ var B = (m, n, o) => De(m, typeof n != "symbol" ? n + "" : n, o);
4
+ import { st_parseMesExamples as ye, st_getRegexedString as ze, st_appendFileContent as Fe, st_baseChatReplace as H, st_formatInstructModeExamples as $e, st_formatInstructModeSystemPrompt as je, st_renderStoryString as He, st_setOpenAIMessages as qe, st_setOpenAIMessageExamples as We, st_formatWorldInfo as Me, st_getPromptPosition as N, st_getPromptRole as k, st_getGroupDepthPrompts as Ge, st_getAuthorNote as Qe, st_getMaxContextSize as V, st_prepareOpenAIMessages as Je } from "./config.js";
5
+ import { Tokenizer as Ke } from "./tokenizer.js";
6
+ import { getMessageText as Le, sanitizePromptMessage as X, sanitizePromptMessages as Ve } from "./prompt-message-utils.js";
7
+ import { getMessageSliceBounds as Xe } from "./prompt-slice-utils.js";
8
+ import { regex_placement as we } from "../../../regex/engine.js";
9
+ import { world_info_include_names as Ye, wi_anchor_position as Ze } from "../../../../world-info.js";
10
+ import { name1 as b, name2 as T, this_chid as q, extension_prompt_types as v, depth_prompt_role_default as et, depth_prompt_depth_default as tt } from "../../../../../script.js";
11
+ import { persona_description_positions as Te } from "../../../../power-user.js";
12
+ import { selected_group as Ce } from "../../../../group-chats.js";
13
+ class ot {
13
14
  constructor(n) {
14
- I(this, "messages", []);
15
- I(this, "tokenizer");
16
- I(this, "maxContext");
17
- I(this, "currentTokenCount", 0);
18
- this.tokenizer = new Kt(), this.maxContext = n;
15
+ B(this, "messages", []);
16
+ B(this, "tokenizer");
17
+ B(this, "maxContext");
18
+ B(this, "currentTokenCount", 0);
19
+ this.tokenizer = new Ke(), this.maxContext = n;
19
20
  }
20
21
  getTokenCount(n) {
21
- var c, m;
22
- const o = Lt(n);
23
- return o ? ((m = (c = n.source) == null ? void 0 : c.extra) == null ? void 0 : m.token_count) ?? this.tokenizer.encode(o).length : 0;
22
+ var c, u;
23
+ const o = Le(n);
24
+ return o ? ((u = (c = n.source) == null ? void 0 : c.extra) == null ? void 0 : u.token_count) ?? this.tokenizer.encode(o).length : 0;
24
25
  }
25
26
  canFit(n) {
26
27
  return this.currentTokenCount + this.getTokenCount(n) <= this.maxContext;
27
28
  }
28
29
  add(n) {
29
- const o = Y(n);
30
+ const o = X(n);
30
31
  if (!o) return !0;
31
32
  n = o;
32
33
  const c = this.getTokenCount(n);
33
34
  return this.currentTokenCount + c > this.maxContext ? !1 : (this.messages.push(n), this.currentTokenCount += c, !0);
34
35
  }
35
36
  addFront(n) {
36
- const o = Y(n);
37
+ const o = X(n);
37
38
  if (!o) return !0;
38
39
  n = o;
39
40
  const c = this.getTokenCount(n);
40
41
  return this.currentTokenCount + c > this.maxContext ? !1 : (this.messages.unshift(n), this.currentTokenCount += c, !0);
41
42
  }
42
43
  addMany(n) {
43
- const o = Vt(n), c = o.map((f) => this.getTokenCount(f)), m = c.reduce((f, _) => f + _, 0);
44
- if (this.currentTokenCount + m <= this.maxContext)
45
- return this.messages.push(...o), this.currentTokenCount += m, !0;
46
- let O = 0;
47
- const u = [];
44
+ const o = Ve(n), c = o.map((f) => this.getTokenCount(f)), u = c.reduce((f, _) => f + _, 0);
45
+ if (this.currentTokenCount + u <= this.maxContext)
46
+ return this.messages.push(...o), this.currentTokenCount += u, !0;
47
+ let E = 0;
48
+ const l = [];
48
49
  for (let f = o.length - 1; f >= 0; f--) {
49
- const _ = o[f], S = c[f];
50
- if (this.currentTokenCount + O + S <= this.maxContext)
51
- u.unshift(_), O += S;
50
+ const _ = o[f], I = c[f];
51
+ if (this.currentTokenCount + E + I <= this.maxContext)
52
+ l.unshift(_), E += I;
52
53
  else
53
54
  break;
54
55
  }
55
- return u.length > 0 && (this.messages.push(...u), this.currentTokenCount += O), u.length === o.length;
56
+ return l.length > 0 && (this.messages.push(...l), this.currentTokenCount += E), l.length === o.length;
56
57
  }
57
58
  insert(n, o) {
58
- const c = Y(o);
59
+ const c = X(o);
59
60
  if (!c) return !0;
60
61
  o = c;
61
- const m = this.getTokenCount(o);
62
- return this.currentTokenCount + m > this.maxContext ? !1 : (this.messages.splice(n, 0, o), this.currentTokenCount += m, !0);
62
+ const u = this.getTokenCount(o);
63
+ return this.currentTokenCount + u > this.maxContext ? !1 : (this.messages.splice(n, 0, o), this.currentTokenCount += u, !0);
63
64
  }
64
65
  getMessages() {
65
66
  return this.messages;
66
67
  }
67
68
  }
68
- async function fe(l, {
69
+ async function gt(m, {
69
70
  targetCharacterId: n,
70
71
  presetName: o,
71
72
  instructName: c,
72
- contextName: m,
73
- syspromptName: O,
74
- maxContext: u,
73
+ contextName: u,
74
+ syspromptName: E,
75
+ maxContext: l,
75
76
  includeNames: f,
76
77
  ignoreCharacterFields: _,
77
- ignoreAuthorNote: S,
78
- ignoreWorldInfo: Z,
79
- messageIndexesBetween: k
78
+ ignoreAuthorNote: I,
79
+ ignoreWorldInfo: Y,
80
+ messageIndexesBetween: ke
80
81
  } = {}) {
81
- var it, at, pt, ct, lt, ut, mt, ft, dt, gt, ht, _t, Pt, yt;
82
- if (!["textgenerationwebui", "openai"].includes(l))
82
+ var re, ie, ae, pe, ce, me, le, ue, fe, de, ge, he, _e, Pe;
83
+ if (!["textgenerationwebui", "openai"].includes(m))
83
84
  throw new Error("Unsupported API");
84
85
  const s = SillyTavern.getContext();
85
- let { description: G, personality: Q, persona: tt, scenario: J, mesExamples: bt, system: P, jailbreak: vt } = _ ? {
86
+ let { description: W, personality: G, persona: Z, scenario: Q, mesExamples: be, system: P, jailbreak: ve } = _ ? {
86
87
  description: "",
87
88
  personality: "",
88
89
  persona: "",
@@ -93,51 +94,51 @@ async function fe(l, {
93
94
  } : s.getCharacterCardFields({
94
95
  chid: n
95
96
  });
96
- const A = l === "textgenerationwebui" ? (it = s.getPresetManager("instruct")) == null ? void 0 : it.getCompletionPresetByName(c) : void 0, K = !!(A != null && A.enabled);
97
- let y = Mt(bt, K);
98
- function Et() {
99
- var e, p;
100
- if (typeof u == "number")
101
- return u;
102
- if (!u)
103
- return X();
104
- if (u === "active" || !o)
105
- return X();
106
- if (typeof u == "number")
107
- return u;
108
- let t;
109
- if (l === "textgenerationwebui") {
110
- const r = (e = s.getPresetManager("textgenerationwebui")) == null ? void 0 : e.getCompletionPresetByName(o);
111
- t = r == null ? void 0 : r.max_length;
97
+ const S = m === "textgenerationwebui" ? (re = s.getPresetManager("instruct")) == null ? void 0 : re.getCompletionPresetByName(c) : void 0, J = !!(S != null && S.enabled);
98
+ let x = ye(be, J);
99
+ function Ee() {
100
+ var t, p;
101
+ if (typeof l == "number")
102
+ return l;
103
+ if (!l)
104
+ return V();
105
+ if (l === "active" || !o)
106
+ return V();
107
+ if (typeof l == "number")
108
+ return l;
109
+ let e;
110
+ if (m === "textgenerationwebui") {
111
+ const r = (t = s.getPresetManager("textgenerationwebui")) == null ? void 0 : t.getCompletionPresetByName(o);
112
+ e = r == null ? void 0 : r.max_length;
112
113
  } else {
113
114
  const r = (p = s.getPresetManager("openai")) == null ? void 0 : p.getCompletionPresetByName(o);
114
- t = r == null ? void 0 : r.openai_max_context;
115
+ e = r == null ? void 0 : r.openai_max_context;
115
116
  }
116
- return typeof t == "number" ? t : X();
117
+ return typeof e == "number" ? e : V();
117
118
  }
118
- let x = [];
119
- const L = Et();
120
- if (L <= 0)
121
- return { result: [], warnings: x };
122
- const a = new ee(L), Ot = s.ToolManager.isToolCallingSupported(), et = (k == null ? void 0 : k.start) ?? 0, ot = k != null && k.end ? k.end + 1 : void 0;
123
- let w = et === -1 && ot === 0 ? [] : s.chat.slice(et, ot).filter((t) => {
124
- var e;
125
- return !t.is_system || Ot && Array.isArray((e = t.extra) == null ? void 0 : e.tool_invocations);
119
+ let y = [];
120
+ const K = Ee();
121
+ if (K <= 0)
122
+ return { result: [], warnings: y };
123
+ const a = new ot(K), Ie = s.ToolManager.isToolCallingSupported(), { startIndex: ee, endIndex: te } = Xe(ke);
124
+ let C = ee === -1 && te === 0 ? [] : s.chat.slice(ee, te).filter((e) => {
125
+ var t;
126
+ return !e.is_system || Ie && Array.isArray((t = e.extra) == null ? void 0 : t.tool_invocations);
126
127
  });
127
- w = await Promise.all(
128
- w.map(async (t, e) => {
129
- var F, $;
130
- let p = t.mes, r = t.is_user ? Ct.USER_INPUT : Ct.AI_OUTPUT, i = { isPrompt: !0, depth: w.length - e - 1 }, d = Bt(p, r, i);
131
- return d = await Ft(t, d), (F = t == null ? void 0 : t.extra) != null && F.append_title && (($ = t == null ? void 0 : t.extra) != null && $.title) && (d = `${d}
128
+ C = await Promise.all(
129
+ C.map(async (e, t) => {
130
+ var z, F;
131
+ let p = e.mes, r = e.is_user ? we.USER_INPUT : we.AI_OUTPUT, i = { isPrompt: !0, depth: C.length - t - 1 }, d = ze(p, r, i);
132
+ return d = await Fe(e, d), (z = e == null ? void 0 : e.extra) != null && z.append_title && ((F = e == null ? void 0 : e.extra) != null && F.title) && (d = `${d}
132
133
 
133
- ${t.extra.title}`), {
134
- ...t,
134
+ ${e.extra.title}`), {
135
+ ...e,
135
136
  mes: d,
136
- index: e
137
+ index: t
137
138
  };
138
139
  })
139
140
  );
140
- const St = w.map((t) => Xt ? `${t.name}: ${t.mes}` : t.mes).reverse(), { worldInfoString: oe, worldInfoBefore: z, worldInfoAfter: B, worldInfoExamples: At, worldInfoDepth: Rt, anBefore: st, anAfter: nt } = Z ? {
141
+ const Se = C.map((e) => Ye ? `${e.name}: ${e.mes}` : e.mes).reverse(), { worldInfoString: st, worldInfoBefore: U, worldInfoAfter: D, worldInfoExamples: Oe, worldInfoDepth: Ae, anBefore: oe, anAfter: se } = Y ? {
141
142
  worldInfoString: "",
142
143
  worldInfoBefore: "",
143
144
  worldInfoAfter: "",
@@ -145,72 +146,72 @@ ${t.extra.title}`), {
145
146
  worldInfoDepth: [],
146
147
  anBefore: [],
147
148
  anAfter: []
148
- } : await s.getWorldInfoPrompt(St, L, !1);
149
- for (const t of At) {
150
- const e = t.content;
151
- if (e.length === 0)
149
+ } : await s.getWorldInfoPrompt(Se, K, !1);
150
+ for (const e of Oe) {
151
+ const t = e.content;
152
+ if (t.length === 0)
152
153
  continue;
153
- const p = q(e, v, C), r = Mt(p, K);
154
- t.position === Yt.before ? y.unshift(...r) : y.push(...r);
154
+ const p = H(t, b, T), r = ye(p, J);
155
+ e.position === Ze.before ? x.unshift(...r) : x.push(...r);
155
156
  }
156
- function rt() {
157
- const t = [];
158
- for (let e = w.length - 1; e >= 0; e--) {
159
- const p = w[e], r = p.name === "System" && !p.is_user ? "system" : p.is_user ? "user" : "assistant";
160
- t.unshift({
157
+ function ne() {
158
+ const e = [];
159
+ for (let t = C.length - 1; t >= 0; t--) {
160
+ const p = C[t], r = p.name === "System" && !p.is_user ? "system" : p.is_user ? "user" : "assistant";
161
+ e.unshift({
161
162
  role: r,
162
163
  content: f && r != "system" ? `${p.name}: ${p.mes}` : p.mes,
163
164
  source: p
164
165
  });
165
166
  }
166
- a.addMany(t);
167
+ a.addMany(e);
167
168
  }
168
- if (l === "textgenerationwebui") {
169
- const t = [...y];
170
- y && (y = $t(y, v, C));
171
- const e = (at = s.getPresetManager("sysprompt")) == null ? void 0 : at.getCompletionPresetByName(O);
172
- e && (P = s.powerUserSettings.prefer_character_prompt && P ? P : q(e.content, v, C), P = K ? jt(
173
- s.substituteParams(P, v, C, e.content),
174
- A
169
+ if (m === "textgenerationwebui") {
170
+ const e = [...x];
171
+ x && (x = $e(x, b, T));
172
+ const t = (ie = s.getPresetManager("sysprompt")) == null ? void 0 : ie.getCompletionPresetByName(E);
173
+ t && (P = s.powerUserSettings.prefer_character_prompt && P ? P : H(t.content, b, T), P = J ? je(
174
+ s.substituteParams(P, b, T, t.content),
175
+ S
175
176
  ) : P);
176
177
  const p = {
177
- description: G,
178
- personality: Q,
179
- persona: s.powerUserSettings.persona_description_position == kt.IN_PROMPT ? tt : "",
180
- scenario: J,
178
+ description: W,
179
+ personality: G,
180
+ persona: s.powerUserSettings.persona_description_position == Te.IN_PROMPT ? Z : "",
181
+ scenario: Q,
181
182
  system: P,
182
- char: C,
183
- user: v,
184
- wiBefore: z,
185
- wiAfter: B,
186
- loreBefore: z,
187
- loreAfter: B,
188
- mesExamples: y.join(""),
189
- mesExamplesRaw: t.join("")
190
- }, r = (pt = s.getPresetManager("context")) == null ? void 0 : pt.getCompletionPresetByName(m);
191
- let i = Ht(p, {
192
- customInstructSettings: A,
183
+ char: T,
184
+ user: b,
185
+ wiBefore: U,
186
+ wiAfter: D,
187
+ loreBefore: U,
188
+ loreAfter: D,
189
+ mesExamples: x.join(""),
190
+ mesExamplesRaw: e.join("")
191
+ }, r = (ae = s.getPresetManager("context")) == null ? void 0 : ae.getCompletionPresetByName(u);
192
+ let i = He(p, {
193
+ customInstructSettings: S,
193
194
  customStoryString: r == null ? void 0 : r.story_string
194
195
  });
195
- i && a.add({ role: "system", content: i, ignoreInstruct: !0 }), rt();
196
+ i && a.add({ role: "system", content: i, ignoreInstruct: !0 }), ne();
196
197
  } else {
197
- let t = function(h) {
198
- const T = g.find((V) => V.identifier === h);
199
- if (T)
200
- return T;
201
- const xt = i.prompts.find((V) => V.identifier === h);
202
- if (xt)
203
- return xt;
204
- }, e = qt(w), p = Wt(y);
198
+ let e = function(h) {
199
+ const w = g.find((L) => L.identifier === h);
200
+ if (w)
201
+ return w;
202
+ const xe = i.prompts.find((L) => L.identifier === h);
203
+ if (xe)
204
+ return xe;
205
+ }, t = qe(C), p = We(x);
205
206
  async function r() {
206
- let [h, T] = await Jt(
207
+ let [h, w] = await Je(
207
208
  {
208
- name2: C,
209
- charDescription: G,
210
- charPersonality: Q,
211
- Scenario: J,
212
- worldInfoBefore: z,
213
- worldInfoAfter: B,
209
+ name2: T,
210
+ charDescription: W,
211
+ charPersonality: G,
212
+ Scenario: Q,
213
+ worldInfoBefore: U,
214
+ worldInfoAfter: D,
214
215
  extensionPrompts: s.extensionPrompts,
215
216
  bias: "",
216
217
  type: "normal",
@@ -218,9 +219,9 @@ ${t.extra.title}`), {
218
219
  quietImage: void 0,
219
220
  cyclePrompt: "",
220
221
  systemPromptOverride: P,
221
- jailbreakPromptOverride: vt,
222
- personaDescription: tt,
223
- messages: e,
222
+ jailbreakPromptOverride: ve,
223
+ personaDescription: Z,
224
+ messages: t,
224
225
  messageExamples: p
225
226
  },
226
227
  !1
@@ -228,86 +229,86 @@ ${t.extra.title}`), {
228
229
  a.addMany(h);
229
230
  }
230
231
  if (!o)
231
- return x.push("No preset name provided. Using default preset."), await r(), { result: a.getMessages(), warnings: x };
232
- const i = (ct = s.getPresetManager("openai")) == null ? void 0 : ct.getCompletionPresetByName(o);
232
+ return y.push("No preset name provided. Using default preset."), await r(), { result: a.getMessages(), warnings: y };
233
+ const i = (pe = s.getPresetManager("openai")) == null ? void 0 : pe.getCompletionPresetByName(o);
233
234
  if (!i)
234
- return console.warn(`Preset not found: ${o}. Using current preset.`), x.push(`Preset not found: ${o}. Using current preset.`), r(), { result: a.getMessages(), warnings: x };
235
- let d = (lt = i.prompt_order) == null ? void 0 : lt.find((h) => h.character_id === W);
235
+ return console.warn(`Preset not found: ${o}. Using current preset.`), y.push(`Preset not found: ${o}. Using current preset.`), r(), { result: a.getMessages(), warnings: y };
236
+ let d = (ce = i.prompt_order) == null ? void 0 : ce.find((h) => h.character_id === q);
236
237
  if (!d && i.prompt_order && i.prompt_order.length > 0 && (d = i.prompt_order[i.prompt_order.length - 1]), !d)
237
- return console.warn(`No prompt order found for preset: ${o}. Using current preset.`), x.push(`No prompt order found for preset: ${o}. Using current preset.`), r(), { result: a.getMessages(), warnings: x };
238
- const F = J && i.scenario_format ? s.substituteParams(i.scenario_format) : "", $ = Q && i.personality_format ? s.substituteParams(i.personality_format) : "", Ut = s.substituteParams(i.group_nudge_prompt), It = i.impersonation_prompt ? s.substituteParams(i.impersonation_prompt) : "", g = [];
239
- Z || g.push(
238
+ return console.warn(`No prompt order found for preset: ${o}. Using current preset.`), y.push(`No prompt order found for preset: ${o}. Using current preset.`), r(), { result: a.getMessages(), warnings: y };
239
+ const z = Q && i.scenario_format ? s.substituteParams(i.scenario_format) : "", F = G && i.personality_format ? s.substituteParams(i.personality_format) : "", Be = s.substituteParams(i.group_nudge_prompt), Ne = i.impersonation_prompt ? s.substituteParams(i.impersonation_prompt) : "", g = [];
240
+ Y || g.push(
240
241
  {
241
242
  role: "system",
242
- content: Tt(z, { wiFormat: i.wi_format }),
243
+ content: Me(U, { wiFormat: i.wi_format }),
243
244
  identifier: "worldInfoBefore"
244
245
  },
245
246
  {
246
247
  role: "system",
247
- content: Tt(B, { wiFormat: i.wi_format }),
248
+ content: Me(D, { wiFormat: i.wi_format }),
248
249
  identifier: "worldInfoAfter"
249
250
  }
250
251
  ), _ || g.push(
251
- { role: "system", content: G, identifier: "charDescription" },
252
- { role: "system", content: $, identifier: "charPersonality" },
253
- { role: "system", content: F, identifier: "scenario" }
252
+ { role: "system", content: W, identifier: "charDescription" },
253
+ { role: "system", content: F, identifier: "charPersonality" },
254
+ { role: "system", content: z, identifier: "scenario" }
254
255
  ), g.push(
255
- { role: "system", content: It, identifier: "impersonate" },
256
- { role: "system", content: Ut, identifier: "groupNudge" }
256
+ { role: "system", content: Ne, identifier: "impersonate" },
257
+ { role: "system", content: Be, identifier: "groupNudge" }
257
258
  );
258
- const R = s.extensionPrompts["1_memory"];
259
- R && R.value && g.push({
260
- role: b(R.role),
261
- content: R.value,
259
+ const O = s.extensionPrompts["1_memory"];
260
+ O && O.value && g.push({
261
+ role: k(O.role),
262
+ content: O.value,
262
263
  identifier: "summary",
263
- position: D(R.position)
264
+ position: N(O.position)
264
265
  });
265
- const N = s.extensionPrompts["2_floating_prompt"];
266
- !S && N && N.value && g.push({
267
- role: b(N.role),
268
- content: N.value,
266
+ const A = s.extensionPrompts["2_floating_prompt"];
267
+ !I && A && A.value && g.push({
268
+ role: k(A.role),
269
+ content: A.value,
269
270
  identifier: "authorsNote",
270
- position: D(N.position)
271
+ position: N(A.position)
271
272
  });
272
- const j = s.extensionPrompts["3_vectors"];
273
- j && j.value && g.push({
273
+ const $ = s.extensionPrompts["3_vectors"];
274
+ $ && $.value && g.push({
274
275
  role: "system",
275
- content: j.value,
276
+ content: $.value,
276
277
  identifier: "vectorsMemory",
277
- position: D(j.position)
278
+ position: N($.position)
278
279
  });
279
- const U = s.extensionPrompts["4_vectors_data_bank"];
280
- U && U.value && g.push({
281
- role: b(U.role),
282
- content: U.value,
280
+ const R = s.extensionPrompts["4_vectors_data_bank"];
281
+ R && R.value && g.push({
282
+ role: k(R.role),
283
+ content: R.value,
283
284
  identifier: "vectorsDataBank",
284
- position: D(U.position)
285
+ position: N(R.position)
285
286
  });
286
- const H = s.extensionPrompts.chromadb;
287
- H && H.value && g.push({
287
+ const j = s.extensionPrompts.chromadb;
288
+ j && j.value && g.push({
288
289
  role: "system",
289
- content: H.value,
290
+ content: j.value,
290
291
  identifier: "smartContext",
291
- position: D(H.position)
292
- }), !_ && s.powerUserSettings.persona_description && s.powerUserSettings.persona_description_position === kt.IN_PROMPT && g.push({
292
+ position: N(j.position)
293
+ }), !_ && s.powerUserSettings.persona_description && s.powerUserSettings.persona_description_position === Te.IN_PROMPT && g.push({
293
294
  role: "system",
294
295
  content: s.powerUserSettings.persona_description,
295
296
  identifier: "personaDescription"
296
297
  }), d.order.forEach((h) => {
297
298
  if (!h.enabled)
298
299
  return;
299
- const T = t(h.identifier);
300
- if (T && T.content) {
300
+ const w = e(h.identifier);
301
+ if (w && w.content) {
301
302
  a.add({
302
- role: T.role ?? "system",
303
- content: s.substituteParams(T.content)
303
+ role: w.role ?? "system",
304
+ content: s.substituteParams(w.content)
304
305
  });
305
306
  return;
306
307
  }
307
- h.identifier === "chatHistory" && rt();
308
+ h.identifier === "chatHistory" && ne();
308
309
  });
309
310
  }
310
- const Nt = [
311
+ const Re = [
311
312
  "1_memory",
312
313
  "2_floating_prompt",
313
314
  "3_vectors",
@@ -317,74 +318,74 @@ ${t.extra.title}`), {
317
318
  "QUIET_PROMPT",
318
319
  "DEPTH_PROMPT"
319
320
  ];
320
- for (const t in s.extensionPrompts)
321
- if (Object.hasOwn(s.extensionPrompts, t)) {
322
- const e = s.extensionPrompts[t];
323
- if (Nt.includes(t) || !s.extensionPrompts[t].value || ![E.BEFORE_PROMPT, E.IN_PROMPT].includes(e.position) || typeof e.filter == "function" && !await e.filter()) continue;
321
+ for (const e in s.extensionPrompts)
322
+ if (Object.hasOwn(s.extensionPrompts, e)) {
323
+ const t = s.extensionPrompts[e];
324
+ if (Re.includes(e) || !s.extensionPrompts[e].value || ![v.BEFORE_PROMPT, v.IN_PROMPT].includes(t.position) || typeof t.filter == "function" && !await t.filter()) continue;
324
325
  const r = {
325
- role: b(e.role) ?? "system",
326
- content: e.value
326
+ role: k(t.role) ?? "system",
327
+ content: t.value
327
328
  };
328
- if (e.position === E.BEFORE_PROMPT)
329
- a.insert(e.depth, r);
330
- else if (e.position === E.IN_PROMPT) {
329
+ if (t.position === v.BEFORE_PROMPT)
330
+ a.insert(t.depth, r);
331
+ else if (t.position === v.IN_PROMPT) {
331
332
  const i = a.getMessages();
332
- a.insert(i.length - e.depth, r);
333
+ a.insert(i.length - t.depth, r);
333
334
  }
334
335
  }
335
- for (const t of Rt) {
336
- const e = a.getMessages();
337
- a.insert(e.length - t.depth, {
338
- role: b(t.role),
339
- content: t.entries.join(`
336
+ for (const e of Ae) {
337
+ const t = a.getMessages();
338
+ a.insert(t.length - e.depth, {
339
+ role: k(e.role),
340
+ content: e.entries.join(`
340
341
  `)
341
342
  });
342
343
  }
343
344
  if (!_) {
344
- const t = Gt(wt, Number(W));
345
- if (wt && Array.isArray(t) && t.length > 0)
346
- t.filter((e) => e.text).forEach((e, p) => {
345
+ const e = Ge(Ce, Number(q));
346
+ if (Ce && Array.isArray(e) && e.length > 0)
347
+ e.filter((t) => t.text).forEach((t, p) => {
347
348
  const r = a.getMessages();
348
- a.insert(r.length - e.depth, { role: e.role, content: e.text });
349
+ a.insert(r.length - t.depth, { role: t.role, content: t.text });
349
350
  });
350
351
  else {
351
- const e = q(
352
- (gt = (dt = (ft = (mt = (ut = s.characters[W]) == null ? void 0 : ut.data) == null ? void 0 : mt.extensions) == null ? void 0 : ft.depth_prompt) == null ? void 0 : dt.prompt) == null ? void 0 : gt.trim(),
353
- v,
354
- C
352
+ const t = H(
353
+ (de = (fe = (ue = (le = (me = s.characters[q]) == null ? void 0 : me.data) == null ? void 0 : le.extensions) == null ? void 0 : ue.depth_prompt) == null ? void 0 : fe.prompt) == null ? void 0 : de.trim(),
354
+ b,
355
+ T
355
356
  ) || "";
356
- if (e) {
357
- const p = te, r = ((yt = (Pt = (_t = (ht = s.characters[W]) == null ? void 0 : ht.data) == null ? void 0 : _t.extensions) == null ? void 0 : Pt.depth_prompt) == null ? void 0 : yt.role) ?? Zt, i = a.getMessages();
357
+ if (t) {
358
+ const p = tt, r = ((Pe = (_e = (he = (ge = s.characters[q]) == null ? void 0 : ge.data) == null ? void 0 : he.extensions) == null ? void 0 : _e.depth_prompt) == null ? void 0 : Pe.role) ?? et, i = a.getMessages();
358
359
  a.insert(i.length - p, {
359
- role: b(r),
360
- content: e
360
+ role: k(r),
361
+ content: t
361
362
  });
362
363
  }
363
364
  }
364
365
  }
365
366
  let M = -1;
366
- if (!S) {
367
- const t = Qt();
368
- if (t.prompt) {
369
- t.prompt = q(t.prompt, v, C);
370
- const e = { role: b(t.role), content: t.prompt };
371
- switch (t.position) {
372
- case E.IN_PROMPT:
373
- a.insert(1, e), M = 1;
367
+ if (!I) {
368
+ const e = Qe();
369
+ if (e.prompt) {
370
+ e.prompt = H(e.prompt, b, T);
371
+ const t = { role: k(e.role), content: e.prompt };
372
+ switch (e.position) {
373
+ case v.IN_PROMPT:
374
+ a.insert(1, t), M = 1;
374
375
  break;
375
- case E.IN_CHAT:
376
- M = a.getMessages().length - t.depth, a.insert(M, e);
376
+ case v.IN_CHAT:
377
+ M = a.getMessages().length - e.depth, a.insert(M, t);
377
378
  break;
378
- case E.BEFORE_PROMPT:
379
- a.addFront(e), M = 0;
379
+ case v.BEFORE_PROMPT:
380
+ a.addFront(t), M = 0;
380
381
  break;
381
382
  }
382
383
  }
383
384
  }
384
- return M >= 0 && (st.length > 0 && (a.insert(M, { role: "system", content: st.join(`
385
- `) }), M++), nt.length > 0 && a.insert(M + 1, { role: "system", content: nt.join(`
386
- `) })), { result: a.getMessages(), warnings: x };
385
+ return M >= 0 && (oe.length > 0 && (a.insert(M, { role: "system", content: oe.join(`
386
+ `) }), M++), se.length > 0 && a.insert(M + 1, { role: "system", content: se.join(`
387
+ `) })), { result: a.getMessages(), warnings: y };
387
388
  }
388
389
  export {
389
- fe as buildPrompt
390
+ gt as buildPrompt
390
391
  };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function i(o){return{startIndex:(o==null?void 0:o.start)??0,endIndex:(o==null?void 0:o.end)===void 0?void 0:o.end+1}}exports.getMessageSliceBounds=i;
@@ -0,0 +1,7 @@
1
+ import { BuildPromptOptions } from './prompt-builder.js';
2
+
3
+ export declare function getMessageSliceBounds(messageIndexesBetween?: BuildPromptOptions['messageIndexesBetween']): {
4
+ startIndex: number;
5
+ endIndex: number | undefined;
6
+ };
7
+ //# sourceMappingURL=prompt-slice-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-slice-utils.d.ts","sourceRoot":"","sources":["../src/prompt-slice-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,wBAAgB,qBAAqB,CAAC,qBAAqB,CAAC,EAAE,kBAAkB,CAAC,uBAAuB,CAAC,GAAG;IAC1G,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B,CAKA"}
@@ -0,0 +1,9 @@
1
+ function r(o) {
2
+ return {
3
+ startIndex: (o == null ? void 0 : o.start) ?? 0,
4
+ endIndex: (o == null ? void 0 : o.end) === void 0 ? void 0 : o.end + 1
5
+ };
6
+ }
7
+ export {
8
+ r as getMessageSliceBounds
9
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sillytavern-utils-lib",
3
- "version": "1.0.66",
3
+ "version": "1.0.67",
4
4
  "description": "Utility library for SillyTavern",
5
5
  "type": "module",
6
6
  "exports": {