fix(aihr): model test picks seed placeholder name and misses db config

前端测试对话发的是合并列表里 seed 占位行的模型名(gpt-4o-mini),后端
按该名查库落空即判未配置返回 seed fallback。后端:请求模型名不存在时
回退默认已启用 chat 配置,且运行参数就绪后以解析出的模型名调用供应商;
前端:优先选 enabled 且 configured 的库行作为当前 chat 模型。
This commit is contained in:
2026-07-03 21:31:03 +08:00
parent 8ead250025
commit be136dc9f9
2 changed files with 14 additions and 3 deletions
@@ -178,7 +178,8 @@ public class AihrModelSeedService {
public ChatResponse chat(ChatRequest request) { public ChatResponse chat(ChatRequest request) {
RuntimeConfig runtime = runtimeConfig(request == null ? null : request.model()); RuntimeConfig runtime = runtimeConfig(request == null ? null : request.model());
String prompt = request == null || isBlank(request.prompt()) ? "请给出物业管家处理漏水投诉的第一步。" : request.prompt(); String prompt = request == null || isBlank(request.prompt()) ? "请给出物业管家处理漏水投诉的第一步。" : request.prompt();
String modelName = request == null || isBlank(request.model()) ? runtime.modelName() : request.model(); // 运行参数已就绪时以解析出的模型名为准:请求可能带的是 seed 占位模型名(如 gpt-4o-mini),不能透传给供应商
String modelName = runtime.configured() || request == null || isBlank(request.model()) ? runtime.modelName() : request.model();
if (!runtime.configured()) { if (!runtime.configured()) {
return new ChatResponse( return new ChatResponse(
@@ -385,7 +386,12 @@ public class AihrModelSeedService {
} }
private RuntimeConfig runtimeConfig(String requestedModel) { private RuntimeConfig runtimeConfig(String requestedModel) {
return dbRuntimeConfig(requestedModel) Optional<RuntimeConfig> resolved = dbRuntimeConfig(requestedModel);
if (resolved.isEmpty() && !isBlank(requestedModel)) {
// 请求的模型名在库里不存在(如前端 seed 占位行),回退到默认已启用的 chat 配置
resolved = dbRuntimeConfig(null);
}
return resolved
.orElseGet(() -> new RuntimeConfig(DEFAULT_PROVIDER, fallback(requestedModel, DEFAULT_MODEL), null, null, false, "seed")); .orElseGet(() -> new RuntimeConfig(DEFAULT_PROVIDER, fallback(requestedModel, DEFAULT_MODEL), null, null, false, "seed"));
} }
+6 -1
View File
@@ -471,7 +471,12 @@ const filteredProviders = computed(() => {
const activeProvider = computed<ProviderView>( const activeProvider = computed<ProviderView>(
() => providers.value.find((item) => item.providerCode === selectedProviderCode.value) ?? providers.value[0] ?? seedProviders[0] () => providers.value.find((item) => item.providerCode === selectedProviderCode.value) ?? providers.value[0] ?? seedProviders[0]
); );
const activeChatModel = computed(() => modelRows.value.find((item) => item.category === 'chat' && item.enabled) ?? modelRows.value[0]); const activeChatModel = computed(
() =>
modelRows.value.find((item) => item.category === 'chat' && item.enabled && item.configured) ??
modelRows.value.find((item) => item.category === 'chat' && item.enabled) ??
modelRows.value[0]
);
const keyText = computed(() => { const keyText = computed(() => {
if (!activeProvider.value.configured) return '未配置'; if (!activeProvider.value.configured) return '未配置';
return showKey.value ? '已配置,接口不回传密钥' : 'sk-************'; return showKey.value ? '已配置,接口不回传密钥' : 'sk-************';