continuedev/continue · error · Error

Relace provider does not support non-streaming completion.

Error message

Relace provider does not support non-streaming completion.

What it means

Relace is an editing/FIM-only provider; its adapter explicitly rejects legacy non-streaming text completions with this error rather than silently failing.

Source

Thrown at packages/openai-adapters/src/apis/Relace.ts:151

      content: mergedCode,
      model: body.model,
    });

    yield usageChatChunk({
      model: body.model,
      usage: {
        prompt_tokens: result.usage.prompt_tokens || 0,
        completion_tokens: result.usage.completion_tokens || 0,
        total_tokens: result.usage.total_tokens,
      },
    });
  }

  completionNonStream(
    body: CompletionCreateParamsNonStreaming,
    signal: AbortSignal,
  ): Promise<Completion> {
    throw new Error(
      "Relace provider does not support non-streaming completion.",
    );
  }
  completionStream(
    body: CompletionCreateParamsStreaming,
    signal: AbortSignal,
  ): AsyncGenerator<Completion> {
    throw new Error("Relace provider does not support streaming completion.");
  }
  fimStream(
    body: FimCreateParamsStreaming,
    signal: AbortSignal,
  ): AsyncGenerator<ChatCompletionChunk> {
    throw new Error(
      "Relace provider does not support streaming FIM completion.",
    );
  }
  embed(body: EmbeddingCreateParams): Promise<CreateEmbeddingResponse> {

View on GitHub (pinned to 5522c6f44c)

Solutions

  1. Use chatCompletionNonStream / chatCompletionStream (the edit API) instead of legacy completions
  2. Route legacy completion traffic to an OpenAI-compatible adapter
  3. Catch this error and fall back to a chat-completion-shaped request
Defensive patterns

Strategy: fallback

Validate before calling

if (provider === 'relace') throw new Error('Relace has no legacy completions; use chatCompletionNonStream');

Type guard

const supportsLegacyCompletion = (p: string) => p !== 'relace';

Try / catch

try { return await api.completionNonStream(body); } catch (e) { if (e.message.includes('does not support non-streaming completion')) return await api.chatCompletionNonStream(toChatParams(body)); throw e; }

Prevention

When it happens

Trigger: Calling completionNonStream() on a Relace adapter with CompletionCreateParamsNonStreaming.

Common situations: Generic completion dispatch code that tries non-streaming first; older codebases using /v1/completions-style calls routed to Relace.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of continuedev/continue@5522c6f44c (2026-08-27). Data as JSON: /api/errors/dbb306b284eedf6f. Report an issue: GitHub.