Fix prompt message duplication issue.
This commit is contained in:
parent
77e3983d5e
commit
9803512c0b
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue