siyuan-note/siyuan · error

Conf.Language(31)

Error message

Conf.Language(31)

What it means

When the ChatGPT cloud endpoint responds with HTTP 401 Unauthorized, CloudChatGPT calls invalidUser() to clear the stale account and returns errors.New(Conf.Language(31)) — a localized 'please log in to the cloud server' message (i18n key 31) surfaced to the user as the error text.

Source

Thrown at kernel/model/cloud_service.go:77

		"content": msg,
	})
	payload["messages"] = messages

	requestResult := gulu.Ret.NewResult()
	request := httpclient.NewCloudRequest30s()
	resp, err := request.
		SetSuccessResult(requestResult).
		SetCookies(&http.Cookie{Name: "symphony", Value: user.UserToken}).
		SetBody(payload).
		Post(util.GetCloudServer() + "/apis/siyuan/ai/chatGPT")
	if err != nil {
		logging.LogErrorf("chat gpt failed: %s", err)
		err = ErrFailedToConnectCloudServer
		return
	}
	if http.StatusUnauthorized == resp.StatusCode {
		invalidUser()
		return "", true, errors.New(Conf.Language(31))
	}
	if http.StatusOK != resp.StatusCode {
		return "", true, ErrFailedToConnectCloudServer
	}
	if 0 != requestResult.Code {
		err = errors.New(requestResult.Msg)
		stop = true
		return
	}

	data := requestResult.Data.(map[string]any)
	choices := data["choices"].([]any)
	if 1 > len(choices) {
		stop = true
		return
	}
	choice := choices[0].(map[string]any)
	message := choice["message"].(map[string]any)

View on GitHub (pinned to 8641553a1f)

Solutions

  1. Re-login to the cloud account (Settings - Account - Log in) to obtain a fresh token
  2. Log out and back in to clear the invalidated user record (invalidUser() already cleared it in the kernel)
  3. If no cloud account is intended, disable AI features that require cloud auth

Example fix

// caller: detect auth failure and prompt re-login
_, _, err := model.CloudChatGPT(msg, ctx)
if err != nil && err.Error() == Conf.Language(31) {
    // token rejected: open the account panel for re-login
    openAccountPanel()
}
Defensive patterns

Strategy: try-catch

Validate before calling

// caller: only offer AI chat when a cloud user is present
if (!window.siyuan.user) { promptLogin(); return; }

Try / catch

_, _, err := model.CloudChatGPT(msg, ctx)
if err != nil && err.Error() == Conf.Language(31) {
    invalidUserFlow() // re-login prompt
}

Prevention

When it happens

Trigger: Calling the AI chat feature while the stored cloud user token is expired, revoked, or otherwise rejected by the cloud server, causing a 401 response.

Common situations: Cloud session expired after long inactivity; password changed on another device invalidating the token; server-side token revocation; user never logged in but a stale user record exists in config.

Related errors


AI-assisted analysis of siyuan-note/siyuan@8641553a1f (2026-09-11). Data as JSON: /api/errors/f691bf13cb5a299a. Report an issue: GitHub.