forked from open-webui/open-webui
Merge pull request #1539 from cheahjs/feat/customizable-title-prompt-length
feat: add {{prompt:start:length}} and {{prompt🔚length}} to title gen
This commit is contained in:
commit
8b10b058e5
3 changed files with 31 additions and 2 deletions
|
@ -1,4 +1,5 @@
|
||||||
import { OLLAMA_API_BASE_URL } from '$lib/constants';
|
import { OLLAMA_API_BASE_URL } from '$lib/constants';
|
||||||
|
import { promptTemplate } from '$lib/utils';
|
||||||
|
|
||||||
export const getOllamaUrls = async (token: string = '') => {
|
export const getOllamaUrls = async (token: string = '') => {
|
||||||
let error = null;
|
let error = null;
|
||||||
|
@ -144,7 +145,7 @@ export const generateTitle = async (
|
||||||
) => {
|
) => {
|
||||||
let error = null;
|
let error = null;
|
||||||
|
|
||||||
template = template.replace(/{{prompt}}/g, prompt);
|
template = promptTemplate(template, prompt);
|
||||||
|
|
||||||
console.log(template);
|
console.log(template);
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import { OPENAI_API_BASE_URL } from '$lib/constants';
|
import { OPENAI_API_BASE_URL } from '$lib/constants';
|
||||||
|
import { promptTemplate } from '$lib/utils';
|
||||||
|
|
||||||
export const getOpenAIUrls = async (token: string = '') => {
|
export const getOpenAIUrls = async (token: string = '') => {
|
||||||
let error = null;
|
let error = null;
|
||||||
|
@ -273,7 +274,7 @@ export const generateTitle = async (
|
||||||
) => {
|
) => {
|
||||||
let error = null;
|
let error = null;
|
||||||
|
|
||||||
template = template.replace(/{{prompt}}/g, prompt);
|
template = promptTemplate(template, prompt);
|
||||||
|
|
||||||
console.log(template);
|
console.log(template);
|
||||||
|
|
||||||
|
|
|
@ -468,6 +468,33 @@ export const blobToFile = (blob, fileName) => {
|
||||||
return file;
|
return file;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// promptTemplate replaces any occurrences of the following in the template with the prompt
|
||||||
|
// {{prompt}} will be replaced with the prompt
|
||||||
|
// {{prompt:start:<length>}} will be replaced with the first <length> characters of the prompt
|
||||||
|
// {{prompt:end:<length>}} will be replaced with the last <length> characters of the prompt
|
||||||
|
// Character length is used as we don't have the ability to tokenize the prompt
|
||||||
|
export const promptTemplate = (template: string, prompt: string) => {
|
||||||
|
template = template.replace(/{{prompt}}/g, prompt);
|
||||||
|
|
||||||
|
// Replace all instances of {{prompt:start:<length>}} with the first <length> characters of the prompt
|
||||||
|
const startRegex = /{{prompt:start:(\d+)}}/g;
|
||||||
|
let startMatch: RegExpMatchArray | null;
|
||||||
|
while ((startMatch = startRegex.exec(template)) !== null) {
|
||||||
|
const length = parseInt(startMatch[1]);
|
||||||
|
template = template.replace(startMatch[0], prompt.substring(0, length));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Replace all instances of {{prompt:end:<length>}} with the last <length> characters of the prompt
|
||||||
|
const endRegex = /{{prompt:end:(\d+)}}/g;
|
||||||
|
let endMatch: RegExpMatchArray | null;
|
||||||
|
while ((endMatch = endRegex.exec(template)) !== null) {
|
||||||
|
const length = parseInt(endMatch[1]);
|
||||||
|
template = template.replace(endMatch[0], prompt.substring(prompt.length - length));
|
||||||
|
}
|
||||||
|
|
||||||
|
return template;
|
||||||
|
};
|
||||||
|
|
||||||
export const approximateToHumanReadable = (nanoseconds: number) => {
|
export const approximateToHumanReadable = (nanoseconds: number) => {
|
||||||
const seconds = Math.floor((nanoseconds / 1e9) % 60);
|
const seconds = Math.floor((nanoseconds / 1e9) % 60);
|
||||||
const minutes = Math.floor((nanoseconds / 6e10) % 60);
|
const minutes = Math.floor((nanoseconds / 6e10) % 60);
|
||||||
|
|
Loading…
Reference in a new issue