mirror of
https://gitee.com/mateos/mateclaw.git
synced 2026-09-15 03:55:09 +08:00
fix(embedding): use chatModel field for protocol routing instead of providerId matching (#170)
Closes #166 EmbeddingModelFactory used EmbeddingProtocol.fromProviderId() to pick the embedding protocol, which substring-matches 'dashscope' / 'qwen' / 'aliyun' in the providerId. The dashscope-compat provider carries 'dashscope' in its id but runs in OpenAI compatible mode (chatModel='OpenAIChatModel', baseUrl='https://dashscope.aliyuncs.com/compatible-mode/v1'). Routing it to DASHSCOPE_EMBEDDING made DashScopeApi build its native path against the compat base, producing 404s on every embedding call. Switch to the chatModel column instead — the same signal ModelProtocol .fromChatModel() uses for the chat path. chatModel='DashScopeChatModel' takes the native protocol; everything else (including dashscope-compat) takes OpenAI-compatible. EmbeddingProtocol.fromProviderId() is retained for reference but is no longer called; future callers should follow the chatModel pattern.
This commit is contained in:
parent
af3e68d271
commit
8e00613e69
@ -111,9 +111,16 @@ public class EmbeddingModelFactory {
|
|||||||
"Embedding provider '" + modelConfig.getProvider() + "' not found in mate_model_provider");
|
"Embedding provider '" + modelConfig.getProvider() + "' not found in mate_model_provider");
|
||||||
}
|
}
|
||||||
|
|
||||||
EmbeddingProtocol protocol = EmbeddingProtocol.fromProviderId(provider.getProviderId());
|
// Use chatModel column (same signal as ModelProtocol.fromChatModel) rather than
|
||||||
log.info("[EmbeddingFactory] Building embedding model: provider={}, model={}, protocol={}",
|
// providerId substring matching. dashscope-compat has "dashscope" in its id but
|
||||||
provider.getProviderId(), modelConfig.getModelName(), protocol);
|
// uses OpenAIChatModel + compatible-mode URL — routing it to DASHSCOPE_EMBEDDING
|
||||||
|
// causes DashScopeApi to construct a native path that returns 404 against the
|
||||||
|
// compat base URL.
|
||||||
|
EmbeddingProtocol protocol = "DashScopeChatModel".equals(provider.getChatModel())
|
||||||
|
? EmbeddingProtocol.DASHSCOPE_EMBEDDING
|
||||||
|
: EmbeddingProtocol.OPENAI_EMBEDDING;
|
||||||
|
log.info("[EmbeddingFactory] Building embedding model: provider={}, chatModel={}, model={}, protocol={}",
|
||||||
|
provider.getProviderId(), provider.getChatModel(), modelConfig.getModelName(), protocol);
|
||||||
|
|
||||||
return switch (protocol) {
|
return switch (protocol) {
|
||||||
case DASHSCOPE_EMBEDDING -> buildDashScope(provider, modelConfig);
|
case DASHSCOPE_EMBEDDING -> buildDashScope(provider, modelConfig);
|
||||||
|
|||||||
@ -10,7 +10,9 @@ package vip.mate.llm.model;
|
|||||||
* <li>OpenAI 兼容协议的 embedding 统一走 /v1/embeddings</li>
|
* <li>OpenAI 兼容协议的 embedding 统一走 /v1/embeddings</li>
|
||||||
* </ul>
|
* </ul>
|
||||||
* <p>
|
* <p>
|
||||||
* 通过 {@link #fromProviderId} 从 providerId 推断协议,新增 provider 时只需扩展这里。
|
* <b>注意</b>:{@link EmbeddingModelFactory} 现在优先通过 {@code chatModel} 列判断协议
|
||||||
|
* (与 {@link ModelProtocol#fromChatModel} 保持一致),{@link #fromProviderId} 已不再使用。
|
||||||
|
* 保留该方法仅作参考;不要在新代码中调用它。
|
||||||
*
|
*
|
||||||
* @author MateClaw Team
|
* @author MateClaw Team
|
||||||
*/
|
*/
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user