1
0
Fork 0

Fix prompt message duplication issue.

This commit is contained in:
Pabloader 2026-03-27 15:41:54 +00:00
parent 77e3983d5e
commit 9803512c0b
2 changed files with 20 additions and 7 deletions

View File

@ -92,10 +92,14 @@ export const ChatSidebar = () => {
const countTokens = async () => { const countTokens = async () => {
try { try {
const messages: LLM.ChatMessage[] = []; const messages: ChatMessage[] = [];
if (input.trim()) { if (input.trim()) {
messages.push({ role: 'user', content: input.trim() }); messages.push({
id: crypto.randomUUID(),
role: 'user',
content: input.trim(),
});
} }
const chatRequest = Prompt.compilePrompt(appStateRef.current, messages); const chatRequest = Prompt.compilePrompt(appStateRef.current, messages);

View File

@ -1,6 +1,6 @@
import LLM from "./llm"; import LLM from "./llm";
import Chapters from "./chapters"; import Chapters from "./chapters";
import { type AppState, CharacterRole } from "../contexts/state"; import { type AppState, CharacterRole, type ChatMessage } from "../contexts/state";
import { Tools } from "./tools"; import { Tools } from "./tools";
namespace Prompt { namespace Prompt {
@ -313,7 +313,7 @@ namespace Prompt {
return parts.join('\n\n'); return parts.join('\n\n');
} }
export function compilePrompt(state: AppState, newMessages: LLM.ChatMessage[] = []): LLM.ChatCompletionRequest | null { export function compilePrompt(state: AppState, newMessages: ChatMessage[] = []): LLM.ChatCompletionRequest | null {
const { currentStory, model, enableThinking } = state; const { currentStory, model, enableThinking } = state;
if (!currentStory || !model) { if (!currentStory || !model) {
@ -332,12 +332,21 @@ namespace Prompt {
storyTokenBudget = model.max_context - otherTokens; storyTokenBudget = model.max_context - otherTokens;
} }
const messages: LLM.ChatMessage[] = [ const messages: ChatMessage[] = [
{ role: 'system', content: formatSystemPrompt(state, storyTokenBudget) }, {
id: crypto.randomUUID(),
role: 'system',
content: formatSystemPrompt(state, storyTokenBudget),
},
...currentStory.chatMessages, ...currentStory.chatMessages,
]; ];
messages.push(...newMessages); const presentMessages = new Set(messages.map(m => m.id));
for (const newMessage of newMessages) {
if (!presentMessages.has(newMessage.id)) {
messages.push(newMessage);
}
}
return { return {
model: model.id, model: model.id,