fix(opencode): keep model switching runtime-hot
This commit is contained in:
@@ -511,6 +511,7 @@ function expectedUserModelProxyConfig(
|
||||
async function rebindLocalProxyHostApiTokenIfNeeded(
|
||||
expectedBaseUrl: string,
|
||||
markPending: () => void,
|
||||
runtimeAlreadyUsesCurrentHostApiToken: boolean,
|
||||
signal?: AbortSignal,
|
||||
): Promise<boolean> {
|
||||
const providerService = getProviderService();
|
||||
@@ -532,14 +533,31 @@ async function rebindLocalProxyHostApiTokenIfNeeded(
|
||||
return false;
|
||||
}
|
||||
|
||||
markPending();
|
||||
await providerService.updateAccount(
|
||||
NIANCODE_USER_MODEL_ACCOUNT_ID,
|
||||
account,
|
||||
currentHostApiToken,
|
||||
);
|
||||
signal?.throwIfAborted();
|
||||
return true;
|
||||
if (!runtimeAlreadyUsesCurrentHostApiToken) {
|
||||
markPending();
|
||||
}
|
||||
const markPendingOnAbort = runtimeAlreadyUsesCurrentHostApiToken
|
||||
? () => markPending()
|
||||
: undefined;
|
||||
if (markPendingOnAbort) {
|
||||
signal?.addEventListener('abort', markPendingOnAbort, { once: true });
|
||||
}
|
||||
try {
|
||||
await providerService.updateAccount(
|
||||
NIANCODE_USER_MODEL_ACCOUNT_ID,
|
||||
account,
|
||||
currentHostApiToken,
|
||||
);
|
||||
signal?.throwIfAborted();
|
||||
} catch (error) {
|
||||
markPending();
|
||||
throw error;
|
||||
} finally {
|
||||
if (markPendingOnAbort) {
|
||||
signal?.removeEventListener('abort', markPendingOnAbort);
|
||||
}
|
||||
}
|
||||
return !runtimeAlreadyUsesCurrentHostApiToken;
|
||||
}
|
||||
|
||||
async function runtimeUsesExpectedUserModelProxy(
|
||||
@@ -607,7 +625,12 @@ async function ensureRuntimeUserModelProxyConfig(
|
||||
try {
|
||||
if (
|
||||
expectedConfig.usesLocalProxy
|
||||
&& await rebindLocalProxyHostApiTokenIfNeeded(expectedConfig.baseUrl, markPending, signal)
|
||||
&& await rebindLocalProxyHostApiTokenIfNeeded(
|
||||
expectedConfig.baseUrl,
|
||||
markPending,
|
||||
ctx.opencodeManager.getRuntimeGenerationProvenance() === 'fresh',
|
||||
signal,
|
||||
)
|
||||
) {
|
||||
if (!allowRestart) {
|
||||
markPending();
|
||||
|
||||
Reference in New Issue
Block a user