From dd33dc1f9bb786f9996a27d0ae65517d4ec1b229 Mon Sep 17 00:00:00 2001 From: oyi77 Date: Thu, 2 Apr 2026 15:07:59 +0700 Subject: [PATCH] =?UTF-8?q?fix(cliproxyapi):=20address=20PR=20#915=20revie?= =?UTF-8?q?w=20=E2=80=94=20executor=20flexibility,=20fallback=20error=20lo?= =?UTF-8?q?gging?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Export resolveCliproxyapiBaseUrl, accept optional baseUrl in constructor - Log detailed error messages when CLIProxyAPI fallback also fails - Preserve and re-throw fallback errors instead of silently returning --- open-sse/executors/cliproxyapi.ts | 9 ++++++--- open-sse/handlers/chatCore.ts | 19 ++++++++++++++++--- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/open-sse/executors/cliproxyapi.ts b/open-sse/executors/cliproxyapi.ts index 6e87684168..77ba640d38 100644 --- a/open-sse/executors/cliproxyapi.ts +++ b/open-sse/executors/cliproxyapi.ts @@ -10,16 +10,19 @@ function resolveCliproxyapiBaseUrl(): string { return `http://${host}:${port}`; } +export { resolveCliproxyapiBaseUrl }; + export class CliproxyapiExecutor extends BaseExecutor { private readonly upstreamBaseUrl: string; - constructor() { + constructor(baseUrl?: string) { + const effectiveBase = baseUrl ?? resolveCliproxyapiBaseUrl(); super("cliproxyapi", { id: "cliproxyapi", - baseUrl: resolveCliproxyapiBaseUrl() + "/v1/chat/completions", + baseUrl: effectiveBase + "/v1/chat/completions", headers: { "Content-Type": "application/json" }, }); - this.upstreamBaseUrl = resolveCliproxyapiBaseUrl(); + this.upstreamBaseUrl = effectiveBase; } buildUrl(_model: string, _stream: boolean, _urlIndex = 0): string { diff --git a/open-sse/handlers/chatCore.ts b/open-sse/handlers/chatCore.ts index 1707f12cb3..b2b7f1bf6e 100644 --- a/open-sse/handlers/chatCore.ts +++ b/open-sse/handlers/chatCore.ts @@ -1066,12 +1066,25 @@ export async function handleChatCore({ "UPSTREAM_PROXY", `${prov} native failed (${result.response.status}), retrying via CLIProxyAPI` ); - return proxyExec.execute(input); + try { + return await proxyExec.execute(input); + } catch (proxyErr) { + const proxyMsg = proxyErr instanceof Error ? proxyErr.message : String(proxyErr); + log?.error?.("UPSTREAM_PROXY", `${prov} CLIProxyAPI fallback also failed: ${proxyMsg}`); + throw proxyErr; + } } return result; } catch (err) { - log?.info?.("UPSTREAM_PROXY", `${prov} native error, retrying via CLIProxyAPI`); - return proxyExec.execute(input); + const errMsg = err instanceof Error ? err.message : String(err); + log?.info?.("UPSTREAM_PROXY", `${prov} native error (${errMsg}), retrying via CLIProxyAPI`); + try { + return await proxyExec.execute(input); + } catch (proxyErr) { + const proxyMsg = proxyErr instanceof Error ? proxyErr.message : String(proxyErr); + log?.error?.("UPSTREAM_PROXY", `${prov} CLIProxyAPI fallback also failed: ${proxyMsg}`); + throw proxyErr; + } } }; return wrapper;