Skip to content

Commit 796d731

Browse files
author
Kerwin
committed
feat: 添加自定义 temperature 和 top_p (#1260)
* 在设置的高级面板里自定义temperature和top_p * change default temperature from 0.8 to 0.5 * pref: 检查代码,增加仅 api 的接口判断 * chore: 锁定 pnpm-lock.yaml
1 parent 3c9a92e commit 796d731

File tree

11 files changed

+75
-14
lines changed

11 files changed

+75
-14
lines changed

service/src/chatgpt/index.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,17 @@ export async function initApi() {
8989
}
9090

9191
async function chatReplyProcess(options: RequestOptions) {
92-
const { message, lastContext, process, systemMessage } = options
92+
const config = await getCacheConfig()
93+
const model = isNotEmptyString(config.apiModel) ? config.apiModel : 'gpt-3.5-turbo'
94+
const { message, lastContext, process, systemMessage, temperature, top_p } = options
9395
try {
9496
const timeoutMs = (await getCacheConfig()).timeoutMs
9597
let options: SendMessageOptions = { timeoutMs }
9698

9799
if (apiModel === 'ChatGPTAPI') {
98100
if (isNotEmptyString(systemMessage))
99101
options.systemMessage = systemMessage
102+
options.completionParams = { model, temperature, top_p }
100103
}
101104

102105
if (lastContext != null) {

service/src/chatgpt/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ export interface RequestOptions {
55
lastContext?: { conversationId?: string; parentMessageId?: string }
66
process?: (chat: ChatMessage) => void
77
systemMessage?: string
8+
temperature?: number
9+
top_p?: number
810
}
911

1012
export interface BalanceResponse {

service/src/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ router.post('/chat-process', [auth, limiter], async (req, res) => {
272272
res.setHeader('Content-type', 'application/octet-stream')
273273

274274
try {
275-
const { roomId, uuid, regenerate, prompt, options = {}, systemMessage } = req.body as RequestProps
275+
const { roomId, uuid, regenerate, prompt, options = {}, systemMessage, temperature, top_p } = req.body as RequestProps
276276
const message = regenerate
277277
? await getChat(roomId, uuid)
278278
: await insertChat(uuid, prompt, roomId, options as ChatOptions)
@@ -297,6 +297,8 @@ router.post('/chat-process', [auth, limiter], async (req, res) => {
297297
firstChunk = false
298298
},
299299
systemMessage,
300+
temperature,
301+
top_p,
300302
})
301303
if (result.status === 'Success') {
302304
if (regenerate && message.options.messageId) {

service/src/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ export interface RequestProps {
77
prompt: string
88
options?: ChatContext
99
systemMessage: string
10+
temperature?: number
11+
top_p?: number
1012
}
1113

1214
export interface ChatContext {

src/api/index.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { AxiosProgressEvent, GenericAbortSignal } from 'axios'
22
import { get, post } from '@/utils/request'
33
import type { ConfigState, MailConfig, SiteConfig } from '@/components/common/Setting/model'
4-
import { useSettingStore } from '@/store'
4+
import { useAuthStore, useSettingStore } from '@/store'
55

66
export function fetchChatAPI<T = any>(
77
prompt: string,
@@ -32,10 +32,28 @@ export function fetchChatAPIProcess<T = any>(
3232
onDownloadProgress?: (progressEvent: AxiosProgressEvent) => void },
3333
) {
3434
const settingStore = useSettingStore()
35+
const authStore = useAuthStore()
36+
37+
let data: Record<string, any> = {
38+
roomId: params.roomId,
39+
uuid: params.uuid,
40+
regenerate: params.regenerate || false,
41+
prompt: params.prompt,
42+
options: params.options,
43+
}
44+
45+
if (authStore.isChatGPTAPI) {
46+
data = {
47+
...data,
48+
systemMessage: settingStore.systemMessage,
49+
temperature: settingStore.temperature,
50+
top_p: settingStore.top_p,
51+
}
52+
}
3553

3654
return post<T>({
3755
url: '/chat-process',
38-
data: { roomId: params.roomId, uuid: params.uuid, regenerate: params.regenerate || false, prompt: params.prompt, options: params.options, systemMessage: settingStore.systemMessage },
56+
data,
3957
signal: params.signal,
4058
onDownloadProgress: params.onDownloadProgress,
4159
})

src/components/common/Setting/Advanced.vue

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<script lang="ts" setup>
22
import { ref } from 'vue'
3-
import { NButton, NInput, useMessage } from 'naive-ui'
3+
import { NButton, NInput, NSlider, useMessage } from 'naive-ui'
44
import { useSettingStore } from '@/store'
55
import type { SettingsState } from '@/store/modules/settings/helper'
66
import { t } from '@/locales'
@@ -11,6 +11,10 @@ const ms = useMessage()
1111
1212
const systemMessage = ref(settingStore.systemMessage ?? '')
1313
14+
const temperature = ref(settingStore.temperature ?? 0.5)
15+
16+
const top_p = ref(settingStore.top_p ?? 1)
17+
1418
function updateSettings(options: Partial<SettingsState>) {
1519
settingStore.updateSetting(options)
1620
ms.success(t('common.success'))
@@ -27,7 +31,7 @@ function handleReset() {
2731
<div class="p-4 space-y-5 min-h-[200px]">
2832
<div class="space-y-6">
2933
<div class="flex items-center space-x-4">
30-
<span class="flex-shrink-0 w-[100px]">{{ $t('setting.role') }}</span>
34+
<span class="flex-shrink-0 w-[120px]">{{ $t('setting.role') }}</span>
3135
<div class="flex-1">
3236
<NInput v-model:value="systemMessage" type="textarea" :autosize="{ minRows: 1, maxRows: 4 }" />
3337
</div>
@@ -36,7 +40,27 @@ function handleReset() {
3640
</NButton>
3741
</div>
3842
<div class="flex items-center space-x-4">
39-
<span class="flex-shrink-0 w-[100px]">&nbsp;</span>
43+
<span class="flex-shrink-0 w-[120px]">{{ $t('setting.temperature') }} </span>
44+
<div class="flex-1">
45+
<NSlider v-model:value="temperature" :max="1" :min="0" :step="0.1" />
46+
</div>
47+
<span>{{ temperature }}</span>
48+
<NButton size="tiny" text type="primary" @click="updateSettings({ temperature })">
49+
{{ $t('common.save') }}
50+
</NButton>
51+
</div>
52+
<div class="flex items-center space-x-4">
53+
<span class="flex-shrink-0 w-[120px]">{{ $t('setting.top_p') }} </span>
54+
<div class="flex-1">
55+
<NSlider v-model:value="top_p" :max="1" :min="0" :step="0.1" />
56+
</div>
57+
<span>{{ top_p }}</span>
58+
<NButton size="tiny" text type="primary" @click="updateSettings({ top_p })">
59+
{{ $t('common.save') }}
60+
</NButton>
61+
</div>
62+
<div class="flex items-center space-x-4">
63+
<span class="flex-shrink-0 w-[120px]">&nbsp;</span>
4064
<NButton size="small" @click="handleReset">
4165
{{ $t('common.reset') }}
4266
</NButton>

src/locales/en-US.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ export default {
7171
avatarLink: 'Avatar Link',
7272
name: 'Name',
7373
description: 'Description',
74+
temperature: 'Temperature',
75+
top_p: 'Top_p',
7476
saveUserInfo: 'Save User Info',
7577
role: 'Role',
7678
chatHistory: 'ChatHistory',

src/locales/zh-CN.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,10 @@ export default {
7171
avatarLink: '头像链接',
7272
name: '名称',
7373
description: '描述',
74-
saveUserInfo: '保存用户信息',
7574
role: '角色设定',
75+
temperature: 'Temperature',
76+
saveUserInfo: '保存用户信息',
77+
top_p: 'Top_p',
7678
chatHistory: '聊天记录',
7779
theme: '主题',
7880
language: '语言',

src/locales/zh-TW.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,10 @@ export default {
7171
avatarLink: '頭貼連結',
7272
name: '名稱',
7373
description: '描述',
74-
saveUserInfo: '保存用户資訊',
7574
role: '角色設定',
75+
temperature: 'Temperature',
76+
top_p: 'Top_p',
77+
saveUserInfo: '保存用户資訊',
7678
chatHistory: '紀錄',
7779
theme: '主題',
7880
language: '語言',

src/store/modules/settings/helper.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,15 @@ const LOCAL_NAME = 'settingsStorage'
44

55
export interface SettingsState {
66
systemMessage: string
7+
temperature: number
8+
top_p: number
79
}
810

911
export function defaultSetting(): SettingsState {
1012
return {
1113
systemMessage: 'You are ChatGPT, a large language model trained by OpenAI. Follow the user\'s instructions carefully. Respond using markdown.',
14+
temperature: 0.8,
15+
top_p: 1,
1216
}
1317
}
1418

0 commit comments

Comments
 (0)