优化: 供应商级采样温度覆盖配置
受限模型(经路由透传)仅接受特定 temperature 其它值 400; provider config JSON 带 temperature 字段则覆盖默认,未配置走 0.7,设置页可编辑。
This commit is contained in:
@@ -101,6 +101,12 @@
|
||||
Gemini 2.5→3.5 等),提示用户点「测试连接」拉真实模型列表覆盖,降低踩过时默认值的困惑。 -->
|
||||
<div class="form-field-hint">{{ $t('settings.defaultModelHint') }}</div>
|
||||
</div>
|
||||
<!-- 供应商级采样温度覆盖:部分受限模型(如 Kimi 系)仅接受 temperature=1,留空走默认 0.7 -->
|
||||
<div class="form-field">
|
||||
<label class="form-label">{{ $t('settings.labelSamplingTemp') }}</label>
|
||||
<input type="number" v-model.number="providerForm.temperature" class="setting-input"
|
||||
:placeholder="$t('settings.phSamplingTemp')" step="0.1" min="0" max="2" />
|
||||
</div>
|
||||
<!-- P0-2: 保存失败持久错误横幅(常驻表单内,非自隐 toast)。
|
||||
含分类建议:keyring/迁移失败 → 查系统钥匙串权限;其它 → 通用重试。
|
||||
用户看到错误同时表单保持编辑态,改完点保存即可重试。 -->
|
||||
@@ -221,6 +227,8 @@ const providerForm = reactive({
|
||||
baseUrl: '',
|
||||
apiKey: '',
|
||||
defaultModel: '',
|
||||
// 供应商级采样温度覆盖(null=未配置,保存不带该参,主链路走默认 0.7;清空输入可能残留 '' ,保存时防御过滤)
|
||||
temperature: null as number | null,
|
||||
// 项 D:厂商预设下拉当前值(__custom=自定义;命中预设 id 时仅作展示与回填源头,
|
||||
// 实际字段值由 onPresetChange 写入;用户手改任一字段后 presetId 不自动复位,
|
||||
// 避免编辑态抖动,提交时也不读 presetId —— 以表单实际字段值为准)。
|
||||
@@ -286,6 +294,7 @@ function formBusinessSnapshot(): string {
|
||||
baseUrl: providerForm.baseUrl,
|
||||
apiKey: providerForm.apiKey,
|
||||
defaultModel: providerForm.defaultModel,
|
||||
temperature: providerForm.temperature,
|
||||
models: providerForm.models.map(m => ({
|
||||
model_id: m.model_id,
|
||||
enabled: m.enabled,
|
||||
@@ -385,6 +394,16 @@ function openProviderForm(p?: AiProviderConfig) {
|
||||
providerForm.apiKey = '' // 编辑不回填 api_key(list 返回 mask,留空=不改,FR-S1)
|
||||
providerForm.defaultModel = p.default_model
|
||||
providerForm.providerType = p.provider_type || 'openai_compat'
|
||||
// 从 config JSON 解析采样温度回显(config 可能为 null/非法 JSON,防御处理兜底 null)
|
||||
providerForm.temperature = (() => {
|
||||
try {
|
||||
const cfg = p.config ? JSON.parse(p.config) : null
|
||||
const tv = cfg?.temperature
|
||||
return typeof tv === 'number' && Number.isFinite(tv) ? tv : null
|
||||
} catch {
|
||||
return null
|
||||
}
|
||||
})()
|
||||
// 项 D:编辑态不反推预设(避免用户已手改 baseUrl/model 却被下拉误标成某预设误导);
|
||||
// 统一标"自定义",下拉仅作新建快捷填充入口。
|
||||
providerForm.presetId = CUSTOM_PRESET_ID
|
||||
@@ -399,6 +418,7 @@ function openProviderForm(p?: AiProviderConfig) {
|
||||
providerForm.defaultModel = ''
|
||||
providerForm.presetId = CUSTOM_PRESET_ID
|
||||
providerForm.models = []
|
||||
providerForm.temperature = null
|
||||
}
|
||||
providerForm.fetching = false
|
||||
providerForm.saveError = null // 重开表单清旧错误横幅
|
||||
@@ -525,6 +545,11 @@ async function saveProvider() {
|
||||
apiKey: providerForm.apiKey,
|
||||
defaultModel: providerForm.defaultModel,
|
||||
modelConfigs: providerForm.models,
|
||||
// 采样温度非空且为有效数字才带(清空输入 v-model.number 可能残留 ''/NaN,不过滤会污染后端 config)
|
||||
temperatureOverride:
|
||||
typeof providerForm.temperature === 'number' && Number.isFinite(providerForm.temperature)
|
||||
? providerForm.temperature
|
||||
: undefined,
|
||||
})
|
||||
// 成功明确反馈——清错误横幅 + 关表单 + 绿色「已保存」toast
|
||||
providerForm.saveError = null
|
||||
|
||||
Reference in New Issue
Block a user