fix: Distinguish between Embedding and Chat detection methods

This commit is contained in:
wizardchen
2025-09-08 21:03:22 +08:00
committed by lyingbug
parent 277607b92f
commit 46b3de2b24
2 changed files with 77 additions and 17 deletions

View File

@@ -282,7 +282,7 @@
name="refresh" name="refresh"
class="refresh-icon" class="refresh-icon"
:class="{ spinning: modelStatus.embedding.checking }" :class="{ spinning: modelStatus.embedding.checking }"
@click="checkRemoteModelStatus('embedding')" @click="checkEmbeddingModelStatus()"
/> />
</t-tooltip> </t-tooltip>
<t-icon <t-icon
@@ -1422,7 +1422,7 @@ const onModelNameInput = (type: 'llm' | 'embedding' | 'vlm') => {
if (type === 'llm' && formData.llm.source === 'remote' && formData.llm.baseUrl) { if (type === 'llm' && formData.llm.source === 'remote' && formData.llm.baseUrl) {
await checkRemoteModelStatus('llm'); await checkRemoteModelStatus('llm');
} else if (type === 'embedding' && formData.embedding.source === 'remote' && formData.embedding.baseUrl) { } else if (type === 'embedding' && formData.embedding.source === 'remote' && formData.embedding.baseUrl) {
await checkRemoteModelStatus('embedding'); await checkEmbeddingModelStatus();
} else if (type === 'vlm' && !isVlmOllama.value) { } else if (type === 'vlm' && !isVlmOllama.value) {
// VLM远程API校验可以在这里添加 // VLM远程API校验可以在这里添加
} }
@@ -1465,7 +1465,11 @@ const onRemoteConfigChange = async (type: 'llm' | 'embedding') => {
// 如果配置完整,检查模型 // 如果配置完整,检查模型
if (formData[type].modelName && formData[type].baseUrl) { if (formData[type].modelName && formData[type].baseUrl) {
await checkRemoteModelStatus(type); if (type === 'llm') {
await checkRemoteModelStatus(type);
} else if (type === 'embedding') {
await checkEmbeddingModelStatus();
}
} }
}; };
@@ -1492,13 +1496,17 @@ const onRemoteConfigInput = async (type: 'llm' | 'embedding') => {
form.value?.validate([`${type}.modelName`, `${type}.baseUrl`]); form.value?.validate([`${type}.modelName`, `${type}.baseUrl`]);
// 自动检查远程API模型状态 // 自动检查远程API模型状态
await checkRemoteModelStatus(type); if (type === 'llm') {
await checkRemoteModelStatus(type);
} else if (type === 'embedding') {
await checkEmbeddingModelStatus();
}
} }
}, 500); // 500ms防抖延迟 }, 500); // 500ms防抖延迟
}; };
// 检查远程模型 // 检查远程模型
const checkRemoteModelStatus = async (type: 'llm' | 'embedding') => { const checkRemoteModelStatus = async (type: 'llm') => {
if (!formData[type].modelName || !formData[type].baseUrl) { if (!formData[type].modelName || !formData[type].baseUrl) {
return; return;
} }
@@ -1752,15 +1760,8 @@ onMounted(async () => {
// 加载当前配置 // 加载当前配置
await loadCurrentConfig(); await loadCurrentConfig();
// 检查Ollama状态 // 总是检查Ollama状态,因为这是独立于具体配置的
const needOllamaCheck = await refreshOllamaSummary();
formData.llm.source === 'local' ||
formData.embedding.source === 'local' ||
(formData.multimodal.enabled && formData.multimodal.vlm.interfaceType === 'ollama');
if (needOllamaCheck) {
await refreshOllamaSummary();
}
// 检查已配置模型状态 // 检查已配置模型状态
await checkAllConfiguredModels(); await checkAllConfiguredModels();
@@ -2220,7 +2221,7 @@ const checkAllConfiguredModels = async () => {
if (formData.embedding.source === 'local' && formData.embedding.modelName && ollamaStatus.available) { if (formData.embedding.source === 'local' && formData.embedding.modelName && ollamaStatus.available) {
await checkAllOllamaModels(); await checkAllOllamaModels();
} else if (formData.embedding.source === 'remote' && formData.embedding.modelName && formData.embedding.baseUrl) { } else if (formData.embedding.source === 'remote' && formData.embedding.modelName && formData.embedding.baseUrl) {
await checkRemoteModelStatus('embedding'); await checkEmbeddingModelStatus();
} }
} }
@@ -2243,6 +2244,51 @@ const onDimensionInput = (event: any) => {
formData.embedding.dimension = Number(event.target.value); formData.embedding.dimension = Number(event.target.value);
}; };
// 检查Embedding模型状态
const checkEmbeddingModelStatus = async () => {
if (!formData.embedding.modelName) {
return;
}
try {
modelStatus.embedding.checking = true;
modelStatus.embedding.checked = false;
modelStatus.embedding.available = false;
modelStatus.embedding.message = '';
const result = await testEmbeddingModel({
source: formData.embedding.source as 'local' | 'remote',
modelName: formData.embedding.modelName,
baseUrl: formData.embedding.source === 'remote' ? formData.embedding.baseUrl : undefined,
apiKey: formData.embedding.apiKey || undefined,
dimension: formData.embedding.dimension || undefined,
});
modelStatus.embedding.checked = true;
modelStatus.embedding.available = result.available || false;
modelStatus.embedding.message = result.message || '';
// 如果检测到维度信息,自动更新
if (result.available && result.dimension && result.dimension > 0) {
formData.embedding.dimension = result.dimension;
}
// 触发表单验证
setTimeout(() => {
form.value?.validate(['embedding.modelName']);
}, 100);
} catch (error) {
console.error('检查Embedding模型失败:', error);
modelStatus.embedding.checked = true;
modelStatus.embedding.available = false;
const err = error as any;
modelStatus.embedding.message = (err && err.message) || '检查失败';
} finally {
modelStatus.embedding.checking = false;
}
};
// 检测并自动填写 Embedding 维度 // 检测并自动填写 Embedding 维度
const detectEmbeddingDimension = async () => { const detectEmbeddingDimension = async () => {
if (hasFiles.value) return; if (hasFiles.value) return;

View File

@@ -30,6 +30,7 @@ show_help() {
echo " -r, --restart 重新构建并重启指定容器" echo " -r, --restart 重新构建并重启指定容器"
echo " -l, --list 列出所有正在运行的容器" echo " -l, --list 列出所有正在运行的容器"
echo " -p, --pull 拉取最新的Docker镜像" echo " -p, --pull 拉取最新的Docker镜像"
echo " --no-pull 启动时不拉取镜像(默认会拉取)"
echo " -v, --version 显示版本信息" echo " -v, --version 显示版本信息"
exit 0 exit 0
} }
@@ -333,8 +334,16 @@ start_docker() {
# 启动基本服务 # 启动基本服务
log_info "启动核心服务容器..." log_info "启动核心服务容器..."
# 统一通过已检测到的 Compose 命令启动,添加 --pull always 确保使用最新镜像 # 统一通过已检测到的 Compose 命令启动
PLATFORM=$PLATFORM "$DOCKER_COMPOSE_BIN" $DOCKER_COMPOSE_SUBCMD up --build --pull always -d if [ "$NO_PULL" = true ]; then
# 不拉取镜像,使用本地镜像
log_info "跳过镜像拉取,使用本地镜像..."
PLATFORM=$PLATFORM "$DOCKER_COMPOSE_BIN" $DOCKER_COMPOSE_SUBCMD up --build -d
else
# 拉取最新镜像
log_info "拉取最新镜像..."
PLATFORM=$PLATFORM "$DOCKER_COMPOSE_BIN" $DOCKER_COMPOSE_SUBCMD up --build --pull always -d
fi
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
log_error "Docker容器启动失败" log_error "Docker容器启动失败"
return 1 return 1
@@ -564,6 +573,7 @@ CHECK_ENVIRONMENT=false
LIST_CONTAINERS=false LIST_CONTAINERS=false
RESTART_CONTAINER=false RESTART_CONTAINER=false
PULL_IMAGES=false PULL_IMAGES=false
NO_PULL=false
CONTAINER_NAME="" CONTAINER_NAME=""
# 没有参数时默认启动所有服务 # 没有参数时默认启动所有服务
@@ -591,6 +601,10 @@ while [ "$1" != "" ]; do
;; ;;
-p | --pull ) PULL_IMAGES=true -p | --pull ) PULL_IMAGES=true
;; ;;
--no-pull ) NO_PULL=true
START_OLLAMA=true
START_DOCKER=true
;;
-r | --restart ) RESTART_CONTAINER=true -r | --restart ) RESTART_CONTAINER=true
CONTAINER_NAME="$2" CONTAINER_NAME="$2"
shift shift