mirror of
https://github.com/Tencent/WeKnora.git
synced 2025-11-26 03:45:11 +08:00
fix: Distinguish between Embedding and Chat detection methods
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user