|
@@ -19,7 +19,7 @@
|
|
|
} from '$lib/stores';
|
|
|
import { copyToClipboard, splitStream } from '$lib/utils';
|
|
|
|
|
|
- import { generateChatCompletion, cancelOllamaRequest, generateTitle } from '$lib/apis/ollama';
|
|
|
+ import { generateChatCompletion, cancelOllamaRequest } from '$lib/apis/ollama';
|
|
|
import {
|
|
|
addTagById,
|
|
|
createNewChat,
|
|
@@ -30,14 +30,14 @@
|
|
|
updateChatById
|
|
|
} from '$lib/apis/chats';
|
|
|
import { queryCollection, queryDoc } from '$lib/apis/rag';
|
|
|
- import { generateOpenAIChatCompletion } from '$lib/apis/openai';
|
|
|
+ import { generateOpenAIChatCompletion, generateTitle } from '$lib/apis/openai';
|
|
|
|
|
|
import MessageInput from '$lib/components/chat/MessageInput.svelte';
|
|
|
import Messages from '$lib/components/chat/Messages.svelte';
|
|
|
import ModelSelector from '$lib/components/chat/ModelSelector.svelte';
|
|
|
import Navbar from '$lib/components/layout/Navbar.svelte';
|
|
|
import { RAGTemplate } from '$lib/utils/rag';
|
|
|
- import { LITELLM_API_BASE_URL, OPENAI_API_BASE_URL } from '$lib/constants';
|
|
|
+ import { LITELLM_API_BASE_URL, OLLAMA_API_BASE_URL, OPENAI_API_BASE_URL } from '$lib/constants';
|
|
|
import { WEBUI_BASE_URL } from '$lib/constants';
|
|
|
|
|
|
const i18n = getContext('i18n');
|
|
@@ -511,7 +511,8 @@
|
|
|
|
|
|
if (messages.length == 2 && messages.at(1).content !== '') {
|
|
|
window.history.replaceState(history.state, '', `/c/${_chatId}`);
|
|
|
- await generateChatTitle(_chatId, userPrompt);
|
|
|
+ const _title = await generateChatTitle(userPrompt);
|
|
|
+ await setChatTitle(_chatId, _title);
|
|
|
}
|
|
|
};
|
|
|
|
|
@@ -696,11 +697,8 @@
|
|
|
if (messages.length == 2) {
|
|
|
window.history.replaceState(history.state, '', `/c/${_chatId}`);
|
|
|
|
|
|
- if ($settings?.titleAutoGenerateModel) {
|
|
|
- await generateChatTitle(_chatId, userPrompt);
|
|
|
- } else {
|
|
|
- await setChatTitle(_chatId, userPrompt);
|
|
|
- }
|
|
|
+ const _title = await generateChatTitle(userPrompt);
|
|
|
+ await setChatTitle(_chatId, _title);
|
|
|
}
|
|
|
};
|
|
|
|
|
@@ -754,23 +752,35 @@
|
|
|
}
|
|
|
};
|
|
|
|
|
|
- const generateChatTitle = async (_chatId, userPrompt) => {
|
|
|
- if ($settings.titleAutoGenerate ?? true) {
|
|
|
+ const generateChatTitle = async (userPrompt) => {
|
|
|
+ if ($settings?.title?.auto ?? true) {
|
|
|
+ const model = $models.find((model) => model.id === selectedModels[0]);
|
|
|
+
|
|
|
+ const titleModelId =
|
|
|
+ model?.external ?? false
|
|
|
+ ? $settings?.title?.modelExternal ?? selectedModels[0]
|
|
|
+ : $settings?.title?.model ?? selectedModels[0];
|
|
|
+ const titleModel = $models.find((model) => model.id === titleModelId);
|
|
|
+
|
|
|
+ console.log(titleModel);
|
|
|
const title = await generateTitle(
|
|
|
localStorage.token,
|
|
|
- $settings?.titleGenerationPrompt ??
|
|
|
+ $settings?.title?.prompt ??
|
|
|
$i18n.t(
|
|
|
"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':"
|
|
|
) + ' {{prompt}}',
|
|
|
- $settings?.titleAutoGenerateModel ?? selectedModels[0],
|
|
|
- userPrompt
|
|
|
+ titleModelId,
|
|
|
+ userPrompt,
|
|
|
+ titleModel?.external ?? false
|
|
|
+ ? titleModel.source === 'litellm'
|
|
|
+ ? `${LITELLM_API_BASE_URL}/v1`
|
|
|
+ : `${OPENAI_API_BASE_URL}`
|
|
|
+ : `${OLLAMA_API_BASE_URL}/v1`
|
|
|
);
|
|
|
|
|
|
- if (title) {
|
|
|
- await setChatTitle(_chatId, title);
|
|
|
- }
|
|
|
+ return title;
|
|
|
} else {
|
|
|
- await setChatTitle(_chatId, `${userPrompt}`);
|
|
|
+ return `${userPrompt}`;
|
|
|
}
|
|
|
};
|
|
|
|