mirror of
https://gitcode.com/JianFeeeee/ModelRouter.git
synced 2026-11-07 09:47:23 +00:00
fix(channels): Gemini 接入改私有 /v1internal: 动词路径 + 源端点声明式覆盖
两条线一起修:
1. Gemini 接入模型服务用错协议。Cloud Code 凭据**不能**打公开的
/v1beta/models/{model}:generateContent(参考 gemini.ts:78 明确走私有
/v1internal:generateContent;流式 /v1internal:streamGenerateContent?alt=sse)。
此前源注册沿用适配器的公开路径,凭据与端点不匹配。
2. syncAccountSource 支持平台声明 endpoint / endpoint_stream / headers 覆盖。
平台的 chat 端点常不是 base_url 的简单拼接(Gemini 私有动词、zcode 只有
一条 plan 路径),用声明式覆盖表达;内核只把它们当**不透明字符串**,
不引入任何厂商知识(守住内核零厂商名纪律)。
判据:逐平台比对 base_url+endpoint 与参考真值,11/11 一致。
This commit is contained in:
@ -492,6 +492,12 @@ local PLATFORMS = {
|
||||
hosts = { "accounts.google.com", "oauth2.googleapis.com", "cloudcode-pa.googleapis.com" },
|
||||
base_url = "https://cloudcode-pa.googleapis.com",
|
||||
adapter = "gemini",
|
||||
-- ⚠️ Cloud Code 凭据**不能**打公开的 /v1beta/models/{model}:generateContent;
|
||||
-- 参考 gemini.ts:78 明确走私有动词路径 /v1internal:generateContent
|
||||
-- (流式 /v1internal:streamGenerateContent?alt=sse)。用声明式 endpoint
|
||||
-- 覆盖,内核只当不透明字符串。
|
||||
endpoint = "/v1internal:generateContent",
|
||||
endpoint_stream = "/v1internal:streamGenerateContent?alt=sse",
|
||||
models = { "gemini-3.1-flash-lite-preview", "gemini-3.1-flash-preview" },
|
||||
},
|
||||
|
||||
@ -2923,16 +2929,21 @@ local function syncAccountSource(provider, accountId)
|
||||
end
|
||||
-- 重建:先 remove(容错:源可能不存在)再 add
|
||||
__llmsproxy_kernel.call("remove_source", { name = name })
|
||||
local r, aerr = __llmsproxy_kernel.call("add_source", {
|
||||
source = {
|
||||
name = name,
|
||||
base_url = plat.base_url,
|
||||
adapter = plat.adapter or "openai",
|
||||
api_key = tok,
|
||||
max_concurrent = 2,
|
||||
models = models,
|
||||
},
|
||||
})
|
||||
local src = {
|
||||
name = name,
|
||||
base_url = plat.base_url,
|
||||
adapter = plat.adapter or "openai",
|
||||
api_key = tok,
|
||||
max_concurrent = 2,
|
||||
models = models,
|
||||
}
|
||||
-- 平台的 chat 端点常与 base_url 不是简单拼接(Gemini 走私有
|
||||
-- /v1internal: 动词、zcode 只有一条 plan 路径)。声明式覆盖,内核只当
|
||||
-- 不透明字符串用 —— 不需要内核知道任何厂商知识。
|
||||
if plat.endpoint then src.endpoint = plat.endpoint end
|
||||
if plat.endpoint_stream then src.endpoint_stream = plat.endpoint_stream end
|
||||
if plat.headers_extra then src.headers = plat.headers_extra end
|
||||
local r, aerr = __llmsproxy_kernel.call("add_source", { source = src })
|
||||
if aerr then logEvent("接入源失败 " .. name .. ": " .. aerr)
|
||||
else logEvent("已同步源 " .. name .. "(" .. #models .. " 模型)") end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user