feat(chat): add configurable streaming output

This commit is contained in:
2026-07-17 13:34:27 +08:00
parent f7076569a7
commit 13fed0467a
11 changed files with 172 additions and 24 deletions

View File

@@ -50,6 +50,7 @@ const runtimeForm = reactive({
presencePenalty: null as number | null,
frequencyPenalty: null as number | null,
maxToken: 8192 as number | null,
streamEnabled: 1,
});
const promptDirty = computed(() => promptContent.value !== savedPromptContent.value);
@@ -104,6 +105,7 @@ function applyRuntimeConfig(value: AgentRuntimeConfig) {
presencePenalty: value.presencePenalty,
frequencyPenalty: value.frequencyPenalty,
maxToken: value.maxToken,
streamEnabled: value.streamEnabled,
});
}
@@ -132,6 +134,7 @@ async function saveRuntimeConfig() {
presencePenalty: runtimeForm.presencePenalty,
frequencyPenalty: runtimeForm.frequencyPenalty,
maxToken: runtimeForm.maxToken,
streamEnabled: runtimeForm.streamEnabled,
});
applyRuntimeConfig(saved);
const model = models.value.find((item) => item.id === saved.modelId);
@@ -368,6 +371,21 @@ function errorMessage(error: unknown, fallback: string) {
v-model:max-token="runtimeForm.maxToken"
:disabled="!runtimeConfig?.modelId"
/>
<el-form-item class="agent-stream-setting">
<div class="agent-stream-setting-copy">
<strong>用户端流式输出</strong>
<span>开启后回答正文会边生成边展示关闭后等待模型完成再一次性显示完整回答</span>
</div>
<el-switch
v-model="runtimeForm.streamEnabled"
:active-value="1"
:inactive-value="0"
active-text="开启"
inactive-text="关闭"
inline-prompt
:disabled="!runtimeConfig?.modelId"
/>
</el-form-item>
</section>
</el-form>
</el-tab-pane>

View File

@@ -1017,6 +1017,46 @@ textarea {
font-size: 12px;
}
.agent-stream-setting {
margin: 16px 0 0;
padding: 14px 16px;
border: 1px solid #dce7e3;
border-radius: 8px;
background: #ffffff;
}
.agent-stream-setting > .el-form-item__content {
display: flex;
align-items: center;
justify-content: space-between;
gap: 20px;
}
.agent-stream-setting-copy {
display: grid;
gap: 4px;
min-width: 0;
}
.agent-stream-setting-copy strong {
color: #263832;
font-size: 14px;
}
.agent-stream-setting-copy span {
color: #667a73;
font-size: 12px;
line-height: 1.6;
}
@media (max-width: 680px) {
.agent-stream-setting > .el-form-item__content {
align-items: flex-start;
flex-direction: column;
gap: 12px;
}
}
.agent-parameter-label {
display: inline-flex;
align-items: center;

View File

@@ -137,6 +137,7 @@ export interface AgentGenerationConfig {
presencePenalty: number | null;
frequencyPenalty: number | null;
maxToken: number;
streamEnabled: number;
}
export interface AgentRuntimeConfig extends AgentGenerationConfig {