continuedev/continue · error · Error
AI SDK provider does not support legacy completions API. Use
Error message
AI SDK provider does not support legacy completions API. Use chat completions instead.
What it means
The AiSdk adapter intentionally does not implement the legacy /v1/completions text-completion API; calling completionNonStream always throws telling you to use chat completions.
Source
Thrown at packages/openai-adapters/src/apis/AiSdk.ts:242
topP: body.top_p ?? undefined,
stopSequences: body.stop
? Array.isArray(body.stop)
? body.stop
: [body.stop]
: undefined,
tools: vercelTools,
toolChoice: convertToolChoiceToVercel(body.tool_choice),
abortSignal: signal,
});
yield* convertVercelStream(result.fullStream as any, { model: modelId });
}
async completionNonStream(
_body: CompletionCreateParamsNonStreaming,
_signal: AbortSignal,
): Promise<Completion> {
throw new Error(
"AI SDK provider does not support legacy completions API. Use chat completions instead.",
);
}
async *completionStream(
_body: CompletionCreateParamsStreaming,
_signal: AbortSignal,
): AsyncGenerator<Completion> {
throw new Error(
"AI SDK provider does not support legacy completions API. Use chat completions instead.",
);
}
async *fimStream(
_body: FimCreateParamsStreaming,
_signal: AbortSignal,
): AsyncGenerator<ChatCompletionChunk> {
throw new Error(View on GitHub (pinned to 5522c6f44c)
Solutions
- Switch the call to chatCompletionNonStream/chatCompletionStream with a messages array
- Use a different provider adapter (e.g. native OpenAI) if legacy completions are required
- Update tooling to send chat-format requests
Example fix
// before
await llm.completionNonStream({ model, prompt: 'Hello' }, signal);
// after
await llm.chatCompletionNonStream({ model, messages: [{ role: 'user', content: 'Hello' }] }, signal); Defensive patterns
Strategy: fallback
Validate before calling
if (llm instanceof AiSdk) { useChatCompletions(); } // never call completion* on AiSdk Type guard
function supportsLegacyCompletions(llm: unknown): boolean { return !(llm instanceof AiSdk); } Try / catch
try { await llm.completionNonStream(body, signal); } catch (e) { if (/legacy completions/.test(e.message)) { await llm.chatCompletionNonStream({ model: body.model, messages: [{ role: 'user', content: body.prompt }] }, signal); } else throw e; } Prevention
- Migrate all prompt-based calls to messages-based chat completions
- Feature-detect adapter support for legacy APIs
- Add integration tests covering both API shapes when swapping adapters
When it happens
Trigger: Routing a legacy CompletionCreateParamsNonStreaming request (plain prompt, no messages) to an AiSdk-backed model — e.g. old code paths or tools using the text completions endpoint.
Common situations: Migrating older integrations that used text completions; generic OpenAI-compatible tooling that tries /completions before /chat/completions.
Related errors
- Bedrock does not support completions API
- GitLab Private Token is required!
- AI SDK provider requires a model in the format '<provider>/<
- Unknown AI SDK provider: "${this.providerId}". Supported pro
- AI SDK provider does not support fill-in-the-middle (FIM) co
AI-assisted analysis of continuedev/continue@5522c6f44c (2026-08-27).
Data as JSON: /api/errors/feed0fdeb29e79df.
Report an issue: GitHub.