Multiple prefix prompts
This commit is contained in:
parent
842c8c9631
commit
242be141a9
|
@ -146,8 +146,8 @@ export class ChatRequest {
|
||||||
const maxTokens = getModelMaxTokens(model)
|
const maxTokens = getModelMaxTokens(model)
|
||||||
|
|
||||||
const messagePayload = filtered.map((m, i) => { return { role: m.role, content: m.content } }) as Message[]
|
const messagePayload = filtered.map((m, i) => { return { role: m.role, content: m.content } }) as Message[]
|
||||||
// Inject hidden prompt if requested
|
// Inject hidden prompts if requested
|
||||||
if (!opts.summaryRequest) this.buildHiddenPromptPrefixMessage(messagePayload, true)
|
if (!opts.summaryRequest) this.buildHiddenPromptPrefixMessages(messagePayload, true)
|
||||||
|
|
||||||
const chatResponse = new ChatCompletionResponse(opts)
|
const chatResponse = new ChatCompletionResponse(opts)
|
||||||
const promptTokenCount = countPromptTokens(messagePayload, model)
|
const promptTokenCount = countPromptTokens(messagePayload, model)
|
||||||
|
@ -288,26 +288,35 @@ export class ChatRequest {
|
||||||
return this.chat.settings.model || defaultModel
|
return this.chat.settings.model || defaultModel
|
||||||
}
|
}
|
||||||
|
|
||||||
private buildHiddenPromptPrefixMessage (messages: Message[], insert:boolean = false): Message|null {
|
private buildHiddenPromptPrefixMessages (messages: Message[], insert:boolean = false): Message[] {
|
||||||
const chatSettings = this.chat.settings
|
const chatSettings = this.chat.settings
|
||||||
const hiddenPromptPrefix = mergeProfileFields(chatSettings, chatSettings.hiddenPromptPrefix).trim()
|
const hiddenPromptPrefix = mergeProfileFields(chatSettings, chatSettings.hiddenPromptPrefix).trim()
|
||||||
if (hiddenPromptPrefix && messages.length && messages[messages.length - 1].role === 'user') {
|
if (hiddenPromptPrefix && messages.length && messages[messages.length - 1].role === 'user') {
|
||||||
const message = { role: 'user', content: hiddenPromptPrefix } as Message
|
const results = hiddenPromptPrefix.split(/[\s\r\n]*::EOM::[\s\r\n]*/).reduce((a, m) => {
|
||||||
|
m = m.trim()
|
||||||
|
if (m.length) {
|
||||||
|
a.push({ role: a.length % 2 === 0 ? 'user' : 'assistant', content: m } as Message)
|
||||||
|
}
|
||||||
|
return a
|
||||||
|
}, [] as Message[])
|
||||||
if (insert) {
|
if (insert) {
|
||||||
messages.splice(messages.length - 1, 0, message)
|
results.forEach(m => { messages.splice(messages.length - 1, 0, m) })
|
||||||
}
|
}
|
||||||
return message
|
return results
|
||||||
}
|
}
|
||||||
return null
|
return []
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets an estimate of how many extra tokens will be added that won't be part of the visible messages
|
||||||
|
* @param filtered
|
||||||
|
*/
|
||||||
private getTokenCountPadding (filtered: Message[]): number {
|
private getTokenCountPadding (filtered: Message[]): number {
|
||||||
const hiddenPromptMessage = this.buildHiddenPromptPrefixMessage(filtered)
|
|
||||||
let result = 0
|
let result = 0
|
||||||
if (hiddenPromptMessage) {
|
// add cost of hiddenPromptPrefix
|
||||||
// add cost of hiddenPromptPrefix
|
result += this.buildHiddenPromptPrefixMessages(filtered)
|
||||||
result += countMessageTokens(hiddenPromptMessage, this.getModel())
|
.reduce((a, m) => a + countMessageTokens(m, this.getModel()), 0)
|
||||||
}
|
// more here eventually?
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue