Skip to content

Commit e405c9a

Browse files
authored
Merge pull request #19 from STEVENTAN100/dev
fix:文生图模型可自行设置尺寸和推理步数
2 parents fb13ae2 + 7fefc04 commit e405c9a

3 files changed

Lines changed: 123 additions & 56 deletions

File tree

src/components/SettingsPanel.vue

Lines changed: 110 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,11 @@ const settings = reactive({
3333
streamResponse: settingsStore.streamResponse,
3434
topP: settingsStore.topP,
3535
topK: settingsStore.topK,
36-
frequencyPenalty: settingsStore.frequencyPenalty
36+
frequencyPenalty: settingsStore.frequencyPenalty,
37+
t2iConfig: {
38+
imageSize: settingsStore.t2iConfig.imageSize,
39+
inferenceSteps: settingsStore.t2iConfig.inferenceSteps
40+
}
3741
})
3842
3943
// 新增:控制添加/编辑模型对话框的显示
@@ -176,6 +180,31 @@ const getModelTagType = (type: string) => {
176180
}
177181
return typeMap[type] || 'info'
178182
}
183+
184+
// 图片尺寸选项
185+
const imageSizeOptions = [
186+
{ label: '1024x1024', value: '1024x1024' },
187+
{ label: '960x1280', value: '960x1280' },
188+
{ label: '768x1024', value: '768x1024' },
189+
{ label: '720x1440', value: '720x1440' },
190+
{ label: '720x1280', value: '720x1280' }
191+
]
192+
193+
// 添加当前选中模型的类型计算属性
194+
const currentModelType = computed(() => {
195+
const model = modelOptions.value.find(m => m.value === settings.model)
196+
return model?.type || 'plain'
197+
})
198+
199+
// 是否显示LLM/VLM相关设置
200+
const showLLMSettings = computed(() => {
201+
return ['plain', 'visual'].includes(currentModelType.value)
202+
})
203+
204+
// 是否显示文生图相关设置
205+
const showT2ISettings = computed(() => {
206+
return currentModelType.value === 'text2img'
207+
})
179208
</script>
180209

181210
<template>
@@ -234,64 +263,92 @@ const getModelTagType = (type: string) => {
234263
</div>
235264
</el-form-item>
236265

237-
<!-- Temperature设置 -->
238-
<el-form-item label="Temperature">
239-
<el-slider v-model="settings.temperature" :min="0" :max="1" :step="0.1" show-input />
240-
</el-form-item>
241-
242-
<!-- 最大Token设置 -->
243-
<el-form-item label="最大Token">
244-
<el-input-number v-model="settings.maxTokens" :min="1" :max="4096" :step="1" />
245-
</el-form-item>
246-
247266
<!-- API Key输入 -->
248267
<el-form-item label="API Key">
249268
<el-input v-model="settings.apiKey" type="password" show-password placeholder="请输入API Key" />
250269
</el-form-item>
251270

252-
<!-- 流式响应切换 -->
253-
<el-form-item>
254-
<template #label>
255-
流式响应
256-
<el-tooltip
257-
content="开启后将实时显示AI回复"
258-
placement="top"
259-
>
260-
<el-icon class="info-icon"><InfoFilled /></el-icon>
261-
</el-tooltip>
262-
</template>
263-
<el-switch v-model="settings.streamResponse" />
264-
</el-form-item>
265-
266-
<!-- Top P -->
267-
<el-form-item label="Top P">
268-
<el-slider v-model="settings.topP" :min="0" :max="1" :step="0.1" show-input />
269-
</el-form-item>
270-
271-
<!-- Top K -->
272-
<el-form-item label="Top K">
273-
<el-input-number v-model="settings.topK" :min="1" :max="100" :step="1" />
274-
</el-form-item>
275-
276-
<!-- Frequency Penalty -->
277-
<el-form-item>
278-
<template #label>
279-
重复惩罚
280-
<el-tooltip
281-
content="控制模型重复使用相同词语的倾向,值越大越不倾向重复"
282-
placement="top"
271+
<!-- LLM/VLM设置 -->
272+
<template v-if="showLLMSettings">
273+
<el-divider>模型参数</el-divider>
274+
<!-- Temperature设置-->
275+
<el-form-item label="Temperature">
276+
<el-slider v-model="settings.temperature" :min="0" :max="1" :step="0.1" show-input />
277+
</el-form-item>
278+
<!-- 最大Token设置 -->
279+
<el-form-item label="最大Token">
280+
<el-input-number v-model="settings.maxTokens" :min="1" :max="4096" :step="1" />
281+
</el-form-item>
282+
<!-- 流式响应 -->
283+
<el-form-item>
284+
<template #label>
285+
流式响应
286+
<el-tooltip content="开启将后将实时显示AI回复" placement="top">
287+
<el-icon class="info-icon"><InfoFilled /></el-icon>
288+
</el-tooltip>
289+
</template>
290+
<el-switch v-model="settings.streamResponse" />
291+
</el-form-item>
292+
<!-- Top P设置 -->
293+
<el-form-item label="Top P">
294+
<el-slider v-model="settings.topP" :min="0" :max="1" :step="0.1" show-input />
295+
</el-form-item>
296+
<!-- Top K设置 -->
297+
<el-form-item label="Top K">
298+
<el-input-number v-model="settings.topK" :min="1" :max="100" :step="1" />
299+
</el-form-item>
300+
<!-- Frequency Penalty -->
301+
<el-form-item>
302+
<template #label>
303+
重复惩罚
304+
<el-tooltip content="控制模型重复使用相同词语的倾向,值越大越不倾向重复" placement="top">
305+
<el-icon class="info-icon"><InfoFilled /></el-icon>
306+
</el-tooltip>
307+
</template>
308+
<el-slider
309+
v-model="settings.frequencyPenalty"
310+
:min="-2"
311+
:max="2"
312+
:step="0.1"
313+
show-input
314+
/>
315+
</el-form-item>
316+
</template>
317+
318+
<!-- 文生图设置 -->
319+
<template v-if="showT2ISettings">
320+
<el-divider>文生图模型参数</el-divider>
321+
322+
<el-form-item label="图片尺寸">
323+
<el-select
324+
v-model="settings.t2iConfig.imageSize"
325+
class="w-full"
283326
>
284-
<el-icon class="info-icon"><InfoFilled /></el-icon>
285-
</el-tooltip>
286-
</template>
287-
<el-slider
288-
v-model="settings.frequencyPenalty"
289-
:min="-2"
290-
:max="2"
291-
:step="0.1"
292-
show-input
293-
/>
294-
</el-form-item>
327+
<el-option
328+
v-for="option in imageSizeOptions"
329+
:key="option.value"
330+
:label="option.label"
331+
:value="option.value"
332+
/>
333+
</el-select>
334+
</el-form-item>
335+
336+
<el-form-item>
337+
<template #label>
338+
推理步数
339+
<el-tooltip content="控制生成图像的精细程度,值越大生成图像越精细" placement="top">
340+
<el-icon class="info-icon"><InfoFilled /></el-icon>
341+
</el-tooltip>
342+
</template>
343+
<el-slider
344+
v-model="settings.t2iConfig.inferenceSteps"
345+
:min="10"
346+
:max="50"
347+
:step="1"
348+
show-input
349+
/>
350+
</el-form-item>
351+
</template>
295352
</el-form>
296353

297354
<!-- 保存设置按钮 -->

src/stores/settings.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ interface SettingsState {
2121
topK: number
2222
customModels: ModelOption[]
2323
frequencyPenalty: number
24+
// 添加文生图配置
25+
t2iConfig: {
26+
imageSize: string
27+
inferenceSteps: number
28+
}
2429
}
2530

2631
// 定义一个名为 'settings' 的 store
@@ -36,7 +41,12 @@ export const useSettingsStore = defineStore('settings', {
3641
topP: 0.7,
3742
topK: 50,
3843
customModels: [],
39-
frequencyPenalty: 0
44+
frequencyPenalty: 0,
45+
// 初始化文生图配置
46+
t2iConfig: {
47+
imageSize: '1024x1024',
48+
inferenceSteps: 20
49+
}
4050
}),
4151

4252
// 定义 store 的动作

src/utils/api.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,8 +198,8 @@ class ChatAPI {
198198
const payload: ImageGenerationPayload = {
199199
model: settingsStore.model,
200200
prompt: prompt,
201-
image_size: '1024x1024',
202-
num_inference_steps: 20,
201+
image_size: settingsStore.t2iConfig.imageSize,
202+
num_inference_steps: settingsStore.t2iConfig.inferenceSteps,
203203
seed: Math.floor(Math.random() * 1000000)
204204
}
205205

0 commit comments

Comments
 (0)