Skip to content

fix: Ollama Embedding URL missing /v1 prefix after build #19

Description

@SHI-mo-down

Bug Description

electron/embedding.tsembedOpenAI 的 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

  1. Ollama 运行 qwen3-embedding:8bbge-m3
  2. Vela 设置 → 向量模型 → Ollama → 测试连接
  3. 报错: 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 是否已经是完整路径。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions