SillyTavern/SillyTavern · error · Error

Connection Manager is not available

Error message

Connection Manager is not available

What it means

Thrown by ConnectionManagerRequestService.sendRequest() when 'connection-manager' is present in context.extensionSettings.disabledExtensions. The Connection Manager is a core extension that owns connection profiles; when disabled, profile-based requests cannot proceed because there is no profile source to read. This is an environment/extension-state guard, not a network error.

Source

Thrown at public/scripts/extensions/shared.js:424

     * @param {string} profileId
     * @param {string | (import('../custom-request.js').ChatCompletionMessage & {ignoreInstruct?: boolean})[]} prompt
     * @param {number} maxTokens
     * @param {Object} custom
     * @param {boolean?} [custom.stream=false]
     * @param {AbortSignal?} [custom.signal]
     * @param {boolean?} [custom.extractData=true]
     * @param {boolean?} [custom.includePreset=true]
     * @param {boolean?} [custom.includeInstruct=true]
     * @param {Partial<InstructSettings>?} [custom.instructSettings] Override instruct settings
     * @param {Record<string, any>} [overridePayload] - Override payload for the request
     * @returns {Promise<import('../custom-request.js').ExtractedData | (() => AsyncGenerator<import('../custom-request.js').StreamResponse>)>} If not streaming, returns extracted data; if streaming, returns a function that creates an AsyncGenerator
     */
    static async sendRequest(profileId, prompt, maxTokens, custom = this.defaultSendRequestParams, overridePayload = {}) {
        const { stream, signal, extractData, includePreset, includeInstruct, instructSettings } = { ...this.defaultSendRequestParams, ...custom };

        const context = SillyTavern.getContext();
        if (context.extensionSettings.disabledExtensions.includes('connection-manager')) {
            throw new Error('Connection Manager is not available');
        }

        const profile = this.getProfile(profileId);
        const selectedApiMap = this.validateProfile(profile);

        try {
            switch (selectedApiMap.selected) {
                case 'openai': {
                    if (!selectedApiMap.source) {
                        throw new Error(`API type ${selectedApiMap.selected} does not support chat completions`);
                    }

                    const proxyPreset = proxies.find((p) => p.name === profile.proxy);

                    const messages = Array.isArray(prompt) ? prompt : [{ role: 'user', content: prompt }];
                    return await context.ChatCompletionService.processRequest({
                        stream,
                        messages,

View on GitHub (pinned to 8172dcd0ee)

Solutions

  1. Re-enable the Connection Manager extension in User Settings > Extensions.
  2. Before calling sendRequest, guard with getSupportedProfiles() in a try/catch (it throws the same error) or check context.extensionSettings.disabledExtensions directly.
  3. If the user intentionally disabled it, fall back to direct ChatCompletion/TextCompletion service calls without a profile.

Example fix

// before
const data = await ConnectionManagerRequestService.sendRequest(profileId, prompt, 512);
// after
const ctx = SillyTavern.getContext();
if (ctx.extensionSettings.disabledExtensions.includes('connection-manager')) {
  toastr.warning('Enable the Connection Manager extension to use profiles.');
  return;
}
const data = await ConnectionManagerRequestService.sendRequest(profileId, prompt, 512);
Defensive patterns

Strategy: validation

Validate before calling

function isConnectionManagerEnabled() {
  const ctx = SillyTavern.getContext();
  return !ctx.extensionSettings.disabledExtensions.includes('connection-manager');
}
if (!isConnectionManagerEnabled()) {
  toastr.warning('Enable the Connection Manager extension to use profile-based requests.');
}

Type guard

function connectionManagerAvailable(): boolean {
  return !SillyTavern.getContext().extensionSettings.disabledExtensions.includes('connection-manager');
}

Try / catch

try { return await ConnectionManagerRequestService.sendRequest(id, prompt, 512); }
catch (e) {
  if (e.message === 'Connection Manager is not available') { toastr.warning('Enable Connection Manager.'); return null; }
  throw e;
}

Prevention

When it happens

Trigger: Calling ConnectionManagerRequestService.sendRequest(profileId, ...) while the user (or an admin policy) has disabled the Connection Manager extension. The check at line 423 fires before profile lookup.

Common situations: User disabled Connection Manager in Extensions panel; a migration or reset marked it disabled by default; conflict with a legacy connection extension that auto-disables it; calling the API from an extension that does not first check availability via getSupportedProfiles().

Related errors


AI-assisted analysis of SillyTavern/SillyTavern@8172dcd0ee (2026-08-13). Data as JSON: /api/errors/78254feb36919125. Report an issue: GitHub.