Bug Description
electron/embedding.ts 中 embedOpenAI 的 URL 构造逻辑在 Rolldown 打包后丢失了 /v1 路径前缀,导致 Ollama 本地部署的 Embedding 始终返回 404。
Root Cause
源码 (electron/embedding.ts:22-28) — 有正确的条件分支:
const base = model.baseUrl.replace(/\/$/, '')
let url: string
if (base.endsWith('/embeddings')) {
url = base
} else if (/\/v\d+$/.test(base)) {
url = `${base}/embeddings`
} else {
url = `${base}/v1/embeddings`
}
编译后 (dist-electron/embedding-CzAckLI9.js:9) — 分支被优化掉:
r = t.baseUrl.replace(/\/$/, "") + "/embeddings"
由于 baseUrl 在 Ollama 预设中是 http://localhost:11434(不以 /embeddings 结尾,不匹配 /v\d+$/),正确路径应为 http://localhost:11434/v1/embeddings,但编译后变成了 http://localhost:11434/embeddings → 404。
Reproduce
- Ollama 运行
qwen3-embedding:8b 或 bge-m3
- Vela 设置 → 向量模型 → Ollama → 测试连接
- 报错:
OpenAI Embedding 调用失败 (404): ...
Ollama server log:
[GIN] ... | 404 | POST "/embeddings"
Environment
- Vela v0.1.0
- Ollama 0.18.3
- Windows 11
Workaround
将 API 地址设为 http://localhost:11434/v1(末尾带 /v1),编译后代码会拼接 /embeddings 得到正确路径 /v1/embeddings。
Suggested Fix
确保 Rolldown/esbuild 不会把条件分支优化掉,或者换一种写法避免 bundler 误优化,例如:
const url = base.endsWith('/embeddings')
? base
: `${base}/v1/embeddings`
但更好的做法是:不要对打包器的行为做假设,直接保证 baseUrl 在 Ollama 预设中带 /v1 后缀,或者优先检查 baseUrl 是否已经是完整路径。
Bug Description
electron/embedding.ts中embedOpenAI的 URL 构造逻辑在 Rolldown 打包后丢失了/v1路径前缀,导致 Ollama 本地部署的 Embedding 始终返回 404。Root Cause
源码 (
electron/embedding.ts:22-28) — 有正确的条件分支:编译后 (
dist-electron/embedding-CzAckLI9.js:9) — 分支被优化掉:由于
baseUrl在 Ollama 预设中是http://localhost:11434(不以/embeddings结尾,不匹配/v\d+$/),正确路径应为http://localhost:11434/v1/embeddings,但编译后变成了http://localhost:11434/embeddings→ 404。Reproduce
qwen3-embedding:8b或bge-m3OpenAI Embedding 调用失败 (404): ...Ollama server log:
Environment
Workaround
将 API 地址设为
http://localhost:11434/v1(末尾带/v1),编译后代码会拼接/embeddings得到正确路径/v1/embeddings。Suggested Fix
确保 Rolldown/esbuild 不会把条件分支优化掉,或者换一种写法避免 bundler 误优化,例如:
但更好的做法是:不要对打包器的行为做假设,直接保证
baseUrl在 Ollama 预设中带/v1后缀,或者优先检查 baseUrl 是否已经是完整路径。