|
1 | 1 | import { fetchChatCompletion, fetchImageGeneration } from './api'
|
2 | 2 | import { parseStream } from './parser'
|
| 3 | +import type { Message } from '@/types/message' |
3 | 4 | import type { HandlerPayload, Provider } from '@/types/provider'
|
4 | 5 |
|
5 | 6 | export const handlePrompt: Provider['handlePrompt'] = async(payload, signal?: AbortSignal) => {
|
@@ -35,14 +36,35 @@ export const handleRapidPrompt: Provider['handleRapidPrompt'] = async(prompt, gl
|
35 | 36 | }
|
36 | 37 |
|
37 | 38 | const handleChatCompletion = async(payload: HandlerPayload, signal?: AbortSignal) => {
|
| 39 | + // An array to store the chat messages |
| 40 | + const messages: Message[] = [] |
| 41 | + |
| 42 | + let maxTokens = payload.globalSettings.maxTokens as number |
| 43 | + let messageHistorySize = payload.globalSettings.messageHistorySize as number |
| 44 | + |
| 45 | + // Iterate through the message history |
| 46 | + while (messageHistorySize > 0) { |
| 47 | + messageHistorySize-- |
| 48 | + // Get the last message from the payload |
| 49 | + const m = payload.messages.pop() |
| 50 | + if (m === undefined) |
| 51 | + break |
| 52 | + |
| 53 | + if (maxTokens - m.content.length < 0) |
| 54 | + break |
| 55 | + |
| 56 | + maxTokens -= m.content.length |
| 57 | + messages.unshift(m) |
| 58 | + } |
| 59 | + |
38 | 60 | const response = await fetchChatCompletion({
|
39 | 61 | apiKey: payload.globalSettings.apiKey as string,
|
40 | 62 | baseUrl: (payload.globalSettings.baseUrl as string).trim().replace(/\/$/, ''),
|
41 | 63 | body: {
|
| 64 | + messages, |
| 65 | + max_tokens: maxTokens, |
42 | 66 | model: payload.globalSettings.model as string,
|
43 |
| - messages: payload.messages, |
44 | 67 | temperature: payload.globalSettings.temperature as number,
|
45 |
| - max_tokens: payload.globalSettings.maxTokens as number, |
46 | 68 | top_p: payload.globalSettings.topP as number,
|
47 | 69 | stream: payload.globalSettings.stream as boolean ?? true,
|
48 | 70 | },
|
|
0 commit comments