Преглед на файлове

feat: add {{prompt:start:length}} and {{prompt:end:length}} to title gen

Jun Siang Cheah преди 1 година
родител
ревизия
db817fcf29
променени са 3 файла, в които са добавени 29 реда и са изтрити 2 реда
  1. 2 1
      src/lib/apis/ollama/index.ts
  2. 2 1
      src/lib/apis/openai/index.ts
  3. 25 0
      src/lib/utils/index.ts

+ 2 - 1
src/lib/apis/ollama/index.ts

@@ -1,4 +1,5 @@
 import { OLLAMA_API_BASE_URL } from '$lib/constants';
+import { templatePrompt } from '$lib/utils';
 
 export const getOllamaUrls = async (token: string = '') => {
 	let error = null;
@@ -144,7 +145,7 @@ export const generateTitle = async (
 ) => {
 	let error = null;
 
-	template = template.replace(/{{prompt}}/g, prompt);
+	template = templatePrompt(template, prompt);
 
 	console.log(template);
 

+ 2 - 1
src/lib/apis/openai/index.ts

@@ -1,4 +1,5 @@
 import { OPENAI_API_BASE_URL } from '$lib/constants';
+import { templatePrompt } from '$lib/utils';
 
 export const getOpenAIUrls = async (token: string = '') => {
 	let error = null;
@@ -273,7 +274,7 @@ export const generateTitle = async (
 ) => {
 	let error = null;
 
-	template = template.replace(/{{prompt}}/g, prompt);
+	template = templatePrompt(template, prompt);
 
 	console.log(template);
 

+ 25 - 0
src/lib/utils/index.ts

@@ -467,3 +467,28 @@ export const blobToFile = (blob, fileName) => {
 	const file = new File([blob], fileName, { type: blob.type });
 	return file;
 };
+
+// templatePrompt 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 templatePrompt = (template, prompt) => {
+	template = template.replace(/{{prompt}}/g, prompt);
+
+	// Replace {{prompt:start:<length>}} with the first <length> characters of the prompt
+	const startMatch = template.match(/{{prompt:start:(\d+)}}/);
+	if (startMatch) {
+		const length = parseInt(startMatch[1]);
+		template = template.replace(startMatch[0], prompt.substring(0, length));
+	}
+
+	// Replace {{prompt:end:<length>}} with the last <length> characters of the prompt
+	const endMatch = template.match(/{{prompt:end:(\d+)}}/);
+	if (endMatch) {
+		const length = parseInt(endMatch[1]);
+		template = template.replace(endMatch[0], prompt.substring(prompt.length - length));
+	}
+
+	return template;
+};